当前位置: 首页 > news >正文

嵌入式Linux驱动开发(I2C专题)(二)

I2C系统的重要结构体

参考资料:

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

1. I2C硬件框架

在这里插入图片描述

2. I2C传输协议

在这里插入图片描述

3. Linux软件框架

在这里插入图片描述

4. 重要结构体

使用一句话概括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;

5. 内核里怎么传输数据

使用一句话概括I2C传输:

  • APP通过I2C Controller与I2C Device传输数据
  • APP通过i2c_adapter与i2c_client传输i2c_msg
  • 内核函数i2c_transfer
    • i2c_msg里含有addr,所以这个函数里不需要i2c_client
      在这里插入图片描述
http://www.lryc.cn/news/165592.html

相关文章:

  • SMT贴片制造:发挥的作用和价值]
  • 蓝桥杯官网练习题(幸运数字)
  • pandas笔记:显示中间的省略号
  • 解决vagrant安装的centos7,在window主机重装系统过后,再次用vagrant启动centos7却无法启动
  • 嵌入式这个领域会变得过于内卷吗?
  • Linux下安装和使用MySQL的详细教程
  • 【Linux】多线程互斥与同步
  • 从零开始:云服务器构建网站的完全指南
  • idea中的debug界面上没有进入方法的红色按钮
  • JavaScript知识系列(4)每天10个小知识点
  • Xpath 访问 Svg 内部的元素
  • 无涯教程-JavaScript - DOLLARDE函数
  • C语言双向链表
  • 朋友圈大佬都去读研了,这份备考书单我码住了
  • JavaScript设计模式(五)——发布订阅模式、桥接模式、组合模式
  • prize_p1
  • Acwing 3534. 矩阵幂 3535. C翻转
  • Spring Cloud:构建微服务的最佳实践
  • 时间序列场景下多种数据填充算法实践与对比分析
  • Mysql开启binlog
  • 【Java Web】HTML 标签 总结
  • 前端面试的话术集锦第 4 篇:进阶篇下
  • mmap详解
  • 项目02—基于keepalived+mysqlrouter+gtid半同步复制的MySQL集群
  • 【EI征稿】第二届机械电子工程与人工智能国际学术会议(MEAI 2023)
  • ros2 学习launch文件组织工程 yaml配置文件
  • 奇舞周刊第 505 期:实践指南-前端性能提升 270%!
  • 【C++】泛型编程 | 函数模板 | 类模板
  • web前端——简单的网页布局案列
  • 线程安全问题(3)--- wait(),notify()