[APM32F4] 【APM32F402R Micro-EVB】08:软件模拟IIC驱动24C芯片

[复制链接]
聪聪哥哥 发表于 2025-8-25 16:53 | 显示全部楼层 |阅读模式
一:24C02芯片介绍:
     24C02是一款2048位串行可擦除可编程只读存储器(EEPROM),组织为256个8位字。该设备采用先进的CMOS工艺制造,适用于低功耗和低电压应用。提供多种封装选项,包括8引脚DIP、8引脚SOP、8引脚MSOP、8引脚TSSOP、8引脚DFN和5引脚SOT-23/TSOT-23。标准2线双向串行接口用于所有读写功能。
二:24Cxx芯片特点:
宽范围的工作电压1.8V~5.5V低电压技术
-1mA典型工作电流
-1uA典型待机电流
存储器组织结构
24C02,256 X8(2K bits)
-24C04,512 X8(4K bits)
-24C08,1024X8(8K bits)
-24C16,2048 x8(16K bits)
-24C32,4096 X8(32K bits)
-24C64.8192X8(64K bits)2线串行接口,完全兼容12C总线12C时钟频率为1MHz(5V),400 kHz(1.8V,2.5V,2.7V)
施密特触发输入噪声抑制
硬件数据写保护
内部写周期(最大5 ms)
可按字节写
页写:8字节页(24C02),16字节页(24C04/08/16),32字节页(24C32164)
可按字节,随机和序列读
自动递增地址
ESD保护大于2.5kV
T24C02A
高可靠性
擦写寿命:100万次
-数据保持时间:100年
8-pin DIP和8-pin SOP封装
无铅工艺,符合RoHS标准
三:24Cxx 存储芯片的数据格式
07-1.png
可见 24C02 每一页最大支持64个字节长度,所以当我们存入数据时候需要注意不要超过每页的最大字节,防止自动存入到下一页。
原理图如下所示:
08-1.png
四:读写函数如下:
  1. /*******************************************************************************
  2. * 函 数 名         : errom_write()
  3. * 函数功能                     : 向24Cxx指定地址写入多个数据字节
  4. * 输    入         : u16 addr -写入的起始地址
  5. * 输    入         : u8 *dt_pro-待写入数据的缓存区首指针
  6. * 输    入         : u16 num-待写入的数据个数
  7. * 输    出         : 无
  8. *******************************************************************************/
  9. void  errom_write(u16 addr,u8 *dt_pro,u16 num)
  10. {
  11.     while(num--)
  12.                 {
  13.                   AT24Cxx_WriteOneByte(addr,(*dt_pro));
  14.       addr++;
  15.              dt_pro++;               
  16.                 }
  17. }

  18. /*******************************************************************************
  19. * 函 数 名         : errom_read()
  20. * 函数功能                     : 向24Cxx指定地址读出多个数据字节
  21. * 输    入         : u16 addr -读出的起始地址
  22. * 输    入         : u8 *dt_pro-待读出数据的缓存区首指针
  23. * 输    入         : u16 num-待读出的数据个数
  24. * 输    出         : 无
  25. *******************************************************************************/
  26. void errom_read(u16 addr,u8 *dt_pro,u16 num)
  27. {
  28.     while(num)
  29.                 {
  30.                    *dt_pro=AT24Cxx_ReadOneByte(addr);
  31.                    addr++;
  32.                          dt_pro++;
  33.                          num--;
  34.                 }
  35. }
测试代码如下所示:
  1. void Test_EEPROM(void)
  2. {

  3.         WriteBuffer24C02[0]= 0xFA ;
  4.         WriteBuffer24C02[1]= 0xFB ;
  5.         WriteBuffer24C02[2]= 0xFC ;
  6.         WriteBuffer24C02[3]= 0x05 ;
  7.         WriteBuffer24C02[4]= 0xC0 ;
  8.         WriteBuffer24C02[5]= 0x01 ;
  9.         WriteBuffer24C02[6]= 0x02 ;

  10. errom_write(0,&WriteBuffer24C02[0],7);
  11.   HAL_Delay(20);
  12. errom_read(0,&ReadBuffer24C02[0],7) ;
  13. memcpy(SendBuffer1,&ReadBuffer24C02[0],7 );
  14. SendDataToUSART1(7);
  15. }
08-2.png
07-3.jpg

空灵回声 发表于 2025-8-26 10:17 | 显示全部楼层
楼主,你们在存储24C02的时候有做写入加密处理吗?
 楼主| 聪聪哥哥 发表于 2025-8-26 11:08 | 显示全部楼层
本帖最后由 聪聪哥哥 于 2025-8-26 11:14 编辑
空灵回声 发表于 2025-8-26 10:17
楼主,你们在存储24C02的时候有做写入加密处理吗?

没有做,,,只是测试一下极海软件的IIC 驱动代码。等下移植一下官方的硬件IIC
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

238

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部