必看!一文教你流暢修改OK335xD的GPIO功能引腳
2020年7月29號(hào)
1. 如何配置GPIO功能?
答:修改內(nèi)核板級(jí)文件kernel-3.2/arch/arm/mach-omap2/board-am335xevm-xd.c
例如將uart配置成gpio,mode7是根據(jù)芯片手冊(cè)或者硬件手冊(cè)確定的,如下
將
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)無(wú)法使用GPIO,為什么配置不生效?
原因:沒(méi)有將該引腳的其他功能注釋掉
例如我使用的是uart1_rxd引腳的gpio功能,因?yàn)檫@個(gè)是一個(gè)復(fù)用引腳,可以查看硬件手冊(cè),搜索對(duì)應(yīng)引腳名字查看都有什么功能,然后除了gpio,將這個(gè)引腳其他復(fù)用全部注釋掉。
如下:
注意:一個(gè)引腳只能同時(shí)用作一個(gè)功能!?。∫词莡art_rxd功能,要么是gpio功能
3. 配置好,復(fù)用功能都注釋掉,為什么 GPIO 無(wú)法配置引腳拉高拉低?
如果是自己新建/添加 xxx _pin_mux [],那么需要 setup_pin_mux (xxx _pin_mux ); 這一步很關(guān)鍵,如果配置好卻不設(shè)置pinmux,再怎么配置都是徒勞,也就無(wú)法拉高拉低
然后初始化編寫(xiě)xxx_init{}函數(shù),初始化pinmux,如下:
static void xxx_init(int evm_id, int profile)
{
setup_pin_mux(xxx_mux);
}
最后將xxx_init放入 ok335x_dev_cfg[]
這些都是在板級(jí)配置文件完成,可以參考LED,KEYS等功能的配置和初始化過(guò)程。
4.配置好,復(fù)用功能都注釋掉,為什么GPIO無(wú)法在用戶空間echo導(dǎo)出?
看一個(gè)簡(jiǎn)單的LED的例子
如果想在用戶空間使用echo導(dǎo)出gpio,那么只需要setup_pin_mux()即可
使用platform_device_register();這個(gè)函數(shù)會(huì)將gpio通過(guò)內(nèi)核注冊(cè),就無(wú)法再通過(guò)用戶空間導(dǎo)出了。
另外,使用gpio_set_value() gpio_request() pio_direction_output()函數(shù)也會(huì)導(dǎo)致無(wú)法在用戶空間echo導(dǎo)出。
5. 怎么echo導(dǎo)出引腳,對(duì)應(yīng)的GPIO編號(hào)的多少?
公式:編號(hào)=32 * gpio組+gpio號(hào)
例如gpio1_16編號(hào)就是32 *1+16=48
導(dǎo)出:echo 48 > /sys/class/gpio/export
6. 我新加的一個(gè)功能,比如uart,pwm等等,發(fā)現(xiàn)不起作用?Why?
例如335xd添加pwm,通過(guò)查看硬件手冊(cè),查看有四個(gè)引腳可以輸出pwm,分別是gpmc_a2,gpmc_a3,gpmc_ad8,gpmc_ad9,但只有g(shù)pmc_a2一路能輸出信號(hào),
原因是Ti的引腳定義不全,導(dǎo)致配置不起作用
通過(guò)查看硬件手冊(cè),gpmc_a2,gpmc_a3的mode6為pwm功能,如圖:
但ti引腳定義如下:
這個(gè)配置文件意思:將gpmc_a2引腳可以復(fù)用的功能按順序配置
可以看到,當(dāng)使用gpmc_a3的mode6 "ehrpwm1a" 功能的時(shí)候,該配置為NULL
解決方法:需要在mux33xx.c修改,該文件和板級(jí)配置文件在相同目錄,將NULL修改成為ehrpwm1b即可,其他引腳同理
7. 為什么啟動(dòng)時(shí),我的GPIO引腳電平狀態(tài)會(huì)跳變,內(nèi)核完全啟動(dòng)才能穩(wěn)定?
原因是芯片在上電時(shí),每個(gè)引腳會(huì)有默認(rèn)一個(gè)狀態(tài),這個(gè)是無(wú)法控制的。當(dāng)你初始化這個(gè)引腳的狀態(tài)和默認(rèn)狀態(tài)不一致,就會(huì)瞬間導(dǎo)致跳變,如果對(duì)上電電平有嚴(yán)格要求,就需要查看原廠資料里面的芯片手冊(cè),查看對(duì)應(yīng)引腳的默認(rèn)上電狀態(tài),選擇滿足需求的引腳使用。
相關(guān)產(chǎn)品 >
-
FET335xD核心板
飛凌AM335系列核心板基于TI RM Cortex-A8 架構(gòu) AM335x 微處理器設(shè)計(jì),AM335x核心板整板尺寸47*71mm;AM335X核心板芯片全部采用工業(yè)級(jí)用料;AM335x核心板引腳豐富,引出200pinCPU引腳,原生支持6路UART;AM335x核心板支持Linux3.2操作系統(tǒng)。更多AM335x系列概述,AM335處理器特點(diǎn)請(qǐng)聯(lián)系在線客服
了解詳情 -
OK335xD開(kāi)發(fā)板
飛凌AM335x開(kāi)發(fā)板已經(jīng)推出幾年,經(jīng)過(guò)行業(yè)檢測(cè),穩(wěn)定性得到肯定。多年行業(yè)積累,AM335x的解決方案涉及各行各業(yè),歡迎進(jìn)店咨詢(xún)。飛凌AM335x開(kāi)發(fā)板基于TI Cortex-A8 AM335x CPU設(shè)計(jì)開(kāi)發(fā),主頻800MHz,支持Linux。AM335x開(kāi)發(fā)板工業(yè)級(jí)寬溫,配合豐富的外設(shè)接口,適用于各種惡劣環(huán)境應(yīng)用。 了解詳情 -
FET62xx-C核心板
FET6254-C核心板基于TI Sitara? AM62x系列工業(yè)級(jí)處理器設(shè)計(jì)。采用Arm Cortex A53架構(gòu),并集成了廣泛的接口,如2路支持TSN的千兆以太網(wǎng)、USB 2.0CAN-FD,AM6254核心板兼容AM62x全系列處理器,提供單核、雙核、四核可選,功能引腳完全兼容,飛凌嵌入式已經(jīng)適配AM6254 AM6231 AM6232三款芯片為您帶來(lái)靈活的成本組合方案,AM62x可應(yīng)用于廣泛的工業(yè)環(huán)境,如人機(jī)界面(HMI)、工業(yè)計(jì)算機(jī)、邊緣計(jì)算、零售自動(dòng)化、充電樁控制單元(TCU)、醫(yī)療設(shè)備等。
了解詳情 -
OK62xx-C開(kāi)發(fā)板
AM62x 開(kāi)發(fā)板是圍繞飛凌AM62x核心板設(shè)計(jì)的獨(dú)立測(cè)試和開(kāi)發(fā)平臺(tái)。AM62x處理器由四核64位Arm -Cortex -A53微處理器 和Cortex-M4F組成。AM62x開(kāi)發(fā)板整板工業(yè)級(jí)設(shè)計(jì),并在開(kāi)發(fā)過(guò)程中進(jìn)行嚴(yán)苛的環(huán)境溫度測(cè)試、壓力測(cè)試、長(zhǎng)期穩(wěn)定性運(yùn)行測(cè)試,使AM62x可在各種嚴(yán)苛環(huán)境穩(wěn)定運(yùn)行 了解詳情