分析I2C时序波形时需要注意如下几点:

  • I2C 发出字节的bit顺序是从高位-->低位
    注意,这里有个很容易想当然犯错误的地方 – 有些人错误的看波形的方式是"先发出的波形被后发出的波形推着往前(右)走"。
    正确看懂波形的方式是“波形是从左往右增加的,已发出的bit波形位置固定了不会移动;简单理解就是左边的波形是先发出来的,是高位,右边的波形是后发出来的,也就是低位。。
  • Start / Restart 信号波形:SCL 高电平 + SDA 由高变低
  • 每次传输是9 bits = 8 bits data + 1 bit ACK
    8bits data可能的情况是:7bit addr + 1 bit 1/0(读写);8 bits register addr;8 bits tx data;8 bits rx data
    注意:有些 register addr是16 bits 或者 32 bits,这个时候就会连续发 2个或4个 8 bits 来组成 register addr。
  • Stop 信号波形:SCL 高点平 + SDA 由低变高
  • ACK – 拉底SDA
    host send to slave 时:ACK由slave发出;
    slave send to host 时:ACK由host发出;
  • 注意:波形中 Start/7bit addr + 1 bit 1/0(读写)/Restart/Stop 是由I2C host 发出的,在Slave驱动中找不到对应的数据;其余的波形对应的是Slave 驱动代码中 i2c read/write函数中构造的i2c_msg.buf 和 i2c_msg.len。这一点在结合驱动分析波形时很重要哦~

上传一份实际的波形图:

I2C | 如何读 I2C 波形?相关推荐

  1. Linux I2C子系统分析-I2C设备驱动

    接下来以一个实际的例子来看I2C设备驱动,就以drivers/i2c/i2c-dev.c为例. 先看它的初始化和注销函数 [cpp] view plaincopy static int __init  ...

  2. Linux I2C子系统分析-I2C总线驱动

    在drivers/i2c/busses下包含各种I2C总线驱动,如S3C2440的I2C总线驱动i2c-s3c2410.c,使用GPIO模拟I2C总线的驱动i2c-gpio.c,这里只分析i2c-gp ...

  3. Linux驱动编程--基于I2C子系统的I2C驱动

    代码中,我添加了很多注释,应该不难理解,有错误大家可以指出来,我再改正 #include <linux/kernel.h> #include <linux/module.h> ...

  4. 使用海思自带的i2c工具访问i2c设备

    1 前言   linux下开发i2c设备驱动,一般分为两个阶段,第一阶段是驱动实现,第二阶段是调试.驱动实现即是对i2c设备的正确访问,包括读.写.控制.而第二阶段,一般用于需要调整参数的i2c设备, ...

  5. S3C2440 Linux下的I2C驱动以及I2C体系下对EEPROM进行读写操作。

    这篇文档算上期末复习这段时间其实拖了有好久了,因为从一开始接触linux的i2c驱动体系我就各种凌乱,因为起初脑海中既没有整体框架也不熟悉相关体系下的结构,所以四处乱看,经常性的在看内核代码时看着看着 ...

  6. linux powerpc i2c驱动 之 i2c设备层的注册过程

    Linux下i2c驱动的加载过程,分为i2c设备层.i2c adapter层与i2c核心层 i2c设备驱动层也就是我们为特定i2c设备编写的驱动,下面是我自己理解的i2c驱动的注册过程 在我们写的i2 ...

  7. Linux i2c总线(2) - I2C核心层

    1. I2C 核心层初始化 这一部分向系统注册了一个名为i2c的总线类型. static int __init i2c_init(void) {int retval;retval = bus_regi ...

  8. STM-32:I2C通信协议—软件I2C读写MPU6050

    目录 一.I2C通信 二.硬件电路 三.I2C时序基本单元 3.1起始和终止 3.1.1起始条件 3.1.2终止条件 3.2发送一个字节 3.3接收一个字节 3.4发送应答 3.5接收应答 四.I2C ...

  9. 硬件I2C与模拟I2C

    硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C:一般也较为稳定,但是程序较为繁琐.硬件(固件)I2C是直接调用内部寄存器进行配 ...

最新文章

  1. Python 23天 序列化
  2. html 服务器运行exe,html运行exe文件,兼容浏览器
  3. CentOS下firefox安装flash说明
  4. 【CV】给AI一张高清照片,分分钟还你细节满满的3D人体模型,GitHub标星4.4k | 在线可玩...
  5. Minimum Ternary String CodeForces - 1009B(思维)
  6. 关于 std::set/std::map 的几个为什么
  7. html四边形的的框怎么编写,html知识点之利用css四边形切角并且加上边框
  8. eclipse oracle驱动位置,【求助】eclipse导入了Oracle的驱动包连不上Oracle
  9. 如何实现用DataGridView来做统计表格
  10. 同心圆的画法_BIM微课堂:一种简单的顶管中继间画法
  11. 【DIOCP开源项目】实际应用案例
  12. 软件工程大作业:网上购物系统
  13. java毕业设计物流跟踪系统mybatis+源码+调试部署+系统+数据库+lw
  14. 为什么Android项目mainactivity中有一个变量R_教我兄弟学Android逆向12 编写xpose模块...
  15. python学习面向对象_Python小白必学的面向对象
  16. MATLAB 画图--图形属性设置
  17. 今天分享一个用Python来爬取小说的小脚本!(附源码)
  18. 算法精解 c语言描述 豆瓣,斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂!...
  19. ant design vue 表头自定义筛选
  20. flutter 抖音无水印解析视频

热门文章

  1. jsonp劫持漏洞研究与防范
  2. C# 如何获取checkedListBox 的选中项
  3. dede 用户笔名 去除 更改
  4. 工行的银行卡号代表开户行的数字是哪几位?怎么查询
  5. 花呗接入央行征信系统后还可以用花呗付款吗?
  6. 打开/关闭NFC 功能
  7. 深入理解Kmeans算法
  8. 宜春市黄冈中学2021高考成绩查询,湖北2021新高考模拟考试赋分预测来了!请对照你的分数分析一下!...
  9. android webview中h5调用 拍照/相册 通用支持代码
  10. 如何制作公众号首图?