linux内核驱动:pca953xIO扩展芯片驱动总结

前言

本笔记总结使用ti 的PCA953x进行SOC的GPIO扩展时步骤,基于linux内核版本5.10.xxx;

一、PCA9536芯片介绍

【1】PCA9536是基于i2c接口的GPIO扩展芯片,最大支持到400Khz速率;
【2】PCA9536可以用于对SOC或者MCU本身IO口数量不够情况下的扩展,可以扩展4个GPIO,由于本身的i2c会占用SOC或者MCU两个pin,只用一个PCA9536的话实际会增加两个实现gpio功能的pin;
【3】PCA9536的地址为固定地址0x41,则同一路i2c上只能接一个PCA9536,如手册:
在这里插入图片描述
【4】封装引脚
在这里插入图片描述
【5】操作时的i2c协议和寄存器说明,见官网手册

二、驱动说明

内核驱动文件

内核源码/drivers/gpio/gpio-pca953x.c

实现原理

内核驱动中会将此设备注册成一个gpio控制器和 soc的gpio外设是一个道理;
pca953x_probe 调用 devm_gpiochip_add_data进行gpio外设控制器的注册;

设备树文件

内核源码/arch/arm64/boot/dts/芯片平台/xxxxx.dts

三、配置流程

硬件连接示意图

在这里插入图片描述

设备树配置

i2c: i2c@XXXX{
#address-cells = <1>;
#size-cells = <0>;
//其它配置
status = “okay”;
pca9536@41 {
compatible = “ti,pca9536”;
#address-cells = <1>;
#size-cells = <0>;
reg = <0x41>;
};

}

编译控制配置

查看 内核源码/drivers/gpio/Makefile文件中的CONFIG_GPIO_PCA953X在内核配置中是否设置为y或者m

编译验证

【1】当编译选项CONFIG_GPIO_PCA953X为y时,编译查看是否生成对应的输出文件gpio-pca953x.o,更新设备内核镜像、设备树dtb进行测试;
结果查看,查看 目录 /sys/class/gpio下是否多出了一组gpiochipXXX且gpiochipXXX/ngpio文件中为4表示此组包括4个gpio,对应的即为pca9536生成的gpio控制器属性文件
【2】当编译选项CONFIG_GPIO_PCA953X为m时,编译查看否生成对应的gpio-pca953x.ko文件,更新设备内核镜像、设备树dtb、加载ko文件进行测试;
结果查看,查看 目录 /sys/class/gpio下一开始为SOC内部的gpio外设控制器生成的属性文件,insmod gpio-pca953x.ko 加载模块后,会生成新的一个gpio控制器的属性文件目录gpiochipXXX,查看gpiochipXXX/ngpio 为 4,对应的即为pca9536生成的gpio控制器属性文件;

四、应用操作方式

对某个io设置为输出、高/低

查看 /sys/class/gpio/gpiochipXXX/base ,则可以操作的引脚号为 base+0、base+1、base+2、base+3,假如base为 num;
echo num > /sys/class/gpio/export:生成/sys/class/gpio/gpionum目录;
echo in > /sys/class/gpio/gpionum/direction: 设置为输出方向;
echo 1 > /sys/class/gpio/gpionum/value: 设置P0脚输出为高,用万用表测量验证;
echo 0 > /sys/class/gpio/gpionum/value: 设置P0脚输出为低,用万用表测量验证;

对某个io设置为输入

查看 /sys/class/gpio/gpiochipXXX/base ,则可以操作的引脚号为 base+0、base+1、base+2、base+3,假如base为 num;
echo num > /sys/class/gpio/export:生成/sys/class/gpio/gpionum目录;
echo out > /sys/class/gpio/gpionum/direction: 设置为输入方向;
cat /sys/class/gpio/gpionum/value: 给P0脚外部拉高,查看值是否为1;

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值