示波器分析解码IIC波形。
测试设备:
1.MCU:STM32G0
2.IIC设备:lis2dh12(ST的三轴加速度计)
3.示波器:普源RIGOL DS1054Z
知识点:
1.开始信号:SCL在高电平期间,SDA由高变低即为开始信号
2.停止信号:SCL在高电平期间,SDA由低变高即为停止信号
3.应答信号ACK: 八位数据位发送完之后,第九个时钟即是ACK,0表示有ack,1表示nack
4.发送八位数据位的时候,电平变化总是发生在低电平期间,SCL为高电平器件不可以变动,只有开始信号和停止信号是在SCL为高器件变动
5.空闲态:SCL和SDA都为高
6.在切换数据的传输方向时,可以不必先产生停止条件再开始下次传输,而是直接再一次产生开始条件。I2C 总线在已经处于忙的状态下,再一次直接产生起始条件的情况被称为重复起始条件。例如:访问某一具有 I2C总线接口的 E2PROM 存储器时,主机先向存储器输入存储单元的地址信息(发送数据) ,然后再读取其中的存储内容(接收数据)。
7.启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R/W位为0表示由主控向被控器件写数据,R/W为1表示由主控向被控器件读数据;
8.START信号之后,主机的从设备地址发送出去。当从设备的ACK返回后,一个八位的子地址被发送出去,其低七位表示的是实际的寄存器地址,最高位表示的是是否地址自增。如果高位为1,则之后的寄存器地址自增,可允许多数据读写。
时序图
测试
1.黄色:SCL
2.蓝色:SDA
3.读取器件ID,理论上主控向IMU写数据即先发送器件地址(0x32)(R/W位为0),然后发送寄存器地址(0x0F),接着主控向IMU读数据即发送期间地址(0x33)(R/W位为1),接收IMU返回的值(0x33)。
4.示波器解码如下: