OV7670寄存器读出0x00或0xFF

文章目录

  • 问题描述
  • 原因分析
  • 解决方案


问题描述

OV7670的输出图像异常,怀疑寄存器没有正确配置,在SignalTap中观察到SIO_D在读出阶段一直为高或低

寄存器读出0x00

寄存器读出0xFF


原因分析

在确保电源、时钟和读写时序没有问题的情况下,有可能是OV7670模块中SIO_C与SIO_D的引脚没有接上拉电阻,导致寄存器无法正常读写


解决方案

在FPGA对应引脚上开启上拉电阻,具体过程见 Altera FPGA 开启引脚片上上拉电阻功能

问题解决,寄存器读出0x17

标红的地方需要把SIO_D设置为高阻状态

这里附上SIO_C与SIO_D的时序,可以根据序列号1C7F & 1DA2进行验证

// 配置SCL与SDA
reg scl_reg;
reg sda_reg;
always@(posedge clk or negedge rst_n)beginif(!rst_n)beginscl_reg <= 1'b1;sda_reg <= 1'b1;dout <= 1'b0;endelse begin// 写寄存器if(mode == 1'b1)begincase(cnt_step)// 开始标志    0 :begin scl_reg <= 1'b1; sda_reg <= 1'b1; end1 :begin scl_reg <= 1'b1; sda_reg <= 1'b0; end2 :begin scl_reg <= 1'b0; sda_reg <= 1'b0; end// ID地址3 :begin scl_reg <= scl_high; sda_reg <= data[23]; end4 :begin scl_reg <= scl_high; sda_reg <= data[22]; end5 :begin scl_reg <= scl_high; sda_reg <= data[21]; end6 :begin scl_reg <= scl_high; sda_reg <= data[20]; end7 :begin scl_reg <= scl_high; sda_reg <= data[19]; end8 :begin scl_reg <= scl_high; sda_reg <= data[18]; end9 :begin scl_reg <= scl_high; sda_reg <= data[17]; end10:begin scl_reg <= scl_high; sda_reg <= data[16]; end11:begin scl_reg <= 1'b0; sda_reg <= 1'bz; end12:begin scl_reg <= scl_high; sda_reg <= 1'bz; end13:begin scl_reg <= 1'b0; sda_reg <= 1'b0; end// 子地址14:begin scl_reg <= scl_high; sda_reg <= data[15]; end15:begin scl_reg <= scl_high; sda_reg <= data[14]; end16:begin scl_reg <= scl_high; sda_reg <= data[13]; end17:begin scl_reg <= scl_high; sda_reg <= data[12]; end18:begin scl_reg <= scl_high; sda_reg <= data[11]; end19:begin scl_reg <= scl_high; sda_reg <= data[10]; end20:begin scl_reg <= scl_high; sda_reg <= data[9]; end21:begin scl_reg <= scl_high; sda_reg <= data[8]; end22:begin scl_reg <= 1'b0; sda_reg <= 1'bz; end23:begin scl_reg <= scl_high; sda_reg <= 1'bz; end24:begin scl_reg <= 1'b0; sda_reg <= 1'b0; end// 写入数据25:begin scl_reg <= scl_high; sda_reg <= data[7]; end26:begin scl_reg <= scl_high; sda_reg <= data[6]; end27:begin scl_reg <= scl_high; sda_reg <= data[5]; end28:begin scl_reg <= scl_high; sda_reg <= data[4]; end29:begin scl_reg <= scl_high; sda_reg <= data[3]; end30:begin scl_reg <= scl_high; sda_reg <= data[2]; end31:begin scl_reg <= scl_high; sda_reg <= data[1]; end32:begin scl_reg <= scl_high; sda_reg <= data[0]; end33:begin scl_reg <= 1'b0; sda_reg <= 1'bz; end34:begin scl_reg <= scl_high; sda_reg <= 1'bz; end35:begin scl_reg <= 1'b0; sda_reg <= 1'b0; end                   // 结束标志36:begin scl_reg <= 1'b1; sda_reg <= 1'b0; end37:begin scl_reg <= 1'b1; sda_reg <= 1'b1; endendcaseend// 读寄存器else if(mode == 1'b0)begincase(cnt_step)// 开始标志    0 :begin scl_reg <= 1'b1; sda_reg <= 1'b1; end1 :begin scl_reg <= 1'b1; sda_reg <= 1'b0; end2 :begin scl_reg <= 1'b0; sda_reg <= 1'b0; end// ID地址3 :begin scl_reg <= scl_high; sda_reg <= data[23]; end4 :begin scl_reg <= scl_high; sda_reg <= data[22]; end5 :begin scl_reg <= scl_high; sda_reg <= data[21]; end6 :begin scl_reg <= scl_high; sda_reg <= data[20]; end7 :begin scl_reg <= scl_high; sda_reg <= data[19]; end8 :begin scl_reg <= scl_high; sda_reg <= data[18]; end9 :begin scl_reg <= scl_high; sda_reg <= data[17]; end10:begin scl_reg <= scl_high; sda_reg <= data[16]; end11:begin scl_reg <= 1'b0; sda_reg <= 1'bz; end12:begin scl_reg <= scl_high; sda_reg <= 1'bz; end13:begin scl_reg <= 1'b0; sda_reg <= 1'b0; end// 子地址14:begin scl_reg <= scl_high; sda_reg <= data[15]; end15:begin scl_reg <= scl_high; sda_reg <= data[14]; end16:begin scl_reg <= scl_high; sda_reg <= data[13]; end17:begin scl_reg <= scl_high; sda_reg <= data[12]; end18:begin scl_reg <= scl_high; sda_reg <= data[11]; end19:begin scl_reg <= scl_high; sda_reg <= data[10]; end20:begin scl_reg <= scl_high; sda_reg <= data[9]; end21:begin scl_reg <= scl_high; sda_reg <= data[8]; end22:begin scl_reg <= 1'b0; sda_reg <= 1'bz; end23:begin scl_reg <= scl_high; sda_reg <= 1'bz; end24:begin scl_reg <= 1'b0; sda_reg <= 1'b0; end// 结束标志25:begin scl_reg <= 1'b1; sda_reg <= 1'b0; end26:begin scl_reg <= 1'b1; sda_reg <= 1'b1; end// 开始标志27:begin scl_reg <= 1'b1; sda_reg <= 1'b1; end28:begin scl_reg <= 1'b1; sda_reg <= 1'b0; end29:begin scl_reg <= 1'b0; sda_reg <= 1'b0; end                    // ID地址30:begin scl_reg <= scl_high; sda_reg <= data[23]; end31:begin scl_reg <= scl_high; sda_reg <= data[22]; end32:begin scl_reg <= scl_high; sda_reg <= data[21]; end33:begin scl_reg <= scl_high; sda_reg <= data[20]; end34:begin scl_reg <= scl_high; sda_reg <= data[19]; end35:begin scl_reg <= scl_high; sda_reg <= data[18]; end36:begin scl_reg <= scl_high; sda_reg <= data[17]; end37:begin scl_reg <= scl_high; sda_reg <= 1'b1; end38:begin scl_reg <= 1'b0; sda_reg <= 1'bz; end39:begin scl_reg <= scl_high; sda_reg <= 1'bz; end40:begin scl_reg <= 1'b0; sda_reg <= 1'bz; end// 读出数据41:begin scl_reg <= scl_high; sda_reg <= 1'bz; dout[7] <= sdat; end42:begin scl_reg <= scl_high; sda_reg <= 1'bz; dout[6] <= sdat; end43:begin scl_reg <= scl_high; sda_reg <= 1'bz; dout[5] <= sdat; end44:begin scl_reg <= scl_high; sda_reg <= 1'bz; dout[4] <= sdat; end45:begin scl_reg <= scl_high; sda_reg <= 1'bz; dout[3] <= sdat; end46:begin scl_reg <= scl_high; sda_reg <= 1'bz; dout[2] <= sdat; end47:begin scl_reg <= scl_high; sda_reg <= 1'bz; dout[1] <= sdat; end48:begin scl_reg <= scl_high; sda_reg <= 1'bz; dout[0] <= sdat; end49:begin scl_reg <= scl_high; sda_reg <= 1'b1; end// 结束标志50:begin scl_reg <= 1'b1; sda_reg <= 1'b0; end51:begin scl_reg <= 1'b1; sda_reg <= 1'b1; endendcaseendend
endassign sclk = scl_reg;
assign sdat = idle ? 1'bz : sda_reg;

