iic通信协议
I2c通信通过两根线来传输数据,一根是scl:控制时钟。另一根是sda:传输数据。Scl时钟掌控在主机手里,数据传输完后要释放掉scl(i2c可以支持一个多主机传输)。
主机:初始化总线的数据传输并产生允许传输数据的时钟信号的器件。
从机:此时,任何可以被寻址的器件。
(注:当多主机同时初始化时,可以通过仲裁决定让哪个主机拿到控制scl的权限)。
规则:1.scl高电平时,采集sda的数据。故sda在低电平变化,高电平时要保持。
2.在通信开始的时候scl与sda都置为高电平,此时为总线空闲时间
sda在scl高电平时产生下降沿,标志总线启动。
sda在scl高点平时产生上升沿,标志总线释放。
3.ack:每当发送器给接收器发送了8bit的数据后,接收器要给发送器反馈一个低电平表示接收到数据。
写时序:设备地址 => ack => 寄存器地址 => ack => data => ack。
Pahse1: 写设备地址。(ox42)假设:有一个从机的设备地址为0x42,其中最后一位是用来判断读写方向的,写时0x42,读地址时0x43。
Pahse2: 寄存器地址。
Pahse3: data。
读时序:
写设备地址 => ack => 寄存器地址 => ack => 读设备地址=> ack => data =>Na
Pahse1:写设备地址。(ox42)
Pahse2:寄存器地址。
选择完寄存器地址需要再一次给一个启动信号,即在scl为高电平的时候,拉低一次sda
Pahse3:读设备地址。(ox43)所以第八位为高电平
Pahse4:data。NA时主机反馈给从机的一个高电平,表示接收到数据。
注:写数据的时候高位在前,低位在后。