找回密码
 注册
搜索
查看: 2864|回复: 23

[讨论] sensor power up后写i2c命令为什么有时写成功,有时失败?

[复制链接]
发表于 2006-9-14 21:49:00 | 显示全部楼层 |阅读模式
最近调个sensor,gpio控制standby和reset,clk上电时序后,延迟一段时间后,(应该足够长的时间,上电时序都严格按照SPEC写的)之后写一条I2C命令为什么有时成功,有时会报错。请问高手。我把程序帖一下,请高手指点一下。
BIO_OUT( GPIO_REG_4, BIO_UIM_PWR_M, BIO_OUTPUT_SET_V );//standby up
camera_timed_wait(50);
BIO_OUT( GPIO_REG_0, BIO_GPIO_18_M, BIO_OUTPUT_SET_V );//clk1 up
camera_timed_wait(50);
       BIO_OUT(BIO_CAMIF_RST_N_REG, BIO_CAMIF_RST_N_M, BIO_CAMIF_RST_N_HI_V);//reset up
camera_timed_wait(300);
if(!( camif_samsung_s5k4aafa_i2c_write(0x5a,0xec, 0x00)))
   return FALSE;//这句I2C指令有时会出错,有时候不出错,
发表于 2006-9-16 16:07:00 | 显示全部楼层
camif_samsung_s5k4aafa_i2c_write函数贴出来看看?
点评回复

使用道具 举报

 楼主| 发表于 2006-9-18 12:26:00 | 显示全部楼层
static boolean camif_samsung_s5k4aafa_i2c_write(byte reg, byte data)
{

  uint32 i;
  camif_i2c_command.addr.reg = reg;
  camif_i2c_command.buf_ptr = &data;
  camif_i2c_command.len = 1;
  if (i2c_write(&camif_i2c_command) == I2C_SUCCESS)
  {
    return TRUE;
  }
  else
  {
    /* Retry once */
    if (i2c_write(&camif_i2c_command) == I2C_SUCCESS)
    {
      return TRUE;
    }
    MSG_HIGH("I2C write failed, reg 0x%x", reg, 0, 0);
    return FALSE;
  }

}
i2c_write()这个就不用贴了吧,都是平台自带的..这个问题很奇怪阿.请指教..
点评回复

使用道具 举报

发表于 2006-9-19 09:31:00 | 显示全部楼层
检查了power了没?
没问题的话,再看一下时钟,以及RW信号吧。[br]<p align=right><font color=red>+1 RD币</font></p>
点评回复

使用道具 举报

发表于 2006-9-19 16:16:00 | 显示全部楼层
是否可以可以跟综一下代码,看一下I2C的状态寄存器的返回值。
如果是高通的平台可能是
i2c_write()->...->i2c_write_byte_hw()->i2c_wait_wr_buf_clr()->HWIO_IN(I2C_STATUS)
点评回复

使用道具 举报

发表于 2006-9-19 21:08:00 | 显示全部楼层
不是吧,这么巧合,我也刚刚在高通平台上调试同一款sensor,写很多寄存器的时候,中间会出错,搞不清楚什么原因。

可能的原因:PLL如果打开,Standby信号必须加以控制,不能固定在高电平
点评回复

使用道具 举报

发表于 2006-9-20 09:02:00 | 显示全部楼层
先看电压形状。
多些地方加延时看看。
点评回复

使用道具 举报

发表于 2006-9-20 09:34:00 | 显示全部楼层
调整I2C 上拉电阻到2.2K或者1.5K试试
点评回复

使用道具 举报

 楼主| 发表于 2006-9-25 12:01:00 | 显示全部楼层
i2c电阻也试验过了.从2.2k一直降到800,电压上去了,还是不管用.另外硬件在sda上加了两个滤波电容,让他们去掉一个,感觉写i2c成功次数多了.但仍然解决不了问题.再把另外一个电容去掉,同样有时写成功,有时不行.郁闷...
点评回复

