I2C 总线时序详解I2C总线位传输由于连接到I2C总线的器件有不同种类的工艺(CMOS NMOS、双极性), 逻辑0 (低)和逻辑1 (高)的电平不是固定的,它由电源 VCC的相关电平 决定,每传输一个数据位就产生一个时钟脉冲数据的有效性SDA线上的数据必须在时钟的 高电平周期保持稳定数据线的高或低 电平状态只 有在SCL线的时钟信号是低电平时才能改变起始和停止条件SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示起 始条件;SCL线是高电平时,SDA线由低电平向高电平切换,这个情况表示停 止条件起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的 状态起始和停止条件,在停止条件的某段时间后总线被认为再次处于空闲状态如果产生重复起始条件而不产生停止条件,总线会一直处于忙的状态, 此时的起始条件(S)和重复起始条件(Sr)在功能上是一样的I2C总线数据传输字节格式发送到SDA线上的每个字节必须为8位,每次传输可以发送的字节数 量不受限制每个字节后必须跟一个响应位首先传输的是数据的最高位(MSB ),如果从机要完成一些其他功能后(例如一个内部中断服务程序) 才能接收或发送下一个完整的数据字节,可以使时钟线 SCL保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线 SCL后数据传输继续。
应答响应数据传输必须带响应,相关的响应时钟脉冲由主机产生在响应的时 钟脉冲期间发送器释放SDA线(高)在响应的时钟脉冲期间,接收器必须将SDA线拉低,使它在这个时钟 脉冲的高电平期间保持稳定的低电平通常被寻址的接收器在接收到的每个字节后, 除了用CBUS地址开头的SDA-X.X X \ /■^>OCi z1- l/1 r1MSBAcknowlddgomQ nlAckrioiMledgo men!1 1111ISignal From ReceiverSignal From Receiver1 1i JSCLk/\/^ 1 1START 1 °7 8 &1 2€ 91 _iSTOPCondilicn {S)R/W AGKACK CGhdition (P)I2C总线数据传输和应答据,必须产生一个响应当从机不能响应从机地址时(例如它正在执行一 些实时函数不能接收或发送),从机必须使数据线保持高电平,主机然后 产生一个停止条件终止传输或者产生重复起始条件开始新的传输如果从机接收器响应了从机地址,但是在传输了一段时间后不能接收 更多数据字节,主机必须再一次终止传输这个情况用从机在第一个字节 后没有产生响应来表示。
从机使数据线保持高电平,主机产生一个停止或 重复起始条件如果传输中有主机接收器,它必须通过在从机不产生时钟的最后 一个字节不产生一个响应,向从机发送器通知数据结束从机发送器必须 释放数据线,允许主机产生一个停止或重复起始条件寻址方式7位寻址第一个字节的头7位组成了从机地址,最低位(LSB)是第8位,它 决定了传输的—71i< 8 *11 r—a ►11sSlave Address| FT, WAGKDalaACKDataACKP1r—孑—11 11 [*-7 ►11—3 11SSlave AddressrWAGK Data ACKSSlaw AdcfressR;WACKDataAGKP 1 - 1——Arw——►k 1 Jh An/ Number ►!Number普通的和带重复开始条件的 7位地址格式 方向第一个字节的最低位是“0”,表示主机会 写信息到被选中的从机; “1”表示主机会向从机 读信息,当发送了一个地址后,系统中的每个器件 都在起始条件后将头7位与它自己的地址比较,如果一样,器件会判定它 被主机寻址,至于是从机接收器还是从机发送器,都由 R/W位决定10位寻址10位寻址和7位寻址兼容,而且可以结合使用。
10位寻址采用了保留的1111XXX作为起始条件(S),或重复起始条 件(Sr )的后第一个字节的头7位10位寻址不会影响已有的7位寻址,有7位和10位地址的器件可以 连接17 ►I1-1 1*-j1SSlave Address 1 st byteR.-WACKSlave Addre&s 2ndbyteLACKDataACKP| 1 1 1 1 0 X X II2C总线10位地址格式到相同的I2C总线它们都能用于标准模式(F/S )和高速模式(Hs )系统保留地址位1111XXX有8个组合,但是只有4个组合11110XX用于 10位寻址,剩下的4个组合11111XX保留给后续增强的I2C总线10位从机地址是由在起始条件(S)或重复起始条件(Sr )后的头 两个字节组成第一个字节的头7位是11110XX的组合,其中最后两位(XX)是10位 地址的两个最高位(MSB )第一个字节的第8位是R/W位,决定了传输的方向,第一个字节的最 低位是“0”表示主机将写信息到选中的从机,“1 ”表示主机将向从机读 信息如果R/W位是“0”,则第二个字节是10位从机地址剩下的8位; 如果R/W位是“1”则下一个字节是从机发送给主机的数据。
编辑本段快速和高速模式快速模式快速模式器件可以在400kbi t/s下接收和发送最小要求是:它们可 以和400kbit/s传输同步,可以延长SCL信号的低电平周期来减慢传输 快速模式器件都向下兼容,可以和标准模式器件在 0~100kbit/s的I2C总线系统通讯但是,由于标准模式器件不向上兼容,所以不能在快速模式 I2C总线系统中工作快速模式I2C总线规范与标准模式相比有以下额外 的特征:1、 最大位速率增加到400kbit/s ;2、 调整了串行数据(SDA)和串行时钟(SCL )信号的时序;3、 快速模式器件的输入有抑制毛刺的功能,SDA和SCL输入有施密特 触发器;4、 快速模式器件的输出缓冲器对SDA和SCL信号的下降沿有斜率控 制功能;5、 如果快速模式器件的电源电压被关断,SDA和SCL的I/O管脚必 须悬空,不能阻塞总线;6、 连接到总线的外部上拉器件必须调整以适应快速模式 I2C总线更短 的最大允许上升时间对于负载最大是 200pF的总线,每条总线的上拉器 件可以是一个电阻,对于负载在 200pF~400pF之间的总线,上拉器件可以 是一个电流源(最大值3mA )或者是一个开关电阻电路。
高速模式高速模式(Hs模式)器件对I2C总线的传输速度有具大的突破Hs模 式器件可以在高达3.4Mbit/s的位速率下传输信息,而且保持完全向下兼 容快速模式或标准模式(F/S模式)器件,它们可以在一个速度混合的总 线系统中双向通讯Hs模式传输除了不执行仲裁和时钟同步外,与F/S模式系统有相同的 串行总线协议和数据格式高速模式下I2C总线规范如下:1、 Hs模式主机器件有一个SDAH信号的开漏输出缓冲器和一个在SCLH 输出的开漏极下拉和电流源上拉电路这个电流源电路缩短了 SCLH信号的 上升时间,任何时侯在Hs模式,只有一个主机的电流源有效;2、 在多主机系统的Hs模式中,不执行仲裁和时钟同步,以加速位处 理能力仲裁过程一般在前面用F/S模式传输主机码后结束;3、 Hs模式主机器件以高电平和低电平是1:2的比率产生一个串行时 钟信号解除了建立和保持时间的时序要求;4、 可以选择Hs模式器件有内建的电桥在Hs模式传输中,Hs模式 器件的高速数据(SDAH)和高速串行时钟(SCLH )线通过这个电桥与F/S模 式器件的SDA和SCL线分隔开来减轻了 SDAH和SCLH线的电容负载, 使上升和下降时间更快;5、 Hs模式从机器件与F/S从机器件的唯一差别是它们工作的速度。
Hs模式从机在SCLH和SDAH输出有开漏输出的缓冲器SCLH管脚可选的 下拉晶体管可以用于拉长SCLH信号的低电平,但只允许在Hs模式传输的 响应位后进行;6、 Hs模式器件的输出可以抑制毛刺,而且 SDAH和SCLH输出有一个 施密特触发器;7、Hs模式器件的输出缓冲器对SDAH和SCLH信号的下降沿有斜率控制功能 [1]1/************************************************************函数名:读一个字节数据**入口参数:无**注意 :**说明 :***********************************************************/ uchar I2cReadByte( void ){uchar rbyte = 0;uchar i = 0;for(i = 0; i < 8; i++ ) {rbyte = rbyte << 1; //非常注意...此语句不放在循环体内最后•SDA = 1; //SDA 为输入SCL = 1; N0P_5;if( SDA == 1 ) rbyte = rbyte | 0x01;SCL = 0;}return rbyte;}2从地址读数据第 249 行为什么还要加一个 I2Cstart()?3 为什么循环变量定义为 uchar 类型?4 写字节子程序void I2c_Write_n( uchar DeviceAddress, uchar ByteAddress, uchar *Wdata, uchar n)第 273 行,为什么不和读子程序(第 250 行)一样,将最后一位变成零呢?5 程序 454 行——456 行,十位之后就加小数点,好像不对!!6 uchar I2cReadDataFromAddr( uchar DeviceAddress, uint ByteAddress ) 程序第。