2.1 IIC协议的FPGA实现(一)IIC 总线规范简介

2020-06-30 10:20:16 浏览数 (1)

2.1 IIC协议的FPGA实现

2.1.1 IIC 总线规范简介

1) IIC 总线特性介绍

  在现代电子产品开发过程中,为了简化系统,提高系统的可靠性,缩短产品开发周期,增加硬件构成的灵活性,推出了一种高效、可靠、方便的 IIC串行总线。二线制的 IIC 串行总线使得各电路单元之间只需要简单的两线连接,总线接口都集成在器件中,可实现电路系统的模块化、标准化设计。在 IIC 总线上,各单元电路相互之间没有其它连线,常用的单元电路基本上与系统电路无关,极易形成自己的标准化、模块化设计。

2) IIC 标准模式总线规范

 IIC总线可通过串行数据(SDA)和串行时钟(SCL)线与总线上的任何一个器件连接,每 个器件都有一个唯一的地址,都可以作为一个发送器或接收器。各器件在执行数据传输时也都可被看做是一个主机或从机。

  • 发送器 本次传送屮发送数据(不包括地址和命令)到总线的器件;
  • 接收器 本次传送中从总线接收数据(不包括地址和命令)的器件;
  • 主机 初始化发送、产生时钟信号和终止发送的器件,它可以是发送器或接收器, 主机通常是微控制器;
  • 从机 被主机寻址的器件,它可以是发送器或接收器。

  IIC总线是一个多主机的总线,可以连接多个能控制总线的器件到总线。当两个以上能控制总线的器件同时发生传输时,只能有一个器件能真正控制总线而成为主机,并使报文不被破坏,这个过程叫做仲裁。与此同时,能使多个能控制总线的器件产生同步的时钟信号。   SDA 和 SCL 都是双向线路,连接到总线的器件的输出级必须是漏极开路或集电极开路,该器件通过一个电流源或上拉电阻连接到正的电源电压,实现线与功能。当总线空闲时,这两条线路都是高电平。IIC总线上数据的传输速率在标准模式下可达100kb/s,在快速模式下可达400kb/s,在高速模式下可达3.4Mb/s。连接到总线的接口数量由总线电容是400pF的限制决定。

3) IIC总线电路设计要点

            图 2 1 I2C总线电路设计要点

4) 位传输

  IIC 总线上每传输一个数据位必须产生一个时钟脉冲。   (1) 数据的有效性。SDA 线上的数据必须在时钟线 SCL 的高电平周期保持稳定, 数据线的电平状态只有在 SCL 线的时钟信号是低电平时才能改变,如图 2.11 所示。在标准模式下,高低电平宽度必须大于等于 4.7us。

              图2 2 数据有效性

              图2 3 IIC总线控制的位传输   (2) 起始和停止条件。在 IIC 总线屮,唯一违反上述数据有效性的是起始(S)和停止§条件,如图2 4 所示。   起始条件(重复起始条件):在 SCL 线是高电平时,SDA 线从高电平向低电平切换。   停止条件:在 SCL 线是高电平时,SDA 线由低电平向高电平切换。

                          图2 4 起始位和停止条件   起始和停止条件一般由主机产生。起始条件是作为一次传送的开始,在起始条件后,总线被认为处于忙的状态。停止条件是作为一次传送的结束,在停止条件的某段时间后,总线被认为再次处于空闲状态。重复起始条件既作为上次传送的结束,也作为下次传送的开始。

5) 数据传输

  (1) 字节格式。发送到 SDA 线上的每个字节必须为 8 位。每次传输可以发送的字节数量不受限制,每个字节后必须跟一个应答位。首先传输的是数据的最高位(MSB), 如图2 5所示。

                          图2 5 IIC总线的数据传输    (2) 应答。相应的应答时钟脉冲由从机产生。在应答的时钟脉冲期间,发送器释放 SDA线(高),与此同时,接收器必须将 SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平,如图2 5屮时钟信号SCL 的第 9 位。   一般说来,被寻址匹配的从机或可继续接收下一字节的接收器将产生一个应答。若作为发送器的主机在发送完一个字节后没有收到应答位(或收到一个非应答位),或作为接收器的主机没有发送应答位(或发送一个非应答位),那么,主机必须产生一个停止条件或重复起始条件来结束木次传输。若从机(接收器)不能接收更多的数据字节,将不产生这个应答位 :主机(接收器)在接收完最后一个字节后不产生应答, 通知从机(发送器)数据结束。

