打印
[PIC®/AVR®/dsPIC®产品]

PIC24FJ64GA004读AT24C512C异常,写正常

[复制链接]
975|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
各位好,最近在调试PIC24的I2C时,遇到读外部EEPROM异常写外部EEPROM正常的问题,查了一段时间,还是未找到原因。
硬件使用I2C2,上拉电阻为4.7K,工作电压3.3V,通信速率100K,代码函数调用xc16中的库函数。
写操作时,用逻辑分析仪测量,可以依次看到下列时序:开始->设备写地址(应答)->寄存器高地址(应答)->寄存器低地址(应答)->数据(应答)->停止。周期性操作,也可以看到上述现象(示波器也可见)。
读操作时,用逻辑分析仪测量,看到的时序是:开始->设备写地址(应答)->寄存器高地址(应答)->寄存器低地址(应答)->重新启动->设备读地址(应答)-> 时钟线被一直拉低,数据线一直为高。
试过改变通信速率、上拉电阻、EEPROM型号、I2C1接口,现象一样。
初次接触PIC,不知道各位有谁遇到过这种问题吗?
沙发
JY-DX-JY| | 2015-7-6 20:18 | 只看该作者
我还没用过逻辑分析仪。

使用特权

评论回复
板凳
hbzhh2008|  楼主 | 2015-7-7 08:46 | 只看该作者
JY-DX-JY 发表于 2015-7-6 20:18
我还没用过逻辑分析仪。

用的只是那种8通道24M的简易USB型逻辑分析仪而已,三十块左右,用法简单,分析时序方便

使用特权

评论回复
地板
hbzhh2008|  楼主 | 2015-7-7 10:20 | 只看该作者
本帖最后由 hbzhh2008 于 2015-7-7 10:23 编辑

今天又测试了一下,读操作偶尔会正常。(周期性循环读前16字节)
但奇怪的是:
若上电前接逻辑分析仪可以正常读,读一段时间后(几分钟),就不行了。
若上电前不接逻辑分析仪则还是读失败。
赶脚是硬件问题!

使用特权

评论回复
5
hbzhh2008|  楼主 | 2015-7-8 15:47 | 只看该作者
观测了SCL和SDA两条线在操作之前的上电时序,发现上电后,两条线均有不规律的抖动(这可能导致eeprom误认为主机已开始通信)。后来去掉了几个大电容或在上电后MCU主动延时3秒再进行操作,把EEPROM的上拉电阻换成43K,居然读写正常了。这是什么鬼?:(

使用特权

评论回复
6
huakue| | 2015-7-9 10:33 | 只看该作者
直接上程序  一般都是程序问题

使用特权

评论回复
7
hbzhh2008|  楼主 | 2015-7-13 09:04 | 只看该作者
huakue 发表于 2015-7-9 10:33
直接上程序  一般都是程序问题

应该不是程序原因,而是上电时导致了时序紊乱。使用相同代码操作板上另一路I2C,很正常

使用特权

评论回复
8
huakue| | 2015-7-13 14:57 | 只看该作者
hbzhh2008 发表于 2015-7-13 09:04
应该不是程序原因,而是上电时导致了时序紊乱。使用相同代码操作板上另一路I2C,很正常 ...

这样你检查下  地址 还有上拉电阻

使用特权

评论回复
9
hbzhh2008|  楼主 | 2015-7-13 17:09 | 只看该作者
huakue 发表于 2015-7-13 14:57
这样你检查下  地址 还有上拉电阻

地址就是0,上拉电阻用的4.7K,但不行(1k到10K试了好几个阻值都不行),用43K居然可以

使用特权

评论回复
10
huakue| | 2015-7-14 08:37 | 只看该作者
hbzhh2008 发表于 2015-7-13 17:09
地址就是0,上拉电阻用的4.7K,但不行(1k到10K试了好几个阻值都不行),用43K居然可以 ...

检查下频率 是否正常

使用特权

评论回复
11
hbzhh2008|  楼主 | 2015-7-15 19:01 | 只看该作者
huakue 发表于 2015-7-14 08:37
检查下频率 是否正常

通信速率测试过了,虽然不完全是100K,但也接近了(不等于100k是PIC寄存器的原因)

使用特权

评论回复
12
yehen0611| | 2015-8-5 10:35 | 只看该作者
楼主想问你一下512的使用方法 可以加下我的QQ449155062

使用特权

评论回复
13
hbzhh2008|  楼主 | 2015-8-6 09:19 | 只看该作者
yehen0611 发表于 2015-8-5 10:35
楼主想问你一下512的使用方法 可以加下我的QQ449155062

你看看512手册中,I2C的读写时序图吧,I2C时序图基本都是一样的,差别一般仅在于:
1,寄存器地址有的是一位,有的是两位;
2,页大小不一样
上面两点不同,只是由于存储容量的原因

不好意思,QQ基本没用了。

使用特权

评论回复
14
yehen0611| | 2015-8-6 11:02 | 只看该作者
hbzhh2008 发表于 2015-8-6 09:19
你看看512手册中,I2C的读写时序图吧,I2C时序图基本都是一样的,差别一般仅在于:
1,寄存器地址有的是 ...

可以把你用的程序发给我看看么

使用特权

评论回复
15
hbzhh2008|  楼主 | 2015-8-6 13:41 | 只看该作者
本帖最后由 hbzhh2008 于 2015-8-6 13:42 编辑
yehen0611 发表于 2015-8-6 11:02
可以把你用的程序发给我看看么

代码较长,就不贴了。
你自己摆渡一下“PIC24F i2c读写EEPROM”,文库里就有例子。
格式基本是:


i2c操作.jpg (213.89 KB )

I2C读写

I2C读写

使用特权

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

本版积分规则

2

主题

35

帖子

1

粉丝