I2C连续读写实现

IIC系列文章:
(1)I2C 接口控制器理论讲解
(2)I2C接口控制设计与实现
(3)I2C连续读写实现

文章目录

  • 前言
  • 一、 i2c_bit_shift 模块分析
  • 二、 i2c_control 模块实现
  • 三、 i2c_control 模块仿真测试


前言

上文的 i2c_bit_shift 模块说完了,我们发现实现一个字节的写操作还是可以实现的,实际的应用中我们不可能只写一个字节的数据,那么此时这个 i2c_bit_shift 模块用来连续写就有些不方便了,从上面的仿真代码就能看出来,这时就需要一个上层模块来控制这个i2c_bit_shift 模块去连续写,这样就方便一些。

提示:以下是本篇文章正文内容,下面案例可供参考

一、 i2c_bit_shift 模块分析

还是用一个实际的例子来说明。例如往 1 字节器件地址的 EEPROM 中的 0C 地址写数据 0A 呢?我们来看一下上面说的单字节写时序图。
在这里插入图片描述
首先我们按照 i2c_bit_shift 模块的操作来拆分一下,这里面可以分成三次操作:
第一次,起始位+写数据(7 位器件 ID + 1 位读写控制位(这里是 0,表示写)),等待从机应答。
第二次,写数据(8 位 EEPROM 的寄存器地址),等待从机应答。
第三次,写数据(写 8 位数据到 EEPROM 中),等待从机应答,然后给出停止位信号。

我们要从一个 1 字节器件地址的 EEPROM 中的 0C地址读取数据。我们来看一下上面说的单字节读时序图。
1
首先我们按照 i2c_bit_shift 模块的操作来拆分一下,这里面可以分成四次操作:
第一次,起始位+写数据(7 位器件 ID + 1 位读写控制位(这里是 0,表示写)),等待从机应答。
第二次,写数据(8 位 EEPROM 的寄存器地址),等待从机应答。
第三次,起始位+写数据(7 位器件 ID + 1 位读写控制位(这里是 1,表示读)),等待从机应答。
第四次,读数据(从 EEPROM 中读出 8 位数据)+ 应答位(根据需要给出应答(0)或者无应答(1))+ 停止位。
总的来说就是写了三次 1 字节的数据,读了一次 1 字节的数据。

二、 i2c_control 模块实现

原理图展示:
在这里插入图片描述
模块接口功能描述:

在这里插入图片描述
状态转移图,如下图所示:
在这里插入图片描述

为了让代码更简洁这里就用到了两个 task 一个是用来写字节(write_byte),另一个是读字节(read_byte)。写字节的 task 里面就将要写的字节数据准备好(赋值给 i2c_bit_shift 模块的 Tx_DATA 端口),同时涉及到的传给 i2c_bit_shift 模块的 Cmd 命令也准备好,同时触发 Go 信号,这样就可以通过i2c_bit_shift 模块将要写的数据发送到总线上了。同理,读字节的 task 里面将涉及到的传给i2c_bit_shift 模块的 Cmd 命令也准备好,同时触发 Go 信号,这样就可以通过 i2c_bit_shift 模块将总线上的数据读取出来了。代码如下:

task read_byte;input [5:0]Ctrl_Cmd;beginCmd <= Ctrl_Cmd;Go <= 1'b1; endendtasktask write_byte;input [5:0]Ctrl_Cmd;input [7:0]Wr_Byte_Data;beginCmd <= Ctrl_Cmd;Tx_DATA <= Wr_Byte_Data;Go <= 1'b1; endendtask

这样的话读代码就可以简化成下面这样了,

write_byte(WR | STA, device_id);
write_byte(WR, reg_addr[15:8]);
write_byte(WR, reg_addr[7:0]);
write_byte(WR | STO, wrdata);

写代码简化为

