模拟I2C协议
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模拟I2C协议
在现代电子系统中,有为数众多的IC需要相互之间以及与外界的通信。为了简化电路的设计,Philips公司开发了一种用于内部IC控制的简单的双向两线串行总线I2C(Intel-Integrated Circuit bus)。1998年当推出I2C总线协议2.0版本时,I2C协议实际上已经成为一个国际标准。
在进行FPGA设计时,经常需要和外围提供I2C接口的芯片通信。例如低功耗的CMOS实时时钟/日历芯片PCF8563、LCD驱动芯片PCF8574、键盘/LED 驱动器ZLG7290等都提供I2C接口。因此在FPGA中模拟I2C接口已成为FPGA 开发必要的步骤。
本章将详细讲解在FPGA芯片中使用VHD/Verilog HDL模拟I2C协议,以及编写TestBench仿真和测试程序的方法。
4.1 I2C总线解析
下面先对I2C协议中有关数据格式和时序的内容进行介绍,这里没有涉及的地方请参考THE I2C-SPECIFICATION VERSION2.1 JANUARY 2000.
4.1.1 I2C总线概述
I2C协议作为一个串行总线标准尽管没有并行总线的数据吞吐能力,但是它的以下特点使其有着广泛的应用。
●只需要两条总线——串行数据线SDA和串行时钟线SCL;
●每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主/
从节点关系软件设定地址,主节点可以发送数据或接收数据;
●是真正的多主总线,当两个或更多主节点同时初始化数据传输时,可
以通过冲突检测和仲裁防止数据被破坏;
●串行的8位双向数据传输位速率在标准模式下可达100kbit/s,快速模
式下可达400kbit/s,高速模式下可达3.4Mbit/s;
●片上的滤波器可以滤去总线数据线上的毛刺波,保证数据完整;
●连接到相同总线的IC数量只受到总线的最大电容(400pF)限制。
总线不仅仅是互连的线,还包含系统通信的所有格式和过程。I2C总线结构上的特点保证了其应用时的简洁,另外其完备的协议避免了所有混乱、数据丢失和妨碍信息的可能性。
4.1.2 I2C协议的基本概念
I2C总线支持任何IC生产过程(NMOS、CMOS和双极性)。串行数据线SDA 和串行时钟线SCL在连接到总线的器件间传递信息。每个器件都有一个唯一的地址作为识别的标志(无论是微控制器、LCD驱动器存储器还是键盘接口),并且都可以发送数据和接收数据。很明显LCD驱动器只需要接收数据,而存储器需要接收和发送数据。图4-1所示的是一个高性能集成电视的例子。
图4-1 高性能集成电视
从图4-1可以看到,应用I2C总线是非常方便的。用通俗的话讲I2C总线的硬件设计工作就是连接SDA和SCL两条线,依靠I2C协议完成软件工作。在I2C
协议中应理解如下的概念。
1.主/从节点
主节点负责初始化总线的数据传输,并产生允许传输的时钟信号。此时任何被寻址的器件都被认为是从节点。当有多个主节点在总线上传输数据时,每个主节点产生自己的时钟信号。挂接到总线上的所有外围器件、外设接口都是总线上的节点。
2.总线上节点的寻址方式
在任何时刻总线上只有一个主控器件(主节点)实现总线的控制操作,对总线上的其他节点寻址,可分时实现点-点的数据传送。因此总线上每个节点都有一个固定的节点地址。
I2C总线上主节点的地址由软件给定,此地址存放在I2C总线的地址寄存器中。I2C总线上所有的外围器件都有规范的器件地址。器件地址由7位数字组成,它和1位方向位构成了I2C总线器件的寻址字节SLA(Slave address)。器件地址是I2C总线外围接口器件固有的地址编码,器件出厂时就已给定。数据方向位规定了总线上主节点对从节点的数据传送方向。
4.1.3 I2C协议的时序要求
1.总线上数据传递时序
I2C总线上数据传递时序如图4-2所示,具体步骤如下。
●首先主节点器件发送一个起始信号。
●接下来主节点器件发送从节点地址和读写方式,一共8位。其中从节点
地址7位,读写方式1位。
●与传输地址一致的从节点器件应答(即ACK)。
●开始数据传输,传输数据数量不限。每个字节(八位)后面跟接收数据
方的应答位。例如主节点器件读取从节点数据,从节点发送数据,主节
点应答;主节点器件写数据到从节点,主节点发送数据,从节点应答。
●数据传输结束,主节点器件发送一个终止信号结束整个过程。
采用I2C总线后对传送的字节数没有限制,只要求每传送一个字节后对方回应一个应答位。在发送时首先发送的是数据的最高位(MSB,Most Singnificant Bit)。每次传送开始有起始信号,结束时有停止信号。在总线传送完一个字节后,
可以通过对时钟线(SCL)的控制使传送暂停。例如当某个外围器件接收N个字节数据后需要一段处理时间以使继续接收以后的字节数据,这时可在应答信号后使SCL变为低电平控制总线暂停。如果主节点要求总线暂停也可使时钟线保持低电平控制总线暂停。
2.总线上的时序信号
I2C总线为同步传输总线,总线信号完全与时钟同步。I2C总线上与数据传送有关的信号有起始信号S、终止信号P、应答信号A以及位传送信号。下面将对这些信号一一介绍。
(1)起始信号
起始信号(Start Condition)如图4-3所示。当时钟线SCL为高电平时,数据线SDA从高电平向低电平变化将形成起始信号,启动I2C总线。
(2)终止信号
终止信号(Stop Condition)如图4-3所示。当时钟线SCL为高电平时,数据线SDA从低电平向高电平变化将形成终止信号,停止I2C总线。
(3)应答信号
如图4-3所中ACK第9个时钟脉冲对应应答位,相应数据线上低电平时为应答信号,高电平时为非应答信号。
(4)位传送信号
在I2C总线启动后或应答信号后的第1~8个时钟脉冲对应于一个字节的8位数据传送。脉冲高电平期间,数据串行传送;低电平期间为数据准备,允许总线上数据电平变换。
4.2 模拟I2C接口程序的基本框架