乐于分享
好东西不私藏

I2C通信协议原理及软件编程读写逻辑(一)

I2C通信协议原理及软件编程读写逻辑(一)

  I2C通信是芯片之经常用的协议之一,列入存储器、传感器等器件经常带有I2C通信,学习掌握使用是单片机开发必备,接下来分享一下个人理解及总结:

1、I2C概念:

   I2C是由Philips公司开发的一种通用数据总线,根线:SCL、SDA,需上拉电阻,是同步,半双工通信,带数据应答,支持总线挂载多设备(一主多从、多主多从)。

I2C协议标准定义了不同模式的理论最高速率:

   标准模式(Standard-mode):最高 100 kbps

   快速模式(Fast-mode):最高 400 kbps

   快速模式+(Fast-mode Plus):最高 1 Mbps

   高速模式(High-speed mode):最高 3.4 Mbps

2、I2C硬件原理:

    不管是单设备还是多设备连接时,SCLSDA两根线上各添加一个上拉电阻(通常4.7-10K),具体阻值需根据通信速率调整。

3、I2C软件原理:

    MCU配置SCL和SDA管脚均要配置成开漏输出模式”,因为“开漏输出模式”具有驱动低电平能力,不具高电平驱动能力,因此IO口输出高电平时(其本质是高阻态),此时高电平由外部上拉电阻决定,这个主要为了从设备可以控制响应。

4、I2C通信原理:

    开始通信SCL高电平期间,SDA从高电平切换到低电平,时序图如下:

    停止通信SCL高电平期间,SDA从低电平切换到高电平,时序图如下:

    发送一个字节数据时SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后主机释放SCL(置1),从机将在SCL高电平期间读取数据,所以SCL高电平期间SDA不允许有数据变化,依次循环发送8次,即可完成发送一个字节数据,时序图如下:

    接收一个字节数据时SCL低电平期间,从机将数据依次放到SDA线上(高位先行),然后主机释放SCL(置1),主机将在SCL高电平期间读取数据,所以SCL高电平期间SDA不允许有数据变化,依次循环接收8次,即可完成接收一个字节数据注意:主机在接收数据之前,主机必须先释放SDA),时序图如下:

   发送应答(主机作为接收方)主机在接收从机发过来的一个字节数据之后,主机必须下一个SCL时钟高电平期间主机发送一个数据位回应从机,发送0表示应答(回应从机我收到数据了)发送1表示非应答(回应从机我没收数据,停止接收),时序图如下:

    接收应答(主机作为发送方)主机向从机发送完一个字节数据之后,主机在下一个SCL时钟高电平期间,判断从机是否应答,此时如果从机拉低SDA线(既发送0)(表示从机应答,已收到数据)此时如果从机拉高SDA线(既发送1)(表示从机非应答,没收到数据,停止发送)。注意:主机在接收数据之前,必须释放SDA(置1),释放让从机控制SDA线回应主机是否收到数据,时序图如下:

    这期先将到这里,下一期将以一个案例讲解软件编程读写逻辑”,编写分享不易,谢谢大家的喜欢,请点个爱心关注,加速更新分享,下期见。

相关学习资料