当前位置:网站首页>【科普贴】I2C通讯协议详解——偏软件分析和逻辑分析仪实例分析
【科普贴】I2C通讯协议详解——偏软件分析和逻辑分析仪实例分析
2022-08-02 03:29:00 【湉湉家的小虎子】
一、 I2C标准协议流程
1、 I2C协议——规定命令
开始:当SCL为高电平时,SDA从高电平向低电平切换
停止:当SCL为高电平时,SDA从低电平向高电平切换
应答(ACK):发送侧发送完8bit数据后,接收侧需要回复一个信号,即第9个SCL时,接收侧将SDA拉低,称作ACK
无应答(NACK):发送侧发送完8bit数据后,接收侧需要回复一个信号,即第9个SCL时,接收侧将SDA拉高(或叫释放SDA),称作NACK。NACK时同时会引起Master发生RESTART或STOP流程
地址命令:I2C的地址是7bit,第8bit是方向位。1代表Read、0代表Write
2、 I2C协议——写流程
1) Master发起START
2) Master发送Slave地址(7bit)和W(0:写动作),等待Slave发送ACK
3) Slave发送ACK
4) Master发送寄存器地址(8bit),等待Slave发送ACK
5) Slave发送ACK
6) Master发送写入寄存器的数据(8bit),等待Slave发送ACK
7) Slave发送ACK
8) 第6步和第7步可以重复多次,即按顺序写多个寄存器。
9) Master发起STOP。
3、 I2C协议——读流程
- Master发起START
- Master发送Slave地址(7bit)和W(0:写动作),等待Slave发送ACK
- Slave发送ACK
- Master发送寄存器地址(8bit),等待Slave发送ACK
- Slave发送ACK
- Master发起START
- Master发送Slave地址(7bit)和R(1:读动作),等待Slave发送ACK
- Slave发送ACK
- Slave发送寄存器里数据(8bit)等待Master发送ACK
- Master发送ACK或NACK(出现NACK,后面直接就是STOP流程)
11)第9步和第10步可以重复多次,即顺序读多个寄存器
12)Master 发起STOP
二、 I2C通讯协议实例测量
使用逻辑分析仪分析实际通讯波形,对协议加深理解。
将逻辑分析仪通道0接SDA数据,通道1接SCL数据,将逻辑分析仪SDA信号设置成下降沿触发模式,通过发送读写寄存器命令的方式,抓取Master与Slave之间的通讯数据。
1、 将Slave设备(0x31)寄存器(0x20)的值改成0x98。
波形分析
1)Master发送Start
2)Master发送设备地址0x31,并执行写操作
3)Slave发送ACK
4)Master发送寄存器地址0x20
5)Slave发送ACK
6)Master发送写入寄存器值0x98
7)Slave发送ACK
8)停止
2、 读取Slave设备(0x31)寄存器(0x60)中的值
波形分析
1)Master发送Start
2)Master发送设备地址0x31,并执行写操作
3)Slave发送ACK
4)Master发送寄存器地址0x60
5)Slave发送ACK
6)Master发送start
7)Master发送设备地址0x31,并执行读操作
8)Slave发送ACK
9)Slave将寄存器0x60的值发送给Master
10)Master发送NACK
11)停止
边栏推荐
猜你喜欢
随机推荐
无源域适应(SFDA)方向的领域探究和论文复现(第一部分)
Out of memory error on GPU 0. Cannot allocate xxxGB memory on GPU 0, available memory is only xxx
公司产品太多了,怎么实现一次登录产品互通?
完全背包问题(动态规划)
浅谈性能优化:APP的启动流程分析与优化
研发过程中的文档管理与工具
electron-builder打包不成功解决方法
快速搭建一个网关服务,动态路由、鉴权的流程,看完秒会(含流程图)
使用批处理脚本修改hosts文件
日志分析系统:ELK
Larave 自定义公共函数以及引入使用
Laravel打印执行的SQL语句
面试必备:Android性能分析与优化实战进阶手册
解决composer安装太慢 更换国内镜像
关于我的项目-微信小程序2(uniapp->wx小程序)
MQ-5 可燃气体传感器与 Arduino 接口
18张图,直观理解神经网络、流形和拓扑
redo log与binlog间的破事
博达工业云与阿里云对比
Go 程序太大了,能要个延迟初始化不?