飛凌干貨丨細(xì)說GPIO復(fù)用-基于IMX6X平臺(tái)
本文簡單介紹一下GPIO的復(fù)用,配置GPIO的方式多種多樣,本文只介紹通過IOMUX的方式配置GPIO,主要適用于飛凌OKMX6Q-CV1.3平臺(tái)Linux4.1.15操作系統(tǒng),其他平臺(tái)也可以參考,但是不同平臺(tái)之間會(huì)存在差異,需客戶自行修改以適應(yīng)自己的使用。
一、使用IOMUX方式配置GPIO
1. 以底板上UART2_TX引腳為例,可以看到該引腳目前的功能是串口功能,將該引腳復(fù)用為GPIO使用,在飛凌提供的硬件手冊中可以查看到該引腳對應(yīng)的padname為EIM_D26。
2.在內(nèi)核源碼linux4.1.15/arch/arm/boot/dts/imx6q-pinfunc.h中搜索EIM_D26可以看到如下宏定義:
其中
#define |
0x0bc 0x3d0 0x000 |
MX6QDL_PAD_EIM_D26__GPIO3_IO26 |
0x5 0x0 |
為該引腳作為GPIO的定義
3. 在linux4.1.15/arch/arm/boot/dts/imx6qdl-sabresd.dtsi設(shè)備樹中重新配置該引腳,首先搜EIM_D26找到相關(guān)的引腳配置,可以看到原有功能是被配置成為串口功能:
pinctrl_uart2:uart2grp {
fsl,pins= <
MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
>;
};
&uart2{
pinctrl-names= "default";
pinctrl-0= <&pinctrl_uart2>;
status= "okay";
};
將status= "okay"修改為:status= "disabled"
&uart2{
pinctrl-names= "default";
pinctrl-0= <&pinctrl_uart2>;
status= "disabled";
};
以上修改是關(guān)閉串口功能的調(diào)用,然后接著添加該引腳GPIO功能的配置:
以上修改完成后,重新編譯,并將新生成的鏡像燒寫到開發(fā)板上即可。
引腳復(fù)用的原則是:在設(shè)備樹中添加想要實(shí)現(xiàn)的該引腳的功能,并把以前的復(fù)用功能去掉,無復(fù)用功能直接添加即可。
二、文件系統(tǒng)的操作
以上操作完成了內(nèi)核中的引腳復(fù)用的配置,下面我們看一下應(yīng)用中怎么操作;開發(fā)板啟動(dòng)后可以在文件系統(tǒng)中執(zhí)行以下操作。
? 計(jì)算對應(yīng) sys/class/gpio 的值 GPIOn_IOx = (n-1)*32 + x
那么GPIO3_IO26=(3-1)*32+26=90
? 將 GPIO3_IO26 設(shè)置為輸出。
echo 90 > /sys/class/gpio/export 用于通知系統(tǒng)需要導(dǎo)出控制的GPIO 引腳編號(hào)
? 將該引腳設(shè)置為輸出
echo out > /sys/class/gpio/gpio90/direction 將GPIO設(shè)置為輸出
? 設(shè)置輸出引腳的電平
echo 1 >/sys/class/gpio/gpio90/value 輸出為高電平
echo 0> /sys/class/gpio/gpio90/value 輸出為低電平
設(shè)置高電平或者是低電平后,可使用萬用表測量一下該引腳的具體電平值。
? 取消該引腳的導(dǎo)出
echo 90 > /sys/class/gpio/unexport 通知系統(tǒng)取消導(dǎo)出
? 將 該引腳設(shè)置為輸入
echo 90 > /sys/class/gpio/export 用于通知系統(tǒng)需要導(dǎo)出控制的GPIO 引腳編號(hào)
echo in> /sys/class/gpio/gpio90/direction 將GPIO設(shè)置為輸入這時(shí)給該引腳接高電平,輸入即為高電平,反之為低電平
設(shè)置為輸入模式可以通過cat /sys/class/gpio/gpio90/value 命令查看當(dāng)前值
以上是一個(gè)引腳功能復(fù)用的整個(gè)過程,下面簡單介紹一下一些參數(shù)的配置。
三、對一些參數(shù)的解讀
在imx6q-pinfunc.h中
#define |
0x0bc0x3d0 0x000 0x5 0x0 |
MX6QDL_PAD_EIM_D26__GPIO3_IO26 |
|
這5個(gè)值得含義,已經(jīng)做了解釋
/* The pin function ID is a tuple of
* <mux_reg conf_reg input_reg mux_mode input_val>*/
在imx6qdl-sabresd.dtsi中也有一個(gè)值得設(shè)置:
MX6QDL_PAD_EIM_D26__GPIO3_IO26 0x30b0
以上這6個(gè)參數(shù)有以下對應(yīng)關(guān)系:
0x0bc |
0x3d0 |
0x000 |
0x5 |
0x0 |
0x30b0 |
mux_reg_ofs |
conf_reg_ofs |
input_reg_ofs |
mux_mode |
input_val |
pad_ctrl |
這些參數(shù)的具體值是根據(jù)CPU手冊的IOMUX章節(jié)查找配置的。
1. 確定mux_reg_ofs的值
在CPU手冊中搜索padname, EIM_D26引腳在CPU手冊中是EIM_DATA26,如下圖紅色方框圈出的偏移地址就是mux_reg_ofs的值。
2. 確定conf_reg_ofs的值
搜索EIM_DATA26,下圖紅色方框圈出的偏移地址即為該值。
3. 確定input_reg_ofs的值
iMX6Q CPU手冊中沒有該引腳作為gpio時(shí)對應(yīng)的input配置,所以是0x000,那么對應(yīng)的input_val,該值也為0x0。
4.確定mux_mode的值
搜索IOMUXC_SW_MUX_CTL_PAD_EIM_DATA26,可以看到該值是0x5。
5. 確定pad_ctrl的值
搜索IOMUXC_SW_PAD_CTL_PAD_EIM_DATA26,可以看到該寄存器的各個(gè)位的含義,根據(jù)自己的實(shí)際情況來確定該值,該寄存器位數(shù)較多沒有截全,請自行查看CPU手冊。
以上是小編對GPIO復(fù)用的一些淺顯的理解,希望對您有所幫助。小編水平有限可能會(huì)存在一些紕漏,敬請諒解。對于更深入的知識(shí),如果您想了解可以結(jié)合CPU手冊以及源代碼自行研究,有什么好的見解也可以給我們一塊分享,非常感謝您的閱讀。
---- END ----
長按識(shí)別二維碼加關(guān)注 專注于智能設(shè) 備核心平臺(tái)研發(fā)與制造
|
■ 關(guān)注“飛凌 嵌入式”公眾號(hào),不定期分享行業(yè)干貨及產(chǎn)品一線資料。 ■ 直接微信回 復(fù)產(chǎn)品平臺(tái),如“LS1043A”,即可快速獲取對應(yīng)產(chǎn)品信息。 ■ 想要了解飛 凌更多信息,歡迎與我們聯(lián)系: 銷售工程師: 400-699-6866 國際業(yè)務(wù)部: 0312-3102650-854 技術(shù)服務(wù)部: 0312-3119192 方案定制類: 17713286015 (杜工),18633238067(王工)
■ 實(shí)時(shí)技術(shù)支 持: AM 9:00 —11:30,PM 13:30—17:00(周一至周五) |
相關(guān)產(chǎn)品 >
-
FETMX6Q-C核心板
i.MX6Q核心板板層出不窮,要如何選擇?飛凌解讀i.mx6Q芯片強(qiáng)性能為您推薦四核A9架構(gòu)的i.MX6Q產(chǎn)品精選,包含iMX6Q 核心板、i.MX6Q 核心板、iMX6Q工業(yè)級(jí)核心板,歡迎采購。 i.MX6Q核心板基于NXP(原Freescale)Cortex-A9架構(gòu)的i.MX6Q四核處理器設(shè)計(jì),核心板小尺寸核心板搭配獨(dú)特的薄款連接器,讓設(shè)計(jì)隨心所欲!
了解詳情 -
OKMX6Q-C開發(fā)板
雙千兆飛凌嵌入式iMX6Q開發(fā)板,板對板連接器,纖薄之際,次底板支持iMX6Q和iMX6DL核心板。i.MX6Q開發(fā)板與i.MX6DL開發(fā)板資源豐富,原理圖、PCB、軟件資源、硬件資源下載,技術(shù)支持等。歡迎選購
了解詳情 -
FETMX6Q-S核心板
NXP iMX6Quad系列具有四個(gè)內(nèi)核,運(yùn)行頻率達(dá)1.2 GHz,帶有1 MB L2緩存和64位DDR3或2通道、32位LPDDR2支持。飛凌提供商業(yè)級(jí)iMX6Q核心板,工業(yè)級(jí)iMX6Q核心板,兼容一同底板。具有抗震,抗氧化,抗干擾,更快速升級(jí)產(chǎn)品等優(yōu)勢。保定飛凌嵌入式專注imx6,imx6開發(fā)板,飛思卡爾imx6等ARM嵌入式核心控制系統(tǒng)研發(fā)、設(shè)計(jì)和生產(chǎn),是imx6,imx6開發(fā)板,飛思卡爾imx6提供者,imx6系列產(chǎn)品現(xiàn)已暢銷全國,歡迎咨詢!
了解詳情 -
OKMX6Q-S3開發(fā)板
飛凌嵌入式提供iMX6Q開發(fā)板,iMX6解決方案,iMX6Q核心板,i.MX6Q開發(fā)板解決方案。iMX6Q穩(wěn)定、快速、性價(jià)比高,歡迎選購 NXP iMX6系列芯片全支持,升級(jí)簡配無憂替換。 了解詳情