打印

模拟的I2C总线为什么要读写E2PROM 2次才可以正确写入呢?

[复制链接]
2622|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiamingz|  楼主 | 2010-5-20 08:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2010-5-20 09:08 | 只看该作者
NACK

使用特权

评论回复
板凳
yuyetufu| | 2010-5-24 20:00 | 只看该作者
多给点资料没事吧??这样子太难猜了

使用特权

评论回复
地板
jiamingz|  楼主 | 2010-5-25 19:24 | 只看该作者
就是说 ,按照DATASHEET里的时序读写E2PROM,第一次写不成功,第二次才写成功,不明原因。该I2C接口读写其他的设备(温度计,实时时钟)都没有问题。

使用特权

评论回复
5
NE5532| | 2010-5-25 19:29 | 只看该作者
总是你没按规范做,要相当清楚地知道,做芯片的人比你了解I2C总线协议要透彻得多,仔细拿示波器找时序来看。我的直觉是你的初始化有问题。

使用特权

评论回复
6
coody| | 2010-5-25 20:08 | 只看该作者
估计是应答/非应答没做好

使用特权

评论回复
7
Simon21ic| | 2010-5-25 20:13 | 只看该作者
上逻辑分析仪,什么问题,一看就知道了。。。。。。

使用特权

评论回复
8
Simon21ic| | 2010-5-25 20:19 | 只看该作者
本帖最后由 Simon21ic 于 2010-5-25 20:28 编辑

GPIO模拟IIC貌似简单,但要做到非常成熟也不容易。
需要考虑很多问题,这里随便举几个例子:

设备的NACK回复
设备忙绿,拉低SCL
SDA和SCL的线路不平衡
意外中断,设备在发送数据的时候,主机发送START,这是需要有一个安全的推出机制,使得设备重新等待START
设备出错SCL一直拉着不放
SDA被意外拉低
。。。。。。

如果需要的话,我可以提供一个还算成熟的IIC模块,相信应该可以直接用于量产。
IIC模块不是一下子就可以成熟的,以上这些问题我都碰到过,不过在我的模块里,都已经解决了。
不过,由于该模块的保护代码比较全,所以在STM32_72MHz下,最高大概可以稳定100KHz左右的速度。
不方便透露这个模块现在在哪里使用。

使用特权

评论回复
9
jiamingz|  楼主 | 2010-5-31 18:10 | 只看该作者
本帖最后由 jiamingz 于 2010-5-31 18:18 编辑

谢谢各位的回答,最近特别忙,都没有时间上21,但是问题还是没有解决比较郁闷,暂时使用了比较笨的方法,就是每次读写E2PROM都使用3次以保证读写成功。
1、To  NE5532
我的初始化部分应该没有问题,如果有问题的话,就不能读取温度计和RTC了。
2、To Simon21ic
感觉你玩I2C很有经验,I2C看似简单,确实有很多地方,特别是挂载多个设备的时候,总会出现这样那样的问题。
我的这个I2C总线上挂了3个设备(24C04,AD7416,RX8025),根据你举的例子我想问问,有没有可能在第一启动总线的时候仲裁出现了问题,E2PROM没有响应成功?我用示波器对这波形都看了的,没有发现波形有不对的地方,就是第一次读写E2PROM的时候,设备没有响应。每次都要读第二次。

使用特权

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

本版积分规则

20

主题

266

帖子

1

粉丝