全文见附件。
游客,如果您要查看本帖隐藏内容请回复
一、 分析源代码
学习 I2C, 首先我们要知道 I2C 是一种串行总线协议。 目前几种常用的串行总线有 UART 、 SPI 和 I2C ,先来简单了解一下这三种串行总线。
UART 的总线数只有两条,分别是TX(发送)和RX(接收),没有时钟信号,所以UART 需要固定的波特率,也就是两位数据的间隔要相等。而SPI 的四条总线分别为SCLK(时钟)、MISO(主器件数据输入,从器件数据输出)、MOSI(主器件数据输出,从器件数据输入)、SS(从器件使能信号),SPI 总线由主机提供时钟,为同步通信,并且SPI 总线有两条总线进行数据传输,可以同时进行收发数据,为双工模式。SPI 有3 线、4 线两种模式,3 线模式一般代表没有SS 信号,具体情况还要视器件手册而定。I2C 有两条总线SCL(时钟)和SDA(数据),I2C 用的线更少,因为I2C 需要有双向IO 的支持,而且使用上拉电阻,抗干扰能力没有其他两种强,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。
具体到FPGA 设计这一环节,我们需要搞清这三种总线上的信号是怎么走的,UART 很简单,使用发送数据线TXD 和接收数据线RXD 来传送数据,接收和发送可以单独进行也可以同时进行。它传送数据的格式有严格的规定,每个数据以相同的位串形式传送,每个串行数据由起始位,数据位,奇偶校验位和停止位组成。从起始位到停止位为一个字符的完整通信格式。SPI 情况就相对多一些,根据时钟极性(CPOL)和时钟相位(CPHA)两个参数的不同有四种基本情况,传送数据的格式与UART 差不多。而I2C 总线的协议要比UART 和SPI 复杂,能掌握I2C,也就能掌握UART 和SPI。言归正传,回到我们的I2C 设计实例。
第一步首先了解,这个I2C 实例的功能。
这个实例实现了通过I2C 总线对EEPROM 写入数据,再将写入EEPROM 中的数据读取出来的一个过程。实例的重点在于对I2C 总线协议时序的掌握,即用I2C 总线要求的格式将数据写入到EEPROM 中,再读取出来。
什么是EEPROM?EEPROM (Electrically Erasable Programmable Read‐Only Memory),电可擦可编程只读存储器,一种掉电后数据不丢失的存储芯片。EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。所以,EEPROM 是可以写入数据也可以读取数据的,并且EEPROM 掉电数据并不会丢失,在后面将程序烧写到开发板的过程中可以验证这一点。
第二步,简单地了解一下这个实例的各个模块。.....
.....
第三步,了解 I2C 总线特征。.....
.....
第四步,理解各个模块的代码。.....
.....
.....全文见附件。