0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Verilog来实现EEPROM的读写,进行一个简单的I2C实战应用

电子工程师 来源:未知 作者:李倩 2018-08-31 17:17 次阅读

I2C芯片的配置中应用还是很多的,比如摄像头、VGA转HDMI转换芯片,之前博主分享过一篇I2C协议的基础学习IIC协议学习笔记,这篇就使用Verilog来实现EEPROM的读写,进行一个简单的I2C实战应用。

EEPROM

我使用的这个芯片是AT24C32,它手册上还有一种AT24C64,其实操作都是一样的,只是内存大小不同,AT24C32是32k(4096x8)AT24C64是64k(8192x8),

SCL设置为频率200Khz

SCL clk posedge data输入EEPROM

SCL clk negedge data输出EEPROM

SDA 双向Pin

A2,A1,A0 Device Addr default all 0,只操作一片可悬空引脚。

WP 接地正常读写,WP接Vcc写操作被禁止

字节寻址地址,是由12(AT24C32)或13bit(AT24C64)的地址组成,需要操作16位字地址高3或4位忽略即可。

Device Address 8’hA0写器件地址,8’hA1读器件地址

写字节操作

随机读字节操作

我这个芯片是双字节数据地址,所以在写数据地址时要写两次,先是高字节后是低字节。

开始结束标志

这个I2C总线的时序是一致的。

EEPROM应答

输出应答sclk的第九个周期给出,低电平应答。如果主机没有收到应答,需要重新配置。

数据传输时序

sda数据线在scl时钟的下降沿中间变化,可以避免产生误触开始结束标志。

I2C Design

i2c_start为高电平有效,传输完成后会产生一个i2c_done结束标志,表示操作完成。

I2C状态转移图

I2C写操作

(1)产生start位

(2)传送器件地址ID_Address,器件地址的最后一位为数据的传输方向位,R/W,低电平0表示主机往从机写数据(W),1表示主机从从机读数据(R)。这里按照手册给出的操作图,应该是W即低电平。ACK应答,应答是从机发送给主机的应答,这里不用管。

(3)传送写入器件寄存器地址,即数据要写入的位置。同样ACK应答不用管。

(4)传送要写入的数据。ACK应答不用管。

(5)产生stop信号

I2C读操作

(1)产生start信号

(2)传送器件地址(写ID_Address),这里按照手册给出的操作图,最低位是W即低电平。ACK。

(3)传送字地址(写REG_Address),ACK。

(4)再次产生start信号

(5)再传送一次器件地址,这里根据手册最低位是读R高电平,ACK。

(6)读取一个字节的数据,读数据最后结束前无应答ACK信号。

(7)产生stop信号。

读写操作的写器件地址和写数据地址操作是一样的,状态转移图中读写操作中这两部分复用了,根据读写标志来判断。

其他部分没啥好说的根据时序图写就行了,需要注意的一点是我们应该在sclk的高电平的中间采样数据,在sclk低电平的中间改变数据,当sclk为高电平的时候,sda为出现下降沿为start位, sda出现上升沿为stop位,所以在sclk为高电平的时候sda应该保持稳定不能随意乱动。这就又回到了数据传输有效的条件,只有在sclk为低电平期间,才允许数据变化,在高电平期间,不允许数据变化,否则就会出现起始位或结束位。

EEPROM有个仿真模型,在夏雨闻老师的书里面就有,这个模型默认是200khz的sclk驱动,仿真的时候可以将时间参数改小,我这里也分享出来。

仿真模型代码点击阅读原文可以查看。

根据仿真模型仿真的话基本不会有什么问题,需要注意的是操作的完成标志。从仿真上看到输入读写都没问题,但是stop标志没产生好,仿真看到读写操作没问题,但实际还是不行的,需要严格按照EEPROM的手册操作时序进行,差一点就不行。

我最后使用拨码开关作为读写使能,数码管显示读出来的输出,最后实现了对指定存储地址读写数据。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1325

    浏览量

    109298
  • EEPROM
    +关注

    关注

    9

    文章

    926

    浏览量

    80306

原文标题:基于FPGA的I2C读写EEPROM

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32F103利用软件模拟I2C读写EEPROM,超过385字节就读写不了的原因?

    在STM32F103的芯片中,利用软件模拟I2C读写EEPROM,在使用页写入的方式进行读写时,能够读写
    发表于 03-19 07:45

    利用软件模拟i2c读写EEPROM,超过256字节就读写不了了的原因?如何处理?

    利用野火的软件模拟i2c读写EEPROMEEPROM的芯片型号为AT24C512,读写256
    发表于 03-20 06:42

    EEPROM与并口的I2C读写通讯设计

    的紧凑些。最后将电路固定在合适的小塑料盒内,好了,现在它是我们的试验器材,等看过后面的内容,你会发现只要为其配上软件,它就是用于读写
    发表于 09-11 10:36

    i2cEEPROM读写,计数

    i2cEEPROM读写,计数,附程序代码
    发表于 11-30 15:01

    STM32F103VCT6使用GPIO口模拟I2CEEPROM读写和擦除

    我是使用GPIO口模拟I2CEEPROM读写的,使用的管脚是PB8,PB9。现在能完成了读写操作了,但是不知道怎么实现电擦除。求高人指点下
    发表于 09-11 17:19

    在FX3板上读写I2C EEPROM是怎么实现的?

    你好,我想在FX3板上读写I2C EEPROM,使用UBI2CREGMODE示例固件项目。但我不能理解这个过程。项目自述文件说:“该设备仅作为
    发表于 04-18 08:00

    读写EEPROM

    STM32学习笔记(9)——(I2C续)读写EEPROM、概述1. 背景介绍2. EEPROM
    发表于 08-23 08:03

    什么是软件I2C和硬件I2C

    23章“I2C读写EEPROM”原理章节)2)阅读AHT20数据手册,编程实现:每隔2秒钟采集
    发表于 08-23 06:19

    I2C协议以及I2C读写EEPROM

    I2C协议以及I2C读写EEPROM实验文章目录I2C协议以及I2C
    发表于 08-23 08:25

    如何使用I2C总线控制EEPROM芯片

    I2C总线是什么?如何使用I2C总线控制EEPROM芯片?有哪些步骤?
    发表于 10-19 07:33

    使用I2CEEPROM进行操作

    篇《I2C协议详解》我们了解了I2C的操作流程,这篇,我们就使用I2C
    发表于 12-13 08:19

    EEPROM I2C协议的特点与基本读写过程

    EEPROMI2C协议I2C物理层的特点I2C的协议层I2C基本读写过程通讯的起始和停止信号数据有效性地址及数据方向响应STM32的
    发表于 01-21 08:57

    i2c总线用户接口进行访问EEPROM如何才能实现

    i2c总线用户接口进行访问EEPROM如何才能实现呢?
    发表于 03-07 07:53

    如何通过i2c连续读写eeprom

    我用verilog自制了i2c模块,将电路下载到fpga中,在读写eeprom时出现问题,不
    发表于 03-29 10:22

    CH32V103基础教程37-I2C-软件模拟I2C读写EEPROM

    前面章节第14章已经进行过硬件IIC读写EEPROM的实验,本章教程将使用软件模拟IIC读写EEPROM,并通过串口调试助手将
    发表于 04-23 16:04