硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4568|回复: 13
收起左侧

[有问必答] 关于EEPROM的ee_WriteBytes写入超时的判断问题

[复制链接]

3

主题

27

回帖

36

积分

新手上路

积分
36
发表于 2016-7-25 09:28:20 | 显示全部楼层 |阅读模式
在实际使用中,当写入多个数据时,ee_WriteBytes函数会出现return 0的情况,必须要多写几次才能成功,后经过查看datasheet,以24C512为例,
QQ截图20160725092136.png

可以发现其twr有可能为5ms,我理解的是,有可能要5ms才能完成写入。
QQ截图20160725091901.png
在安富莱的例程中,通过查询1000次,来判断上次写入是否完成,STM32的DMIPS都挺高的,感觉1000次查询可能不到2ms,所以这里是不是应该多查几次,以避免查询时间过短就认为写入超时呢。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117563
QQ
发表于 2016-7-25 10:05:04 | 显示全部楼层
足够了,我们可以简单的计算一下,假设I2C的速度是400KHz,发送一个字节数据过去,至少是8个CLK,时间就是0.02us,循环1000次就是20ms。
回复

使用道具 举报

3

主题

27

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2016-7-25 10:16:56 | 显示全部楼层

回 eric2013 的帖子

eric2013:足够了,我们可以简单的计算一下,假设I2C的速度是400KHz,发送一个字节数据过去,至少是8个CLK,时间就是0.02us,循环1000次就是20ms。 (2016-07-25 10:05) 
对哦,这样看时间是足够的了,奇怪的是有时候ee_WriteBytes会return 0,然后多写一两次才会return 1,按说如果EE没坏的话,一次就应该写成功了,您有遇到过这种情况吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117563
QQ
发表于 2016-7-25 10:19:49 | 显示全部楼层

回 voidmain 的帖子

voidmain:对哦,这样看时间是足够的了,奇怪的是有时候ee_WriteBytes会return 0,然后多写一两次才会return 1,按说如果EE没坏的话,一次就应该写成功了,您有遇到过这种情况吗? (2016-07-25 10:16) 
我们的程序里面写入也是发1000次,保证写入成功。写入完毕后,再发1000次检查写入成功
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=15705
回复

使用道具 举报

3

主题

27

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2016-7-25 10:39:18 | 显示全部楼层
我看最新的V5资料里的BSP包没用这个新的驱动,用的还是老的
回复

使用道具 举报

3

主题

27

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2016-7-25 10:40:05 | 显示全部楼层

回 eric2013 的帖子

eric2013:我们的程序里面写入也是发1000次,保证写入成功。写入完毕后,再发1000次检查写入成功
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=15705 (2016-07-25 10:19) 
我看最新的V5资料里的BSP包没用这个新的驱动,用的还是老的
回复

使用道具 举报

3

主题

27

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2016-7-25 10:50:34 | 显示全部楼层

回 eric2013 的帖子

eric2013:我们的程序里面写入也是发1000次,保证写入成功。写入完毕后,再发1000次检查写入成功
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=15705 (2016-07-25 10:19) 
还有一个问题就是,写入完毕后,发1000次检查,检查完毕后,若写入成功,按说应该发送一个停止信号吧
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117563
QQ
发表于 2016-7-25 11:51:39 | 显示全部楼层

回 voidmain 的帖子

voidmain:

还有一个问题就是,写入完毕后,发1000次检查,检查完毕后,若写入成功,按说应该发送一个停止信号吧
有的,在写函数的末尾:
1.png
回复

使用道具 举报

3

主题

27

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2016-7-25 15:52:32 | 显示全部楼层
QQ截图20160725154713.png
谢谢您了,对于goto没有理解到位。
还有一个问题困扰好久了,对于写操作来说,按说第二步发起的控制字节的高7位是根据硬件确认的,bit0是读写控制位,为什么当EE_ADDR_A8==1时,第二步发起的控制字节还会根据要写入的地址变化?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117563
QQ
发表于 2016-7-26 10:33:39 | 显示全部楼层

回 voidmain 的帖子

voidmain:

谢谢您了,对于goto没有理解到位。
还有一个问题困扰好久了,对于写操作来说,按说第二步发起的控制字节的高7位是根据硬件确认的,bit0是读写控制位,为什么当EE_ADDR_A8==1时,第二步发起的控制字节还会根据要写入的地址变化?
AT24C04/08/16的设备地址比较特殊,是这个样子的,需要编程地址高8位参与:
1.png
回复

使用道具 举报

3

主题

27

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2016-7-26 10:34:37 | 显示全部楼层
QQ截图20160726103154.png
今天看了一下,感觉还是应该执行一下停止信号,因为如果成功收到应答直接return 1,不会执行末尾的那个停止信号吧。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117563
QQ
发表于 2016-7-26 10:49:16 | 显示全部楼层

回 voidmain 的帖子

voidmain:
今天看了一下,感觉还是应该执行一下停止信号,因为如果成功收到应答直接return 1,不会执行末尾的那个停止信号吧。 (2016-07-26 10:34) 
要的,加上更保险
回复

使用道具 举报

3

主题

27

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2016-7-26 11:07:58 | 显示全部楼层
好的,太谢谢了!
还有一个问题就是datasheet上 QQ截图20160726110024.png
twr最大是5ms。这个twr是写入一个字节需要的twr还是说不管写入多个字节,都只需要twr?
如果说写入一个字节就需要twr,那咱们一次性写入多个字节例如200个,是不是就需要200*twr?查询的次数是否也要跟着写入的字节数改变?
QQ截图20160726110651.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117563
QQ
发表于 2016-7-26 11:12:35 | 显示全部楼层

回 voidmain 的帖子

voidmain:好的,太谢谢了!
还有一个问题就是datasheet上
twr最大是5ms。这个twr是写入一个字节需要的twr还是说不管写入多个字节,都只需要twr?
如果说写入一个字节就需要twr,那咱们一次性写入多个字节例如200个,是不是就需要200*twr?查询的次数是否也要跟着写入的字 .. (2016-07-26 11:07) 
一次即可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 15:50 , Processed in 0.050699 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表