IIC通信协议记录贴

写这篇文章,主要是为了记录一下工作中用到的一些技术、协议等等,随时填充一些细节,方便后续需要,不用再到处找资料了。如有错误的地方,希望各位大佬予以指教!

一、IIC简介

IIC总线是一种半双工同步串行总线,主要用于近距离、低速的芯片之间通信。IIC是一种多主机多从机总线,但同一时刻有且只能有一个主机,只有主机有权发起和结束一次通信,从机只能被呼叫。

二、硬件连接

IIC有两条总线,一根为SDA用于发送和接收数据,一根为SCL用于通信双方时钟的同步,SDA、SCL都接上拉电阻,IIC空闲时两条总线都为高电平。其硬件结构简单,连接方式如图1所示。

图1 硬件连接

三、通信过程

IIC总线上如果有多个主机同时启动总线时,IIC具有冲突检测仲裁功能防止错误产生。通信过程如下:

  1. 主机开始发送起始信号启用总线

  1. 主机发送一个字节数据指明从机地址以及传输方向

  1. 被呼叫的从机发送应答信号

  1. 发送器发送一个字节数据

  1. 接收器发送应答信号

  1. 通信完成后主机发送停止信号并释放总线

1.起始信号和终止信号

图2 起始和终止信号

SCL为高电平时,SDA由高变低表示起始信号

SCL为高电平时,SDA由低变高表示终止信号

只有主机才能发送起始信号和终止信号,产生起始信号后总线处于占用状态,其他主机不可以使用,终止信号产生后释放总线于空闲状态。

2.寻址方式

图3 寻址信号

主机发送起始信号后必须发送一个字节数据,该数据高7位是从机地址,最低位为传输数据的方向,"0" 表示主机发送数据,"1" 表示从机发送数据,当一次通信的传输方向确定后,期间不可再改变。总线上所有从机接收到该字节后会与自己的地址作比较,如果相同则判断被主机呼叫,再通过最低位决定自己是发送器还是接收器。

3.数据传输与应答信号

图4 IIC时序

IIC通信时每个字节必须为8位长度,发送数据时,与UART不同的是,IIC先发送最高位后发送最低位,当发送器传输完一个字节数据后,接收器要发送一位应答位(低电平)来回应发送器,当接收器不想接收数据时保持SDA为高电平,一帧共9位。

在数据传输时,需要注意的是:

SCL为电平时,发送器发送数据,SDA在此期间电平可发生改变

SCL为电平时,接收器读取数据,SDA在此期间电平不可改变,需要保持稳定。

四、IIC经典时序

注:S为起始信号,P为终止信号,A表示应答,A非为非应答,深色表示主机发送数据

图6 主机向从机发送数据

图7 从机向主机发送数据

图6,主机首先发送一个起始信号,然后发送一个字节数据确定从机地址,0为主机发送数据,从机发送应答,当主机发送完数据或者从机不想再接收数据时不发送应答信号,主机发送终止信号。图7相反

图8 主机发送后从机发送

第三种情况是当主机发送完数据后,想该从机再发送数据,但是之前说过当一次通信的传输方向确定后,期间不可再改变,这时需要主机再重新发送一次起始信号和一个字节的数据,确定从机地址和传输方向。

在这个时序中可以看到,除了起始信号和一个字节确定从机地址和传输方向是必须发送的,终止信号可以不发送。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值