您的位置 首页 > 数码极客

i2c如何释放总线 I2C总线如何测试…

1I2C

I2C(Inter-Intergrated Circuit)指的是 IC之间的通信方式。它是一种总线式结构,使用Clock Line(SCL:Serial Clock)和Data Line(SDA:Serial Data)进行数据传输,不同于uart,它属于同步串行通信方式,且同一时间只能单方向通信(半双工)。数据通过时钟同步经过数据线进行传输。生成时钟信号并输出的设备便是Master, 时钟信号作为输入并接受数据的设备便是Slave。一般情况下,Master便是MicroController,Slave便是周边的设备,比如RTC, EEPROM, TOUCH等等。



SDA(串行数据) – Master和Slave发送和接收数据的线路。

SCL(串行时钟) – 传送时钟信号的线。


2I2C总线协议


I2C协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。起始和结束信号总是由主设备产生。

起始和结束信号产生条件:总线在空闲状态时,SCL和SDA都保持着高电平,当SCL为高电平而SDA由高到低的跳变,表示产生一个起始条件;当SCL为高而SDA由低到高的跳变,表示产生一个停止条件。

在起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他I2C器件无法访问总线;而在停止条件产生后,本次数据传输的主从设备将释放总线,总线再次处于空闲状态。起始和结束如图所示:



3I2C是如何工作的


使用I2C,数据以消息形式传输 。消息被分解 为数据帧。每条消息都有一个包含slave的二进制地址的地址帧,以及一个或多个包含正在发送的数据的数据帧。该消息还包括每个数据帧之间的开始和停止条件,读/写位和ACK / NACK位:


  • 在 将SCL线从高电平切换到低电平之前,master通过将SDA线从高电平切换到低电平来向每个连接的slave发送启动条件 :


  • master向每个slave发送要与之通信的slave的7位或10位地址,以及读/写位:

  • 每个slave将master发送的地址与其自己的地址进行比较。如果地址匹配,则slave通过将SDA线拉低一位返回一个ACK位。如果来自master的地址与slave自身的地址不匹配,则slave会将SDA线拉高。


  • 主机发送或接收数据帧:


  • 传输完每个数据帧后,接收设备将另一个ACK位返回给发送方,以确认已成功接收到该帧:


  • 为了停止数据传输,主机将SCL切换为高电平,然后再将SDA切换为高电平,从而向从机发送停止条件:


4UART优缺点


优点

  • 仅使用两根线
  • 支持多个master和多个slave
  • ACK / NACK位用于确认已成功传输每个帧
  • 硬件不如使用UART复杂


缺点

  • 数据传输速率比SPI慢
  • 数据帧的大小限制为8位
  • 实现比SPI更复杂的硬件

5参考


  • I2C 介绍及FPGA实现(RTL):


  • I2C标准:


责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“i2c如何释放总线,I2C总线如何测试,i2c为什么要释放总线”边界阅读