MT7628 GPIO 的 linux(OpenWRT)映射顺序

OpenWRT 启动后,查看 gpio 的内核信息

root@OpenWrt:~# ls /sys/class/gpio/
export       gpiochip416  gpiochip448     gpiochip480  unexport

416/448/480的值比较奇怪,详细原理可以参考这个邮件列表讨论
Linux 的 GPIO 的分配号是从 512 向下开始的,而 MT7628 设计了 0-95 个GPIO,32 个为一组,共 3 组。
第一组 512 - 32 = 480(对应 gpio 0 - 31)
第二组 480 - 32 = 448(对应 gpio 32 - 63)
第三组 448 - 32 = 416(对应 gpio 64 - 95)

如果设置 gpio 4(i2c_sclk),为第一组,480 + 4 = 484
下面是对 gpio 4 的测试

# export gpio 4
echo "484" > /sys/class/gpio/export
# 设置为输出
echo "out" > /sys/class/gpio/gpio484/direction
# 输出高电平
echo "1" > /sys/class/gpio/gpio484/value
# 输出低电平
echo "0" > /sys/class/gpio/gpio484/value

如果设置 gpio 44(wlen_n),为第二组,448 + (44 - 32) = 460
下面是对 gpio 44 的测试

# export gpio 44
echo "460" > /sys/class/gpio/export
# 设置为输出
echo "out" > /sys/class/gpio/gpio460/direction
# 输出高电平
echo "1" > /sys/class/gpio/gpio460/value
# 输出低电平
echo "0" > /sys/class/gpio/gpio460/value

另外 gpio 4 和 gpio 44 的配置在 DTS 上,将 i2c 和 wled_an 管脚配置成 gpio 模式。
比如 TP-Link 的 WR902AC_V3 路由器
openwrt_wr902ac_v3/target/linux/ramips/dts/mt7628an_tplink_tl-wr902ac-v3.dts

&state_default {
        gpio {
                groups = "i2c", "i2s", "p0led_an", "p2led_an", "p4led_an", "uart1", "wdt", "wled_an";
                function = "gpio";
        };
};

附:MT7628 datasheet 的 GPIO 的说明


gpio pins
gpio pins
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容