使用道具 举报

发表于 2006-9-25 14:53:00 | 显示全部楼层
可以考虑考虑时序问题,估计是时序不准确。
点评回复

使用道具 举报

发表于 2006-9-26 15:46:00 | 显示全部楼层
估计应该是I2C信号的波形质量问题!
请楼主计算下,现在的I2C保护电容(不要忽略所经过的EMI Filter)不能过大啊!试试用15PF的!
看看SDA和SCL的Rise time,保证其质量!
改善电路吧,一般不是软件代码的问题!
点评回复

使用道具 举报

 楼主| 发表于 2006-9-28 20:23:00 | 显示全部楼层
外围控制信号的电容也去掉试过了,I2C上拉电阻也试过了.控制信号幅度也都满足要求.现在都没招了.唯一的可能是sensor把bb的i2c控制搞坏了,但也毫无依据?怎么查?
点评回复

使用道具 举报

发表于 2006-9-29 00:47:00 | 显示全部楼层
延时~~~~~
点评回复

使用道具 举报

 楼主| 发表于 2006-9-30 16:15:00 | 显示全部楼层
我都延迟到2s才写i2c命令.
点评回复

使用道具 举报

发表于 2006-10-30 08:12:00 | 显示全部楼层
jorners,你在哪里工作的阿,我调试的这款sensor和你的问题相同,有时间探讨探讨一下。
tommygreen.student@sina.com
点评回复

使用道具 举报

发表于 2006-10-30 13:53:00 | 显示全部楼层
if(!( camif_samsung_s5k4aafa_i2c_write(0x5a,0xec, 0x00)))

改这句为:
if(camif_samsung_s5k4aafa_i2c_write(0x5a,0xec, 0x00)==FALSE)
另外:

static boolean camif_samsung_s5k4aafa_i2c_write(byte reg, byte data)
{

  uint32 i;
  camif_i2c_command.addr.reg = reg;
  camif_i2c_command.buf_ptr = &data;
  camif_i2c_command.len = 1;
  if (i2c_write(&camif_i2c_command) == I2C_SUCCESS)
  {
    return TRUE;
  }
  else   /* this line can be delete */
/*  insert delay here */
  {
    /* Retry once */
    if (i2c_write(&camif_i2c_command) == I2C_SUCCESS)
    {
      return TRUE;
    }
    MSG_HIGH("I2C write failed, reg 0x%x", reg, 0, 0);
    return FALSE;
  }
点评回复

使用道具 举报

发表于 2006-10-31 23:20:00 | 显示全部楼层
按照上述修改之后,就能避免i2c写错的问题吗?请教!
点评回复

使用道具 举报

 楼主| 发表于 2006-11-1 21:22:00 | 显示全部楼层
现在解决了,做法是对bb的i2c 重新reset。流程是这样:
if (write error)
   reset i2c hardware controller;
write again;

这样就搞定了,至于原因,各位高手请分析,我也不知道。
点评回复

使用道具 举报

 楼主| 发表于 2006-11-1 21:27:00 | 显示全部楼层
aquasnake :
请问为什么
if(!( camif_samsung_s5k4aafa_i2c_write(0x5a,0xec, 0x00)))
改这句为:
if(camif_samsung_s5k4aafa_i2c_write(0x5a,0xec, 0x00)==FALSE)

我觉得没什么区别阿。
点评回复

使用道具 举报

发表于 2006-11-1 21:45:00 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>jorners</I>在2006-11-1 21:22:00的发言:</B>
现在解决了,做法是对bb的i2c 重新reset。流程是这样:
if (write error)
   reset i2c hardware controller;
write again;

这样就搞定了,至于原因,各位高手请分析,我也不知道。

</DIV>



每次写I2C结束时,要使HOST端拉高SCK,SDA为1
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

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

GMT+8, 2024-12-23 23:13 , Processed in 0.048236 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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