mt9d131 效果一般, 因为海思带它的驱动, 所以用的人还挺多, 呵呵.

很多芯片的驱动比较简单, 就是直接给某个寄存器赋某个值, 就ok, 具体这个寄存器是什么意思, 值是什么意思, 看datasheet就可以了.

mt9d131 要略微复杂一点

因为 mt9d131 里面可以配置的东西很多,  所以 mt9d131 把可以设置的东西分成3类

1. 硬件寄存器

2. driver变量

3. MCU内存

1.硬件寄存器

硬件寄存器和普通芯片的寄存器没有区别, 只是因为mt9d131的寄存器比较多, 所以, 一共分成了3页, page0,page1,page2

page0包含sensor的一些核心功能

page1包含颜色管线的一些控制

page2包含jpeg和其他一些处理

因此, 给mt9d131的某个寄存器赋值之前,先要明确是赋值给那一page,这是通过写入 0xF0寄存器来实现的.

写入0,表示后续操作都是针对page0, 写入1表示后续操作都是针对page1, 写入2表示page2

明确哪一页之后,就可以正常读写需要的寄存器了

比如下面的代码用于读取芯片标识

gpio_i2c_write(I2C_MT9D131, 0xf0, 0x00);
gpio_i2c_write(I2C_MT9D131, 0xf1, 0x00);

上面2行,表示切换到 page0

这里需要注意的是, 如果操作的目标是16位的,

而我们如果一次读写8位,需要额外读写0xf1寄存器,来读写后8位.

下面2行表示,读取page0的,r0寄存器,

因为一个寄存器是16位的, 所以要每次读写0xf1,把数据读写完整
unsigned char regvalue = gpio_i2c_read(I2C_MT9D131, 0x00);
int loop1 = gpio_i2c_read(I2C_MT9D131, 0xf1);
if((regvalue != 0x15) || (loop1 != 0x19))
{
        printk("read Prodect ID Number MSB is %x\n",regvalue);
        printk("read Prodect ID Number LSB is %x\n",loop1);
        printk("check mt9d131 ID error.\n");
}

通过datasheet,我们知道r0只读,恒为0x1519

其他对于寄存器的读写与此类似.

2.driver变量

mt9d131里面很多功能通过driver方式实现, 每个driver有一个id

所有这些driver组成mt9d131的固件, 这个固件可以运行在6811兼容的处理器(带数学协处理器)上.

比如

driver id 1 对应序列控制相关

driver id 2 对应自动曝光

driver id 3 对应自动白平衡

等等

每个driver有很多变量, 通过给这些变量赋值,来控制对应driver的行为

这是通过 0xC6 和 0xC8寄存器来实现的.

0xC6 是由driver id 和 相应的变量偏移组成

0xC8 是给对应的变量赋的值.

根据Datasheet, 给0xC6的赋值,由四部分组成

8~12位 为 driver id

0~7位 为 这个driver里面对应的变量的偏移

13~14位 为 1 表示 逻辑操作

15 为 0 表示 16位操作, 为 1 表示8位操作

比如下面的代码, 用于把 上下文A 的输出宽高设为 800x600

gpio_i2c_write(I2C_MT9D131, 0xf0, 0x00);

gpio_i2c_write(I2C_MT9D131, 0xf1, 0x01);

上面的代码切换到page1

根据datasheet,我们知道 对应的驱动为7, 变量偏移为3和5
gpio_i2c_write(I2C_MT9D131,0xC6, 0x27);

gpio_i2c_write(I2C_MT9D131,0xf1, 0x03);

gpio_i2c_write(I2C_MT9D131,0xC8, 0x03);

gpio_i2c_write(I2C_MT9D131,0xf1, 0x20);

上面的代码赋值 0x2703 给 0xC6

按规则分解开,可以知道

driver id = 7

变量地址 = 3

16位,逻辑操作

0x0320 也就是 800, 赋值给 0xC8

gpio_i2c_write(I2C_MT9D131,0xC6, 0x27);

gpio_i2c_write(I2C_MT9D131,0xf1, 0x05);

gpio_i2c_write(I2C_MT9D131,0xC8, 0x02);

gpio_i2c_write(I2C_MT9D131,0xf1, 0x58);

上面的代码赋值 0x2705 给 0xC6

按规则分解开,可以知道

driver id = 7

变量地址 = 5

16位,逻辑操作

0x0258 也就是 600, 赋值给 0xC8

当然,要完整地改变图像大小,还需要其他操作.

3. MCU内存

