谁说ST的I2C能用我跟他拼命!

johnners   2011-3-11 12:00 楼主
                                 谁说ST的I2C能用我跟他拼命!ST的I2C绝对是芯片设计时存在BUG,我用STM32,我的同事用STM8都出现同样的现象:I2C会不定在什么时候死掉,你们可以试一下,I2C如果死掉,即使你在不断电的情况下复位芯片,仍然不能恢复,必须断电才能恢复!说能用的都是没真用st的I2C做过项目,谁用谁知道!

回复评论 (44)

你要和偶拼命,偶好象有点怕怕。

呵呵,用过STM32及STM8的硬I2C电路,I2C通信时,都可以拿镊子去短路SDA及SCK。短路后都可自恢复(不用断电,最多几ms就恢复)。
点赞  2011-3-11 12:27
楼主,你能证明你的程序没有问题吗?

我支持的客户中使用I2C的多了,没听他们抱怨STM32的I2C有问题。

如果有问题是你的代码写的有问题!!!
点赞  2011-3-11 12:30
                                 感谢你的关注,麻烦你自己试试,能恢复不?我是试过N多次了!用过网上无数大师级号称能用的,没有一个能真正用着不死的,不信?我写的给你试试也能用!
点赞  2011-3-11 12:33
                                 呵呵,代码的问题?芯片复位了代码都恢复不了?那还是芯片的BUG,不是吗?为什么断电了可以?
点赞  2011-3-11 12:35
                                 而且很奇怪的是STM8和STM32都有同样的现象,我同事是I2C驱动收音机芯片,我是驱动AT24C16,死掉了你如果不断电怎么都恢复不了
点赞  2011-3-11 12:38
                                 我也写过I2C的程序,怎么没有出现楼主的现象?客户也用得正常,量产也已经几百K了,这说明什么问题呢?
点赞  2011-3-11 12:39
                                 我为这过花费了很多时间,之前用过NEC,PHINIP的硬件I2C都没这么麻烦过
点赞  2011-3-11 12:40


7楼,只能说明你是神人!量产几百K?量真的很大啊!
点赞  2011-3-11 12:41
                                 我不是神人,我是ST得FAE。
点赞  2011-3-11 12:42
1)STM8和STM32是有BUG,ST的勘误手册给出了回避的方法,参考手册也有说明。

2)I2C死掉时,如果是从设备(如你的收音机芯片)出现问题,则复位MCU是不能恢复的。

3)为了不让你为此小事与人拼命而因此丧命,我就不告诉你是谁在做项目了,
点赞  2011-3-11 12:42


看样子,我们必须得每天去关注ST的勘误手册是否有更新了,不过不知道我的老板是否同意。香工还是个厚道人!不过不知道ST有没有考虑过我们写软件的?我不是搞到伤心处,谁会去拿命拼?
点赞  2011-3-11 12:47
问题不搞懂,心不甘啊,ST_ARM能把你写的给我试试行不?359613524@qq.com
点赞  2011-3-11 12:59
//以下先把I2C 口先配置为输出口,再输出1,可以是总线物理复位,
  //可以使调试复位的时候,上一次错误程序导致的总线错误,不会对本次调试产生影响
  //以及其他情况引起的总线错误不会对复位以后产生影响
//复位时,不会I2C出错
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  
  GPIOB->BSRR = GPIO_Pin_6;// =1
  GPIOB->BSRR = GPIO_Pin_7;// =1

  ////再配置为I2C功能口/////
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

   /* Enable I2C1 reset state */
  RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE);
  /* Release I2C1 from reset state */
  RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, DISABLE);
点赞  2011-3-11 14:11
                                 楼主哪能动不动就拼命
点赞  2011-3-11 16:18
7楼,只能说明你是神人!量产几百K?量真的很大啊!
可以是每个月量产几百K呀,看看这个帖:【以STM32为核心】神奇?! 索尼PS3体感控制器拆解篇

上面那个MEMS就是通过I2C与STM32连接的。
点赞  2011-3-11 16:57
                                 我一直在用硬件的I2C,几个产品了,暂时没受影响
点赞  2011-3-11 22:19
                                 如果你的I2C只是用来做主机的话,可以将那2个IO口设置成通用IO,然后模拟I2C时序就行了,硬件不用改,代码复杂度和原来差别不大。保证不会死锁!
点赞  2011-3-11 22:31
反正ST给的例子,是不能照搬过来用,一用肯定是死机。你要拼命就拼命吧 呵呵
看里面那么多的WIHLE 不要命才怪了! 一有出错 就WIHLE
点赞  2011-3-12 08:16
                                 给你说 一就是一横   二就是二横  三就是三横  四就不用学了四横罢 呵呵
点赞  2011-3-12 08:18
123下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复