I2C系统的重要结构体

I2C系统的重要结构体



参考资料:

  • Linux驱动程序: drivers/i2c/i2c-dev.c
  • I2CTools: https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/

一、 I2C硬件框架

在这里插入图片描述

二、 I2C传输协议

  • 写操作
    在这里插入图片描述
  • 读操作

在这里插入图片描述

三、 Linux软件框架

在这里插入图片描述

四、 重要结构体

使用一句话概括I2C传输:APP通过I2C Controller与I2C Device传输数据。

在Linux中:

  • 怎么表示I2C Controller

  • 一个芯片里可能有多个I2C Controller,比如第0个、第1个、……

  • 对于使用者,只要确定是第几个I2C Controller即可

  • 使用i2c_adapter表示一个I2C BUS,或称为I2C Controller

  • 里面有2个重要的成员:

    • nr:第几个I2C BUS(I2C Controller)

    • i2c_algorithm,里面有该I2C BUS的传输函数,用来收发I2C数据

  • i2c_adapter
    在这里插入图片描述

  • i2c_algorithm
    在这里插入图片描述

  • 怎么表示I2C Device

    • 一个I2C Device,一定有设备地址
    • 它连接在哪个I2C Controller上,即对应的i2c_adapter是什么
    • 使用i2c_client来表示一个I2C Device
      在这里插入图片描述
  • 怎么表示要传输的数据

    • 在上面的i2c_algorithm结构体中可以看到要传输的数据被称为:i2c_msg
    • i2c_msg
      在这里插入图片描述
    • i2c_msg中的flags用来表示传输方向:bit 0等于I2C_M_RD表示读,bit 0等于0表示写

    • 一个i2c_msg要么是读,要么是写

    • 举例:设备地址为0x50的EEPROM,要读取它里面存储地址为0x10的一个字节,应该构造几个i2c_msg?

      • 要构造2个i2c_msg

      • 第一个i2c_msg表示写操作,把要访问的存储地址0x10发给设备

      • 第二个i2c_msg表示读操作

      • 代码如下

        u8 data_addr = 0x10;
        i8 data;
        struct i2c_msg msgs[2];
        
        msgs[0].addr   = 0x50;
        msgs[0].flags  = 0;
        msgs[0].len    = 1;
        msgs[0].buf    = &data_addr;
        
        msgs[1].addr   = 0x50;
        msgs[1].flags  = I2C_M_RD;
        msgs[1].len    = 1;
        msgs[1].buf    = &data;
        

五、内核里怎么传输数据

使用一句话概括I2C传输:

  • APP通过I2C Controller与I2C Device传输数据

  • APP通过i2c_adapter与i2c_client传输i2c_msg

  • 内核函数i2c_transfer

    • i2c_msg里含有addr,所以这个函数里不需要i2c_client
      在这里插入图片描述

致谢

以上笔记源自韦东山老师的视频课程,感谢韦老师,韦老师是嵌入式培训界一股清流,为嵌入式linux开发点起的星星之火,也愿韦老师桃李满园。聚是一团火,散是满天星!

在这样一个速食的时代,坚持做自己,慢下来,潜心琢磨,心怀敬畏,领悟知识,才能向下扎到根,向上捅破天,背着世界往前行!
仅此向嵌入行业里的每一个认真做技术的从业者致敬!


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值