一:I2C是什么?
它就是为了让机器之间能够相互明白的一种通信协议,本质上所有的通信协议例如I2C,SPI,USART等与让人类相互交流的中文,英文等没区别。前者是让机器之间能相互理解,后者让人类相互理解。
二:I2C的特性
①串行通信: 数据是一位一位的传输的。
②两根通讯线:SCL-时钟线,SDA数据线。
③同步:有时钟线SCL时钟频率一致,就是同步。
④半双工:有SDA数据线,数据就能A穿B,B传A,实现双工功能,又因为只有一条SDA,只能分时复用,所以是半双工
⑤有数据应答:发送一个字节的数据后,让数据接收端给数据发送端一个应答,不然数据发送端怎么知道数据是否发送成功?
三:电路规范
![](https://img-blog.csdnimg.cn/6049a2e21341421ebdb61f03e67a5973.png)
四:自己理解模型
一个弹簧将一个长杆拉在上面,A,B两人前有两个米尺,长杆在上面表示1,长杆被拉下来表示0。A要想向B通讯时。
例如:A要向B传送0101,A就需要将长杆拉低到0,然后放松长杆,然后再拉低,再放松,这样B就知道传来了0101。
充实一些,也可以规定一个起始信号010(让接收数据的知道开始了),给B位置规定为01,C位置规定为10
所以A要向C传送0010,完整传送就是,先发送开始信号010(表示开始了),然后发送10(表示给C发送),然后发送0010。这样就完成了A向C的传送0010的数据,当然根据实际,C收到信号后还可以向A发送一个应答表示收到信号。
这是自己参考别人理解的通讯的一个简陋模型,有助于加深自己对通讯协议的理解。
五 时序结构的理解:
我只大概讲述如何理解整体的时序结构,具体的什么时候时钟上升沿变下降沿,数据下降沿变上升沿,我并没有怎么记,用到时翻翻手册就行,重要的是对时序的理解。
时序的组成:
①开启:SCL高电平期间,SDA从高电平切换到低电平
停止:SCL高电平期间,SDA从低电平切换到高电平
②发送一个字节:(具体电平变化可自行查手册)
接收一个字节
③发送一个应答
接收一个应答
完整的时序结构就是上述单独时序的组合
发送一帧数据,即向 谁 发送 什么?其组成如下:
开启 发送一个字节(从机地址+写) 接收一个应答 发送一个字节 (数据) 接收一个应答 发送一个字节 (数据) ................停止
为了解决向谁 发的问题,第一个发送字节是从设备的地址+写
接收一帧数据,即向谁 接收 什么?,其组成如下:
开启 发送一个字节 (从机地址+读) 接收一个应答 接收一个字节(数据) 发送一个应答 接收一个字节(数据) 发送一个应答 .........停止
为了解决向谁 接收的问题,第一个发送字节是从设备的地址+读
复合格式,就是发送数据帧再接收数据帧,完成向谁接收指定的什么?
开启 发送一个字节(从机地址+写) 接收一个应答 发送一个字节 (数据) 接收一个应答
发送一个字节 (数据) 接收一个应答 + 开启 发送一个字节 (从机地址+读) 接收一个应答 接收一个字节(数据) 发送一个应答 接收一个字节(数据) 发送一个应答........................停止
这就是我对I2C的简单理解了,希望对其他学习者有帮助。