T113 i2c gpio拓展芯片xl9555开发应用笔记

参考资料

XL9555_I_O扩展器.PDF

扩展 IO pca95555 linux驱动 及使用_linux pca9555-CSDN博客

内核添加支持

xl9555可使用 pca9555驱动,在设备树使能pca9555节点,参考如下:

gpio_ext: i2c_gpio@24 {
compatible = "nxp,pca9555";
reg = <0x24>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pca9505>;
interrupt-parent = <&pio>;
interrupts = <PH 4 IRQ_TYPE_LEVEL_LOW>;
gpio-controller;
#gpio-cells = <2>;
status = "okay";
};

内核驱动:/kernel/drivers/gpio/gpio-pca953x.c

make menuconfig配置编译 CONFIG_GPIO_PCA953X=y 

或拷贝出来手动编译成模块加载

注意这里的i2c地址由硬件A0-A2接线决定

设备树引用

例如把XL9555_IO P07,P11扩展成LED灯,在设备树中可做如下引用。

leds {
compatible = "gpio-leds";
status = "okay";

led_1 {
label = "led1";
gpios = <&gpio_ext 7 GPIO_ACTIVE_LOW>;
};
led_2 {
label = "led2";
gpios = <&gpio_ext 9 GPIO_ACTIVE_LOW>;
};
        }

注意xl9555没有P08,P09,因此P10对应gpio_ext 8 ,P11对应gpio_ext 9 ,以此列推。

P0-- gpio_ext 0

P1-- gpio_ext 1

P2-- gpio_ext 2

P3-- gpio_ext 3

P4-- gpio_ext 4

P5-- gpio_ext 5

P6-- gpio_ext 6

P7-- gpio_ext 7

P10-- gpio_ext 8

P11-- gpio_ext 9

P12-- gpio_ext 10

系统启动后可使用标准控制LED方法控制

控制高低

echo 1 > /sys/class/leds/led1/brightness

echo 1 > /sys/class/leds/led2/brightness

闪烁

echo timer > /sys/class/leds/led1/trigger

echo timer > /sys/class/leds/led2/trigger

应用调用

在 /sys/class/gpio 目录下生成1组新的引脚gpiochip400

root@/ # ls /sys/class/gpio

export gpio402 gpio403 gpiochip0 gpiochip400 unexport

此时可像操作soc内部引脚的方法控制具体的GPIO

 

注意这里的xl9555的 Pn对应 GPIO的 400+n

xl9555没有P08,P09,因此P10对应gpio_ext 8 ,P11对应gpio_ext 9 ,以此列推。

例如控制XL9555_IO的 P07,P11

可用如下指令

P07 400+7=407

echo 407 > /sys/class/gpio/export

echo out > /sys/class/gpio/gpio407/direction

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

P11 400+11-2=409

echo 409 > /sys/class/gpio/export

echo out > /sys/class/gpio/gpio409/direction

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

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