发新帖我要提问
12
返回列表
打印

求救:i2c总线锁死,时钟信号被拉低

[复制链接]
楼主: hdp7891000
手机看帖
扫描二维码
随时随地手机跟帖
21
shizaigaole| | 2010-11-6 09:04 | 只看该作者 回帖奖励 |倒序浏览
为了省事,而影响到稳定性,可以说更愚蠢。
rockli 发表于 2010-11-5 23:23



还有一点要说明,
几乎任何一种MCU的I2C模块使用都比模拟I2C要头疼,更烦神,

绝不会反过来,因为使用i2c模块省事。

使用特权

评论回复
22
yewuyi| | 2010-11-6 09:12 | 只看该作者
IIC不管是软件模拟还是使用硬件生成,都存在总线被挂死的现象,此时需要连续发送9个CLK才能解锁,几年前俺曾经就这个问题发过专门的讨论帖,LZ可以翻翻老帖子。

挂死的主要原因是IIC被从机锁住电平造成的,建议每次IIC通信前,要么连续发送9个CLK确保解锁,要么确保从机的应答检查的代码正确性。

使用特权

评论回复
23
rockli| | 2010-11-7 22:26 | 只看该作者
开发不能只看技术手册,
还要看看局限性列表手册。

有些觉得不稳定的用户可以看看:
《STM32F10xx8/B局限性列表》手册,也许会发现自己的问题
shizaigaole 发表于 2010-11-6 08:55

如果我连errdata都不看,那我肯定是个白痴。
我承认我有问题,吃过无数次亏后我明白一个道理,厂家的资料都是客户出现问题后才更新的,原因就是客户当了测试员。
我曾经为ic原厂的errdata做了多少贡献,只是人家更新了errdata也没留我的名字。

更新了批次后,又可能有伴随着新的bug。

即使被人说“愚蠢、白痴、脑袋缺筋”,没把握的事情也不敢冒风险。
公司的这种产品出货量不大,1k台测试不出问题,不代表2k台测试不出问题。但是一台出了问题,影响都是承受不起的。
一旦出了问题,对公司、客户来说影响都是很大的。

最终可能只是为st的errdata做点贡献而已。

而且我怎么用,责任有我的道理,除了给我发工资的人,别人没资格评论我的设计原则。

使用特权

评论回复
24
hdp7891000|  楼主 | 2010-11-8 14:17 | 只看该作者
大家谈问题不要互相攻击嘛,我现在用的是硬件i2c,使用的是模仿固件库eeprom的查询方式。调通它我只用了半天时间,读写数据就正确了。
但是问题是fm3116上面集成了一个看门狗芯片。同时使用其掉电存储功能和看门狗功能,运行5个小时左右就会复位。
我加了很多校验保证机制到现在还未成功。现在会出现的问题是在存储大量读写后进行喂狗经常会出现总线出错的情况,复位i2c后还可以正常工作。
但是有时候会超过看门狗的喂狗时间,于是复位了。现在问题很纠结,因为这个超时原因很多还可能是喂狗时间被抢占等。
但是现在总线出错我想先把它搞定。我现在不知道stm32硬件到底如何,也不知道模拟具体什么好处,但是我对rockli说的稳定倒是非常赞同,哪位能不能把自己的稳定的程序借小弟参考一下?不管是硬件的还是模拟的。谢谢

使用特权

评论回复
25
rockli| | 2010-11-8 18:02 | 只看该作者
上一贴有点激动,惹谁生气请不要在意。
我使用io模拟i2c的理由很简答:每一条语句我都能把握,绝对不会出现意料不到的情况(除了程序没考虑到的)。而且我使用的数据量不是很大,只有几十K。
对于一个需要有很多使用限制条件的硬件i2c来说,我不敢用。
单纯的一个i2c当然简单,但一个产品除了i2c,还有很多东西,整合到一起能稳定工作,这就是电子工程师的工作。
使用模拟的i2c,我可以拍着胸脯向老板保证这部分不会出现问题,因为我可以控制。而硬件i2c的稳定性是依赖于st的。
在我看来,ic厂商的保证是出现问题后最及时的帮助解决,而不是保证没问题。(虽然好多ic厂商连及时解决都做不到,就是死咬自己的东西绝对没问题)
把系统的稳定性寄托在别人身上,这不是我的做事原则。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则