热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

EEPROM读写例程学习笔记

本人FPGA新手一名,这篇随笔是我读EEPROM读写例程时记的流水账,还望各位高人勿喷!I2C读写时序:写:启

本人FPGA新手一名,这篇随笔是我读EEPROM读写例程时记的流水账,还望各位高人勿喷!

I2C读写时序:

写:启动信号》》控制字节(末位1)》》应答》》写单元地址》》应答》》要写的数据》》应答》》停止信号(用5个时钟完成写操作)

读:启动信号》》控制字节(末位0)》》应答》》写单元地址》》应答》》启动》》控制字节(末位1)》》应答》》读数据(用7个时钟完成读操作)

----------------------

源码为:verilog数字系统设计教程(夏宇闻)第十六章例程源码(学习嵌套状态机写法)

信号源产生:读信号(WR)、写信号(RD)、并行地址信号(addr[10:0])、并行数据信号(DATA[7:0])

各信号作用:

link_write 当其有效时,将sh8out_buf[7]连接到sda2上,此处只取最高位,再利用子状态机的移位操作,实现8位数据sh8out_buf的串行输出

link_head  link_stop 原理同上,利用2位二进制数实现启动信号和停止信号的串行输出

link_sda 当其有效时,将上述串行数据连接到SDA,将数据输入EEPROM

link_read 有效时将data_from_rm中缓存的8位并行数据输出到DATA中 即实现读操作

FF :标志寄存器(用于显示子状态机任务是否完成),例如,在write_start状态中,如果FF为0表明启动信号还没送出,则启动子状态机,输出启动信号,并在完成后将FF置1,表明已经输出启动信号,可以进行下一步操作

主状态机:

复位:各控制信号断开(link),读写标志清零,标志寄存器清零(FF),状态机复位到空闲状态

空闲状态:各控制信号保持断开,如果写信号(WR)有效,则写操作标志(WF)置1,同时进入准备状态;读有效时同上

准备状态:将开始信号线和输出数据线接通,FF清零,将head_buf 高位置1(通过移位产生启动信号),启动信号状态机赋状态初值

写开始状态:如果FF为0,则启动信号状态机(shift_head)工作,输出启动信号,同时在该任务完成后将FF置1;如果FF为1,说明启动信号已经输出,则关闭启动信号,接通串行数据输出线(写控制开启),将FF清零,同时将写子状态机(shift8_out)赋状态初值

写控制字状态:如果FF为0,通过子状态机shift8_out将8位并行写控制字串行输出,在完成后将FF置1;如果FF为1,说明写控制已经输出完成,此时将子状态机(shift8_out)复位,并将地址数据送入输出寄存器中,用于下一状态的输出;

写地址状态:在FF为0时,将地址数据输出,并在完成后将FF置1;当FF为1时,表明地址数据已经输出完成,先将FF清零,此处需要根据读写操作标志来选择:如果写操作标志(WF)有效(接下来写数据),先将数据输出子状态机复位,将要写入的数据DATA送入输出寄存器,主状态机进入写数据状态(data_write );如果读操作标志有效(接下来读开始),启动信号子状态机(shift_head)赋状态初值,主状态机进入读开始状态;

写数据状态:FF为0时,将数据输出,完成后将FF置1;FF为1时,表明数据输出已完成(写成功了),将停止信号状态机(shift_stop)赋状态初值,主状态机进入操作停止状态,将写入数据线(link_write)断开(即DATA与输出寄存器之间的连接断开),FF清零;

读开始状态:FF为0时,进入读信号子状态机输出读启动信号,完成后FF置1;在FF为1时表明读启动信号已经输出,此时将读控制字写入输出寄存器(sh8out_shift),启动信号控制线断开,数据串行输出线接通(用于输出控制字数据),FF=0,数据输出子状态机赋状态初值,主状态机进入读控制字状态

读控制字状态:》读数据状态操作停止状态》(同上略)

操作停止状态:当FF为0时,进行输出停止信号的操作,完成时将FF置1;当FF为1时,说明停止信号已经输出完成,此时产生应答信号(ACK),FF清零,主状态机进入应答状态;

应答状态:将应答信号清零,各标志清零,主状态机进入空闲状态;

 

转:https://www.cnblogs.com/lbf-19940424/p/6505586.html



推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文探讨了如何像程序员一样思考,强调了将复杂问题分解为更小模块的重要性,并讨论了如何通过妥善管理和复用已有代码来提高编程效率。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文总结了汇编语言中第五至第八章的关键知识点,涵盖间接寻址、指令格式、安全编程空间、逻辑运算指令及数据重复定义等内容。通过详细解析这些内容,帮助读者更好地理解和应用汇编语言的高级特性。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 本文详细介绍了如何使用Maven高效管理多模块项目,涵盖项目结构设计、依赖管理和构建优化等方面。通过具体的实例和配置说明,帮助开发者更好地理解和应用Maven在复杂项目中的优势。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
author-avatar
我是王健值得信赖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有