当前位置: 首页 > article >正文

HDMI数据的接收发送实验(八)

一、 概述上一章节创建hex文件写入EDID编码接下来我们需要把ROM中的数据通过IIC协议传输到HDMI中为了能够更方便观察具体时序我们首先模拟主机发送的IIC请求这样可以根据仿真来观察IIC的传输过程。二、模拟主机发送IIC时序接口列表我们可以根据AT24CM01的顺序读取时序来确定它的传输方式根据图1可以看出它的传输过程再写出它的状态图根据图2和图3所示的时间规范设计出合适的传输时序。图1为顺序读取的时序顺序读取可以由随机地址读取发起。当微控制器接收到一个数据字节后它用一个确认来响应。只要EEPROM接收到确认微控制器就会继续递增寄存器地址并自动读取寄存器当中的数据。当微控制器没有响应0并且产生后续STOP停止条件后顺序读取结束。所以在顺序读取时读第一个数据后只要接收到ACK响应就会继续读取下一个寄存器地址的数据直到发送非应答信号和停止信号停止读取。注1: IIC总线协议中文版 page 28注2 IIC总线协议中文版 page 27下面根据IIC的传输协议画出状态图及主机发送的IIC时序图SCL的高电平时间和低电平时间分别要大于4.0us和4.7us我们的系统时钟频率为50MHz它的周期为20ns由此可以设计一个时钟分频计数器sclk_cnt在状态机不为空闲状态时开始计数。每计数到511时清零使SCL在sclk_cnt计数到255拉高计数到511时拉低。分频后的SCL的周期为10.24us并且它的时钟频率小于100KMhz可以满足需求。首先要完成开始条件的时序当检测到HMDL_RX_PHA的上升沿并且HMDL_RX_TXEN为1时IIC开始工作SCL和SDA这两条线上电之后为高在产生开始标志时这里需要满足起始条件的保持时间至少4.0us也就是数据线由高变低后SCL为高的保持时间这里再增加一个计数器scl_start_time_cnt计数到511时SDA拉低计数到1023并且sclk_cnt为511时SCL拉低。这样就满足了起始条件的时序要求。SDA作为双向接口为了可以控制它的输出所以用了两个信号来作为它的输入数据和输出数据。Sda_in为SDA的缓冲可以直接使用。Sda_out为SDA的输出。Sda_oe为控制sda_out输出的使能当sda_oe为1时sda_out数据有效sda_oe为0时sda_out数据无效表现为高阻状态。buf sda_i(sda_in,sda);assign sda (sda_oe1) ? sda_out : 1’bz;在发送器件地址时为了能在SCL的低电平的中心位置发出数据我们设计了两个信号scl_l_flag和scl_h_flag分别为SCL的低电平中心和高电平中心器件地址在7位数据中的高4位有效第8位的读写位如果为写则为A0。slave_addr_wr_shift为移位寄存器它的初始值为A0使它在SLAVE_ADDR_WR状态中icc_scl_cnt7 并且 scl_l_flag1时把0移入最低位。在每个SCL的低电平中心位置把slave_addr_wr_shift的最高位赋值给sda_out。在移出8位数据后从机会返回ACK应答当SCL为高时sda_in为低则代表接收到了响应。iic_scl_cnt计数到9时为接收ACK应答的时间段当计数到9时接收到ack应答并且到下一个scl的低电平中心位置时状态跳转到WR_ADDR。iic_scl_cnt为sda线上传输单bit数据的计数每发送或接收到一个数据计数1在SLAVE_ADDR_ER和SLAVE_ADDR_RD状态中计数为1的时候对应sda线上的第一个bit位而在WR_ADDR和RD_DATA状态中计数为0的时候对应sda线上的第一个bit位。在WR_ADDR状态中iic_scl_cnt计数到8时为接收ACK应答的时间段当计数到8时接收到ack应答并且到下一个SCL低电平中心位置时状态跳转到SCL_START_T。在IIC发送完器件地址和写寄存器地址后会发送一次重开始标志使SCL在SCL_START_T和REPEATED_START状态时为高为了使SCL的低电平时间满足时序要求使SCL在SCL_START_T状态下scl_start_time_cnt小于127时为低sda_out在SCL_START_T状态下拉高在REPEATED_START状态拉低根据时序规范重复起始条件的建立时间不小于4.7us后SCL保持高电平的时间要大于4.0us所以这里还需要scl_start_time_cnt在SCL_START_T状态时开始计数计数到511并且sclk_cnt也计数到511时状态跳转到REPEATED_START再经过一个SCL的周期后状态跳转到SLAVE_ADDR_RD再传输一次器件地址但这次的读写位为1表示接下来准备从器件读取数据发送完后同样接收ACK再跳转到RD_DATA状态。从什么位置开始读取呢其实就是重开始之前发送的写寄存器地址开始读我们发送的写寄存器地址为00H所以读的第一个寄存器地址也是00H需要读出128个字节也就是读到127的寄存器地址结束。我们每接收8位数据就要给对方发送一次ACK应答同时可以利用寄存器rd_slave_data来存储接收到的数据这样可以方便看出接收到的字节数据。当读出128个字节的数据后会发送一个不应答信号也就是最后一个字节传出结束后在iic_scl_cnt8并且rd_data_cnt127时sda_out为1然后跳转到STOP状态停止信号表现为在SCL为高时SDA由低变高。停止条件的建立时间SCL为1SDA为0最低4.0us停止信号产生后SCL还需要保持至少4.7us的高电平状态。所以需要先把SCL拉高SDA在SCL拉高之前保持为0使SDA在SCL为高时由低变高来建立IIC的停止标志。这里需要注意SCL在拉高之前也要满足SCL为低电平的最低时间的要求所以设计一个产生停止条件的计数器stop_time在STOP状态时计数器开始计数。为了满足SCL为低的最低时间要求计数到255时SDA拉低计数器加到511时拉高计数到1023时返回到IDLE状态二、 总结到此模拟主机发送IIC时序的模块完成了后边再来模拟EEPROM编写发送数据的代码发送的数据就为之前储存在ROM中的EDID数据。本文章由威三学社出品对课程感兴趣可以私信联系

