飛凌干貨丨細說GPIO復用-基于IMX6X平臺

原創 2020-03-07 15:00:00 GPIO復用 IOMUX配置GPIO

本文簡單介紹一下GPIO的復用,配置GPIO的方式多種多樣,本文只介紹通過IOMUX的方式配置GPIO,主要適用于飛凌OKMX6Q-CV1.3平臺Linux4.1.15操作系統,其他平臺也可以參考,但是不同平臺之間會存在差異,需客戶自行修改以適應自己的使用。

一、使用IOMUX方式配置GPIO

1. 以底板上UART2_TX引腳為例,可以看到該引腳目前的功能是串口功能,將該引腳復用為GPIO使用,在飛凌提供的硬件手冊中可以查看到該引腳對應的padname為EIM_D26。


 

2.在內核源碼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設備樹中重新配置該引腳,首先搜EIM_D26找到相關的引腳配置,可以看到原有功能是被配置成為串口功能:

 

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";

};

 

以上修改是關閉串口功能的調用,然后接著添加該引腳GPIO功能的配置:

 

 

以上修改完成后,重新編譯,并將新生成的鏡像燒寫到開發板上即可。

引腳復用的原則是:在設備樹中添加想要實現的該引腳的功能,并把以前的復用功能去掉,無復用功能直接添加即可。

 二、文件系統的操作

以上操作完成了內核中的引腳復用的配置,下面我們看一下應用中怎么操作;開發板啟動后可以在文件系統中執行以下操作。

 

? 計算對應 sys/class/gpio 的值 GPIOn_IOx = (n-1)*32 + x  

那么GPIO3_IO26=(3-1)*32+26=90

 

?  將 GPIO3_IO26 設置為輸出。

echo 90 > /sys/class/gpio/export 用于通知系統需要導出控制的GPIO 引腳編號

 

? 將該引腳設置為輸出

echo out > /sys/class/gpio/gpio90/direction 將GPIO設置為輸出

 

? 設置輸出引腳的電平

echo 1 >/sys/class/gpio/gpio90/value 輸出為高電平

echo 0> /sys/class/gpio/gpio90/value 輸出為低電平

設置高電平或者是低電平后,可使用萬用表測量一下該引腳的具體電平值。

 

? 取消該引腳的導出

echo 90 > /sys/class/gpio/unexport 通知系統取消導出

 

? 將 該引腳設置為輸入

echo 90 > /sys/class/gpio/export 用于通知系統需要導出控制的GPIO 引腳編號

echo in> /sys/class/gpio/gpio90/direction 將GPIO設置為輸入這時給該引腳接高電平,輸入即為高電平,反之為低電平

設置為輸入模式可以通過cat /sys/class/gpio/gpio90/value 命令查看當前值

 

以上是一個引腳功能復用的整個過程,下面簡單介紹一下一些參數的配置。  

三、對一些參數的解讀

在imx6q-pinfunc.h中


#define 

0x0bc0x3d0 0x000 0x5 0x0

MX6QDL_PAD_EIM_D26__GPIO3_IO26



這5個值得含義,已經做了解釋

/* The pin function ID is a tuple of

 * <mux_reg conf_reg input_reg mux_mode input_val>*/

在imx6qdl-sabresd.dtsi中也有一個值得設置:

MX6QDL_PAD_EIM_D26__GPIO3_IO26  0x30b0

以上這6個參數有以下對應關系:


0x0bc

0x3d0

0x000

0x5

0x0

0x30b0

mux_reg_ofs

conf_reg_ofs

input_reg_ofs

mux_mode

input_val

pad_ctrl


這些參數的具體值是根據CPU手冊的IOMUX章節查找配置的。


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時對應的input配置,所以是0x000,那么對應的input_val,該值也為0x0。

 

4.確定mux_mode的值

搜索IOMUXC_SW_MUX_CTL_PAD_EIM_DATA26,可以看到該值是0x5。

 

  

5. 確定pad_ctrl的值

搜索IOMUXC_SW_PAD_CTL_PAD_EIM_DATA26,可以看到該寄存器的各個位的含義,根據自己的實際情況來確定該值,該寄存器位數較多沒有截全,請自行查看CPU手冊。


 

以上是小編對GPIO復用的一些淺顯的理解,希望對您有所幫助。小編水平有限可能會存在一些紕漏,敬請諒解。對于更深入的知識,如果您想了解可以結合CPU手冊以及源代碼自行研究,有什么好的見解也可以給我們一塊分享,非常感謝您的閱讀。

 


 

----   END   ----


 長按識別二維碼加關注 

飛凌嵌入式

專注于智能設 備核心平臺研發與制造


■ 關注“飛凌 嵌入式”公眾號,不定期分享行業干貨及產品一線資料。

■ 直接微信回 復產品平臺,如“LS1043A”,即可快速獲取對應產品信息。

■ 想要了解飛 凌更多信息,歡迎與我們聯系:

銷售工程師: 400-699-6866

國際業務部: 0312-3102650-854

技術服務部: 0312-3119192

方案定制類: 17713286015 (杜工),18633238067(王工)

分割線 

■ 實時技術支 持:

AM 9:00 —11:30,PM 13:30—17:00(周一至周五)


相關產品 >

  • FETMX6Q-C核心板

    i.MX6Q核心板板層出不窮,要如何選擇?飛凌解讀i.mx6Q芯片強性能為您推薦四核A9架構的i.MX6Q產品精選,包含iMX6Q 核心板、i.MX6Q 核心板、iMX6Q工業級核心板,歡迎采購。  i.MX6Q核心板基于NXP(原Freescale)Cortex-A9架構的i.MX6Q四核處理器設計,核心板小尺寸核心板搭配獨特的薄款連接器,讓設計隨心所欲!

    了解詳情
    FETMX6Q-C核心板
  • OKMX6Q-C開發板

    雙千兆飛凌嵌入式iMX6Q開發板,板對板連接器,纖薄之際,次底板支持iMX6Q和iMX6DL核心板。i.MX6Q開發板與i.MX6DL開發板資源豐富,原理圖、PCB、軟件資源、硬件資源下載,技術支持等。歡迎選購

    了解詳情
    OKMX6Q-C開發板
  • FETMX6Q-S核心板

    NXP iMX6Quad系列具有四個內核,運行頻率達1.2 GHz,帶有1 MB L2緩存和64位DDR3或2通道、32位LPDDR2支持。飛凌提供商業級iMX6Q核心板,工業級iMX6Q核心板,兼容一同底板。具有抗震,抗氧化,抗干擾,更快速升級產品等優勢。保定飛凌嵌入式專注imx6,imx6開發板,飛思卡爾imx6等ARM嵌入式核心控制系統研發、設計和生產,是imx6,imx6開發板,飛思卡爾imx6提供者,imx6系列產品現已暢銷全國,歡迎咨詢!
    了解詳情
    FETMX6Q-S核心板
  • OKMX6Q-S3開發板

    飛凌嵌入式提供iMX6Q開發板,iMX6解決方案,iMX6Q核心板,i.MX6Q開發板解決方案。iMX6Q穩定、快速、性價比高,歡迎選購 NXP iMX6系列芯片全支持,升級簡配無憂替換。 了解詳情
    OKMX6Q-S3開發板

推薦閱讀 換一批 換一批