芯查查logo
  • 数据服务
    1. 新产品
    2. 物料选型
    3. 查替代
    4. 丝印反查
    5. 查品牌
    6. PCN/PDN
    7. 查方案
    8. 查代理
    9. 数据合作
  • SaaS/方案
      SaaS产品
    1. 供应链波动监控
    2. 半导体产业链地图
    3. BOM管理
    4. 解决方案
    5. 汽车电子
    6. 政府机构
    7. 数据API
  • 商城
  • 行业资讯
    1. 资讯
    2. 直播
  • 论坛社区
    1. 论坛
    2. 学习
    3. 测评中心
    4. 活动中心
    5. 积分商城
  • 查一下
  • 开通会员
【星允派 NEBULA PI】07:IIC驱动24C02
原创 发布时间:10:18
版块:
单片机/MCU论坛
简介:硬件IIC读取24C02操作,及使用注意事项。

一: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的存储结构

可见 24C02 每一页最大支持64个字节长度,所以当我们存入数据时候需要注意不要超过每页的最大字节,防止自动存入到下一页。

四:24C02的时序图:

4.1 24CXX支持I2C总线传输协议。12C是一种双向、两线串行通讯接口,分别是串行数据线SDA和串行时钟线SCL。两根线都必须通过一个上拉电阻接到电源。典型的总线配置如图下所示:

   总线上发送数据的器件被称作发送器,接收数据的器件被称作接收器。控制信息交换的器件被称作主器件,受主器件控制的器件则被称作从器件。主器件产生串行时钟SCL,控制总线的访问状态、产生START和STOP条件。24CXX在12C总线中作为从器件工作。只有当总线处于空闲状态时才可以启动数据传输。每次数据传输均开始于START条件,结束于STOP条件,二者之间的数据字节数是没有限制的,由总线上的主器件决定。信息以字节(8位)为单位传输,第9位时由接收器产生应答。

4.2 

起始和停止条件数据和时钟线都为高则称总线处在空闲状态。当SCL为高电平时SDA的下降沿(高到低叫做起始条件(START,简写为S),SDA的上升沿(低到高)则叫做停止条件(STOP,简写为P)。参见下所示:

4.3 24C02 配置地址如下所示:

I2C 总线允许连接多个从机设备。通过给不同的 24C02 芯片设置不同的 A2/A1/A0 组合,你可以在同一条 I2C 总线上挂载最多 8 个 24C02(或其它 24Cxx 系列)器件,而不会发生地址冲突。

五:代码编写过程如下:

5.1 芯片的原理图:

可见,该芯片直接连接到硬件的IIC接口,我们直接使用硬件的IIC来操作该款芯片

5.2 STM32 cube MX软件配置如下所示:

5.3 代码如下所示:

写入eeprom操作代码:

/*******************************************************************************
* Function Name  : void WriteBufferTo24C02(int addr,uint8_t *pdata,char length)
* Description    : 
* Input          : 
* Output         : None
* Return         : None
*******************************************************************************/
void WriteBufferTo24C02(int addr,uint8_t *pdata,char length)
{
	HAL_I2C_Mem_Write(&hi2c1, ADDR_WR_AT24CXX, addr, I2C_MEMADD_SIZE_16BIT, pdata, length, 1000);
}

读取eeprom操作代码:

/*******************************************************************************
* Function Name  : void ReadBufferTo24C02(int addr,uint8_t *pdata,char length)
* Description    : 
* Input          : 
* Output         : None
* Return         : None
*******************************************************************************/
void ReadBufferTo24C02(int addr,uint8_t *pdata,char length)
{
	HAL_I2C_Mem_Read(&hi2c1, ADDR_RD_AT24CXX, addr, I2C_MEMADD_SIZE_16BIT, pdata, length, 1000);
}

测试代码如下所示:

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

	WriteBufferTo24C02(0,&WriteBuffer24C02[0],7);
  HAL_Delay(20);
  ReadBufferTo24C02(0,&ReadBuffer24C02[0],7) ;

  HAL_UART_Transmit(&huart1, &ReadBuffer24C02[0], 7, 100); 

实物验证图如下所示:

后记:

1:可以将需要存储的数据,通过memcpy函数,赋值给存储的buffer。

2:每次存入和读取的需要增加一定延时时间,不太明白为什么要加延时,实测不加延时的话,数据读取的都是错误。

(稍后拿逻辑分析仪测试一下。)

3:最重要的一点,存入和读取的buffer,要进行取值操作,否则导致数据异常。

4:为了方便管理数据,尽量每页存储的数据不超过64个字节。

申请原创奖励
10:18
  • 举报
😁😂😃😄😅😆😉😊😋😌😍😏😒😓😔😖😘😚😜😝😞😠😡😢😣😤😥😨😩😪😫😭😰😱😲😳😵😷😸😹😺😻😼😽😾😿🙀🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏✂✅✈✉✊✋✌✏✒✔✖✨✳✴❄❇❌❎❓❔❕❗❤➕➖➗➡➰🚀🚃🚄🚅🚇🚉🚌🚏🚑🚒🚓🚕🚗🚙🚚🚢🚤🚥🚧🚨🚩🚪🚫🚬🚭🚲🚶🚹🚺🚻🚼🚽🚾🛀Ⓜ🅰🅱🅾🅿🆎🆑🆒🆓🆔🆕
@好友

全部评论

加载中
游客登录通知
已选择 0 人
自定义圈子
移动
发布帖子
发布动态
发布问答
发布者
聪聪哥哥
最新帖子
【星允派 NEBULA PI】07:IIC驱动24C02【星允派 NEBULA PI】05:调试外部中断【星允派 NEBULA PI】04:DMA+空闲中断收发数据【星允派 NEBULA PI】03:调试串口1的输出【星允派 NEBULA PI】01:了解开发板资源,环境准备
热门版块
查看更多
问型号
问技术
问行情
电子DIY
汽车电子工程师论坛
工业电子专区
新手入门指南
单片机/MCU论坛
PCB设计
开源项目

4

收藏

分享

微信扫码
分享给好友

评论