OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 490|回复: 3

AT24CXX全功能测试,优化读写时间,使用USMART调试

[复制链接]

3

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
422
金钱
422
注册时间
2016-7-29
在线时间
93 小时
发表于 2026-6-30 12:49:23 | 显示全部楼层 |阅读模式

最近重看了下EEPROM存储部分的资料,将学习和测试中遇到的问题,进行个总结分享;
程序参考原子的USMART方式进行调试,大家可以对比2种读和2种写协议所花费的时间
以下测试主要是在AT24C08基础上测试,其他的同理

首先关于存储单元的问题:通常是1个存储单元存储1字节的数据,但是这个存储单元地址可能就不止用1字节表示
比如AT24C256,总共存储单元数为32KB,那么需要15位表示这个地址数,地址范围0x0000~0x7FFF


一:AT24CXX按每页能一次性写入的字节数分,总共为5总
这个一次性写入有啥好处?可以减少数据的写入时间,按页写时,只用启动1次总线,完成多字节数据写入,这个比多次启动总线,写入多个字节,效率更高;
手册里面有个tWR:写数据自定时,也就是在这个时间内擦除才能完成 tWR擦除并写入时间.png
  • AT24C01:       8B/页,tWR≤5ms
  • AT24C02:       8B/页,tWR≤10ms
  • AT24C04/08/16:  16B/页,tWR≤10ms
  • AT24C32/64:       32B/页,tWR≤5ms
  • AT24C128/256:   64B/页,tWR≤5ms

二:存储地址和器件地址
1. AT24C01
【存储单元地址:用8位表示】 AT24C01器件地址.png

2.AT24C02/04/08/16
从器件地址能看出,有P2 P1 P0这样的位,这个就是块位我理解是是1个块=256B能表示256个存储单元
像AT24C02总共有256B,它就没有块位,【存储单元地址:用8位表示】
AT24C04总共有512B,它有1个块位,能表示2个块,【存储单元地址:用9位表示,其中块位为扩展位】
AT24C08总共有1024B,它有2个块位,能表示4个块【存储单元地址:用10位表示,其中块位为扩展位】
AT24C016总共有2048B,它有3个块位,能表示8个块,8x256=2048B【存储单元地址:用11位表示,其中块位为扩展位】
AT24C02 04 08 16.png


3.AT24C32/64, 无块位

【存储单元地址:用16位表示】
AT24C32 64.png

4.AT24C128/256,无块位,

【存储单元地址:用16位表示】
AT24C128 256.png

三:读操作主要分3种
1. 当前地址读【1次读1B】
这个我主要用来测试,实际程序中未使用
这里面涉及到上一次主机对芯片的操作,如果是读操作,则按对应地址递增,到达存储的最后1页的最后1个地址时,则回卷到第一页的第1个地址;


但是如果是写操作的话,如果上一次是写的某一页最后1个地址时,则读当前地址则会读到那一页的第一个地址,大家可以用测试程序种的:u8 AT24CXX_ReadCurrentAddData(u16 ReadAddr)进行测试;
注意:实际使用的时候,需要先读或者写或者设置1次字节地址计数器值后,在发AT24CXX_ReadCurrentAddData函数测试,
因为上电复位后,字节地址计数器值时随机的,不确定位置,做上面3个动作的任意1个就是为了确定当前的地址


2. 随机地址读【1次读1B】
这里面有个假写的动作dummy写,这个假写目的主要就是为了设置这个字节地址计数器的,告诉EEPROM,主机是要操作这个地址了,从这个地址读或者写;


3. 序列读【1次读多个字节,直到主机发NACK时结束总线】
在操作这个协议时,我们需要先设置我们要开始读的地址,通过*4协议进行设置
u8 AT24CXX_ReadSequential(u16 ReadAddr, u8 *pBuffer, u16 NumToRead)
原子的例程,就是基于每启动2次总线,只读出1字节方式,多次循环读出多个字节,
使用序列读的话,只用启动1次总线,就可以读出需要长度的数据了,相比之下减小了读的时间;


*4. 设置字节地址计数器值
这个类似于FATFS中读或者写文件指针,每读1次,指针值自动加1,
这里面有个假写的动作dummy写,这个假写目的主要就是为了设置这个字节地址计数器的,告诉EEPROM,主机是要操作这个地址了,此时我们在收到EEPROM返回ACK时,停止总线,这样就将字节地址计数器设置成功了;
这样我们就可以进行序列读数据了,
void AT24CXX_SetCount(u16 WriteAddr)

四:写操作主要分2种
1. 字节写入【1次写1B】
这里面需要分不同的AT24CXX,写入器件地址不同

2. 页写入【1次可以写入1页数据,页数据大小见"一"中描述】

