I2C通讯 |
[ 2007-4-28 4:40:00 | By: CANopen ]
|
二线制总线,Philips推出的一种串行总线方式,通过SDA(串行数据线)及SCL(串行时钟线)构成I2C总线在IC器件之间通讯,通过软件寻址识别每个器件而不需要片选线;挂接在I2C总线上的每个I2C器件都有唯一的设备地址,设备内的端口寻址不在I2C通讯协议范围内,具体由每个I2C设备规约。I2C标准波特率为100Kbit/s,最高传输速率可达400Kbit/s。 电气连接:I2C总线接口均为开漏或开集电极输出,因此需要为总线增加上拉电阻。 总线时序:一次数据传输,通过起始和结束信号识别。字节数据高位先发送,发送起始信号之后的第一字节具有特别的意义,前七位为从器件地址,后一位为读写方向位(1:R;0:W)。数据传送过程中,每传送一个字节,都必须有应答信号(A),主器件在接受数据时,若要结束通讯须在停止位之前发送非应答信号(非A)。
1.I2C总线的基本结构 2.双向传输的接口特性 3.I2C总线上的时钟信号 4.数据的传送 5.总线竞争的仲裁
6. I2C总线接口器件
目前在视频处理、移动通信等领域采用I2C总线接口器件已经比较普遍。另外,通用的I2C总线接口器件,如带I2C总线的单片机、RAM、ROM、A/D、D/A、LCD驱动器等器件,也越来越多地应用于计算机及自动控制系统中。
【转:I2C总线忽悠记】:
一般串行数据通讯都有时钟和数据之分,有异步和同步之别. 有单线,双线和三线等.
I2C肯定是2线的(不算地线).
I2C协议确实很科学,比3/4线的SPI要好,当然线多通讯速率相对就快了.
I2C的原则是:
在SCL=1(高电平)时,SDA千万别忽悠!!!
否则,SDA下跳则"判罚"为"起始信号S",SDA上跳则"判罚"为"停止信号P".
在SCL=0(低电平)时,SDA随便忽悠!!!(可别忽悠过火到SCL跳高)
每个字节后应该由对方回送一个应答信号ACK做为对方在线的标志.
非应答信号一般在所有字节的最后一个字节后.一般要由双方协议签定.
SCL必须由主机发送,否则天下大乱.
首字节是"片选信号",即7位从机地址加1位方向(读写)控制.
从机收到(听到)自己的地址才能发送应答信号(必须应答!!!)表示自己在线.
其他地址的从机不允许忽悠!!!(当然群呼可以忽悠但只能听不许说话)
读写是站在主机的立场上定义的.
"读"是主机接收从机数据,"写"是主机发送数据给从机.
重复位主要用于主机从发送模式到接收模式的转换"信号",由于只有2线,
所以收发转换肯定要比SPI复杂,因为SPI可用不同的边沿来收发数据,而I2C不行.
在硬件I2C模块,特别是MCU/ARM/DSP等每个阶段都会得到一个准确的状态码,
根据这个状态码可以很容易知道现在在什么状态和什么出错信息.
7位I2C总线可以挂接127个不同地址的I2C设备,0号"设备"作为群呼地址.
10位I2C总线可以挂接更多的10位I2C设备.
总之,只要掌握I2C的忽悠记,一般很容易掌控...
虽然在大的方面SCL速率由主机控制,但也很难匹配所有速率的从机. 因为从机必须在每个不同的状态阶段做出不同的处理,故从机为了能 在此阶段不让主机进入下个状态阶段,采用拉低SCL(线与)来迫使主机 停留在此阶段等待从机处理结束,等从机结束后,主机才能做作SCL. 因为此时从机才释放SCL总线!!!
所谓"分离系统",即从机可脱机运行,在需要时在上线联机.
而且多从机可以同地址而主机可采用一些特殊手段进行动态识别, 然后分配给各从机一个虚拟地址,这样与不同地址的多从机操作一样简单.
这里的难度就是多从机同时上线的地址识别问题...
注意这里有"..."了!!! |