本文檔主要介紹 iMX6 板子 gpio 引腳讀寫配置。有關平臺文件的設備注冊的資料可以參 考“iTOP-iMX6-平臺文件注冊設備”文檔。注冊的設備名稱是“gpio_ctl”。 硬件環境:iMX6 開發板:核心板 v_1.2、底板 v_2.2(以及 v_2.1 底板)。 軟件環境:Ubuntu12.04。 1.1 配置文件簡述 配置 gpio 需要研究三個文件,分別為“ arch/arm/plat-mxc/include/mach/iomux- mx6q.h”、“arch/arm/mach-mx6/board-mx6q_topeet.h”、“arch/arm/mach- mx6/board-mx6q_topeet.c”。 其中“arch/arm/plat-mxc/include/mach/iomux-mx6q.h”文件為 IMX6 所有 IO 及其 每個 IO 所有功能的定義集合,用戶可通過此文件來查詢某個 IO 的功能的定義。 “arch/arm/mach-mx6/board-mx6q_topeet.h”文件用來定義初始化 IMX6 對應需要 用到的 IO 口的功能。在該文件對 gpio 進行初始化。 “arch/arm/mach-mx6/board-mx6q_topeet.c”文件為 IMX6 的板級初始化文件,在 該文件可以對 gpio 引腳進行設置。 1.2 硬件介紹 1.2.1 底板部分 查看 v_2.2 版本的 iMX6 底板原理圖。我們以下面的 5 個引腳為例。進行下面的操作。
1.jpg (10.25 KB, 下載次數: 11)
下載附件
2019-10-18 11:38 上傳
下圖是 v_2.1 版本的底板原理圖。
2.jpg (9.76 KB, 下載次數: 12)
下載附件
2019-10-18 11:38 上傳
在底板原理圖上搜索各個網絡標號“EIM_D17”、“EIM_D18”、“EIM_D20”、 “KEY_ROW5”、“EIM_D19”。可以查看到均連接到板對板連接器。也就是全都連接到核 心板上。接下來去看核心板原理圖。 1.2.2 核心板部分 搜索上述的網絡標號,查看連接到核心板的什么位置。如下圖。
3.jpg (19.54 KB, 下載次數: 12)
下載附件
2019-10-18 11:38 上傳
4.jpg (26.02 KB, 下載次數: 10)
下載附件
2019-10-18 11:38 上傳
由上圖可知,五個引腳分別接到核心的“EIM_D17”、“EIM_D18”、“EIM_D20”、 “GPIO_1”、“EIM_D19”引腳。接下來在“arch/arm/plat-mxc/include/mach/iomux- mx6q.h”查看各個 IO 口的功能定義。 1.3 軟件配置 1.3.1 iomux-mx6q.h 文件 iomux-mx6q.h 文件主要功能是查詢某個 IO 的功能的定義。 進入 iMX6 內核源碼目錄,使用“vi arch/arm/plat-mxc/include/mach/iomux- mx6q.h”命令打開 iomux-mx6q.h 文件。如下圖。
5.jpg (3.93 KB, 下載次數: 10)
下載附件
2019-10-18 11:38 上傳
搜索上述查看到的五個引腳名稱。 以引腳 1 為例。使用“/EIM_D17”搜索到如下信息。如下圖。
6.jpg (13.22 KB, 下載次數: 11)
下載附件
2019-10-18 11:38 上傳
由上圖可以看見擴展總線”EIM_D17”被定義為 8 種功能。我們在使用該引腳是要注 意,無論是初始化還是定義功能,都不能沖突,避免自己使用的功能被其他功能占用。 EIM_D17 配置為 GPIO 功能時使用的是定義為:_MX6Q_PAD_EIM_D17__GPIO_3_17。 其中 _MX6Q_PAD_EIM_D17__GPIO_3_17 被定義為: #define _MX6Q_PAD_EIM_D17__GPIO_3_17 \ IOMUX_PAD(0x03A8, 0x0094, 5, 0x0000, 0, 0) 這個宏比較關鍵,其原型為: #define IOMUX_PAD(_pad_ctrl_ofs,_mux_ctrl_ofs,_mux_mode,_sel_input_ofs,_sel_input,_pad_ctrl) IOMUX_PAD 宏有 6 個參數,每個參數的意思是:
7.jpg (24.43 KB, 下載次數: 9)
下載附件
2019-10-18 11:38 上傳
引腳 2、3、12 和引腳 1 定義類似。不再贅述。再搜索一下引腳 10 的定義。使用 “/GPIO_1”命令,查看到如下信息。(注意 GPIO 為 MX6Q_PAD 之后的 GPIO)
9.jpg (26.32 KB, 下載次數: 11)
下載附件
2019-10-18 11:38 上傳
由 上 圖 可 知 , GPIO_1 配 置 為 GPIO 功 能 時 使 用 的 定 義 為 : _MX6Q_PAD_GPIO_1__GPIO_1_1 。 現在可以暫時總結一下我們得到的信息。如下圖。
10.jpg (11.87 KB, 下載次數: 12)
下載附件
2019-10-18 11:38 上傳
1.3.2 board-mx6q_topeet.h 文件 board-mx6q_topeet.h 文件用來定義初始化 IMX6 對應需要用到的 IO 口的功能。 在 board-mx6q_topeet.h 文件中要搜索使用的 IO 有沒有沒被定義為其他功能,有的話 需要注釋掉,然后添加自己的初始化定義。 在內核源碼目錄輸入“vi arch/arm/mach-mx6/board-mx6q_topeet.h”命令,打開 board-mx6q_topeet.h 文件。如下圖。
11.jpg (4.46 KB, 下載次數: 11)
下載附件
2019-10-18 11:38 上傳
還是以 EIM_D17 的配置為例進行操作。使用”/MX6Q_PAD_EIM_D17”搜索初始化信 息,查看到該功能已經被初始化。把該初始化注釋掉,如下圖。
12.jpg (11.8 KB, 下載次數: 9)
下載附件
2019-10-18 11:38 上傳
再次搜素沒有發現其他相關定義。其他引腳與此類似。要保證沒有被其他功能定義 (iomux-mx6q.h 文件中的定義)。還需要注釋掉一個地方,如下圖。
13.jpg (8.45 KB, 下載次數: 8)
下載附件
2019-10-18 11:38 上傳
下面給上述引腳添加初始化。如下圖。
14.jpg (20.26 KB, 下載次數: 11)
下載附件
2019-10-18 11:38 上傳
注意,是添加到 mx6q_topeet_pads[]之中。 1.3.3 board-mx6q_topeet.c 文件 board-mx6q_topeet.c 文件可以對 gpio 引腳進行設置。 在 board-mx6q_topeet.c 文件中我們將要使用的 gpio 管腳有可能被其他功能占用,需 要我們把其他功能注釋掉、或者設置為 NULL。 在 iMX6 的內核源碼目錄,使用”vi arch/arm/mach-mx6/board-mx6q_topeet.c”命 令打開 board-mx6q_topeet.c 文件,如下圖。
15.jpg (4.43 KB, 下載次數: 11)
下載附件
2019-10-18 11:38 上傳
使用命令“/IMX_GPIO_NR(3, 17)”查找 EIM_D17 對應的配置。(此處應注意 17 和前 面的逗號之間有個空格,不然搜索不到)。把搜索到配置修改為 NULL。如下圖。
16.jpg (16.94 KB, 下載次數: 9)
下載附件
2019-10-18 11:38 上傳
其它引腳與此類似。全部修改如下圖。
17.jpg (14.77 KB, 下載次數: 8)
下載附件
2019-10-18 11:38 上傳
18.jpg (24.88 KB, 下載次數: 9)
下載附件
2019-10-18 11:38 上傳
19.jpg (13.01 KB, 下載次數: 10)
下載附件
2019-10-18 11:38 上傳
至此。我們的配置就都做完了。注意:IMX_GPIO_NR(1, 1)一共有兩處。 按照”iTOP-i.MX6 開發板之全能版使用手冊”中的內核編譯步驟,進行編譯內核。重新 燒寫到開發板。進行下一步測試。
|