6) 仲裁与时钟发生

  (1) 同步。时钟同步是通过各个能产生时钟的器件“线与” 连接到 SCL 线上来实现的,各器件可能都有自己独立的时钟 各个时钟信号的频率、周期、相位和占空比可能都不相同,由于 “线与” 的结果,在 SCL 线上产生的实际时钟的低电平宽度由低电平持续时间最长的器件决定,他高电平宽度由高电平持续时间最短的器件决定。   (2) 仲裁。当总线空闲时,多个主机同时启动传输,可能检测到不止一个主机满足起始条件,而同时获得主机权,这样就要进行仲裁。当SCL 线是高电平时,仲裁在 SDA 线发生,当其他主机发送低电平时,发送高电平的主机将丢失仲裁,因为总线上的电平与它自己的电平不同。 仲裁可以持续多位,它的第一个阶段是比较地址位,如果每个主机都尝试寻址相同的器件,仲裁会继续比较数据位,或者比较响应位。因为 IIC 总线的地址和数据信息由赢得仲裁的主机决定,所以在仲裁过程中不会丢失信息。   (3) 用时钟同步机制作伪握手。器件可以快速接收数据字节,但可能需要更多时间保存接收到的字节或准备一个要发送的字节。此时,这个器件可以使 SCL 线保持低电平, 迫使与之交换数据的器件进入等待状态,直到准备好下一字节的发送或接收 。

