【STM32】干货!! EEPROM芯片, FT24C16全片芯片数据读写
文章目录
1. FT24C16芯片介绍
FT24C16芯片是一款2线双向串行接口的EEPROM(Electrically Erasable Programmable Read-Only Memory),由Fremont Micro Devices(现更名为辉芒微电子)生产。
基本参数和特性
存储容量:128页,每页16字节,共128*16 = 2048 Byte 即2048字节,2K
。
工作电压:1.8V~5.5V
,支持低电压操作。
待机电流:待机电流典型值为1μA。
读写速度:写周期最大为5ms,I2C时钟频率为1MHz(5V),400kHz(1.8V、2.5V、2.7V)。
接口类型:I2C总线。
数据保护:具有硬件数据写保护
功能。
可靠性:高可靠性,擦写寿命可达100万次
,数据保持时间长达100年
。
2. 芯片封装介绍
图1 芯片封装
查datasheet,芯片有8pin和5pin的封装,如图1所示。笔者使用的是SOT-23的5pin封装。
pin | 功能描述 |
---|---|
1 | SCL, IIC总线-时钟线 |
2 | GND, 芯片供电地 |
3 | SDA, IIC总线-数据线 |
4 | VCC, 芯片供电正极 1.8V~5.5V |
5 | WP, 芯片写保护引脚,高电平有效 |
8pin封装与5pin封装引脚功能描述一致,其中,NC表示不连接NC(Not Connected)表示该引脚不进行连接
,没有实际功能。
2.1 芯片设备地址
IIC总线协议规定,芯片通信需要有设备地址,而从芯片封装我们得知,此芯片没有IIC地址配置引脚
,故不能像其他EEPROM芯片一样通过硬件配置IIC地址
。如图2所示,为AT24C02芯片应用电路图。A0,A1,A2
为设备地址配置引脚。
图2 AT24C02应用电路
图3 24C02地址位
那问题来了!
芯片地址无法用硬件配置,FT24C16的设备地址到底是多少呢???
芯片地址无法用硬件配置,FT24C16的设备地址到底是多少呢??
芯片地址无法用硬件配置,FT24C16的设备地址到底是多少呢???
大部分EEPROM设备的高4位地址都是1010,FT24C16也不例外,也固定为1010。即0xA
但是设备地址是7位+读写位,那低3位地址是多少?
首先,该芯片容量是2048字节,对应的数据地址也就是0~2047,即0x7ff
,最大占据2个字节。而设备地址是不是刚好有3位空着,数据地址中的高字节,就存放在设备地址的低3位中
,故我们就只需要发送设备地址+1字节的数据地址就可读取芯片的所有数据。
在前255字节设备地址和数据看不出问题,读取命令为例,读取第242个字节
数据,发送设备地址0xA0
, 数据地址 0xF1
但是读取256字节
时,读取命令就变成:设备地址0xA2
, 数据地址0x01
;
但是实际的设备地址还是0xA0, 数据地址为0x101
即!设备地址的低3位,实际是数据地址的高字节
。发送的数据地址
就为数据地址的低字节
。
3. FT24C16读写测试
// 1.定义2K数组
uint8_t rwBuf[2048];
// 2.初始化数据,16字节为一组,填入数据1~128
uint16_t i = 0, j = 0;
for(i = 0; i < 128; i++)
{
memset(&rwBuf[j], i+1, 16);
j += 16;
}
// 3.写入FT24C16数据后,把buffer清空
eeprom_write( 0, rwBuf, sizeof( rwBuf ) );
memset( rwBuf, 0, sizeof(rwBuf) );
// 4.读取FT24C16数据,并存入buffer中
eeprom_read( 0, rwBuf, sizeof( rwBuf ) );
// 5.观察读取到的数据是否和刚开始写入的数据一致。
4.实验结果
4.1 初始化数据, 16字节为一组,填入数据1~128,将芯片内存全部写满。
初始化数据,头部
初始化数据,尾部,右下角的0x80地址为 0x20000F99, 头部数据的左上角第一个0x01地址为0x2000079A
0x20000F99 – 0x2000079A = 7FF 即2047个数据 +1 共2048个数据
。
4.2 数据写入芯片后,buffer清零
4.3 重新读取FT24C16芯片数据
读取出的所有数据,与写入数据一致!
小结
第一次写文章,难免有疏漏,有疑问、建议欢迎评论区讨论!
作者:af·