简单粗暴的穷举~

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

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

相关文章

PCB系统学习(1)--PCB印制电路板

PCB印制电路板 1.1PCB的定义1.2PCB的层叠结构1.2.1PCB单层板1.2.2PCB双层板1.2.3PCB四层板 1.3PCB的通孔&#xff0c;盲孔&#xff0c;埋孔1.4元器件的符号与封装1.5PCB的生产过程 1.1PCB的定义 PCB(PrintedCircuitBoard)&#xff0c;中文即印制电路板&#xff0c;或印刷线路板…

Linux--多线程

今日内容 线程的结束机制&#xff1a; 1.不同与进程没有孤儿线程和僵尸线程。 2.主进程结束&#xff0c;任意生成的次线程都会结束。(因为共享的进程空间被回收了)。 3.次线程的正常结束不会影响主线程的运行。 子线程的回收策略&a…

《0基础》学习Python——第十八讲__爬虫\<1>

一、什么是爬虫 爬虫是一种网络数据抓取的技术。通过编写程序&#xff08;通常使用Python&#xff09;&#xff0c;爬虫可以自动化地访问网页&#xff0c;解析网页内容并提取出所需的数据。爬虫可以用于各种用途&#xff0c;如搜索引擎的索引&#xff0c;数据分析和挖掘&#x…

