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

原創(chuàng) 2020-07-29 09:12:00 AM335XD AM335X GPIO引腳

2020年7月29號 

1. 如何配置GPIO功能?

答:修改內(nèi)核板級文件kernel-3.2/arch/arm/mach-omap2/board-am335xevm-xd.c

例如將uart配置成gpio,mode7是根據(jù)芯片手冊或者硬件手冊確定的,如下


修改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. 按照上面的方法配置完成發(fā)現(xiàn)無法使用GPIO,為什么配置不生效?

原因:沒有將該引腳的其他功能注釋掉

例如我使用的是uart1_rxd引腳的gpio功能,因為這個是一個復用引腳,可以查看硬件手冊,搜索對應引腳名字查看都有什么功能,然后除了gpio,將這個引腳其他復用全部注釋掉。

如下:



修改OK335xD的GPIO功能引腳          


注意:一個引腳只能同時用作一個功能!!!要么是uart_rxd功能,要么是gpio功能


3. 配置好,復用功能都注釋掉,為什么 GPIO 無法配置引腳拉高拉低?

如果是自己新建/添加    xxx _pin_mux []那么需要    setup_pin_mux (xxx _pin_mux );  這一步很關鍵,如果配置好卻不設置pinmux,再怎么配置都是徒勞,也就無法拉高拉低

然后初始化編寫xxx_init{}函數(shù),初始化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();這個函數(shù)會將gpio通過內(nèi)核注冊,就無法再通過用戶空間導出了。

另外,使用gpio_set_value() gpio_request()  pio_direction_output()函數(shù)也會導致無法在用戶空間echo導出。


5.  怎么echo導出引腳,對應的GPIO編號的多少?

公式:編號=32 * gpio組+gpio號

例如gpio1_16編號就是32 *1+16=48

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


6.  我新加的一個功能,比如uart,pwm等等,發(fā)現(xiàn)不起作用?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引腳電平狀態(tài)會跳變,內(nèi)核完全啟動才能穩(wěn)定?

原因是芯片在上電時,每個引腳會有默認一個狀態(tài),這個是無法控制的。當你初始化這個引腳的狀態(tài)和默認狀態(tài)不一致,就會瞬間導致跳變,如果對上電電平有嚴格要求,就需要查看原廠資料里面的芯片手冊,查看對應引腳的默認上電狀態(tài),選擇滿足需求的引腳使用。

相關產(chǎn)品 >

  • FET335xD核心板

    飛凌AM335系列核心板基于TI RM Cortex-A8 架構(gòu) AM335x 微處理器設計,AM335x核心板整板尺寸47*71mm;AM335X核心板芯片全部采用工業(yè)級用料;AM335x核心板引腳豐富,引出200pinCPU引腳,原生支持6路UART;AM335x核心板支持市面上主流的操作系統(tǒng),Linux-RT、Linux3.2。更多AM335x系列概述,AM335處理器特點請聯(lián)系在線客服
    了解詳情
    FET335xD核心板
  • OK335xD開發(fā)板

    飛凌AM335x開發(fā)板已經(jīng)推出幾年,經(jīng)過行業(yè)檢測,穩(wěn)定性得到肯定。多年行業(yè)積累,AM335x的解決方案涉及各行各業(yè),歡迎進店咨詢。飛凌AM335x開發(fā)板基于TI Cortex-A8 AM335x CPU設計開發(fā),主頻800MHz,支持Linux、RTLinux。AM335x開發(fā)板工業(yè)級寬溫,配合豐富的外設接口,適用于各種惡劣環(huán)境應用。 了解詳情
    OK335xD開發(fā)板
  • FET62xx-C核心板

    FET6254-C核心板基于TI Sitara? AM62x系列工業(yè)級處理器設計。采用Arm Cortex A53架構(gòu),并集成了廣泛的接口,如2路支持TSN的千兆以太網(wǎng)、USB 2.0CAN-FD,AM6254核心板兼容AM62x全系列處理器,提供單核、雙核、四核可選,功能引腳完全兼容,飛凌嵌入式已經(jīng)適配AM6254 AM6231 AM6232三款芯片為您帶來靈活的成本組合方案,AM62x可應用于廣泛的工業(yè)環(huán)境,如人機界面(HMI)、工業(yè)計算機、邊緣計算、零售自動化、充電樁控制單元(TCU)、醫(yī)療設備等。

    了解詳情
    FET62xx-C核心板
  • OK62xx-C開發(fā)板

    AM62x 開發(fā)板是圍繞飛凌AM62x核心板設計的獨立測試和開發(fā)平臺。AM62x處理器由四核64位Arm -Cortex -A53微處理器 和Cortex-M4F組成。AM62x開發(fā)板整板工業(yè)級設計,并在開發(fā)過程中進行嚴苛的環(huán)境溫度測試、壓力測試、長期穩(wěn)定性運行測試,使AM62x可在各種嚴苛環(huán)境穩(wěn)定運行 了解詳情
    OK62xx-C開發(fā)板

推薦閱讀 換一批 換一批