51单片机第9篇章-IIC(I^2C)

264 阅读2分钟

追求以通俗的语言让小白可以更容易上手学单片机,在此同时巩固知识(很多图片来自江科大和普中,作者也是学这个来的,只是通过自己的语言想把它复述出来)。

什么是IIC

IIC是由目前较为通用的通信(软硬件实现数据传输交互)协议,我们学习这个东西,目的是掌握其操作流程来进行数据传输。

  • 串行通信,所有的数据以位为单位在SDA线上传输。
  • 同步。就是通信双方工作在同一个时钟下执行操作。而发送和接收数据同时只能有一个能执行。
  • 低速率。I2C一般是用在同一个板子上的2个IC之间的通信,正常是100kbit/s,高的有400kbit/s

IIC的知识

物理层

如下图,MCU为主机,接了VCC和上拉电阻,下面两条线,上为数据线(用来传数据),下为时钟线(操作数据传输),它们的默认值为高电平,右侧A、B、C为从机(即我们可以在这条线上连多个从机),而从机可以理解为各个外设或者存储器,主机可以理解为单片机。我们烧录程序后,就是主机和从机的交互了。 Snipaste_2022-11-20_15-49-27.png

协议层

  1. 初始化和关闭

Snipaste_2022-11-20_16-16-28.png 3.数据传输 Snipaste_2022-11-20_15-50-14.png 核心:当传输数据时,SCL必须置高,然后SDA的数据不能在置高的期间改变,才能有效传输;当SCL时,SDA的数据可以任意变换。也就是说,在程序中,传输数据应该先置SDA为所要的电平,然后SCL=1,SCL=0(完成一个字节(8bit)传输),最后SDA=任意(可变)。

3.应答 主机和从机的交互中,A端每次发送一个信号,B端就会发送一个应答或者非应答。若为应答,则A端会继续发,若为非应答,则A端不会再发。 比如下面,

Snipaste_2022-11-20_17-39-18.png 接收一帧数据如上,发送一帧数据如下:

Snipaste_2022-11-20_17-49-42.png 为什么发送数据最后不是非应答吗? 这里的应答和非应答都可以其实主机停止就可以了 4.从机寻址 从机的地址有7位和10位之分,这里是7位,还有一位是选择写或者读(1 写 0 读)。 7位的从机地址一般为4+3:4位固定地址,3位可编程地址。而3位,由2^3,可以寻到8个不同的从机。 Snipaste_2022-11-20_17-53-52.png 5.数据传输 这里跟第3点其实大概一样。下图中,灰色代表主机,白色代表从机。 Snipaste_2022-11-20_18-00-04.png

小例子运用IIC

在我另一篇文章中有用到IIC作为数据传输的用例,可以看看