打印

24c256读写失败

[复制链接]
楼主: chunhuaqioushi
手机看帖
扫描二维码
随时随地手机跟帖
21
chunhuaqioushi|  楼主 | 2009-3-25 15:17 | 只看该作者 回帖奖励 |倒序浏览

回复汉之云

按照你的方法得到的答案是cpu拉低了总线
但是解决的办法是什么啊??

使用特权

评论回复
22
chunhuaqioushi|  楼主 | 2009-3-25 15:19 | 只看该作者

回复汉之云

按照你的说法是cpu拉低了总线
但是解决的办法还是不知道哦

使用特权

评论回复
23
chunhuaqioushi|  楼主 | 2009-3-25 15:25 | 只看该作者

回复香水城

gpio可以正常的输出脉冲

但是在上电后即使没有进行任何操作scl 和 sda 也会变低

在复位状态下scl 和 sda和高电平

使用特权

评论回复
24
香水城| | 2009-3-25 15:30 | 只看该作者

我想要确定上电后没有进行任何操作的含义

如果是在main函数开始设置了断点,停止调试,那么你说的现象是不可能的,唯一的解释是芯片坏了。

使用特权

评论回复
25
lut1lut| | 2009-3-25 15:31 | 只看该作者

STM32从SRAM启动

上电;然后复位键按下,这个时候你说总线高电平,释放复位键后,总线变成低电平? 

STM32拨到从SRAM启动,也是这样么?

使用特权

评论回复
26
汉之云| | 2009-3-25 15:32 | 只看该作者

来个不动脑筋的

把MCU的2个 I2C管脚到上拉电阻间的线割断,各加个小电阻,<1/5上拉电阻(保证MCU拉低后EEPROM能识别出来),然后从复位开始测EEPROM管脚波形,如果是MCU拉低,则该点比gnd高一点;如果是EEPROM拉低,则该点接近gnd,你就可以抓住到底何时MCU违反i2c协议向EEPROM伸出了魔爪。

使用特权

评论回复
27
lut1lut| | 2009-3-25 15:38 | 只看该作者

串联小电阻,看谁拉低的

如图本来I2C的连接都是有一个10K的上拉电阻,并且双方的端口配成Open-Drain。
现在加上一个2K的测试电阻。测试原理是当MCU发送低电平数据时,E2PROM释放总线,MCU将总线拉低,那么A点à 0V ,B点à 3.3V/6=0.55V;当E2PROM发送低电平数据时,MCU释放总线,E2PROM将总线拉低,那么B点à 0V。 通过测试B点电平可知最后是谁将总线拉低了。选择测试电阻阻值2K,是因为低电平为0.55V时,仍能满足总线上电平要求,保证通信正确。

使用特权

评论回复
28
汉之云| | 2009-3-25 15:45 | 只看该作者

lut1lut1

英雄所见略同 :)

使用特权

评论回复
29
lut1lut| | 2009-3-25 15:51 | 只看该作者

呼唤LZ,26楼方法试了么

我们大家都眼巴巴着等待着你的反馈捏~~~

使用特权

评论回复
30
alenthj| | 2009-3-25 15:55 | 只看该作者

确定这样能正常吗?

或者说,确定这样设置后产品不会出问题吗?有大批量验证过吗?

我们都是做产品的,不是在实验室里玩,一旦发货出去有问题,后果很严重的。所以,我现在还是改成模拟I2C。等出官方解释再说吧。

使用特权

评论回复
31
lut1lut| | 2009-3-25 15:57 | 只看该作者

ls问的是什么意思啊?

“确定这样能正常吗?”

哪样设置啊?

使用特权

评论回复
32
chunhuaqioushi|  楼主 | 2009-3-25 16:03 | 只看该作者

回复各位

我还没有试在ram下的情况
27楼28楼的观点不敢测试呵呵

使用特权

评论回复
33
alenthj| | 2009-3-25 16:05 | 只看该作者

“置顶帖子中2楼更新好的”就是这个I2C程序。

程序我看了,也试了,的确提高了可靠性。lutllut能否把这个程序做个测试报告出来,比如和串口中断,看门狗等应用程序混合在一起,然后对EEPROM进行随时读写若干小时。 现在大家多STM的I2C都不解,就因为少了官方的可靠解释。


另外问lut1lut几个问题:

NVIC_SETPRIMASR()是关总中断吗? 

systick被占用了。虽然有变通方法,比如在systick里面用累加器。但我能否用普通的delay延时来代替,可能不会太准,但影响应该不大吧。因为做模拟I2C的时候都是这样延时的。

使用特权

评论回复
34
香水城| | 2009-3-25 16:07 | 只看该作者

请31楼注意:27、28楼的建议是在帮助你分析问题,不是解决

你的问题很怪异,在没有分析出来原因之前,现在下结论还太早。

使用特权

评论回复
35
lut1lut| | 2009-3-25 16:12 | 只看该作者

to LZ

1。让你拨到从SRAM启动,是为了确认到底是STM32 还是 E2PROM 拉低了总线。

2。27楼 和 28楼 的办法,你可以不试,毕竟还要焊电阻,但是这是一个普遍通用的测试总线上是MCU 还是 E2RPOM 发送的低电平。也是为了看出错时,谁拉低了总线。

之所以让LZ试一试1。或者2。是因为,STM32上电拉低总线,根本不可能~~~

使用特权

评论回复
36
chunhuaqioushi|  楼主 | 2009-3-25 16:18 | 只看该作者

to lut1lut

我在试在找ram.icf
heh 
我这没有以前总是在flash中调试的

使用特权

评论回复
37
lut1lut| | 2009-3-25 16:19 | 只看该作者

to alenthj

1.差不多就是关总中断,就是让执行关键那段代码时,不能被其他中断打断。

2.可以用delay,但是软件延迟不好的就是当CPU频率配置变了,软件延迟的时间也变了。其他到也无大碍。 

使用特权

评论回复
38
lut1lut| | 2009-3-25 16:21 | 只看该作者

to LZ

让你把启动开关拨到从SRAM,没有让你把程序下载到SRAM中运行。

你不要去修改任何项目的配置,不用改连接文件为ram.icf。只需把BOOT0和BOOT1设置从SRAM启动。

举手之劳,请你快试一试。

使用特权

评论回复
39
chunhuaqioushi|  楼主 | 2009-3-25 16:37 | 只看该作者

回lut1lut

从ram启动是scl和sda是高电平

使用特权

评论回复
40
lut1lut| | 2009-3-25 16:45 | 只看该作者

就是咯

说明你的flash里面是错误的代码,比如说master read搞不好,就可能通信错误,非正常结束,导致slave没有释放总线,拉住了总线。

从SRAM启动,不受芯片内部错误代码影响。

使用特权

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

本版积分规则