NVIDIA 完全过渡到开源 GPU 内核模块

目录 支持的 GPU安装程序更改将包管理器与 CUDA 元包配合使用使用 runfile使用安装帮助程序脚本包管理器详细信息apt&#xff1a;基于 Ubuntu 和 Debian 的发行版dnf&#xff1a;Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linuxzypper&#xff1a;SUSE …

怎么关闭 Windows 安全中心,手动关闭 Windows Defender 教程

Windows 安全中心&#xff08;也称为 Windows Defender Security Center&#xff09;是微软 Windows 操作系统内置的安全管理工具&#xff0c;用于监控和控制病毒防护、防火墙、应用和浏览器保护等安全功能。然而&#xff0c;在某些情况下&#xff0c;用户可能需要关闭 Windows…

【分布式事务】怎么解决分布式场景下数据一致性问题

分布式事务的由来 拿充值订单举个栗子吧&#xff0c;假设&#xff1a;原本订单模块和账户模块是放在一起的&#xff0c;现在需要做服务拆分&#xff0c;拆分成订单服务&#xff0c;账户余额服务。原本收到充值回调后&#xff0c;可以将修改订单状态和扣减余额放在一个mysql事务…

C语言 | Leetcode C语言题解之第236题二叉树的最近公共祖先

题目&#xff1a; 题解&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/typedef struct road_t {struct TreeNode *road_node; // 途径路径struct road_t *p_next; }…

IPD与CBB研发技术管理体系培训

获取下载完整PPT见下图 更多有关华为研发管理/IPD、MBSE、PLM、ERP、MES、数据治理、数字样机等方面免费解决方案、资料获取&#xff0c;请见下图

python—爬虫的初步了解

Python 爬虫&#xff08;Web Scraping&#xff09;是一种自动化从网站上提取数据的技术。Python 由于其简洁的语法、丰富的库和强大的社区支持&#xff0c;成为了实现网络爬虫的首选语言之一。下面是一些Python爬虫的基本概念和步骤&#xff1a; 1. 爬虫的基本概念 请求&…

