找回密码
 注册
搜索
查看: 1550|回复: 8

[讨论] 美光 cmos sensor mt9v0223 寄存器写不进去

[复制链接]
发表于 2009-7-30 19:26:12 | 显示全部楼层 |阅读模式
最近做一个摄像头项目,用 2440的 IIC  来控制 Micron mt9v023,现在读mt9v023的寄存器没有问题,读出来的值与手册上的默认值都相符,但写一个新值进去,读出来的还是原来的默认值,不知道为什么写不进去。程序是按照手册写的,用示波器看 SCL,SDA 的波形也都没问题,应答也有,就是不知道问题出在哪里,麻烦大家指点一下。谢谢了。

我把程序和手册上的写寄存器示意图贴上来吧。他的这个波形还有问题,第五个发的是 0xF0,波形却是 0x80.
/*******************************************************************************
* Function Name  : Cam_WriteReg_8bits
* Description    : Write register use 8-bit sequence.
* Input          : Addr of rigister;
                 : Data will be writed into register .
* Output         : None
* Return         : None
*******************************************************************************/
void Cam_WriteReg_8bits(char addr,int data)
{
  char Byte1,Byte2;
  Byte1 = ((data & 0xFF00)>>8);
  Byte2 = (data & 0x00FF);
  
     /* ACK Disable;
        Tx clock selection:Fpclk/512;
        Tx/Rx interrupt enable(Must be set although you does not use interrupt;
        Clear pengding flag ang resume the operation
     */
////////////////////////////////////////////////////////////////////////////////
     //Send 0xB8 with Start signal
     rIICCON = 0x6F;
     //Enable Rx/Tx for write rIICDS
     rIICSTAT = (1<<4);
     //Write address to rIICDS
     rIICDS = 0xB8;     
     //Set mode as master transmit;Generate start signal
     rIICSTAT = 0xF0;
     while(!(rIICCON & 0x10));
      
     //Send addr
     rIICDS = addr;
     rIICCON = 0x6F;
     while(!(rIICCON & 0x10));
     
     //Send Byte1
     rIICDS = Byte1;
     rIICCON = 0x6F;
     while(!(rIICCON & 0x10));
         
     //Send 0xB8 with Start signal
     rIICSTAT = (0<<4);
     rIICCON = 0x6F;
     rIICSTAT = (1<<4);
     //Write address to rIICDS
     rIICDS = 0xB8;     
     //Set mode as master receive;Generate start signal
     rIICSTAT = 0xF0;
     while(!(rIICCON & 0x10));
     
     //Send addr
     rIICDS = 0xF0;
     rIICCON = 0x6F;
     while(!(rIICCON & 0x10));
     
     //Send Byte2
     rIICDS = Byte2;
     rIICCON = 0x6F;
     while(!(rIICCON & 0x10));
     
     //Generation stop signal(Master transmit);
     rIICSTAT = 0xD0;
     rIICCON = 0x6F;
}
 楼主| 发表于 2009-7-30 19:27:02 | 显示全部楼层
不好意思,第一次没发上来。

[upload=jpg]UploadFile/2009-7/09730@52RD_Snap1.jpg[/upload]
点评回复

使用道具 举报

 楼主| 发表于 2009-7-31 19:08:00 | 显示全部楼层
今天又试了一天,程序不做修改,写进去,看结果,断电,再写,再看结果。偶尔能写进去。试图从中找到些规律,无果。愁。。。。
点评回复

使用道具 举报

 楼主| 发表于 2009-8-3 08:14:16 | 显示全部楼层
没人知道啊[em07][em06]
点评回复

使用道具 举报

发表于 2009-8-6 09:09:07 | 显示全部楼层
我现在也在用美光,希望大家能交流。QQ279983478
点评回复

使用道具 举报

发表于 2009-8-6 09:39:49 | 显示全部楼层
时序正确了,你看看波特率,是不是太快了,差不多110K左右吧我试过高波特率,出国问题。
点评回复

使用道具 举报

发表于 2009-8-10 16:57:32 | 显示全部楼层
硬件方面可以调整一下I2C的上拉电阻,另外,注意I2C两根线设计的时候,不要太长,否则容易产生干扰。[em01]
点评回复

使用道具 举报

 楼主| 发表于 2009-9-16 15:16:18 | 显示全部楼层
这个问题已经解决了,是STANDBY信号没有配置。谢谢大家了。5楼,我加你QQ。
点评回复

使用道具 举报

发表于 2013-8-29 14:19:13 | 显示全部楼层
我想看电源的问题
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-6 11:28 , Processed in 0.049489 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表