mt9d131 驱动简介相关推荐

  1. 设备驱动简介 -- ldd3读书笔记

    1. 概述 读<Linux Device Drivers 3>(影印版)(简称 ldd3)已经到第九章了,感觉前面的也忘的差不多了.所以准备把以前读过的内容做一下笔记,并且主要侧重代码的注 ...

  2. 【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介

    作者 : 韩曙亮 转载请出名出处 : http://blog.csdn.net/shulianghan/article/details/38636827 一. Linux 内核简介 1. 内核功能简介 ...

  3. Linux-USB Gadget : Part 6: dummy hcd 驱动简介

    Linux-USB Gadget : Part 6: dummy hcd 驱动简介 作者: zjujoe 转载请注明出处 Email:zjujoe@yahoo.com BLOG:http://blog ...

  4. linux系统网络驱动简介

    网络设备驱动简介 网络设备驱动是linux内核中三大类设备驱动之一,它用来完成高层网络协议的底层数据传输及设备控制. 网络设备与其他两种设备的区别: 网络接口不存在于linux的文件系统中,及/dev ...

  5. platform设备驱动简介

    简介: 目的:说白了就是为了将设备与驱动分离,通过platform总线进行连接 废话不多说: 相关结构介绍: 1.platform设备 结构体structplatform_device{ const ...

  6. 网络驱动简介==PHY子系统(linux驱动开发篇)

    一.PHY芯片简介 PHY是IEEE 802.3规定的一个标准模块 SOC可以对PHY 进行配置或者读取PHY 相关状态,这个就需要 PHY 内部寄存器去实现了. PHY 芯片寄存器地址空间为 5位( ...

  7. 【WinCE】流设备驱动简介及GPIO驱动的实现

    流设备驱动实际上就是导出标准的流接口函数的驱动,这是文档上面的定义.在WinCE中,所有的流设备都导出流设备接口,这样WinCE中的Device Manager可以加载和管理这些流设备驱动.  流设备 ...

  8. WinCE流设备驱动简介及GPIO驱动的实现

    作者:ARM-WinCE 流设备驱动实际上就是导出标准的流接口函数的驱动,这是文档上面的定义.在WinCE中,所有的流设备都导出流设备接口,这样WinCE中的Device Manager可以加载和管理 ...

  9. linux内核驱动之 设备驱动简介之内核划分

    目录 进程管理 内存管理 文件系统 设备控制 网络 在 Unix 系统中, 几个并发的进程专注于不同的任务. 每个进程请求系统资源, 象计算能力, 内存, 网络连接, 或者一些别的资源. 内核是个大块 ...

最新文章

  1. go移植linux内核书名叫啥,Go语言移植Linux内核数据结构hlist
  2. SAP MM 采购申请中的物料组字段改成Optional
  3. 实现集合类的元素删除和修改的一点实践。。。
  4. docker安装并运行elasticsearch
  5. BugKuCTF 杂项 又一张图片,还单纯吗
  6. Express中间件工作原理介绍
  7. boost::function_types::has_property_tag用法的测试程序
  8. nodejs和python和php_PHP和Nodejs能配合使用吗?
  9. PAT_B_1004_Java(20分)
  10. 如何自学java迅速成为java高手
  11. C++ static 类成员
  12. java对列_JAVA实现EXCEL行列号解析(一)——单格解析
  13. ABBYY2022PDF个人版
  14. Longest Common Prefix_LeetCode
  15. win10修复tcp驱动服务器,怎么解决tcpip.sys文件导致蓝屏|Win10的tcpip修复工具
  16. 戴尔3040计算机没有VGA接口,电脑没有vga接口怎么办
  17. Verilog 与门
  18. 访问网站时浏览器提示“不安全”是什么原因?
  19. NS3安装步骤【MAC系统】
  20. 贿赂囚犯 Bribe the prisoners DP

热门文章

  1. 钉钉小程序上传附件(PDF等非媒体文件)至第三方文件服务器(企业内部应用)
  2. SumperMap基本编程
  3. VTK修炼之道65:体绘制裁剪_Cropping技术
  4. MATLAB-函数图像绘制
  5. java 交易不返回,Java rowAtPoint()不返回正确的值
  6. 蓝牙模块HC05与HC06的连接
  7. 云计算核心技术和框架整理
  8. Hdu.1248.寒冰王座
  9. 抖音上android studio,快手、抖音、微视类短视频SDK接入教程,7步就能搞定
  10. A fatal error has been detected by the Java Runtime Environment, C [VCRUNTIME140.dll+0x1989]