嵌入式硬件之IIC

IIC硬件连接

  • SCL : 时钟线
  • SDA : 数据线

IIC是一种半双工通信协议,输入输出数据都是在SDA上传输,具体是输入还是输出靠IIC开始第一次发送的地址字节的最后一个bit决定,
IIC是真正的多主机总线,IIC可以在通信中切换主机,如果有多个主机争抢总线,会由总线仲裁防止数据总线SDA的数据被破坏
IIC硬件上SCL、SDA必须上拉到高电平(因为协议中高电平意味着空闲状态),上拉电阻、负载电容(最大400pf)在一定范围内影响了最大传输速率,一般最大传输速率最大100kb/s,快速模式下400kb/s。

时钟靠SCL来同步,时钟高低电平时间不固定。

IIC协议

数据SDA只有在时钟SCL为低电平的时候可以改变,在高电平期间必须无条件保持稳定(否则会被识别为起始或者结束信号)。

  1. 起始位 :在SCl为高电平期间,SDA拉低,起始数据传输
  2. 数据位 :在SCL为低电平期间可以随意改变SDA的值,在SCL位高电平的时候,SDA必须保证稳定,将1bit发送出去
  3. 结束位 :在SCl为高电平期间,SDA拉高,结束数据传输
  4. 应答位 :当主机向从机发送完一个byte,主机总是需要等待从机回答一个应答信号,以确定从机收到了数据,时钟任由主机提供,如果,应答bit为0,表示应答,应答bit为1表示非应答。

由于IIC是半双工协议,需要在写入设备地址的时候就确定工作方向,如MPU6050设备地址为0x68的时候,需要读取的时候发送地址为 0x68 << 1 + 1 ,需要写的时候发送地址为 0x68 << 1 + 0 。

需要特别注意的是有些IIC设备(MCU的IO)内部集成了上拉电阻,有些则没有,或者很弱,所以为了保险起见,所有IIC设备的SCL、SDA必须外接上拉电阻。

猜你喜欢

转载自blog.csdn.net/qq_33894122/article/details/81113146