tag 标签: mt9d111

相关博文
  • 热度 13
    2015-6-27 22:09
    3023 次阅读|
    1 个评论
          接上一篇。上一篇介绍的是I2C的写操作。       接着介绍I2C的读操作。读操作要比写操作复杂一些,因为读操作也是从写操作开始的,要写入从哪里个地址开始读。读函数也得重新封装,函数名字定义为:SensorRead1A2B(uint8_t slaveAddr, uint8_t OneAddr),1A代表的是1个字节的寄存器地址,2B代表的是2个字节的寄存器值,输入参数有两个,一个是slaveAddr,另一个是OneAddr。       测试此函数的方法同前面,下面是截图,也就是读回MT9M001的ID,         对上图进行一下说明。MT9M001的ID是寄存器0x00里的值,正确的是0x8431。上图是一个完整的ID读操作,第一步要通过0xBA写入要读取的寄存器地址0x00。 第二步写入0xBA,读回的值是0x8431,高字节0x84在前,低字节0x31在后。可以看到,ID值已经被正确读回。            AN75779配套的摄像头是MT9M114,是一款120万像素的,分辨率是720P的,分辨率是1280 X 720的。MT9M001是一款130万像素的,分辨率是1280 X 1024的。在默认情况下,两者分辨率是不同的,需要重新配置一下MT9M001,使MT9M001的输出分辨率也为 1280 X 720,这样才有可能成像。      查MT9M001的数据手册,找到与窗口控制相关的寄存器如下:             上面红框中的是与窗口大小相关的。改变这两个寄存器的值,可以改变摄像头输出的窗口大小。这两个寄存器的解释如下:      寄存器0x03是设置窗口大小的,默认值是0x03FF,对应的十进制是1023(1024-1)。 我们需要输出是719(720-1),16进制是0x02CF,也就是要通过I2C写入0x03的值是0x02CF。        未完待续,,,,。     (另公布一群号178338109,CYUSB3014开发专业讨论区)     淘宝店铺: http://liangziusb.taobao.com 良子.2015年    承接USB开发工程  QQ:2687652834  
  • 热度 19
    2015-6-27 12:17
    2725 次阅读|
    0 个评论
          接上一篇。       这一篇文章介绍测试AN75779的I2C通信功能,读回摄像头MT9M001的ID。       AN75779提供了95%的源程序,仅是没有包括与摄像头相关的初始代码,但提供了I2C读写的函数,分别是一字节读写和二字节读写。打开文件sensor.c,可以找到4个函数,分别是: 1、 CyU3PReturnStatus_t SensorWrite2B(uint8_t slaveAddr, uint8_t highAddr, uint8_t lowAddr, uint8_t highData, uint8_t lowData) 2、 CyU3PReturnStatus_t SensorWrite(uint8_t slaveAddr, uint8_t highAddr, uint8_t lowAddr, uint8_t count, uint8_t *buf) 3、 CyU3PReturnStatus_t SensorRead2B(uint8_t slaveAddr, uint8_t highAddr, uint8_t lowAddr, uint8_t *buf) 4、 CyU3PReturnStatus_t SensorRead(uint8_t slaveAddr, uint8_t highAddr, uint8_t lowAddr, uint8_t count, uint8_t *buf)         这4个函数,都提供了源代码,用户可以仔细看一下。既然有现成的函数,我们直接用就好了。还有就是最基本的I2C读写函数,官方也提供了API函数,分别是CyU3PI2cReceiveBytes()和CyU3PI2cTransmitBytes(),分别对应一收一发。       I2C读写函数有了,我们再查一下摄像头MT9M001的地址,ID对应的寄存器地址及正确的ID值是多少。仔细查阅MT9M001的数据手册,可以找到器件地址是0xBA,ID对应的寄存器地址是0x00,正确的ID值应该是0x8431,如下图所示:        注意到寄存器地址是一字节的,值是是二字节的。这与前面的4个I2C读写函数都不太相同。前面的4个读写函数,寄存器的地址都是双字节的,看来需要我们修改这几个函数。先统一一下函数名称,前面4个I2C读写函数,结合MT9M001的特点,可以只使用2个,函数名称统一为:SensorWrite1A2B(参数),SensorRead1A2B(参数)。其中的1A代表地址是1字节的,2B代表寄存器的值是2个字节的。以函数SensorWrite1A2B()为例,修改成如下: CyU3PReturnStatus_t SensorWrite1A2B(uint8_t slaveAddr, uint8_t OneAddr,uint16_t RegisterValue)        其中第一个参数为MT9M001的器件地址,第二个参数是寄存器的地址,是8位的一个字节,第三个参数是要写入寄存器的值,是16位的两个字节。接下来验证这个函数的正确性,按MT9M001数据手册里提供的验证,手册中的如下:       实现以上功能的函数就是:glDebugRspBuffer = SensorWrite1A2B (SENSOR_ADDR_WR, 0x09, 0x0284);       按照之前测试摄像头复位的方法,将SensorWrite1A2B()插入到SensorReset()后,输入的指令也一样。采集后的I2C波形如下:       上图用红线分隔成4部分,每一部分为一字节,左数第一部分为MT9M001的器件地址,十进制为186,16进制为0xBA,第二部分为寄存器地址,16进制为0x09,第三部分为寄存器值的高位,十进制的02,16进制也为0x02,第四部分是寄存器值的低为,16进制的0x84。可以看到,和数据手册描述的一样,成功验证了I2C的写操作。       未完待续,,,,。     (另公布一群号178338109,CYUSB3014开发专业讨论区)     淘宝店铺: http://liangziusb.taobao.com 良子.2015年    承接USB开发工程  QQ:2687652834
  • 热度 22
    2015-6-27 12:16
    1154 次阅读|
    0 个评论
        正在更新,,,,     (另公布一群号178338109,CYUSB3014开发专业讨论区)     淘宝店铺: http://liangziusb.taobao.com 良子.2015年    承接USB开发工程  QQ:2687652834
  • 热度 23
    2015-6-24 21:46
    1945 次阅读|
    0 个评论
            接上一篇。         接着测试摄像头的复位信号。将复位的函数SensorReset()插入到如下位置,当程序执行到此位置时,对摄像头进行复位。                  在实际测试之前,先看一下开发板的连接情况,如下:        CYUSB3014使用的是GPIO22,或者说是CTL5,直接连到MT9M001的复位引脚上。 下载完AN75779附带的程序后,按下图操作,输入控制命令,        对上图进行一下说明。1是选择的OUT端点,2是选择进行数据传输,3是输入的命令,4是命令执行按钮,5是显示命令已经成功执行的信息。在执行上面的操作过程中,用示波器监测一下GPIO22,结果如下:       示波器一格的宽度是10mS,复位信号的低电平大致也是 10mS,与程序的功能一致。这样,我们已经验证了AN75779的复位功能。     未完待续,,,,下一篇会接着介绍如何验证AN75779的I2C通信功能。         (另公布一群号178338109,CYUSB3014开发专业讨论区)     淘宝店铺: http://liangziusb.taobao.com 良子.2015年    承接USB开发工程  QQ:2687652834
  • 热度 24
    2015-6-23 20:39
    2182 次阅读|
    0 个评论
          接上一篇。       除了前面介绍的8位数据线、行有效LV和场有效FV、像素时钟PCLK、复位信号RESET外,还有几根线要特别注意,1是I2C的两根线SDA和SCK,先看摄像头的接口电路,如下:        上面的第1、2脚SCK和SCL要和USB3.0的对应引脚相连。25脚是输入给摄像头的时钟,频率是48M,这个时钟信号需要摄像头子板提供。24脚是掉电控制引脚,之前此引脚是由FPGA直接控制,这里需要将这个引脚直接接高电平,不起作用。最后一个是11引脚电源引脚,需要由USB3.0开发板提供给摄像头子板。上面接口中,17脚不用、22脚和26脚不用。       另外要说明的是,MT9M001的分辨率为12位,这个测试只取高8位信号,低4位放弃不用。高8位信号在现在的阶段也不需要连接到USB3.0开发板上,以方便我们测试。       硬线连接好后,我们可以给开发板上电,用示波器测量LV、FV和PCLK信号,均有正常的波形输出。       接下来我们测试用USB3.0的I2C总线控制摄像头。文件sensor.c都是一些控制SENSOR的操作指令,都是通过I2C总线的,如单字节读写、双字节读写等。在测试I2C之前,最好对摄像头进行初始化。USB3.0初始化的引脚是GPIO22,可以看下面的下定义: /* GPIO 22 on FX3 is used to reset the Image sensor. */ #define SENSOR_RESET_GPIO 22          实现初始化的操作是先将GPIO22设置成低电平,10mS延时,再将GPIO22恢复为高电平,完成初始化操作。代码如下:   /* Drive the GPIO low to reset the sensor. */ apiRetStatus = CyU3PGpioSetValue(SENSOR_RESET_GPIO, CyFalse);   /* Wait for some time to allow proper reset. */ CyU3PThreadSleep(10);   /* Drive the GPIO high to bring the sensor out of reset. */ apiRetStatus = CyU3PGpioSetValue(SENSOR_RESET_GPIO, CyTrue);      以上内容被封装成一个函数void SensorReset(void),在文件SENSOR.C文件中。这个函数只被调用了一次,是在UVC初始化函数中调用的,在文件UVC.C中。由于这个摄像头复位操作不受我们控制,我们不能随意操作这个函数。接下来,我们创建一个单独的命令(控制传输指令),来控制复位这个函数。      在继续移植前,我们先看一下AN75779下载到USB3.0开发板后是什么样子的。下载完固件后,需要重新安装驱动(此处以后会详述),以便在Control Center中能够查看到两个调试用的端点,如下:        上图中红色框中的就是两个调试用的端点,一个是OUT,一个是IN。另外,下载完固件后,设备管理器中有两个设备,如下:         未完,待续,接下一篇文章。   (另公布一群号178338109,CYUSB3014开发专业讨论区)     淘宝店铺: http://liangziusb.taobao.com 良子.2015年    承接USB开发工程  QQ:2687652834
相关资源