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

1. 设备连接
    主控板处理器为Cortex A5处理器,内核4.9.0。
    主控板和CH452引脚定义如下表1.1所示。

表1.1 主控板和CH452引脚定义

序号CH452引脚定义主控板引脚定义
1SDAPB29
2SCLPB30
3RESETPB26

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.驱动代码
    如需源代码可留言。

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heat.huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值