I2C总线(1)
来源:互联网 发布:林忆莲 再见悲哀 知乎 编辑:程序博客网 时间:2024/05/03 16:28
以下内容摘选自的维基百科页
I2C是一种多主机,主从式,单端,串行,符合封包交换协议的总线接口。通常被用来在低速短距离的设备当中进行通信。
速度与节点数量
一般情况下I2C的参考设计中有7位或者10位的地址空间。标准模式下,一般的I2C的速度大约是100kbit/s,而在低速模式下速度仅为10kbit/s。在最近版本的I2C总线协议当中I2C的挂载节点和传输速度都有很大的提高。(Fast mode下可以达到400kbit/s,Fast mode plus下可以达到1Mbit/s,在High speed模式下速度可以达到3.4Mbit/s。)不过在实际当中,传输的bits并非全部用来传输数据。因而显见这些理论速度是难以达到的。比如其中的协议当中还规定了起始的地址位和ACK/NACK bits(用于应答的bit)。
可挂载设备节点数量主要是取决于地址位的数量。但是为了保持总线速率(主要是频繁充放电的影响),总线挂载电容必须要小于400PF。总线地址和总线电容决定了I2C总线可以连接的设备数目。
协议与传输方式
之所以名为I2C协议,是因为在他所定义的协议当中只有两条开漏传输脚–SCL(Serial Clock Line)和SDA(Serial Data Line)。在一般的I2C器件当中,通常会留2~3个用户可定义的“地址线”。以TMP175温度传感器为例,其内部有A0,A1,A2三条地址选择线。通过连接A0,A1,A2到地,到高电平,或者浮空(任选一种设备Datasheet里面定义的连接方式),里面会有对应的一个地址线,这个地址就是挂在该总线的对应的一个从设备的地址。
现在有了地址和两个传输线,就可以开始我们的传输了。首先SDA会发射一个Start信号(正如其他文献所说SCL为高电平,SDA由高变低),随后转为在SCL低电平时候开始传输bit位,SDA首先开始传输一个7位的地址线和一个1位的读写方向线(1为读,0为写)。此时对应的从设备开始对比自己设定的从设备地址,若二者比对成功,从设备回复一个ACK信号(SDA拉低确认即,active low for acknowledged)。随后主从设备握手成功,开始数据传输,每次主机每次发送读写请求,后面从设备都会发送一个ACK信号。在传输即将完成的时候,主设备会发送一个Stop信号(SCL为高电平,SDA由低变高)。一段传输宣告结束。
消息协议
简单的传输总是很美好,但是事实上大多数的传输都不会都只连接一个从设备,也不可能只开启依次传输。那么这就意味着会存在着一种混合信息传输模式(Combined message),在每次由Start传输开启的传输之后会有一个Repeated Start传输模式,他会连续发送多个Start信号,这样从机就会知道,这之后传输的数据只是混合信息的一部分。此模式下有一个明显的特点就是每次传输(或许是在不同设备间的传输)并非是以Stop为前端的。
另外的一个问题就是,纯粹的I2C定义只是定义了消息的传输流程,并没有定义消息的具体形式。但是在实际应用当中,各种设备不可能完全支持各种协议。于是乎就存在了更为轻便的SMbus和PMbus协议。这一点将在下一节着重叙述。
- I2C总线(1)
- i2c总线(1)
- I2C总线之(1)----概述
- I2C 总线1
- i2c 总线协议 1
- I2C总线(转)
- I2C总线(2)
- i2c总线(2)
- i2c总线(3)
- i2c adapter、i2c总线控制器、I2C bus(帖子)
- I2C总线
- I2C总线
- I2C总线
- I2C总线
- i2c总线
- I2C总线
- I2C总线
- I2C总线
- ionic 学习笔记 一 :安装和配置
- monkey调试应用实战
- 彩色图像旋转180度 C++
- 《Java从小白到大牛精简版》之第2章 开发环境搭建
- 我们为什么需要DTO(数据传输对象)
- I2C总线(1)
- 计算 某一天据今天有多少天
- Hadoop 2 Metrics FileSink can not rotate file
- Codeforces Round #434 (Div.2)
- SpringBoot在Eclipse内能够运行,但是部署在Tomcat8上启动时会有一个logback的异常
- 机器学习练习题
- vs2013打开项目不兼容
- java基础——String存放的区域
- python实现的刷点击率代码