嵌入式开发之 IIC通信理论
goJhou 发布于2018-01 浏览:3120 回复:12
0
收藏

IIC(Inter——Integrated Circuit)是由飞利浦(Philips)公司开发的两线式串行总线,一根数据线SDA、一根时钟线SCL,具有接线少,控制方式简单,通信速率高等优点。

IIC又称为 I^2C (I方C)

SDA是一根双向数据线,另一根时钟线SCL。所有接到I2C总线总线上设备的串行数据都接到总线的SDA线上,然后各设备的时钟线SCL接到总线的SCL。

总线的SCL和SDA端口输出为漏极开路,因此使用时必须连接上拉电阻。上拉电阻的大小与电源电压,传输速率等有关系。

串行的8位双向数据传输位速率:

  • 标准模式达100kbit/s,采用10K欧姆上拉电阻。
  • 快速模式达400kbit/s,采用2K欧姆上拉电阻。
  • 高速模式达3.4Mbit/s,高速模式下不执行仲裁和时间同步

以加速位处理能力,同时高速模式主机器件有一个SDA H信号的开漏输出缓冲器和一个在SCL H输出的开漏极下拉和电流源上拉电路。这个电流源电路缩短了SCL H信号的上升时间,在Hs模式的任何时候,只有一个主机的电流源有效。


I2C总线上的外围扩展器件为电压型负载的CMOS器件,因此总线上的器件数量不是由电流负载能力决定,而是由电容负载能力决定。通常I2C总线的负载能力是400PF。同时由于外围器件地址唯一,所以外围器件的数量还受器件地址空间的限制。

 

器件有固有的地址编码,出厂给定无法更改。引脚地址由I2C总线外围设备决定,根据其在电路中接正极,接地或悬空的不同,形成不同的地址代码。引脚地址决定了同一种器件可接入总线的最大数目。

 

R/W^- 是方向位,当它是0时表示主器件向从器件发送数据。为1时表示主器件读取从器件数据。

  1. 启动I2C-当scl高电平时,向SDA上送出一个由高到低的电平变化,即启动I2C总线
  2. 应答-其时钟脉冲由主机产生。发送设备在应答时钟高电平时释放SDA线,转由接收器控制。接收设备在应答时钟高电平时必须拉低SDA线,使之成为有效的应答信号。接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,则判断受控单元出现故障。
  3. 停止I2C-当SCL高电平时,向SDA送出一个由低到高的电平变化,停止I2C总线

 

收藏
点赞
0
个赞
共12条回复 最后由用户已被禁言回复于2022-04
#13qqqw151回复于2018-12
#12 goJhou回复
不做,我属于瞎j8玩的那种

哈哈,我也是,很高兴认识你

0
#12goJhou回复于2018-12
#11 qqqw151回复
楼主做嵌入式开发吗

不做,我属于瞎j8玩的那种

0
#11qqqw151回复于2018-12

楼主做嵌入式开发吗

0
#10goJhou回复于2018-10
#9 liguanghui2588回复
裸机开发中IIC用的非常多的

正常,本身就是个很好的总线协议,只用了2根线。用的多说明优秀

0
#9liguanghui2588回复于2018-10
#8 goJhou回复
本篇就是一篇I2C的通信理论扫盲。底层开发肯定会碰到

裸机开发中IIC用的非常多的

0
#8goJhou回复于2018-10
#7 liguanghui2588回复
其实嵌入式开发领域太大了,单片机也可以,ARM也可以,软件这块,linux 这块较多
展开

本篇就是一篇I2C的通信理论扫盲。底层开发肯定会碰到

0
#7liguanghui2588回复于2018-10
#6 goJhou回复
是的呢,说的就是嵌入式开发

其实嵌入式开发领域太大了,单片机也可以,ARM也可以,软件这块,linux 这块较多

0
#6goJhou回复于2018-10
#5 liguanghui2588回复
这IIC通讯主要是硬件方面,软件方面不多

是的呢,说的就是嵌入式开发

0
#5liguanghui2588回复于2018-10

这IIC通讯主要是硬件方面,软件方面不多

0
#4独孤焰坤回复于2018-01
#3 goJhou回复
你日常灌水~

日常膜拜大佬,加灌水~

0
#3goJhou回复于2018-01
#2 独孤焰坤回复
每日日常膜拜大佬~

你日常灌水~

0
#2独孤焰坤回复于2018-01

每日日常膜拜大佬~

0
TOP
切换版块