必看!一文教你流畅修改OK335xD的GPIO功能引脚

原创 2020-07-29 09:12:00 AM335XD AM335X GPIO引脚

2020年7月29号 

1. 如何配置GPIO功能?

答:修改内核板级文件kernel-3.2/arch/arm/mach-omap2/board-am335xevm-xd.c

例如将uart配置成gpio,mode7是根据芯片手册或者硬件手册确定的,如下


修改OK335xD的GPIO功能引脚 


static struct pinmux_config uart1_pin_mux[] = {

    {"uart1_rxd.uart1_rxd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},

    {"uart1_txd.uart1_txd", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL},

    {NULL, 0},

};

修改成:

static struct pinmux_config uart1_pin_mux[] = {

    {"uart1_rxd.gpio0_14",OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},

    {"uart1_txd.gpio0_15", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},

    {NULL, 0},

}; 


2. 按照上面的方法配置完成发现无法使用GPIO,为什么配置不生效?

原因:没有将该引脚的其他功能注释掉

例如我使用的是uart1_rxd引脚的gpio功能,因为这个是一个复用引脚,可以查看硬件手册,搜索对应引脚名字查看都有什么功能,然后除了gpio,将这个引脚其他复用全部注释掉。

如下:



修改OK335xD的GPIO功能引脚          


注意:一个引脚只能同时用作一个功能!!!要么是uart_rxd功能,要么是gpio功能


3. 配置好,复用功能都注释掉,为什么 GPIO 无法配置引脚拉高拉低?

如果是自己新建/添加    xxx _pin_mux []那么需要    setup_pin_mux (xxx _pin_mux );  这一步很关键,如果配置好却不设置pinmux,再怎么配置都是徒劳,也就无法拉高拉低

然后初始化编写xxx_init{}函数,初始化pinmux,如下:

static void xxx_init(int evm_id, int profile)

{

setup_pin_mux(xxx_mux);

}

最后将xxx_init放入 ok335x_dev_cfg[]

这些都是在板级配置文件完成,可以参考LEDKEYS等功能的配置和初始化过程。

 

 


 

 

 









4.配置好,复用功能都注释掉,为什么GPIO无法在用户空间echo导出?


看一个简单的LED的例子

 

如果想在用户空间使用echo导出gpio,那么只需要setup_pin_mux()即可

使用platform_device_register();这个函数会将gpio通过内核注册,就无法再通过用户空间导出了。

另外,使用gpio_set_value() gpio_request()  pio_direction_output()函数也会导致无法在用户空间echo导出。


5.  怎么echo导出引脚,对应的GPIO编号的多少?

公式:编号=32 * gpio组+gpio号

例如gpio1_16编号就是32 *1+16=48

导出:echo 48 > /sys/class/gpio/export


6.  我新加的一个功能,比如uart,pwm等等,发现不起作用?Why?

例如335xd添加pwm,通过查看硬件手册,查看有四个引脚可以输出pwm,分别是gpmc_a2,gpmc_a3,gpmc_ad8,gpmc_ad9,但只有gpmc_a2一路能输出信号,

原因是Ti的引脚定义不全,导致配置不起作用

通过查看硬件手册,gpmc_a2,gpmc_a3的mode6为pwm功能,如图:


修改OK335xD的GPIO功能引脚 

修改OK335xD的GPIO功能引脚 


但ti引脚定义如下:


修改OK335xD的GPIO功能引脚 


这个配置文件意思:将gpmc_a2引脚可以复用的功能按顺序配置

可以看到,当使用gpmc_a3的mode6  "ehrpwm1a" 功能的时候,该配置为NULL

解决方法:需要在mux33xx.c修改,该文件和板级配置文件在相同目录,将NULL修改成为ehrpwm1b即可,其他引脚同理


7.  为什么启动时,我的GPIO引脚电平状态会跳变,内核完全启动才能稳定?

原因是芯片在上电时,每个引脚会有默认一个状态,这个是无法控制的。当你初始化这个引脚的状态和默认状态不一致,就会瞬间导致跳变,如果对上电电平有严格要求,就需要查看原厂资料里面的芯片手册,查看对应引脚的默认上电状态,选择满足需求的引脚使用。

相关产品 >

  • FET335xD核心板

    飞凌AM335系列核心板基于TI RM Cortex-A8 架构 AM335x 微处理器设计,AM335x核心板整板尺寸47*71mm;AM335X核心板芯片全部采用工业级用料;AM335x核心板引脚丰富,引出200pinCPU引脚,原生支持6路UART;AM335x核心板支持市面上主流的操作系统,Linux-RT、Linux3.2。更多AM335x系列概述,AM335处理器特点请联系在线客服
    了解详情
    FET335xD核心板
  • OK335xD开发板

    飞凌AM335x开发板已经推出几年,经过行业检测,稳定性得到肯定。多年行业积累,AM335x的解决方案涉及各行各业,欢迎进店咨询。飞凌AM335x开发板基于TI Cortex-A8 AM335x CPU设计开发,主频800MHz,支持Linux、RTLinux。AM335x开发板工业级宽温,配合丰富的外设接口,适用于各种恶劣环境应用。 了解详情
    OK335xD开发板
  • FET62xx-C核心板

    FET6254-C核心板基于TI Sitara™ AM62x系列工业级处理器设计。采用Arm Cortex A53架构,并集成了广泛的接口,如2路支持TSN的千兆以太网、USB 2.0CAN-FD,AM6254核心板兼容AM62x全系列处理器,提供单核、双核、四核可选,功能引脚完全兼容,飞凌嵌入式已经适配AM6254 AM6231 AM6232三款芯片为您带来灵活的成本组合方案,AM62x可应用于广泛的工业环境,如人机界面(HMI)、工业计算机、边缘计算、零售自动化、充电桩控制单元(TCU)、医疗设备等。

    了解详情
    FET62xx-C核心板
  • OK62xx-C开发板

    AM62x 开发板是围绕飞凌AM62x核心板设计的独立测试和开发平台。AM62x处理器由四核64位Arm -Cortex -A53微处理器 和Cortex-M4F组成。AM62x开发板整板工业级设计,并在开发过程中进行严苛的环境温度测试、压力测试、长期稳定性运行测试,使AM62x可在各种严苛环境稳定运行 了解详情
    OK62xx-C开发板

推荐阅读 换一批 换一批