基于FPGA的IIC程序设计

        IIC通信协议在实际的工程项目中应用很多,作为一名FPGA工程师是必须要掌握IIC,下面就开始学习吧,let's go!

       第一,E2PROM简介

      作为初学者会购买一块FPGA开发板进行学习,开发板上一般都有E2PROM这个器件设备,该设备就是通过IIC协议进行通信的。

        EEPROM (E2PROM,Electrically Erasable Progammable Read Only Memory)即电可擦除可编程只读存储器,是一种常用的非易失性存储器。

      我自己手里的开发板搭载的E2PROM型号AT24C64的,芯片管脚如下图所示。

基于FPGA的IIC程序设计_第1张图片

第二,IIC通信协议简介

IIC (I2C,Inter-Integrated Circuit)即集成电路总线,是一种两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。多用于主机和从机在数据量不大且传输距离短的场合下的主从通信。

I2C总线由数据线SDA时钟线SCL构成通信线路,既可用于发送数据,也可接收数据。

I2C的通信速度:

标准模式:100Kbit/s   

快速模式:400kbit/s  

高速模式:3.4Mbit/s

I2C的通信方式:

IIC是半双工通信方式。

I2C的写时序图

基于FPGA的IIC程序设计_第2张图片

从上图可以知道,完成一条写操作,包含 START、DEVICE_ADDRESS(设备地址写)、FIRST_word_ADDRESS(通常叫做寄存器高地址)、 SECOND_WORS_ADDRESS(通常叫做寄存器低地址)、DATA、STOP组成。

                                                         I2C的写时序图

基于FPGA的IIC程序设计_第3张图片 

 从上图可以知道,完成一条读操作,包含 START、DEVICE_ADDRESS(设备地址写)、FIRST_word_ADDRESS(通常叫做寄存器高地址)、 SECOND_WORS_ADDRESS(通常叫做寄存器低地址)、START、DEVICE_ADDRESS(设备地址读)、RD_DATA、STOP组成。

 

从读写时序图中,我们可以发现一个规律,每次发送8bit数据中间都会跟着发送1bit的ACK或者NoACK,我们可以总结一个结论就是IIC是按照9bit为一个整体进行发送。 

START和STOP的实现如下图所示。

基于FPGA的IIC程序设计_第4张图片 

 START:当SCL信号为高电电平时,SDA数据线由高拉低,代表START;

 STOP:当SCL信号为高电平时,SDA数据线由低拉高,代表STOP。

明白IIC的重要知识后,下面就开始设计程序,该程序可以通过串口下发指令实时的对E2PROM进行读写操作,并在串口助手上可以显示结果。

基于FPGA的IIC程序设计_第5张图片 

IIC_IP的程序采用三段式状态机方式实现,状态转移图如下所示。

基于FPGA的IIC程序设计_第6张图片 

基于FPGA的IIC程序设计_第7张图片 

 

 

  • 1. i2c_ip程序接口

名称

方向

位宽

说明

clk

I

1

工作时钟25M

reset

I

1

复位信号(active high)

scl

O

1

I2c的时钟信号

sda

IO

1

I2c的数据信号

i2c_cmd_done

O

1

I2c传输完成信号

i2c_addr

I

16

I2c寄存器地址

i2c_wr_data

I

8

I2c写数据

i2x_rd_valid_en

O

1

I2c读取数据的有效信号

i2c_bit_ctrl

I

1

I2c选择16bit or 8bit 控制信号

i2c_rw_ctrl

I

1

I2c读写控制信号(1:read  0:write)

i2c_cmd_en

O

1

I2c命令使能信号

 I2C的写时序仿真结果

 

 I2C的读时序仿真结果

 

 

 

你可能感兴趣的:(FPGA学习,fpga开发)