小白也能玩轉 i.MX6 平臺的 GPIO 應用筆記
▋引言 :本文主要以FETMX6x-C平臺,Linux3.0.35內核為基礎,其他平臺也可以參考,不同平臺之間會存在差異,需自行修改適應自己的使用。
GPIO的通用操作
1.1 普通GPIO的使用
在嵌入式系統中對GPIO的操作是最基本的操作。在Linux中有一個通用的GPIO操作接口。在開發板文件系統中會有一個控制GPIO的目錄:/sys/class/gpio;linux-3.0.35內核中Documention文件夾下邊有gpio.txt文檔可以參考。
root@freescale/sys/class/gpio$ ls
export gpiochip0 gpiochip160 gpiochip32 gpiochip96 gpiochip128 gpiochip192 gpiochip64 unexport
名稱 |
描述 |
export |
導出GPIO操作接口 |
unexport |
撤銷GPIO操作接口的導出 |
gpiochip0 |
GPIO1組 |
gpiochip32 |
GPIO2組 |
gpiochip64 |
GPIO3組 |
gpiochip96 |
GPIO4組 |
gpiochip128 |
GPIO5組 |
gpiochip160 |
GPIO6組 |
gpiochip192 |
GPIO7組 |
其中,export和unexport為GPIO子系統的屬性文件,其余七個文件則為符號鏈接(gpiochip0,gpiochip32,gpiochip64,gpiochip96,gpiochip128,gpiochip160,gpiochip192),分別指向各自對應的GPIO組。
以gpiochip0為例,此目錄下的文件有:
root@freescale/sys/class/gpio/gpiochip0$ ls
base label ngpio power subsystem uevent
名稱 |
描述 |
base |
GPIO組的初始編號 |
label |
GPIO組標簽 |
ngpio |
該組的GPIO總數 |
power |
設備供電方面的相關信息 |
subsystem |
符號鏈接,指向父目錄 |
uevent |
內核與udev(自動設備發現程序)之間的通信接口 |
當我們操作某個GPIO之前,需要先向export文件寫入該GPIO編號以導出它的設備目錄。GPIO編號的計算公式如下所示:
GPIO編號=(BANK-1)*32+N
在公式中BANK為GPIO引腳所在的GPIO組編號,N則為引腳在該個BANK中的序號。以GPIO7-IO03為例,其BANK值為7,N值為3,因此排列序號為(7-1)*32+3=195。
下面介紹該目錄下的一些操作的用法。
1.1.1 GPIO編號導出
文件系統中/sys/class/gpio/export文件用于通知系統需要導出要控制的GPIO的編號:
echo195 >/sys/class/gpio/export
命令成功后生成/sys/class/gpio/gpio195目錄。如果沒有出現相應的目錄,說明此引腳不可導出,一般這種情況是驅動中pinmux功能配置不正確,或者配置了多種pinmux功能引起沖突導致。
1.1.2 取消GPIO編號導出
文件系統中/sys/class/gpio/unexport文件用于通知系統取消GPIO編號導出
echo195 > /sys/class/gpio/unexport
1.1.3 配置GPIO的輸入輸出方向
echoout >/sys/class/gpio/gpio195/direction
direction可接收的參數:in,out,high,low;其中high,low設置方向為輸出并將value值設置為相應的1/0。
1.1.4 查看GPIO的輸入輸出方向
cat/sys/class/gpio/gpio195/ direction
1.1.5 配置GPIO的高 低電平(值為1/ 0)
當GPIO配置為輸出模式時,可以通過設置value值設置GPIO的高低電平。
echo1 >/sys/class/gpio/value
1.1.6 查看GPIO的輸出值
cat/sys/class/gpio/gpio195/value
驅動配置
2.1 修改pinmux配置
驅動中的主要位置:linux3.0.35/drivers/gpio/gpiolib.c
修改文件arch/arm/mach-mx6/board-mx6q_c_sabresd.h,在其中增加該引腳對應的GPIO配置,該引腳如果有其他復用配置,需要將其他復用配置去掉,只保留一種pinmux配置。內核中引腳功能定義在arch/arm/plat-mxc/include/mach/iomux-mx6q.h文件中,該文件對每個引腳的復用功能進行了定義,有興趣的可以自己看一下。
以釋放原SD卡功能占用的部分引腳為例
修改文件arch/arm/mach-mx6/board-mx6q_c_sabresd.h,在其中增加如下定義:
/*GPIO*/
MX6Q_PAD_SD3_CLK__GPIO_7_3,
MX6Q_PAD_SD3_CMD__GPIO_7_2,
MX6Q_PAD_SD3_DAT2__GPIO_7_6,
MX6Q_PAD_SD3_DAT3__GPIO_7_7,
MX6Q_PAD_SD3_DAT4__GPIO_7_1,
MX6Q_PAD_SD3_DAT5__GPIO_7_0,
將原來的SD卡的功能注釋掉
/*USDHC3 */
/* MX6Q_PAD_SD3_CLK__USDHC3_CLK_50MHZ,
MX6Q_PAD_SD3_CMD__USDHC3_CMD_50MHZ,
MX6Q_PAD_SD3_DAT0__USDHC3_DAT0_50MHZ,
MX6Q_PAD_SD3_DAT1__USDHC3_DAT1_50MHZ,
MX6Q_PAD_SD3_DAT2__USDHC3_DAT2_50MHZ,
MX6Q_PAD_SD3_DAT3__USDHC3_DAT3_50MHZ,
MX6Q_PAD_SD3_DAT4__USDHC3_DAT4_50MHZ,
MX6Q_PAD_SD3_DAT5__USDHC3_DAT5_50MHZ,
*/
修改前
修改后
修改完成后重新編譯內核,并將鏡像燒寫到開發板上進行測試。
測試
echo195 > /sys/class/gpio/export
echoout > /sys/class/gpio/gpio195/direction
echo1 > /sys/class/gpio/gpio195/value
cat/sys/class/gpio/gpio195/value
Datasheet 查看 GPIO
3.1GPIO地址
IMX6DQRM.pdf手冊中的第28章描述的是GPIO相關的內容,手冊第二章MemoryMaps內存映射大概在215頁,有關于GPIO組的映射地址:
3.2 GPIO寄存器
數據手冊第28章中第1429頁描述的是GPIO控制的8個32位寄存器
寄存器 |
描述 |
GPIOx_DR |
數據寄存器,當GPIO為輸出時,可以通過寫DR寄存器來驅動GPIO引腳 |
GPIOx_GDIR |
控制GPIO引腳方向 |
GPIOx_PSR |
當GPIO為輸入時,從PSR寄存器讀取數據 |
GPIOx_ICR1 |
配置GPIO中斷的觸發方式,高低電平出發還是沿觸發 |
GPIOx_ICR2 |
配置GPIO中斷的觸發方式,高低電平出發還是沿觸發 |
GPIOx_IMR |
中斷屏蔽寄存器 |
GPIOx_ISR |
中斷狀態寄存器 |
GPIOx_EDGR_SEL |
設置邊沿觸發方式 |
3.3 引腳復用
數據手冊36章IOMUXController這一章節有興趣的也可以詳細看一下或者從網絡上找一些相關資料了解,此處不做詳述。
該章節主要描述引腳的復用配置以及一些功能的配置等,內核代碼中關于這一塊的配置在linux-3.0.35/arch/arm/plat-mxc/include/mach/iomux-mx6q.h文件中。該文件中的具體配置有興趣的可以自己看一下,一般這塊恩智浦(NXP)官方是默認配置好的,配置項的具體含義也可以從網上搜搜,并結合iomux-mx6q.h文件自己看看。
■ 關注“飛凌嵌入式”公眾號,不定期分享行業干貨及產品一線資料。
■ 直接微信回復產品平臺,如“LS1012A”,即可快速獲取對應產品信息。
■ 想要了解飛凌更多信息,歡迎與我們聯系:
銷售工程師: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四核處理器設計,核心板小尺寸核心板搭配獨特的薄款連接器,讓設計隨心所欲!
了解詳情 -
OKMX6Q-C開發板
雙千兆飛凌嵌入式iMX6Q開發板,板對板連接器,纖薄之際,次底板支持iMX6Q和iMX6DL核心板。i.MX6Q開發板與i.MX6DL開發板資源豐富,原理圖、PCB、軟件資源、硬件資源下載,技術支持等。歡迎選購
了解詳情 -
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系列產品現已暢銷全國,歡迎咨詢!
了解詳情 -
OKMX6Q-S3開發板
飛凌嵌入式提供iMX6Q開發板,iMX6解決方案,iMX6Q核心板,i.MX6Q開發板解決方案。iMX6Q穩定、快速、性價比高,歡迎選購 NXP iMX6系列芯片全支持,升級簡配無憂替換。 了解詳情