当前位置:网站首页>【科普贴】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)停止
边栏推荐
猜你喜欢
随机推荐
哈工大2021机器学习期末考试题
张量乘积—实验作业
Out of memory error on GPU 0. Cannot allocate xxxGB memory on GPU 0, available memory is only xxx
无源域适应(SFDA)方向的领域探究和论文复现(第一部分)
openmv学习 2022.5.9
【Arduino 连接 SD 卡模块实现数据读写】
umi3 权限路由PrivateRoute未执行
n皇后问题(回溯法)
uniapp发布到微信小程序:分包、删减代码全过程
《scala 编程(第3版)》学习笔记3
面试必备:Android性能分析与优化实战进阶手册
MPU6050 加速度计和陀螺仪传感器与 Arduino 连接
兼容C51与STM32的Keil5安装方法
Arduino D1----Mlx90614红外温度传感器接线和安装包
Kotlin - 延迟初始化和密封类
C语言上机题(基础)
[Spark]-协同过滤
C#从入门到精通
php laravel框架生成二维码
基于树莓派的智能箱包开发环境搭建









