Verilog实现IIC协议读写EEPROM

本文详细介绍了如何在FPGA中使用Verilog实现IIC协议读写EEPROM,涵盖了IIC协议的基本概念、总线事务和时序,以及EEPROM的读写规则。通过实例分析,阐述了Verilog代码的设计思路,并提供了相关资源链接。
摘要由CSDN通过智能技术生成

在FPGA设计中,IIC协议是一个十分常见的协议,因为几乎所有的EEPROM都是用这个协议进行读写的,此外,一些特殊场合,也会用到此协议。这里我首先给出IIC协议的中文标准文档的下载链接(不要积分),作为例子的EEPROM芯片AT24C64的官方的中英文双版本datasheet的下载链接(不要积分),此外还有本文所附源代码的下载链接(本文的源代码来自正点原子微信公众号,不是本人所写,我只是加了点注释,写了一个简单的仿真脚本,象征性收取1个积分)。

一、IIC协议概述

IIC协议,英文全称是Inter-Integrated Circuit,直译过来是内部集成电路总线,它实际上是一种总线协议,一般也叫作I2C。IIC总线是一种共享的串行总线,是用于两个设备之间的短距离低速低数据量的数据通信,一般就用在PCB板卡上的设备之间,当然在芯片内部,做SOC设计时也可以把这种协议用在片上功能模块之间。IIC只有两根信号线,一根是双向的数据通信线SDA,一根是有效使能和时钟双功能线SCL,IIC总线上允许连接多个主设备和多个从设备,如下图所示,一般情况下,主设备是单片机或者FPGA,其他都是从设备。

图1 IIC总线系统示意图

当总线空闲时, IIC的两根信号线都是高电平,连到总线上的任一设备输出的低电平,都将使总线的信号变低,即各设备的SDA和SCL都是线“与”关系。这两根信号线的驱动规则是这样子的:SDA是主设备和从设备都可以驱动的,SCL只能由主设备驱动。很多资料把SCL称之为时钟线,我认为时钟线这个名称容易引起误解,我把SCL称之为有效使能和时钟双功能线,这是因为对于主设备来说,SCL相当于指示SDA上的数据有效的使能信号,主设备不会用SCL的沿来发送和采样数据,但是对于从设备来说,SCL是可以作为有效数据的采样时钟的,从设备可以用SCL的沿来采样数据,也可以同样把它当成一个有效使能信号。

IIC总线是比较简单的总线,不像大多数总线(比如PCI)那样子用统一编址的地址空间来管理各个设备,IIC总线没有什么地址空间的概念,它是用器件地址(注意和寄存器/存储器地址区分开来)来区分每个设备的,IIC总线的任何总线事务都是从器件地址的传输开始的。对于一个IIC总线系统来说,每个连到IIC总线上的设备都有唯一的7位器件地址,这7位中有固定部分和自定义部分,比如,对于AT24C64这个EEPROM设备,其器件地址的高4位是由厂商定义的,后3位是用户自定义的,3位的自定义表示允许一个IIC系统中最多

FPGA实现IIC总线驱动来读写EEPROM是一种常见的应用。通过引用和中的内容,我们可以了解到以下步骤和问题解决方案: 1. IIC协议简介:IIC协议是一种串行通信协议,它允许多个设备在同一总线上进行通信。IIC协议在硬件结构上包含了两根线路,即串行数据线(SDA)和串行时钟线(SCL)。 2. 设计思想:在FPGA实现IIC读写EEPROM的设计思路是通过编写Verilog HDL代码来实现IIC总线的驱动功能,并通过IIC总线对EEPROM进行读写测试。 3. RTL代码重要部分:在RTL代码的实现中,需要考虑起始信号、应答信号以及数据的读写时序。根据引用的内容,可能会遇到从机无应答、应答正常但读出数据不对以及时钟问题等问题。对于从机无应答的情况,可以通过添加状态机中的等待应答的机制来解决。对于应答正常但读出数据不对的情况,可能是EEPROM本身的问题,可以尝试重新上电来解决。而时钟问题可以通过添加边沿检测程序来解决。 4. 开发过程遇到的问题:在开发过程中可能会遇到一些问题,如从机无应答、读出数据错误等。通过使用SignalTap抓取波形图可以帮助分析问题所在。 综上所述,实现IIC读写EEPROM的FPGA设计可以根据IIC协议时序特点编写Verilog HDL代码,并解决可能出现的问题,如从机无应答、读出数据错误等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [FPGA中 通过IIC读写EEPROM驱动代码示例](https://download.csdn.net/download/qq_20222919/12733052)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [FPGA实现IIC通信(读写EEPROM)](https://blog.csdn.net/xs_sd/article/details/114534036)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值