相关文章:

HDMI数据的接收发送实验(八)

一、 概述 上一章节创建hex文件写入EDID编码,接下来我们需要把ROM中的数据通过IIC协议传输到HDMI中,为了能够更方便观察具体时序,我们首先模拟主机发送的IIC请求,这样可以根据仿真来观察IIC的传输过程。 二、模拟主机发送IIC时序 …...

别再乱选格式了!LVGL图片转换工具(lv_img_conv)保姆级使用指南,从BMP到C数组一次搞定

LVGL图像转换实战指南:从格式选择到批量处理的完整解决方案 在嵌入式UI开发中,图像资源处理往往是第一个技术门槛。许多开发者在使用LVGL时,80%的初期问题都集中在图像转换环节——为什么转换后的图片显示异常?如何平衡内存占用和…...

LeetCode 删除无效的括号:python 题解

简介 AI Agent 不仅仅是一个能聊天的机器人(如普通的 ChatGPT),而是一个能够感知环境、进行推理、自主决策并调用工具来完成特定任务的智能系统,更够完成更为复杂的AI场景需求。 AI Agent 功能 根据查阅的资料,agent的…...

如何用Dism++打造高效Windows系统维护工作流

如何用Dism打造高效Windows系统维护工作流 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language Dism是一款功能全面的Windows系统优化与维护工具,通过直观…...

从零到集群:基于Rocky Linux ARM64的虚拟化平台构建与自动化部署实战

1. 环境准备与基础配置 第一次接触ARM64架构的虚拟化平台搭建时,我踩过不少坑。不同于常见的x86环境,Rocky Linux ARM64在驱动支持和软件生态上有其特殊性。我们先从最基础的物理服务器配置说起。 假设你面前是一台刚拆封的ARM架构服务器,我…...

一文学习 工作流开发 BPMN、 Flowable

一、简化查询 1. 先看一下查询的例子 /// /// 账户获取服务 /// /// /// public class AccountGetService(AccountTable table, IShadowBuilder builder) {private readonly SqlSource _source new(builder.DataSource);private readonly IParamQuery _accountQuery build…...

一次慢改表引发的线上死锁事故复盘

