最近调试MT9M001的CMOS,文档有些不是很清楚,将调试过程中对这款CMOS的理解归纳如下:

1、非针对此款CMOS,一般的需要和CPU同步的外围模块都需要注意以下几点:需要同步信号的极性(如MT9M001的行同步,场同步,像素极性等)是否和CPU一致,若不一致或不能确定,最好借助其他方法确定或者验证;

2、MT9M001的理解:手册资料见:MT9M001官方资料

a\使用的是黑白单色的CMOS;

b\所有寄存器为16bit,读写等见具体寄存器说明;

c\0x00寄存器,为只读寄存器,可以用来验证I2C通道是否正常;

d\0x01,0x02寄存器是行起始和列起始;也就是整个CMOS,从第几行(列)开始才是有效数据;验证试验:将0x01设置较大值,采集出来的图像,最下面是黑色的空白的,也就是没有图像,最上面是缺失的,其实就是图像整体上移了[0x01]行;

e\0x03,0x04寄存器应该是主要用于缩放,扩放等功能(个人理解);验证试验:设置0x03,0x04寄存器分别为480,640时,采集到的图像是变为了640X480的大小了没错,但是实际上图像只是整体图像的一部分而已,部分感光区没有作用;(分别设置输出图像大小为1280X1024采集图像1,设置输出图像大小为640X480采集图像2,图象2和图象1部分是完全重叠的),切记此点,不要作为采集小于默认图像(1280X1024)时设置的图像大小(如果不想只使用部分感光区的话);

f\0x05,0x06寄存器时消隐行(列)的大小;也就是无效行(列)宽的大小,消隐区域作用主要是间隔有效区域,同步,更加详细了解自己查资料;

g\0x07寄存器最主要的作用是bit6的测试模式,注意测试模式时,实际输出的数据(0x32寄存器设置)不是每个像素都相同的,而是奇数列和偶数列的数据时反向的(是将0反向1这样,还是高低位反向的忘记了,具体可以自己做实验,我确定后再修改此处);

h\0x09,0x0c寄存器是用于集成行(列)的延时,大致是这样的:当0x09寄存器值大于有效行与消隐行之和时,实际输出时,会自动增加消隐行到  0x09寄存器 - 有效行,否则按照实际有效行和设置的消隐行输出;一句话:R09与总行数(有效与消隐之和)作比较,谁大听谁的;

i\0x1E,0x20等寄存器主要用于设置要求输出图像大小不是默认的1280X1024时的设置,设置0x20寄存器的bit3、4,可以得到最终输出图像变为640X512(可以理解为640X480的大小),此时输出的数据就是这么多,感光区的有效区域仍然是全部的,此处和e点的0x03\4寄存器对应上了(怎么设置其他标准的窗口图像输出);

j\0x2B,0x2C,0x2D,0x2E,  0x35寄存器主要用于调整CMOS的增益(gain);值与增益倍数非线性的,详见手册说明;

注意:当设置0x20调试输出图像格式后,想通过降低消隐区域来提高帧速率时(设置R09寄存器为较小的适当值),生成的图像会随着R09寄存器值的变小而显得愈加黑暗,不知道什么原因,不过我们使用的640X480的图像,R09寄存器设置为512左右,图像稍暗,通过增大增益,显示完全可以使用;最终采集到的图像是640X480,帧速率为50FPS;

