【STM32】干货!! EEPROM芯片, FT24C16全片芯片数据读写

文章目录

  • 1. FT24C16芯片介绍
  • 2. 芯片封装介绍
  • 2.1 芯片设备地址
  • 3. FT24C16读写测试
  • 4.实验结果
  • 4.1 初始化数据, 16字节为一组,填入数据1~128,将芯片内存全部写满。
  • 4.2 数据写入芯片后,buffer清零
  • 4.3 重新读取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 芯片封装
    图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应用电路
    图2 AT24C02应用电路

    图3 24C02地址位图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芯片数据


    读取出的所有数据,与写入数据一致!

    小结

  • FT24C16有2048字节的数据,数据地址对应0~2047,地址位最大0x7FF,2字节
  • EEPROM的地址一般为7位,FT24C16没有地址配置,而高4位为固定值1010(b),低3位与数据地址(1字节)共同组成了实际发送的数据地址3+8=11位
  • 仅测试FT24C16,其他型号未测试。
  • 第一次写文章,难免有疏漏,有疑问、建议欢迎评论区讨论!

    作者:af·

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【STM32】干货!! EEPROM芯片, FT24C16全片芯片数据读写

    发表回复