write_byte(WR | STA, device_id);
write_byte(WR | STO,8'h0C);
write_byte(WR | STA, device_id |8'd1);
read_byte(RD | ACK | STO);

第三行的 device_id | 8’d1 是因为后面要进行读操作,所以用这个小技巧就可以把原本的写改成读了。

那么上面的代码还是有问题,怎么就判断第一行的这个 write_byte 的 task 把数据写成功了呢,这个就需要判断 i2c_bit_shift 模块返回的 Trans_Done 的握手信号,这样就可以接着发送第二行的 write_byte 的 task,以此类推的执行完这四行的 task 就可以实现从 EEPROM 中的 0C 地址读取数据。可以分成 3 个状态来控制这个过程,第一个是写寄存器状态(WR_REG),这里面有这个写数据操作的四个 task(第

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/38087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【UniApp开发小程序】小程序首页(展示商品、商品搜索、商品分类搜索)【后端基于若依管理系统开发】

文章目录 界面效果界面实现工具js页面首页让文字只显示两行路由跳转传递对象将商品分为两列显示使用中划线划掉原价 后端商品controllerservicemappersql 界面效果 【说明】 界面中商品的图片来源于闲鱼&#xff0c;若侵权请联系删除关于商品分类页面的实现&#xff0c;请在我…

MySQL基础篇

一、MySQL基础 黑窗口命令操作: 连接MySQL服务器&#xff1a;mysql -u用户名 -p密码 [-h数据库服务器的IP地址 -P端口号] ​ -h 参数不加&#xff0c;默认连接的是本地 127.0.0.1 的MySQL服务器 -P 参数不加&#xff0c;默认连接的端口号是 3306 、 **上述指令&#xff0c;可…

建库、建表、修改表、复制表、字符类型、数值类型、枚举类型、日期时间类型、检索目录、数据导入命令、数据导入步骤、数据导出命令、非空、默认值、唯一索

Top NSD DBA DAY04 案例1&#xff1a;表管理案例2&#xff1a;数据类型案例3&#xff1a;数据批量处理案例4&#xff1a;表头基本约束 1 案例1&#xff1a;表管理 1.1 问题 建库练习建表练习修改表练习 1.2 方案 在MySQL50主机完成练习。 1.3 步骤 实现此案例需要按照如…

升级版“斯坦福AI小镇”来了,这次的AI Agents有点不一样

文娱是大模型落地的一个重要方向。 数科星球原创 作者丨苑晶 编辑丨大兔 八月中旬&#xff0c;AIGC游戏的风潮扑面而来。在游戏大厂按捺不住投入巨资的背景下&#xff0c;数科星球&#xff08;ID&#xff1a;digital-planet&#xff09;接触到了多名业内精英也投身于此。人工…

Kafka第一课概述与安装

生产经验 面试重点 Broker面试重点 代码,开发重点 67 章了解 如何记录行为数据 1. Kafka概述 1.产生原因 前端 传到日志 日志传到Flume 传到HADOOP 但是如果数据特比大&#xff0c;HADOOP就承受不住了 2.Kafka解决问题 控流消峰 Flume传给Kafka 存到Kafka Hadoop 从Kafka…

Qt扫盲-Qt Paint System 概述

Qt Paint System 概述 一、概述二、绘图设备和后端1. Widget2. Image3. Pixmap4. OpenGL绘制设备5. Picture6. 自定义绘制后端 三、绘图与填充1. Drawing2. 填充 Filling 四、坐标系统1. 渲染Window-Viewport转换 五、读写图像文件1. QMovie 六、绘图相关设备 一、概述 Qt的pa…

【数据库】P2 SELECT 与 SQL注释

SELECT 检索单个列检索多个列检索所有列不重复的结果 DISTINCT限制结果 LIMIT 与 OFFSET注释行内注释多行注释 检索单个列 从 Products 表中检索一个名为 prod_name 的列&#xff1b; SELECT prod_name FROM Products;【1】返回的数据可能是无序的&#xff0c;除非规定了顺序…

7.5.tensorRT高级(2)-RAII接口模式下的生产者消费者多batch实现

目录 前言1. RAII接口模式封装生产者消费者2. 问答环节总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-RAI…

原生JS手写扫雷小游戏

场景 实现一个完整的扫雷游戏需要一些复杂的逻辑和界面交互。我将为你提供一个简化版的扫雷游戏示例&#xff0c;帮助你入门。请注意&#xff0c;这只是一个基本示例&#xff0c;你可以根据自己的需求进行扩展和改进。 思路 创建游戏板&#xff08;Grid&#xff09;&#xff1…

软考:中级软件设计师:文件管理,索引文件结构,树型文件结构,位示图,数据传输方式,微内核

软考&#xff1a;中级软件设计师: 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &#xff08;1…

小森动画回忆录(二)-浏览哆啦a梦的四次元口袋

// DoraemonProps结构用于存储单个道具信息 struct DoraemonProps{// 道具名称string name;// 道具用途string UseOfProps; };// 从文件加载哆啦A梦道具信息到vector void LoadDoraemonProps(vector<DoraemonProps>& DoraemonProps) {// 创建文件输入流ifstream str…

人脸识别技术应用安全管理规定(试行)

近年来&#xff0c;人脸识别技术不断成熟&#xff0c;已大量应用于治安管理、金融支付、门禁考勤等诸多领域&#xff0c;极大便捷了公众生活。然而&#xff0c;人脸识别技术在得到广泛应用的同时&#xff0c;仍存在一些不规范现象。人脸识别因其技术特点&#xff0c;涉及公众敏…

node.js 基础高并发案例

什么是高并发 高并发是指系统在同一时间段内需要处理大量的并发请求或同时进行大量的操作。在计算机领域中&#xff0c;高并发通常指的是在短时间内有大量的用户或客户端同时访问系统或进行操作&#xff0c;对系统的并发处理能力提出了较高的要求。 高并发的特点包括 大量的…

Python学习笔记第五十五天(Pandas CSV文件)

Python学习笔记第五十五天 Pandas CSV 文件read_csv()to_string()to_csv() 数据处理head()tail()fillna() info() 后记 Pandas CSV 文件 CSV&#xff08;Comma-Separated Values&#xff0c;逗号分隔值&#xff0c;有时也称为字符分隔值&#xff0c;因为分隔字符也可以不是逗号…

【嵌入式学习笔记】嵌入式入门7——IIC总线协议

1.IIC简介 IIC即Inter Integrated Circuit&#xff0c;集成电路总线&#xff0c;是一种同步&#xff0c;串行&#xff0c;半双工通信总线。 IIC总线协议——总线就是传输数据通道&#xff0c;协议就是传输数据的规则&#xff0c;有以下特点&#xff1a; 由时钟线SCL和数据线S…

ES踩坑记录之集群间通信异常造成节点无法加入

问题描述 公司新搭了一套ES集群&#xff0c;4台机器&#xff0c;ES版本7.5.0&#xff0c;前期搭建十分顺利&#xff0c;但集群运行一段时间后会出现问题。问题具体体现为节点间通讯异常&#xff0c;集群会重新选主&#xff0c;但选主之后只能通过新的主节点进行集群操作&#…

【Linux】可重入函数 volatile关键字 以及SIGCHLD信号

可重入函数 volatile关键字 以及SIGCHLD信号 一、可重入函数1、引入2、可重入函数的判断 二、volatile关键字1、引入2、关于编译器的优化的简单讨论 三、SIGCHLD信号 一、可重入函数 1、引入 我们来先看一个例子来帮助我们理解什么是可重入函数&#xff1a; 假设我们现在要对…

EthGlobal 巴黎站 Chainlink 获奖项目介绍

在 Web3 中&#xff0c;每一周都至关重要。项目的发布、版本的发布以及协议的更新以惊人的速度推出。开发者必须保持学习&#xff0c;随时了解最新的工具&#xff0c;并将所有他们所学的东西&#xff08;无论是旧的还是新的&#xff09;联系起来&#xff0c;以构建推动 Web3 技…

PLUS操作流程、应用与实践,多源不同分辨率数据的处理、ArcGIS的应用、PLUS模型的应用、InVEST模型的应用

PLUS模型是由中国地质大学&#xff08;武汉&#xff09;地理与信息工程学院高性能空间计算智能实验室开发&#xff0c;是一个基于栅格数据的可用于斑块尺度土地利用/土地覆盖(LULC)变化模拟的元胞自动机(CA)模型。PLUS模型集成了基于土地扩张分析的规则挖掘方法和基于多类型随机…

Word转PDF在线转换如何操作?分享转换技巧

现如今&#xff0c;pdf转换器已成为大家日常办公学习必不可少的工具&#xff0c;市场上的pdf转换器主要有两种类型&#xff0c;一种是需要下载安装的&#xff0c;另一种是网页版&#xff0c;打开就可以使用的&#xff0c;今天小编给大家推荐一个非常好用的网页版pdf转换器&…