你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
我的现象是,每次写完一组数据(16个字节),然后再读出来,发现是正确的。
但是如果再读取上一次或者上几次读写的数据,也就是更改一下EEPROM的地址,读出来的数据和最新的一次是一样的。
我不清楚是我哪里操作错了。
这个是我写的与EEPROM通讯的函数,第一个给slave是0x50,reg_addr随便取,比如是0xA0,*pdata是我要写的数据,data_size是16.
举报
EEPROM 通常只备有page-size的buffer,可以一次接收一页数据在buffer内,然后就要花几十毫秒写入数据,此时应该是不响应总线,如果连续写入时间间隔太短会出错。建议先测试一下,每页之间插入足够delay,看看是否正确。
yr 发表于 2023-10-7 22:07 EEPROM 通常只备有page-size的buffer,可以一次接收一页数据在buffer内,然后就要花几十毫秒写入数据, ...
[md]您好,我现在似乎觉得是EEPROM选用的地址不对,因为我不论读那个地址的值,读上来全是一样的。
手册中的A10,A9,A8是什么我不太理解。能否给出解答。
2kbyte 需要11位地址,把高三位地址拆分放到device select中,也就是说高3位控制哪个256个字节,低8位地址在address select中给出,测试只要保证同一个地址数据是否正确,其中没写一个page,需要5ms。根据手册,device地址高4位是0xA,最低位必须为0,A10-A8可以0-7
butterflyspring 发表于 2023-10-8 14:53 通常发送函数应该根据所选的型号,拆分高位地址到设备地址中去。 当然,如果所选型号地址范围是8位,或16位 ...
您好,我现在在Keil调试模式下,在写入EEPROM操作后,进行了读EEPROM操作。
发现buffer里面的值是正确的,但是断电或者退出调试模式再次读后发现,读出来的值全是0xFF.
这是为何?
广告 发表于 2023-10-8 15:31 [md]您好,我现在在Keil调试模式下,在写入EEPROM操作后,进行了读EEPROM操作。 发现buffer里面的值是正 ...
yr 发表于 2023-10-8 12:26 2kbyte 需要11位地址,把高三位地址拆分放到device select中,也就是说高3位控制哪个256个字节,低8位 ...
[md]感谢回复,器件地址中A10,A9,A8其实是在选“块”,他应该是8*256这样组成的。
其实我只是需要改变后面的address就行了。但是似乎我怎么改变我的address,读出来的结果都是相同的。
广告 发表于 2023-10-8 15:31 您好,我现在在Keil调试模式下,在写入EEPROM操作后,进行了读EEPROM操作。</p> <p>发现buffer里面的值是正 ...
[md]请问这个是NACK了嘛,每个byte收完都拉高了一下。
butterflyspring 发表于 2023-10-9 14:51 这看起来,第9个脉冲的数据不是标准操作下的低电平,所以有问题,要调整一下。</p> <p>...
好的我去调查一下,但是因为我是软件部门,这个问题是不是需要交给硬件来调查。
确认一下。
广告 发表于 2023-10-9 15:00 [md]好的我去调查一下,但是因为我是软件部门,这个问题是不是需要交给硬件来调查。 确认一下。
M24C64-FMC6TG是否带尖峰滤波器,能否直接挂载到I3C总线上
物料型号:M24256X-FCU6T/VF,品牌:STM(意法),规格书未明确丝印,来料丝印"R11"是否正确,感谢!
是否有自带timeout机制的EEPROM?
M24M02 响应时间
M24M02 stop和start间隔10ms
M24M02寿命More than 4 million Write cycles是什么意思
M24C02-WMN6TP在烧录中失败
另外注意EEPROM的地址需要对齐,也就是page size 的倍数。
EEPROM 通常只备有page-size的buffer,可以一次接收一页数据在buffer内,然后就要花几十毫秒写入数据,此时应该是不响应总线,如果连续写入时间间隔太短会出错。建议先测试一下,每页之间插入足够delay,看看是否正确。
[md]您好,我现在似乎觉得是EEPROM选用的地址不对,因为我不论读那个地址的值,读上来全是一样的。
手册中的A10,A9,A8是什么我不太理解。能否给出解答。
2kbyte 需要11位地址,把高三位地址拆分放到device select中,也就是说高3位控制哪个256个字节,低8位地址在address select中给出,测试只要保证同一个地址数据是否正确,其中没写一个page,需要5ms。根据手册,device地址高4位是0xA,最低位必须为0,A10-A8可以0-7
当然,如果所选型号地址范围是8位,或16位的话,就不需要拆分了。
您好,我现在在Keil调试模式下,在写入EEPROM操作后,进行了读EEPROM操作。
发现buffer里面的值是正确的,但是断电或者退出调试模式再次读后发现,读出来的值全是0xFF.
这是为何?
读EEPROM 有特定时序的,需要先DUMMY WRITE把地址写到总线上,然后再读取。
这一点在eeprom 的手册上有个时序图。
如果没按照这个时序,断电后再去读,地址很可能不一样,所以内容会为空。
[md]感谢回复,器件地址中A10,A9,A8其实是在选“块”,他应该是8*256这样组成的。
其实我只是需要改变后面的address就行了。但是似乎我怎么改变我的address,读出来的结果都是相同的。
[md]请问这个是NACK了嘛,每个byte收完都拉高了一下。
好的我去调查一下,但是因为我是软件部门,这个问题是不是需要交给硬件来调查。
确认一下。
在第八个CLK后,SDA线应改转换为输入口,然后在第九个CLK去读ACK 信号。
先检查一下软件吧.