• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

I2C接口EEPROM(24LC04芯片)设计Verilog代码Quartus AX301开发板

09/30 11:01
432
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24111120295N34.docx

共1个文件

名称:I2C接口EEPROM(24LC04芯片)设计Verilog代码Quartus? AX301开发板

软件:Quartus

语言:Verilog

代码功能:

I2C?标准速率为?100kbit/s,快速模式?400kbit/s,支持多机通讯,?支持多主控模块,但同一时刻只允许有一个主控。由数据线?SDA?和时钟?SCL?构成串行总线;?每个电路和模块都有唯一的地址。

在这里以?AT24C04?为例说明?I2C?读写的基本操作和时序,I2C?设备的操作可分为写单个存储字?节,写多个存储字节,读单个存储字节和读多个存储字节。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在AX301开发板验证,AX301开发板如下,其他开发板可以修改管脚适配:

AX301开发板.png

1?实验简介

本实验通过使用开源软件?opencores?上的?I2C master?控制器去控制?I2C?接口的?EEPROM?读写,练习如何有效的使用开源代码提升开发效率。

2?实验原理

在开发板上,FPGA 芯片通过 I2C 总线连接 EEPROM 24LC04, I2C 的两根总线各上拉一个 4.7K 的电阻到?3.3V,所以当总线上没有输出时会被拉高,?24LC04?的写保护没有使能,不然?FPGA?会无法写入数据。因为在电路上?A0~A2?都为低,所以?24LC04?的设备地址为?0xA0。

2.1?I2C?的总线协议和时序

I2C?标准速率为?100kbit/s,快速模式?400kbit/s,支持多机通讯,?支持多主控模块,但同一时刻只允许有一个主控。由数据线?SDA?和时钟?SCL?构成串行总线; 每个电路和模块都有唯一的地址。

在这里以?AT24C04?为例说明?I2C?读写的基本操作和时序,I2C?设备的操作可分为写单个存储字 节,写多个存储字节,读单个存储字节和读多个存储字节。各个操作如下图所示。

下面对?I2C?总线通信过程中出现的几种信号状态和时序进行分析。

①总线空闲状态

I2C?总线总线的?SDA?和?SCL?两条信号线同时处于高电平时,规定为总线的空闲状态。此时各 个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉 高。

②启动信号(Start)

在时钟线?SCL?保持高电平期间,数据线?SDA?上的电平被拉低(即负跳变),定义为?I2C?总线?总线的启动信号,它标志着一次数据传输的开始。启动信号是由主控器主动建立的,在建立该信?号之前?I2C?总线必须处于空闲状态,如下图所示。

在时钟线?SCL?保持高电平期间,数据线?SDA?被释放,使得?SDA?返回高电平(即正跳变),称 为?I2C?总线的停止信号,它标志着一次数据传输的终止。停止信号也是由主控器主动建立的,建 立该信号之后,I2C?总线将返回空闲状态。

④数据位传送

在?I2C?总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在?SCL?串行时 钟的配合下,在?SDA?上逐位地串行传送每一位数据。进行数据传送时,在?SCL?呈现高电平期间,?SDA?上的电平必须保持稳定,低电平为数据?0,高电平为数据?1。只有在?SCL?为低电平期间,才允?许?SDA?上的电平改变状态。

5 ACK 和 NACK

I2C?总线上的所有数据都是以?8?位字节传送的,发送器每发送一个字节,就在时钟脉冲?9?期 间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位(ACK?简 称应答位),表示接收器已经成功地接收了该字节;

应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。对 于反馈有效应答位?ACK?的要求是,接收器在第?9?个时钟脉冲之前的低电平期间将?SDA?线拉低,并 且确保在该时钟的高电平期间为稳定的低电平。

如果接收器是主控器,则在它收到最后一个字节后,发送一个?NACK?信号,以通知被控发送 器结束数据发送,并释放?SDA?线,以便主控接收器发送一个停止信号。

3?程序设计

I2C?时序虽然简单,但是写的不好也会出现很多问题,在开源网站?http://opencores.org/上我们可以找到很多非常好的代码,这些代码大部分都提供详细的文档和仿真。俗话说,他山之石,可以攻玉,恰当的使用开源代码,不光能提升我们的开发效率,也能学习别人的开发思路。由于代码大部分都是经过很长时间反复修改,反复精炼后的,所以有些代码理解起来可能比较困难, 在不能很好的理解别人代码的时候,最好的办法就是仿真。

从?IP core?文档得知,i2c_master_byte_ctrl?模块主要完成一个字节的读写,我们只需要按照?I2C?读写的要求,完成设备地址、寄存器地址、数据等读写即可。

i2c_master_top?模块是对?i2c_master_byte_ctrl?模块的再次封装,完成一个寄存器的读写,由?于不同的设备寄存器可能是?8bit,也可能是?16bit,这里?i2c_addr_2byte?信号来控制寄存器地址是?8?位还是?16?位。

i2c_master_top?模块状态机,如果是写寄存器操作,先写一个字节设备地址(写操作),再 写?1?个字节或?2?个字节的寄存器地址,再写一个字节的数据;如果是读操作,先写一个字节的设 备地址(写操作),再写?1?个字节或?2?字节的寄存器地址,完成地址的写入,再次写设备地址 (读操作),然后读取一个字节的数据。不管怎么说,程序设计都是要满足芯片时序要求的,所 以在阅读程序之前最好先把芯片的数据手册仔细阅读一遍。

部分代码展示:

//////////////////////////////////////////////////////////////////////////////////
//??????????????????????????????????????????????????????????????????????????????//
//??????????????????????????????????????????????????????????????????????????????//
//??Author:?meisq???????????????????????????????????????????????????????????????//
//??????????msq@qq.com??????????????????????????????????????????????????????????//
//??????????ALINX(shanghai)?Technology?Co.,Ltd??????????????????????????????????//
//??????????heijin??????????????????????????????????????????????????????????????//
//?????WEB:?http://www.alinx.cn/????????????????????????????????????????????????//
//?????BBS:?http://www.heijin.org/??????????????????????????????????????????????//
//??????????????????????????????????????????????????????????????????????????????//
//////////////////////////////////////////////////////////////////////////////////
//??????????????????????????????????????????????????????????????????????????????//
//?Copyright?(c)?2017,ALINX(shanghai)?Technology?Co.,Ltd????????????????????????//
//????????????????????All?rights?reserved???????????????????????????????????????//
//??????????????????????????????????????????????????????????????????????????????//
//?This?source?file?may?be?used?and?distributed?without?restriction?provided????//
//?that?this?copyright?statement?is?not?removed?from?the?file?and?that?any??????//
//?derivative?work?contains?the?original?copyright?notice?and?the?associated????//
//?disclaimer.

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1347

  • 2-24111120295N34.docx
    下载

相关推荐