杂项设备驱动框架_rtthread驱动框架分析i2c驱动

本文分析了RT-Thread操作系统中的I2C设备驱动框架,包括驱动层、核心层和设备层的结构。介绍了软件I2C和硬件I2C的实现细节,如软件I2C的bit_opt层、硬件I2C的直接对接,以及如何使用驱动框架的API进行数据收发。同时,展示了软件I2C和硬件I2C的设计与应用实例。
摘要由CSDN通过智能技术生成

驱动分析

I2C设备驱动框架图:

  1. 我们先RT-Thread的I2C框架图(这是我自己理解的框架图,如果不对的地方,请指出):
146ac166a01e7395cf2a5969a6714ae8.png
  • 上图是我分析的RTT的I2C框架图。主要分为三层,驱动层-核心层-设备层。如果你分析过Linux的I2C框架,它的层次也是这样子。所以你了解了RTT的I2C之后再去看Linux的I2C框架,其实问题不大。
  • 驱动层:分为硬件I2C驱动和软件I2C驱动。
  • 核心层:
    • ①其中bit_ops是RTT为软件I2C提供的中间层,它的作用:为底层模拟I2C驱动提供回调接口,为核心层提供统一I2C通信接口。
    • ②而硬件I2C则直接对接核心层,提供统一I2C通信接口。
    • ③RTT在核心层上,也像pin驱动那样,封装了一套API(虚线箭头),供用户直接使用。
    • ④dev是提供RTT设备驱动框架的统一的API(实现箭头)。
    • ⑤注意的是:模拟I2C驱动到核心层,增加了一层中间层。
  • 设备层:设备就是杂七杂八的使用I2C的总线的设备。而这些设备可以选择使用RTT驱动框架的API,也可以选择RTT封装好的API。
  1. 通过上述的描述,可能还没了解的很清晰。下面我根据两种不同方式的驱动,两种不同的API,逐一分析,并且会结合试验来验证。
driver 层:
  • RT-Thread的I2C驱动,分为两种类型:硬件I2C和软件I2C。在stm32的BSP中提供了软件I2C的驱动,不过为了全面介绍,硬件I2C的对接,作者也进行简单的对接和实现。
软件I2C:
  1. 软件I2C的层次图:
c8a1ec6ed9ac8b1023dac11e8aff4cbb.png
  1. drv_soft_i2c层: 主要进行软件I2C所用到scl引脚,sda引脚初始化。scl引脚和sda引脚的获取电平和设置电平接口和延时函数(udelay)。并对接bit_opt层提供的操作结构体:struct rt_i2c_bit_ops。并通过rt_i2c_bit_add_bus注册,提供给bit_opt层回调。
  • struct rt_i2c_bit_ops结构体:
struct rt_i2c_bit_ops
{
    void *data;
    void (*set_sda)(void *data, rt_int32_t state);
    void (*set_scl)(void *data, rt_int32_t state);
    rt_int32_t (*get_sda)(void *data);
    rt_int32_t (*get_scl)(void *data);

    void (*udelay)(rt_uint32_t us);

    rt_uint32_t delay_us;
    rt_uint32_t timeout;
};
函数指针 功能
void (*set_sda)(void *data, r
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值