7) 传输协议

  (1) 寻址字节。主机产生起始条件后,发送的第一个字节为寻址字节。该字节的头 7位(高7 位)为从机地址,最低位(LSB)决定了报文的方向,“0”表示主机写信息到从机, “1”表示主机读从机中的信息,如图 2.14 所示。当发送了一个地址后,系统中的每个器件都将头 7 位与它自已的地址比较。如果一样,器件会应答主机的寻址,至于是从机-接收器还是从机-发送器都由R / W 位决定。

                  图2 6 起始条件后的笫一个字节   从机地址由一个固定的部分和一个可编程的部分构成。例如,某些器件有 4 个固定的位(高4位)和 3 个可编程的地址位(低 3 位),那么同一总线上共可以连接 8 个相同的器件。IIC 总线委员会协调 IIC 地址的分配,保留了 2 组 8 位地址(0000XXX 和 1111XXX), 这 2组地址的用途可查阅有关资料。   (2) 传输格式。主机产生起始条件后,发送一个寻址字节,收到应答跟着就是数椐传输,数据传输一般由主机产生的停止位来终止。但是,如果主机仍希望在总线上通信,它可以产生重复起始条件(Sr)且寻址另一个从机,而不是首先产一个停止条件。在这种传输屮,可能有不同的读/写格式结合。   数据的传输格式有以下三种 :   ① 主机-发送器发送数据到从机-接收器,见图 2.15, 寻址字节的 “R/W” 位为 0,数据传输的方向不改变。   ② 寻址字节后,主机-接收器立即读从机-发送器中的数据,见图 2.16,寻址字节的R/W 位为1。在第一次从机产生响应时, 主机-发送器变成主机-接收器,从机-接收器变成从机-发送器。之后,数据由从机发送,主机接收,每个应答由主机产生,时钟信号 CLK仍由主机产生。若主机要终止本次传输,则发送一个非应答信号( /A /A),接着主机产生停止条件。

                       图2 7 主机-发送器发送数据

                    图2 8 寻址字节后,主机-接收器立即读数据   ③ 复合格式,见图 2.17。传输改变方向的时候,起始条件和从机地址都会被重复, 但 位取反。如果主机-接收器发送一个重复起始条件,它之前应该要发送一个非应答信号( /A )。

                             图2 9 复合格式   默认下,设备地址为八位宽,因此设备地址也称为设备字节。设备地址的高四位,即[7…4]记录硬件 ID,接续三位即 [3…1] 则记录硬件地址,最后一位则是设备的访问方向。结果如表2 1所示:

  所谓硬件 ID 就是 IIC 设备的辨识 ID,硬件 ID 会随着厂商还有设备的种类而有所改变。开发板上的 IIC 设备是某厂商的 IIC 储存器,即 24LC04,硬件 ID 为 4’b1010。至于硬件地址就是 IIC 设备在总线上辨识地址,默认下为 3 位,即同类的 IIC 设备在同一条 IIC总线上仅允许占据 8 个而已。然而,开发板上的 24LC04 为 3’b000。最后的访问方向位则是主机用来通知从机,此刻的访问目的是读还是写。   总结来说,设备地址除了访问方向以外,前七位一般都是固定的,例如常见的开发板的 IIC 储存器 24LC04,设备地址就是 8’b1010_000_×。

                       图2 10 24LC04 的写操作(主机视角)   IIC 总线的时序,感觉上一组完成的操作宛如是一堆拼图。如图2 10所示,那是 24LC04的写操作,时序先填上为起始位,再来是设备地址,余下是应答位,随之是数据地址,然后又是应答位,接着是写如数据,再一次应答位,最后挂上结束位以示一次性的写操作已经完成。那么,写操作的经过如下所示: (一) 主机发送起始位; (二) 主机发送设备地址(写); (三) 等待从机应答; (四) 主机发送数据地址; (五) 等待从机应答; (六) 主机发送数据; (七) 等待从机应答; (八) 主机发送结束位。   稍微注意一下设备地址的最低位。由于此刻是写操作,所以设备地址的访问方向是“写”,所以访问方向位设置为 0。

                    图2 11 24LC04 的读操作(主机视角)   图2 11是 24LC04 的读时序,同样它也是由一堆“拼图”组合而成。相较写操作,读操作不仅多了许多“拼图”,而且途中也改变访问方向。那么,读操作的经过如下所示: (一) 主机发送起始位; (二) 主机发送设备地址(写); (三) 等待从机应答; (四) 主机发送数据地址; (五) 主机发送起始位; (六) 主机发送设备地址(读); (七) 等待从机应答; (八) 主机读取数据; (九) 从机没有应答(主机无视应答); (十) 主机发送结束位。   IIC总线上数据的传输速率在标准模式下可达100kb/s,在快速模式下可达400kb/s,在高速模式下可达3.4Mb/s。实验十六会以 400Khz 的速率作为标准。连接到总线的接口数量由总线电容是400pF的限制决定。在此,实验会以 400Khz 的速率作为标准。   在进行IIC时序分析时,必须要考虑芯片的时序,见下表:

                       图2 12 芯片 24LC04 的时序表   IIC 总线是一种串行传输协议,既有时钟信号 SCL,还有数据信号 SDA。Clock Frequency表示 SCL 信号的频率, Clock High Time 表示 SCL 信号保持高电平所需的最小时间,Clock Low Time 则表示 SCL 信号保持低电平所需的最小的时间。   至于 Rise Time 与 Fall Time 表示, SCL 信号还有 SDA 信号由高变低或者由低变高时所需的最小时间,即上山与下山时间。Hold Time 与 Setup Time 是用来评估数据是否成功打入寄存器的时序参数,算是典型中的典型。Setup Time 表示建立时间,即数据写入寄存器之前所需的稳定时间;反之, Hold Time 则是保持时间,即数据打入寄存器之后所需的稳定时间。只要两者得到满足,那么数据的寄存活动就得到确保。   Start 是 IIC 总线的起始位, Stop 是 IIC 总线的结束位, Data 是 IIC 总线的数据位,为了确保三者成功写入从机, Setup Time 与 Hold Time 必须得到满足。Ouput Valid FromClock 是关系数据位的时序参数,还有 Bus Free Time 是关系结束位的时序参数。此外, 为了简化时序,笔者将各种参数的实际时间转换为 50Mhz 量化以后的结果。将上表进行解读如下:

Clock Frequency,既是频率也是速率,在此是 400Khz。 Clock High Time,既 SCL 信号保持高电平所需的最小时间。 Clock Low Time,既 SCL 信号保持低电平所需的最小时间。 Rise Time,既信号由底变高所需最大的时间。 Fall Time,既信号又高变低所需最小的时间。 Start Hold Time,既起始位所需最小的保持时间。 Start Setup Time,既起始位所需最小的建立时间。 Data Input Hold Time,既数据位所需最小的保持时间。 Data Input Setup Time,既数据位所需最小的建立时间。 Stop Setup Time,既结束位所需的最小保持时间。 Ouput Valid From Clock,既数据位经时钟沿触发以后的有效时间。 Bus Free Time,既释放总线的最小时间。

0 人点赞