深入理解Java线程的状态

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

8月长沙学术会议:经济金融发展国际会议(ICEFD 2024)

经济金融发展国际会议&#xff08;ICEFD 2024&#xff09;将于2024年8月20-22日在长沙盛大举行。本次会议汇聚了国内外众多高校、科研机构、企业界及其他相关领域的专家学者&#xff0c;共同探讨经济金融发展的新趋势、新挑战和新机遇。 长沙&#xff0c;这座历史悠久的文化名…

​前端Vue组件技术实践:打造自定义精美悬浮菜单按钮组件

随着前端技术的迅猛发展&#xff0c;复杂的应用场景和不断迭代的产品需求使得开发的复杂度日益提升。传统的整体式开发方式已经难以满足现代前端应用的灵活性和可维护性需求。在这样的背景下&#xff0c;组件化开发逐渐崭露头角&#xff0c;成为解决复杂前端应用问题的有效手段…

自学第十九天----深入探究数组下

3. 数组越界 数组的下标是有范围限制的。 数组的下规定是从0开始的&#xff0c;如果数组有n个元素&#xff0c;最后一个元素的下标就是n-1。 所以数组的下标如果小于0&#xff0c;或者大于n-1&#xff0c;就是数组越界访问了&#xff0c;超出了数组合法空间的访问。 C语言本身…

IDEA的常见代码模板的使用

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试&#xff08;Debug&#xff09; 第七章 …

Matlab学习笔记1

画点 x[-1, -1, 1, 1, -1, 0] y[-1, 1, 1, -1, -1, 0] % r是颜色&#xff0c; o是点的形状 plot(x, y, ro) % 画线 plot(x, y, r)求最大最小值 x[-1, -1, 1, 1, -1, 0] y[-1, 1, 1, -1, -1, 0] % -1 min(y) % 1 max(x)计算二维旋转矩阵 dcm angle2dcm(z_angle, y_angle, …

上海凯百斯纳米受邀盛装亮相2024第13届上海国际生物发酵展

凯百斯纳米技术&#xff08;上海&#xff09;有限公司专注于高压均质、破碎、乳化、分散、粉碎等解决方案&#xff01;E7馆B08展位与您相约&#xff01; 2024第13届国际生物发酵产品与技术装备展览会&#xff08;上海&#xff09;于8月7-9日在上海新国际博览中心盛大召开&…

[解决方法]Request failed with status code 500错误之一

在写项目时访问后端api时我的axios拦截器进入了错误 然后去浏览器搜索&#xff0c;但是大部分都是因为axios参数或参数格式问题导致的&#xff0c;然而在访问api的编写没有任何问题&#xff0c;后来我反复检查&#xff0c;发现是我写前后端写混了&#xff0c;我把express的 Co…

<数据集>钢铁缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1800张 标注数量(xml文件个数)&#xff1a;1800 标注数量(txt文件个数)&#xff1a;1800 标注类别数&#xff1a;6 标注类别名称&#xff1a;[crazing, patches, inclusion, pitted_surface, rolled-in_scale, scr…

视频共享融合赋能平台LntonCVS视频监控管理平台视频云解决方案

LntonCVS是基于国家标准GB28181协议开发的视频监控与云服务平台&#xff0c;支持多设备同时接入。该平台能够处理和分发多种视频流格式&#xff0c;包括RTSP、RTMP、FLV、HLS和WebRTC。主要功能包括视频直播监控、云端录像与存储、检索回放、智能告警、语音对讲和平台级联&…

WordPress外贸建站案例

Vicuna维楚纳wordpress外贸主题 Vicuna维楚纳wordpress外贸主题&#xff0c;适合跨境电商产品展示的wordpress外贸建站模板。 https://www.jianzhanpress.com/?p7132 Der德尔wordpress建站主题 经典中国红红色wordpress主题&#xff0c;适合跨境电商产业园企业建站的wordpr…