原子的例程,就是基于每启动1次总线,只写入1字节方式,多次循环写入多个字节,
使用按页写的话,只用启动1次总线,就可以写入最大1页数据,相比之下减小了写的时间;

在同一页,写入1B和1页字节,相差时间不大,tWR左右,如果是按字节写入N的话,那就需要N*tWR的时间,时间明显就成倍数增加了,
实际测试的时候,将USMART中 runtime 1打开,就能明显看到这写入时间对比差异了

五:测试程序说明
数据结构部分,我习惯将设备常用到的参数,设计为1个结构体
typedef struct
{
       u8 t1;
       u16 t2;
       u32 t3;
       u8 t4;
       u8 t5;
       ......
}SYS_PARA_STU;

SYS_PARA_STU sys_para_def;
一次性读取完参数地址开始的那段数据,通过将指针强制转换,这样就能得到结构体sys_para_def里面所有成员的数据了
数据的写入,考虑到不止1次参数修改,可以将参数修改后,设置1个修改标志,并对其计数,只要在最大计数值内,比如30s,用户改了多次参数,那么每改1次计数清零,计数到30s就只用存1次,不必改1个就存一个,这样容易减少EEPROM写入的寿命

USMART调试部分
//AT24CXX调试
        (void*)AT24CXX_TypeSet,"void AT24CXX_TypeSet(u16 type)",//这个主要是可以通过设置测试全系列AT24CXX

        (void*)AT24CXX_ReadOneByte,"u8 AT24CXX_ReadOneByte(u16 ReadAddr)",
        (void*)AT24CXX_WriteOneByte,"void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)",
         
        (void*)AT24CXX_SetCount,"void AT24CXX_SetCount(u16 WriteAddr)",
        (void*)AT24CXX_ReadCurrentAddData,"u8 AT24CXX_ReadCurrentAddData(u16 ReadAddr)",
        (void*)myAT24CXX_ReadSequential,"void myAT24CXX_ReadSequential(u16 ReadAddr, u16 NumToRead)",

        (void*)myAT24CXX_ReadOnebyOne,"void myAT24CXX_ReadOnebyOne(u16 ReadAddr, u16 NumToRead)",
        (void*)myAT24CXX_WriteTest,"void myAT24CXX_WriteTest(u16 WriteAddr, u16 NumToWrite, u16 offset, u8 type)",
        (void*)myAT24CXX_WriteOnePage,"void myAT24CXX_WriteOnePage(u16 WriteAddr,  u8 offset)",


在测试程序里面,可以通过#define ATOM_BOARD设置多种不同IO口初始化,方便测试;
后续再更新下W25QXX部分测试

AT24CXX全系列功能测试V0.1 20260630.rar

7.81 KB, 下载次数: 3

Planets, no limit!
回复

使用道具 举报

3

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
422
金钱
422
注册时间
2016-7-29
在线时间
93 小时
 楼主| 发表于 3 天前 | 显示全部楼层
AT24CXX参考手册整理一下,分享出来

MICROCHIP_EEPROM_AT24C128C-SSHM-T_规格书_WJ175111.pdf

1.34 MB, 下载次数: 0

GT24C2048H.pdf

616.5 KB, 下载次数: 0

C36533654_EEPROM_AT24C1024BN-SH-T_规格书_WJ1211091_unlocked 注释.pdf

4.37 MB, 下载次数: 0

C918272_EEPROM_ZD24C128A-XGMB_规格书_WJ209830.PDF

879.84 KB, 下载次数: 0

C12371_EEPROM_AT24C512C 注释.PDF

953.23 KB, 下载次数: 0

ATMEL_EEPROM_AT24C256C-SSHL-T_规格书_WJ83930.pdf

902.21 KB, 下载次数: 0

ATMEL_EEPROM_AT24C32D C64.PDF

1.32 MB, 下载次数: 0

AT24C02A 04 08 16 注释20250208.pdf

277.46 KB, 下载次数: 0

AT24C01.pdf

3.22 MB, 下载次数: 0

Planets, no limit!
回复 支持 反对

使用道具 举报

3

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
422
金钱
422
注册时间
2016-7-29
在线时间
93 小时
 楼主| 发表于 3 天前 | 显示全部楼层
6.AT24C512:       128B/页,tWR≤5ms,寻址范围0~0xFFFF,一共64KB
微信图片_20260712112701_1239_75.png

7.AT24C1024:      256B/页,tWR≤5ms,寻址范围0~0x1FFFF,一共128KB
微信图片_20260712112053_1236_75.png

8.GT24C2048:      256B/页,tWR≤5ms,寻址范围0~0x3FFFF,一共256KB
微信图片_20260712112120_1237_75.png
Planets, no limit!
回复 支持 反对

使用道具 举报

0

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
487
金钱
487
注册时间
2026-1-29
在线时间
29 小时
发表于 昨天 16:11 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-7-15 04:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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