MT9M001的调试理解相关推荐

  1. 树形dp——树的重心(2) 代码调试理解

    和树的最大独立问题类似,先任选一个结点作为根节点,把无根树变成有根树,然后设d(i)表示以i为根的子树的结点的个数.不难发现d(i)=∑d(j)+1,j∈s(i).s(i)为i结点的所有儿子结点的编号 ...

  2. 基于GDB-peda汇编调试理解函数调用栈

    一.前言 1.1 叙叙旧 距离上一次写文章已经过去3个月了,当初计划至少一个月一篇,不曾想这一拖就是三个月.一直不写的主要原因是当把一个问题弄清楚了,或者说掌握了一个东西,就觉得没有什么可值得写:另外 ...

  3. 单步调试理解webpack里通过require加载nodejs原生模块实现原理

    在webpack和nodejs里,我们经常使用require函数加载原生模块或者开发人员自定义的模块. 原生模块的加载,比如: const path = require("path" ...

  4. 通过单步调试理解Angular里routerLink指令实际url的生成逻辑

    My Analysis I set a breakpoint in function generateUrlPart in file Spartacus-core.js: For every path ...

  5. 针对于多线程概念的理解

    今天是2月28日,本来的想法是每月一两篇,但是时间有点太匆忙,在这里也想向大家说一说,时间很少,愿各位好好珍惜,今天谈一谈多线程,如同其文字描述一样,线程很多,这也是多线程存在的原因,那首先什么是多线 ...

  6. 基于Kubernetes1.20.1版本开发调试环境搭建

    接下来的一段时间将要学习Kubernetes源码,为了更好的查看源码和调试程序,因此搭建了一个Kubernetes开发调试环境,该环境可以结合断点调试理解代码的运行过程. 准备虚拟机并安装必要软件 $ ...

  7. Python装饰器最经典教程,以最易理解的方式教会你

    ##开场白 什么是装饰器? 装饰器: 定义:本质是函数,是用来装饰其他函数,就是为其他函数添加附加功能 原则:1.不能修改被装饰函数的源代码 2.不能修改被装饰的调用方式 装饰器有什么用? 如果这写函 ...

  8. linux内核调试指南

    Hunnad的专栏 * 条新通知 * 登录 * 注册 * 欢迎 * 退出 * 我的博客 * 配置 * 写文章 * 文章管理 * 博客首页 * * * * 空间 * 博客 * 好友 * 相册 * 留言 ...

  9. 室友打了一晚上游戏我学会了使用GDB调试

    gdb调试 GDB的重要性 启动gdb 查看程序的源码 gdb启动程序 设置断点 删除断点或者或者禁用断点 单步调式 查看这个变量的值 gdb 调试core文件 使用gdb调试正在运行的程序 gdb ...

最新文章

  1. 2019-05-26 Java学习日记之Set集合
  2. 博士学位论文 | 机器阅读理解与文本问答技术研究
  3. OpenGL 延迟着色法Deferred Shading
  4. 1.17.Flink 并行度详解(Parallel)、TaskManager与Slot、Operator Level、Execution Environment Level、Client Level等
  5. iptables for循环
  6. mac vim python3_VIM学习笔记 编译源码(Compile Code)-Python
  7. linux的搜索和时间
  8. 推荐实践:结对Review
  9. angularJS表达式详解!
  10. django multidb --- router
  11. google内部考核制度OKR
  12. C语言三种形式编九九乘法表,C语言九九乘法表(五种输出形式)
  13. Wannacry“永恒之蓝”勒索病毒最全防范措施
  14. 使用压缩包安装mysql
  15. 微信公众号(注册申请)
  16. 电脑开机按F1的解决方法
  17. Ubuntu系统没有声音解决方案
  18. API入门系列之五 -一个正儿八经的SDK程序
  19. Mysql导出表结构到excel
  20. 带‘’文件”APP的苹果手机和电脑之间的文件互传

热门文章

  1. SAP License:ERP管理系统维护
  2. SSH客户端Putty与多标签的Putty CM(puttycm)/MTPutty的配置使用方法
  3. 带有EP4CE的FPGA(ALTERA)的固化程序图文教程
  4. 打印1-100之间所有3的倍数
  5. python剪切文件
  6. 市场上五花八门的固码
  7. matlab频谱分析(简明版)
  8. 【学习一下】HF-Net 训练
  9. Palabos User Guide中文解读 | 第十六章 | 非局部操作的数据处理器和Block之间耦合
  10. Teamcenter Organization