一次慢改表引发的线上死锁事故复盘 一、事故背景 在一次常规的数据库表结构变更过程中,对某核心业务表执行了慢改表操作(使用 pt-online-schema-change)。操作开始后,短时间内触发报警: 部分接口响应时间显著上升出现请…...

有些路看起来很难走,其实是在带你慢慢变强

生活里,很多人都希望自己走的是一条轻松一点、顺利一点的路。最好努力了就能有结果,付出了就能被看见,遇到的问题也都能很快解决。可真正经历过一些事情后才会发现,人生并不会总按照理想的节奏前进。很多时候,那些让人…...

突破可视化边界:Charticulator重新定义数据叙事的技术实践

突破可视化边界:Charticulator重新定义数据叙事的技术实践 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 在数据可视化领域,传统工具往往…...

【帮宝抑菌膏】宝宝额头起红疹子怎么办?宝妈必看的原因与护理指南

宝宝额头突然冒出一片片红疹子,不仅让宝宝难受哭闹,更让新手父母揪心不已。作为深耕母婴护理领域十余年的专业品牌,帮宝凭借丰富的育儿指导经验和科学护理方案,为宝妈们提供全方位的解决方案。当发现宝宝额头起红疹子时&#xff0…...

OpenCascade实战:TopoDS_Shape数据结构的高效遍历与优化策略

1. TopoDS_Shape数据结构基础解析 在OpenCascade中,TopoDS_Shape是构建三维模型的基石。这个看似简单的类实际上包含了三个关键数据成员:myTShape、myLocation和myOrient。理解这三个字段的运作机制,是高效操作模型的前提。 myTShape是一个智…...

用Multisim 14.0复刻经典:手把手教你搭建一个能校时的数字电子钟(附完整仿真文件)

用Multisim 14.0打造高精度数字电子钟:从原理到仿真的完整实践指南 在数字电路的学习过程中,没有什么比亲手搭建一个功能完整的数字电子钟更能检验学习成果了。这个看似简单的项目实际上涵盖了振荡器、分频器、计数器、译码显示和校时电路等数字电路的核…...

如何用Obsidian构建你的个人知识管理系统:终极完整指南

如何用Obsidian构建你的个人知识管理系统:终极完整指南 【免费下载链接】kepano-obsidian My personal Obsidian vault template. A bottom-up approach to note-taking and organizing things I am interested in. 项目地址: https://gitcode.com/gh_mirrors/ke/…...

Windows右键菜单终极清理指南:3步让你的右键菜单重获新生

Windows右键菜单终极清理指南:3步让你的右键菜单重获新生 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 还在为每次右键点击文件时弹出的杂乱菜单而…...

OpenClaw龙虾推出官方中国镜像站,由字节跳动提供支持

文章目录前言龙虾是谁?为啥它搞个镜像站这么重要?中国镜像站来了:地址是 mirror-cn.clawhub.com背后的故事:腾讯、字节、龙虾的"三国演义"镜像站的意义:不只是个"加速器"怎么用?手把手…...

如何用ContextMenuManager彻底掌控Windows右键菜单?4阶段优化法让操作效率提升300%

如何用ContextMenuManager彻底掌控Windows右键菜单?4阶段优化法让操作效率提升300% 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager Windows右键菜单是…...

零下20度实测:国产SysMax PCAN FD在寒区标定中的稳定性与兼容性全记录

零下20度极限挑战:SysMax PCAN FD在寒区汽车电子标定中的实战全解析 当清晨的内蒙古满洲里气温骤降至-20℃,大多数电子设备早已进入"冬眠"状态,而我们的汽车电子标定工作却必须继续。在这个被称为"中国冷极"的地区&#…...

Oracle 数据库中的 REF 类型与触发器的使用

在 Oracle 数据库中,引用类型(REF)是对象类型之间关联的一种强大工具。特别是在复杂的企业应用中,REF 类型可以帮助我们建立对象间的引用关系,模拟现实世界的关系模型。本文将通过一个实际的例子,介绍如何在 Oracle 中使用 REF 类型,以及如何通过触发器(Trigger)来确保…...

如何快速配置跨平台鼠标连点器:终极效率提升指南

如何快速配置跨平台鼠标连点器:终极效率提升指南 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件界面美观 ,操作直…...

