Linux下CH452数码管芯片驱动调试(GPIO模拟I2C)

1. 设备连接
项目中主控板使用的处理器为Cortex A5处理器,内核4.9.0系列。
主控板和CH452引脚定义如下表2.1所示。
表2.1 主控板和CH452引脚定义

序号 CH452引脚定义 主控板引脚定义
1 SDA PB29
2 SCL PB30
3 RESET PB26

2.驱动调试
CH452数码管芯片兼容I2C通信,但是其时序与标准的I2C时序不同,无法套用Linux通用的I2C框架编写驱动程序。所以考虑通过模拟时序的方式控制数码管显示。阅读CH452的芯片手册–5.6节 2线串行接口,可以获知单片机是如何与CH452通过2线接口进行通信的。通过2线接口点亮数码管,一定要保证模拟的时序正确。 下面分别从用户空间和内核空间模拟时序点亮数码管。

2.1 Linux用户空间调试
在用户空间,使用GPIO口模拟I2C时序。GPIO的应用层接口是/sys/class/gpio。文件目录结构及文件操作方法如下:
1)gpio应用层接口的文件目录结构
/sys/class/gpio
┣ export # 申请引脚的接口
┣ unexport # 取消申请引脚的接口
┣ pioA15 # 单个引脚设备
┣ direction # 输出/输入控制
┣ value # 电平
┗ …
2)对文件操作的使用方法
 设置输入
设置B22引脚为输入并读取数值,例:
cd /sys/class/gpio
echo 54 > export # gpioA口为0号bank,54 = B*32 + 22
cd pioB22
echo in > direction # 字符串 “in”
cat value # 字符 ‘0’ 或 ‘1’
如果是在应用程序中对GPIO文件进行读写操作,那么cat可以替换为read函数,echo可以替换成write函数。
 设置输出
设置C1引脚为输出并设置电平:
cd /sys/class/gpio
echo 65 > export
cd pioC1
echo out > direction
echo 1 > value
echo 0 > value
用户空间使用GPIO口模拟I2C时序,点亮数码管的调试思路,如下:
1) 初始化GPIO口,配置引脚PB29(SDA)、PB30(SCL),方向和电平;
2) 按照芯片手册中的时序要求,控制引脚电平,模拟时序;
3) 按显示要求,向CH452发送相应的命令。
下图为通过示波器抓到的2线接口的时序,发送的数据为01111110 00000001。
(公司文件和图片加密,传不了。。。)

用户空间的源码实现了数码管循环移位点亮、可显示任意字符(数字、字母、特殊字符)、实时显示主控板温度和告警码的功能。

2.2 Linux内核空间调试
驱动:将CH452注册为misc 设备(与字符设备注册类似),调用内核中的GPIO操作函数,使用GPIO模拟I2C时序,实现主控板使用2线接口与CH452通信。在调试时,将驱动源码编译成ko文件,应用层通过insmod的方式添加到内核,方便调试。
测试程序:编写应用层测试程序,待驱动添加成功后,运行测试程序,点亮数码管。

3.驱动代码
如有需要的小伙伴可以留言。

猜你喜欢

转载自blog.csdn.net/weixin_40407893/article/details/84747392
今日推荐