【学习交流用参考多篇CSDN文章】IIC通信协议——以模拟IIC协议 OLED显示屏代码进行讲解

目录

一、参考文章 

IIC通信协议,搞懂这篇就够了_混说Linux的博客-CSDN博客_iic通信

IIC通信原理_Chapman.的博客-CSDN博客_iic通信

二、数据方向

 三、协议细节


一、参考文章 







IIC通信协议,搞懂这篇就够了_混说Linux的博客-CSDN博客_iic通信

IIC通信原理_Chapman.的博客-CSDN博客_iic通信

IIC通信协议,搞懂这篇就够了_混说Linux的博客-CSDN博客_iic通信

二、数据方向

主机向从机写,先发送一个起始信号,然后是设备地址,接着是0,代表主机写数据,然后等待特定从机应答,接着发送一帧完整数据等待从机应答,数据发送完毕主机发送停止信号

【学习交流用参考多篇CSDN文章】IIC通信协议——以模拟IIC协议 OLED显示屏代码进行讲解_第1张图片

主机读取数据,主机发送起始信号,然后是设备地址,接着是1,代表接受设备数据,然后等待从机应答,接着接受从机一帧数据,接着是主机发送的应答信号,接受到最后一帧数据主机会发送NACK,接着由主机发送停止信号。

【学习交流用参考多篇CSDN文章】IIC通信协议——以模拟IIC协议 OLED显示屏代码进行讲解_第2张图片

 三、协议细节

 

【学习交流用参考多篇CSDN文章】IIC通信协议——以模拟IIC协议 OLED显示屏代码进行讲解_第3张图片

IIC时序(默认高电平,所以GPIO为上拉)

【学习交流用参考多篇CSDN文章】IIC通信协议——以模拟IIC协议 OLED显示屏代码进行讲解_第4张图片

从设备地址用来区分总线上不同的从设备,一般发送从设备地址的时候会在最低位加上读/写信号,比如设备地址为0x50,0表示读,1表示写,则读数据就会发送0x50,写数据就会发送0x51。

以主机向从机发送数据为例,由时序图可知,只有SCL在低电平时,SDA的值才允许被改变

【学习交流用参考多篇CSDN文章】IIC通信协议——以模拟IIC协议 OLED显示屏代码进行讲解_第5张图片

 【学习交流用参考多篇CSDN文章】IIC通信协议——以模拟IIC协议 OLED显示屏代码进行讲解_第6张图片

 

IC总线规定,在起始信号后面必须传送一个从器件的地址(7位),第8位是数据传送的方向位(R/`W),用“0”来表示主器件发送(`W),“1”表示主器件接受数据(R)。每次数据传送总是由主器件产生终止信号而结束。但是,如果主器件希望继续占用总线进行新的数据传送,则可以不产生终止信号,而马上再次发出起始信号对另一从器件进行寻址操作
 

1.线路空闲时,SDA、SCL均为高电平,

2.准备发送数据时,SDA先拉低大于4.7us时间,随后SCL也拉低电平,这时数据开始传输,SDA开始改变,此设备独占总线,其他设备无法发送数据。

3.应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。对于反馈有效应答位ACK的要求是:接收器在第9个时钟脉冲之前的低电平期间将数据线SDA拉低,并且确保在该时钟的高电平期间为稳定的低电平。 如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放数据线SDA,以便主控接收器发送一个停止信号P。

【学习交流用参考多篇CSDN文章】IIC通信协议——以模拟IIC协议 OLED显示屏代码进行讲解_第7张图片

 主机读取从机数据的例子,如上图所示。

 

你可能感兴趣的:(stm32,网络)