Qwen3.5-2B轻量模型评测:端侧推理延迟、功耗、准确率三维平衡点实测

Qwen3.5-2B轻量模型评测:端侧推理延迟、功耗、准确率三维平衡点实测 1. 模型概述 Qwen3.5-2B是通义千问团队推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。该模型专为低功耗、低门槛部署场景设计&#xf…...

Pixel Aurora Engine部署案例:边缘计算设备(Jetson Orin)轻量化部署

Pixel Aurora Engine部署案例:边缘计算设备(Jetson Orin)轻量化部署 1. 项目背景与价值 Pixel Aurora Engine是一款基于AI扩散模型的创意工具,专为生成复古像素艺术设计。其独特的8-bit游戏风格界面和高效生成能力,使…...

新零售系统开发的关键要素

新零售系统开发需要整合线上线下资源,实现数据驱动的智能化运营。以下是核心开发要点:技术架构设计采用微服务架构实现系统模块化,支持高并发场景。前端可选用React/Vue构建跨平台应用,后端推荐Spring Cloud或Node.js。数据库根据…...

基于七自由度车辆模型的 UKF 与 EKF 参数估计之旅

基于七自由度车辆模型的UKF,EFK对质心侧偏角,横摆角速度,纵向车速的估计。 七自由度车辆动力学模型 UKF无迹卡尔曼滤波 EKF扩展卡尔曼滤波 质心侧偏角 横摆角速度 纵向车速 参数估计 提供参考文献pdf 车辆模型建模word文档 UKF学习文档等在车…...

类OpenClaw智能体优选指南,企业级+个人级全覆盖

2026年初,OpenClaw开源智能体框架凭借“自主规划、工具调用、端到端执行”的核心能力,打破传统AI“只对话不行动”的壁垒,在GitHub迅速斩获25万星标,引发全球科技圈热潮,国内厂商纷纷入局推出类OpenClaw产品&#xff0…...

零代码构建智能安防平台:WVP-GB28181-Pro的5个技术突破

零代码构建智能安防平台:WVP-GB28181-Pro的5个技术突破 【免费下载链接】wvp-GB28181-pro 基于GB28181-2016、部标808、部标1078标准实现的开箱即用的网络视频平台。自带管理页面,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR接入。支持…...

DistroAV技术解析:NDI网络视频传输的OBS插件解决方案

DistroAV技术解析:NDI网络视频传输的OBS插件解决方案 【免费下载链接】obs-ndi DistroAV (formerly OBS-NDI): NDI integration for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-ndi 在当今的直播和内容创作领域,网络视频传输技…...

快速使用 Docker 设置 Nexior AI 平台

Nexior 是一个开源项目,允许用户轻松部署自己的 AI 应用网站,功能包括 AI 问答、Midjourney 绘图、知识库问答、艺术二维码等。用户无需自己开发 AI 系统、购买 AI 账户或担心 API 支持和支付系统配置,提供零启动成本和无风险的方式通过 AI 获…...

告别“假系”与“低挂”,云酷智能安全带重塑房建、桥梁及外墙装修的高空作业安全

在房建、桥梁建设及外墙装修场景中,吊篮作业的高空坠落风险始终悬而未决。传统管理模式下,“人员不系安全带”或“低挂高用”的违规行为屡禁不止。云酷智能安全带通过物联网技术实现实时监测,已成功应用于中交、中建、中铁等央企项目&#xf…...

2026长沙GEO优化公司权威实测:基于稳定性与转化效率的TOP5服务商深度推荐

2026长沙GEO优化公司权威实测:基于稳定性与转化效率的TOP5服务商深度推荐2026年,生成式AI搜索已深度重塑商业决策与品牌获客的路径。在全国GEO(生成式引擎优化)的版图中,长沙凭借活跃的数字经济生态与扎实的产业基础&a…...

Cesium性能优化:你可能不知道的onTick事件监听器内存泄漏问题

Cesium性能优化:你可能不知道的onTick事件监听器内存泄漏问题 在构建长时间运行的WebGIS应用时,Cesium的流畅渲染往往被视为首要目标。但许多开发者忽略了一个隐形杀手——未被正确清理的onTick事件监听器。这些看似无害的代码片段,会在用户毫…...