推薦產品
聯係我們
北京谈球吧论坛科技有限公司

谘詢熱線:010-82488292

公司電話:010-82488292

公司傳真:010-82611646

企業郵箱:sales@changyinwuye.com

地址:北京市海澱區中關村大街19號 新中關大廈B座南翼15層1507室

當前位置:谈球吧论坛科技首頁 » 新聞資訊 » 常見問題簡答 » I.MX6 評估板 開發指導(GPIO)

I.MX6 評估板 開發指導(GPIO)

文章出處:谈球吧论坛科技 人氣:9
摘要 : I.MX6 GPIO的值計算方法是(所在的組 - 1) * 32 + 序號,所以GPIO_1_20的管腳值為 (1 – 1) * 32 + 20 = 20。

  I.MX6 評估板 開發指導(GPIO)IF">[size=0.875em]

  目錄[size=12.502px] [隱藏]

  1GPIO輸出和輸入

  1.1修改.h文件

  1.2配置內核

  1.3編譯

  1.4重新燒寫係統並啟動

  1.5設備操作

  1.5.1查看gpio目錄

  1.5.2向係統注冊GPIO

  1.5.3GPIO輸出控製

  1.5.4GPIO輸入設置

  1.5.5注銷GPIO接口

  2GPIO LED

  2.1進入內核目錄

  2.2添加代碼

  2.2.1修改.h文件

  2.2.2修改.c文件

  2.3內核配置

  2.4編譯

  2.5重新燒寫係統並啟動

  2.6GPIO_LED操作

  2.6.1設備文件目錄

  2.6.2操作示例

  3GPIO按鍵

  3.1修改.h文件

  3.2修改.c文件

  3.3內核配置

  3.4編譯

  3.5重新燒寫係統並啟動

  3.6GPIO按鍵操作

  3.6.1GPIO_KEYS設備

  3.6.2查看設備信息

  3.6.3設備文件

  3.6.4操作示例

  GPIO輸出和輸入

  GPIO輸入輸出以SD1_CLK管腳為例。

  修改.h文件

  1)檢查頭文件中對SD1_CLK的配置

  示例如下:

  $ sed -n "/PAD_SD1_CLK/p" arch/ARM/mach-mx6/board-mx6q_sabresd.h

  2)注釋頭文件中對SD1_CLK的配置

  示例如下:

  $ sed -i "s/MX6Q_PAD_SD1_CLK/// &/g" arch/arm/mach-mx6/board-mx6q_sabresd.h

  3)在mx6q_sabresd_pads中添加對SD1_CLK的配置

  配置SD1_CLK功能為MX6Q_PAD_SD1_CLK__GPIO_1_20

  示例如下:

  $ sed -i "/mx6q_sabresd_pads/a\ MX6Q_PAD_SD1_CLK__GPIO_1_20,"

  arch/arm/mach-mx6/board-mx6q_sabresd.h

  4)查看修改結果

  示例如下:

  $ sed -n "/PAD_SD1_CLK/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  配置內核

  菜單定位

  Device Drivers ---> -*- GPIO Support ---> /sys/class/gpio/... (sysfs inteRFace)

  編譯

  make uImage

  重新燒寫係統並啟動設備操作查看gpio目錄

  在/sys/class/gpio/目錄下可以看到已經導出的GPIO

  $ ls /sys/class/gpio/

  向係統注冊GPIO

  使用echo注冊GPIO_1_20到係統,即可看到gpio目錄下多出一個gpio20目錄。

  提示:I.MX6 GPIO的值計算方法是(所在的組 - 1) * 32 + 序號,所以GPIO_1_20的管腳值為 (1 – 1) * 32 + 20 = 20。

  $ echo 20 > /sys/class/gpio/export

  GPIO輸出控製

  設置管腳為輸出狀態

  $ echo out > /sys/class/gpio/gpio20/direction

  設置管腳為輸出為高電平

  echo 1 > /sys/class/gpio/gpio20/value

  設置管腳為輸出為低電平

  echo 0 > /sys/class/gpio/gpio20/value

  GPIO輸入設置

  設置管腳為輸入狀態

  echo in > /sys/class/gpio/gpio20/direction

  獲取輸入值

  cat /sys/class/gpio/gpio20/value

  注銷GPIO接口

  注銷GPIO_1_20

  echo 20 > /sys/class/gpio/unexport

  GPIO LED

  說明:GPIO LED以PAD NANDF_CS0為例。

  進入內核目錄

  $ cd ~/MY-I.MX6/linux-3.0.35/

  添加代碼修改.h文件

  1)查找頭文件中對NANDF_CS0的配置

  示例如下:

  $ sed -n "/PAD_NANDF_CS0/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  2)注釋頭文件中對NANDF_CS0的配置

  示例如下:

  $ sed -i "s/MX6Q_PAD_NANDF_CS0/// &/g" arch/arm/mach-mx6/board-mx6q_sabresd.h

  3)在mx6q_sabresd_pads中添加對NANDF_CS0的配置

  配置NANDF_CS0功能為MX6Q_PAD_NANDF_CS0__GPIO_6_11

  示例如下:

  $ sed -i "/mx6q_sabresd_pads/a\ MX6Q_PAD_NANDF_CS0__GPIO_6_11," arch/arm/mach-mx6/board-mx6q_sabresd.h

  4)查看修改結果

  示例如下:

  $ sed -n "/PAD_NANDF_CS0/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  修改.c文件

  1)檢查.c文件中GPIO是否被重複使用

  示例如下:

  $ sed -n ‘/IMX_GPIO_NR(6,.11)/p‘ arch/arm/mach-mx6/board-mx6q_sabresd.c

  2)在.c文件中增加GPIO的宏定義

  增加#define SABRESD_USER_LED IMX_GPIO_NR(6, 11)

  示例如下:

  $ GPIO_DEFINE="#define SABRESD_USER_LED IMX_GPIO_NR(6, 11)"

  $ sed -i "1,/#define/{/#define/s/#define/${GPIO_DEFINE} &/}" arch/arm/mach-mx6/board-mx6q_sabresd.c

  2)檢查gpio_led類型的數據定義

  示例如下:

  $ sed -n ‘/struct gpio_led /,/}/p‘ arch/arm/mach-mx6/board-mx6q_sabresd.c

  3)增加user_led的數據定義

  static struct gpio_led imx6q_gpio_leds[] = {

  GPIO_LED(SABRESD_USER_LED, "user_led", 0, 1,

  "charger"),

  };

  內核配置

  菜單定位

  Device Drivers ---> LED Support ---> <*> LED Support for GPIO connected LEDs

  編譯

  make uImage

  重新燒寫係統並啟動GPIO_LED操作設備文件目錄

  啟動係統後即存在/sys/class/leds/user_led目錄,使用ls即可看到

  $ ls /sys/class/leds/user_led

  操作示例

  1)置NANDF_CS0為1

  $ echo 1 > /sys/class/leds/user_led/brightness

  2)置NANDF_CS0為0

  $ echo 0 > /sys/class/leds/user_led/brightness

  GPIO按鍵

  GPIO按鍵以GPIO_4、EIM_BCLK、CSI0_DATA_EN為例,分別是原理圖的按鍵SW2,SW3和SW4。

  修改.h文件

  1)查找頭文件中對PAD的配置

  示例如下:

  $ sed -n "/PAD_GPIO_4/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  $ sed -n "/PAD_EIM_BCLK/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  $ sed -n "/PAD_CSI0_DATA_EN/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  2)注釋頭文件中對PAD的配置

  示例如下:

  $ sed -i "s/MX6Q_PAD_GPIO_4/// &/g" arch/arm/mach-mx6/board-mx6q_sabresd.h

  $ sed -i "s/MX6Q_PAD_EIM_BCLK/// &/g" arch/arm/mach-mx6/board-mx6q_sabresd.h

  $ sed -i "s/MX6Q_PAD_CSI0_DATA_EN/// &/g" arch/arm/mach-mx6/board-mx6q_sabresd.h

  3)在mx6q_sabresd_pads中添加對PAD的配置

  配置GPIO_4功能為MX6Q_PAD_GPIO_4__GPIO_1_4

  示例如下:

  $ sed -i "/mx6q_sabresd_pads/a\ MX6Q_PAD_GPIO_4__GPIO_1_4," arch/arm/mach-mx6/board-mx6q_sabresd.h

  配置EIM_BCLK功能為MX6Q_PAD_EIM_BCLK__GPIO_6_31

  示例如下:

  $ sed -i "/mx6q_sabresd_pads/a\ MX6Q_PAD_EIM_BCLK__GPIO_6_31," arch/arm/mach-mx6/board-mx6q_sabresd.h

  配置CSI0_DATA_EN的PAD功能為MX6Q_PAD_CSI0_DATA_EN__GPIO_5_20

  示例如下:

  $ sed -i "/mx6q_sabresd_pads/a\ MX6Q_PAD_CSI0_DATA_EN__GPIO_5_20," arch/arm/mach-mx6/board-mx6q_sabresd.h

  4)查看修改結果

  示例如下:

  $ sed -n "/PAD_GPIO_4/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  $ sed -n "/PAD_EIM_BCLK/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  $ sed -n "/PAD_CSI0_DATA_EN/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  修改.c文件

  1)檢查.c文件中GPIO是否被重複使用

  示例如下:

  $ sed -n ‘/IMX_GPIO_NR(1,.4)/p‘ arch/arm/mach-mx6/board-mx6q_sabresd.c

  $ sed -n ‘/IMX_GPIO_NR(6,.31)/p‘ arch/arm/mach-mx6/board-mx6q_sabresd.c

  $ sed -n ‘/IMX_GPIO_NR(5,.20)/p‘ arch/arm/mach-mx6/board-mx6q_sabresd.c

  2)在.c文件中增加GPIO的宏定義

  MX6Q_PAD_GPIO_4__GPIO_1_4

  在.c文件中添加#define SABRESD_POWER_OFF IMX_GPIO_NR(1, 4)

  示例如下:

  $ GPIO_DEFINE="#define SABRESD_POWER_OFF IMX_GPIO_NR(1, 4)"

  $ sed -i "1,/#define/{/#define/s/#define/${GPIO_DEFINE} &/}" arch/arm/mach-mx6/board-mx6q_sabresd.c

  MX6Q_PAD_CSI0_DATA_EN__GPIO_5_20

  在.c文件中添加#define SABRESD_VOLUME_UP IMX_GPIO_NR(6, 31)

  示例如下:

  $ GPIO_DEFINE="#define SABRESD_VOLUME_UP IMX_GPIO_NR(6, 31)"

  $ sed -i "1,/#define/{/#define/s/#define/${GPIO_DEFINE} &/}" arch/arm/mach-mx6/board-mx6q_sabresd.c

  MX6Q_PAD_CSI0_DATA_EN__GPIO_5_20

  在.c文件中添加#define SABRESD_VOLUME_DN IMX_GPIO_NR(5, 20)

  示例如下:

  $ GPIO_DEFINE="#define SABRESD_VOLUME_DN IMX_GPIO_NR(5, 20)"

  $ sed -i "1,/#define/{/#define/s/#define/${GPIO_DEFINE} &/}" arch/arm/mach-mx6/board-mx6q_sabresd.c

  3)檢查gpio_keys_button類型的數據定義

  示例如下:

  $ sed -n ‘/gpio_keys_button/,/}/p‘ arch/arm/mach-mx6/board-mx6q_sabresd.c

  4)增加volume-up、volume-down、power的數據定義

  static struct gpio_keys_button imx6q_buttons[] = {

  GPIO_BUTTON(SABRESD_VOLUME_UP, KEY_VOLUMEUP, 1, "volume-up", 0, 1),

  GPIO_BUTTON(SABRESD_VOLUME_DN, KEY_VOLUMEDOWN, 1, "volume-down", 0, 1),

  GPIO_BUTTON(SABRESD_POWER_OFF, KEY_POWER, 1, "power", 1, 1),

  };

  內核配置

  菜單定位:

  Device Drivers ---> Input device support ---> Keyboards ---> <*> GPIO Buttons

  編譯

  make uImage

  重新燒寫係統並啟動GPIO按鍵操作GPIO_KEYS設備

  啟動係統後即存在/sys/devices/platform/gpio-keys目錄,使用ls即可看到

  $ ls /sys/devices/platform/gpio-keys

  查看設備信息

  在proc文件係統下可以看到相關信息

  $ cat /proc/bus/input/devices

  設備文件

  event0即對應gpio按鍵對應的設備文件,使用ls可以查看:

  $ ls /dev/input/event0 –la

  操作示例

  見Linux測試手冊

我要評論:  
*內 容:
驗證碼: 換一張
 

共有0條評論

還在等什麽,趕緊來評論!
網站地圖k8凱發體育appk8凱發體育app下載凱發k8體育APP凱發k8娛樂官網app下載體育凱發k8體育APP官方網站下載球盟會APP手機登錄球盟會官網千億體育官方一首頁