Page tree
Skip to end of metadata
Go to start of metadata

i.MX6UL芯片有五个ports,每个有32个pins。

在Linux中的GPIO计算方法是,GPIO_num = (<imx6ul_gpio_port> - 1) * 32 + <imx6ul_gpio_pin>

比如GPIO1_IO05,那就是Port 1的pin 5,在Linux中的管脚号是 (1- 1) * 32 +5=5

  • PORT1: /sys/class/gpio/gpiochip0
  • PORT2: /sys/class/gpio/gpiochip32
  • PORT3: /sys/class/gpio/gpiochip64
  • PORT4: /sys/class/gpio/gpiochip96
  • PORT5: /sys/class/gpio/gpiochip128


DTS配置GPIO

以UART3_TX_DATA为例,这个信号在i2C-6ULX-B底板的J3的第8脚。配置为GPIO时,需要在dts文件中修改。

dts层级一节中了知道,i2C-6ULX-B开发板需要修改i2c6ulxb-i2s6ull-nand.dtsi或i2c6ulxb-i2s6ull-emmc.dtsi文件,具体根据核心板的配置来决定。以eMMC版本为例,修改文件为i2c6ulxb-i2s6ull-emmc.dtsi。打开文件后,在iomux节中可以看到已经添加好的pinmux配置。


把需要配置为GPIO的引脚写在pinctrl_hog_1区块内就可以了,这里UART3_TX_DATA的配置宏是MX6UL_PAD_UART3_TX_DATA__GPIO1_IO24,具体可以查看arch/arm/boot/dts/imx6ul-pinfunc.h文件。

 48 &iomuxc {
 49         pinctrl-names = "default";
 50         pinctrl-0 = <&pinctrl_hog_1>;
 51         imx6ul-i2s6ull {
 52                 pinctrl_hog_1: hoggrp-1 {
 53                         fsl,pins = <
 54                                 MX6UL_PAD_UART1_RTS_B__GPIO1_IO19       0x17059 /* SD1 CD */
 55                                 MX6UL_PAD_UART3_TX_DATA__GPIO1_IO24     0x4001b0b0
 56                         >;
 57                 };


配置好后,重新编译和更新dtb到开发板上,就可以测试配置是否正确了。


开发板上操作

# echo 24 > /sys/class/gpio/export
# echo out > /sys/class/gpio/gpio24/direction
# echo 1 > /sys/class/gpio/gpio24/value
# cat /sys/class/gpio/gpio24/value
  • No labels
Write a comment…