182|3

4814

帖子

3

TA的资源

版主

《RT-Thread设备驱动开发指南》读书笔记三 I2C驱动 [复制链接]

本帖最后由 damiaa 于 2023-9-16 21:45 编辑

              《RT-Thread设备驱动开发指南》读书笔记三 I2C驱动

 

《RT-Thread设备驱动开发指南》读书笔记一 串口驱动

《RT-Thread设备驱动开发指南》读书笔记二 PIN驱动之后

 

RT-Thread的所有设备类都是rt_device派生来的。所以都有相同的继承

I2C设备也是一样。为什么要了解I2C驱动呢,因为很多设备都用到I2C,玩嵌入式不懂 I2C 那没得玩。

 

213800l5a9okk7c9ihrz70.png

 

应用层:应用程序代码

 

I2C设备驱动框架 与平台无关 代码在components\drivers\i2c中包含下面两个文件

 

213800iffi5zwzoj4nhg44.png

 

I2c_core.c

 

213800p6vddimxcjuodq66.png

213800buwwnpbndsnohzao.png

 

i2c_dev.c:

 

213800ujqpqe9id81ded82.png

 

i2c-bit-ops.c 如果是模拟i2c有这个软件

 

213800m80ld5uc87w50wsw.png

 

I2C总线设备驱动层与设备相关,也是我们移植需要动手的地方。

 

分硬件I2C驱动 软件I2C驱动 代码位于bsp目录

 

硬件I2C驱动

需要实现

struct rt_i2c_bus_device_ops

{

      rt_size_t (*master_xfer)(struct rt_i2c_bus_device *bus,

      struct rt_i2c_msg msgs[],

      rt_uint32_t num);

      rt_size_t (*slave_xfer)(struct rt_i2c_bus_device *bus,

      struct rt_i2c_msg msgs[],

      rt_uint32_t num);

      rt_err_t (*i2c_bus_control)(struct rt_i2c_bus_device *bus,

      rt_uint32_t,

     rt_uint32_t);

};

 

struct rt_i2c_bus_device

{

      struct rt_device parent;

      const struct rt_i2c_bus_device_ops *ops;

      rt_uint16_t flags;

      struct rt_mutex lock;

      rt_uint32_t timeout;

      rt_uint32_t retries;

      void *priv;

};

然后调用

rt_err_t rt_i2c_bus_device_register(struct rt_i2c_bus_device *bus,const char *bus_name);函数注册

 

软件I2C驱动

需要实现

static const struct rt_i2c_bus_device_ops i2c_bit_bus_ops =

{

      i2c_bit_xfer,

      RT_NULL,

      RT_NULL

};

rt_i2c_bit_add_bus(struct rt_i2c_bus_device *bus,const char *bus_name)注册

 

具体实现就不细说了。可以参照相关代码实验。

 

驱动开发完成后要配置Kconfig

比如在:bsp\xxx\drivers\Kconfig中

      Config BSP_USING_I2C4

        bool “Enable I2C4”

        select RT_USING_I2C

       default y

 

验证驱动可以在控制台

Msh>list_device 命令验证。调用应用程序进一步实验验证。

                                              根据了解的先介绍到这里。谢谢

最新回复

大蜜蜜老师还需要学习这种级别的东西?   详情 回复 发表于 3 天前

回复

4578

帖子

3

TA的资源

版主

经过N次试验,RTT的硬件I2C不是很好用,软件的话又跑不上速度。

回复

6361

帖子

2

TA的资源

五彩晶圆(中级)

大蜜蜜老师还需要学习这种级别的东西?

点评

惭愧了。 虽然I2C接触是N年前的事了。但I2C在单片机,arduino,rt-thread,linux等各种操作系统的驱动还是有些区别的。需要比较细致的了解。学习了 学习了!  详情 回复 发表于 前天 08:36
个人签名

默认摸鱼,再摸鱼。2022、9、28


回复

4814

帖子

3

TA的资源

版主

freebsder 发表于 2023-9-19 17:16 大蜜蜜老师还需要学习这种级别的东西?

惭愧了。 虽然I2C接触是N年前的事了。但I2C在单片机,arduino,rt-thread,linux等各种操作系统的驱动还是有些区别的。需要比较细致的了解。学习了 学习了!


回复
您需要登录后才可以回帖 登录 | 注册

相关帖子
猜你喜欢
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表