24C02

本文详细介绍了如何使用STM32微控制器对24C02串行EEPROM进行字节级别的读写操作。内容涵盖了24C02的基本特性、设备地址设定、字节写操作的步骤以及字节读操作的流程,并提供了相关的STM32代码示例。通过对起始信号、设备地址、内存字节地址和数据传输的解析,帮助读者理解I2C总线协议在实际应用中的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础

  • 24C02功能概述

24C02是一个2KBit的串行EEPROM存储器,内部含有256个字节。在24C02里面有一个8字节的页写缓冲器。该设备的工作电压为1.8V到6.0V,芯片的第7引脚WP为写保护引脚,将该引脚接地允许正常的读写。

  • 设备地址

24C02的设备地址包括固定部分和可编程部分。可编程部分需要根据硬件引脚A0、A1和A2来设置。设备地址的最后一位用于设置数据传输的方向,即读/写位。格式如下图:

在这里插入图片描述

在IIC总线协议中,设备地址是起始信号后第一个发送的字节。如果硬件地址引脚A0、A1、A2均接地,那么,
读操作地址为:0xA1;
写操作地址则为:0xA0。

字节写操作

在这里插入图片描述

24C02接收完设备地址后,产生应答信号;
然后接收8位内存字节地址,产生应答信号,
接着接收一个8位数据,产生应答信号;
最后主机发送停止信号,字节写操作结束。

1、stm32代码

void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{				   	  	    																 
    IIC_Start();  
	
		if(EE_TYPE>AT24C16)         //判断芯片型号
		{
			IIC_Send_Byte(0XA0);	     
			IIC_Wait_Ack();
			IIC_Send_Byte(WriteAddr>>8);  //发送高地址	  
		}
		else 
		{
			IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));   //发送器件地址0XA0,写数据
		}  //(WriteAddr/256) 是为了确保大容量芯片的地址
		IIC_Wait_Ack();	  
		
		IIC_Send_Byte(WriteAddr%256);   //发送低地址
		IIC_Wait_Ack(); 			
		
		IIC_Send_Byte(DataToWrite);     //发送字节							   
		IIC_Wait_Ack();  		    	   
		
		IIC_Stop();//产生一个停止条件 
		delay_ms(10);	 
}

字节读操作

在这里插入图片描述

主机首先发送起始信号,接着发送设备地址和它想要读取的数据内存字节地址,执行一个伪写操作。在24C02应答主机之后,主机重新发送起始信号和从设备地址,进行读操作。24C02响应并发送应答信号,然后输出所要求的一个8位字节数据。主机接收完这个8位数据后,产生一个“非应答”信号,最后发送停止条件,字节读操作结束。

1、stm32

u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{				  
		u8 temp=0;		  	    																 
    IIC_Start();  
	
		if(EE_TYPE>AT24C16)
		{
			IIC_Send_Byte(0XA0);	   //发送写命令
			IIC_Wait_Ack();
			(ReadAddr>>8);//发送高地址	    
		}
		else 
		{
			IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));   //发送器件地址0XA0,写数据
		} 	   
			IIC_Wait_Ack(); 
		
			IIC_Send_Byte(ReadAddr%256);   //发送低地址
			IIC_Wait_Ack();	    
		
			IIC_Start();  	 	   
			IIC_Send_Byte(0XA1);           //进入接收模式			   
			IIC_Wait_Ack();	 
		
			temp=IIC_Read_Byte(0);		 
		
			IIC_Stop();//产生一个停止条件	    
			return temp;
}
### 关于24C02的相关IT信息 #### 1. 设备简介 24C02 是一种常见的 EEPROM 存储芯片,具有 I²C 接口。它支持的标准模式速度为 100 kHz 和快速模式下的 400 kHz 数据传输速率[^3]。 #### 2. Linux 驱动程序实现 在 Linux 系统中,为了使能对 24C02 的访问功能,通常通过定义 `i2c_driver` 结构体来完成驱动注册。以下是典型的结构体填充方式: ```c static const struct i2c_device_id FM24C02A_id[] = { { "FM24C02A", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, FM24C02A_id); static struct i2c_driver FM24C02A_driver = { .driver = { .name = "FM24C02A", }, .probe = FM24C02A_probe, .remove = FM24C02A_remove, .id_table = FM24C02A_id, // 这里用于设备匹配 }; ``` 上述代码片段展示了如何创建一个静态常量数组 `FM24C02A_id` 来描述设备 ID 表格,并将其赋值给 `i2c_driver` 中的 `.id_table` 字段以便进行设备匹配[^1]。 #### 3. STM32 HAL 库中的 I²C 实现 对于基于 STM32 微控制器的应用场景,可以借助 HAL (Hardware Abstraction Layer) 库简化硬件操作流程。例如,向 24C02 写入数据可以通过调用以下函数实现: ```c HAL_StatusTypeDef status; uint8_t data_to_write = 0xFF; // 假设要写入的数据为 0xFF status = HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)(DEVICE_ADDRESS << 1), &data_to_write, sizeof(data_to_write), HAL_MAX_DELAY); if (status != HAL_OK) { // 错误处理逻辑 } ``` 此代码片段演示了如何使用 `HAL_I2C_Master_Transmit()` 函数发送单字节数据到目标地址 `(DEVICE_ADDRESS << 1)` 处[^2]。 #### 4. 使用 CubeMX 工具配置 I²C 功能 STM32CubeMX 提供了一种图形化界面工具帮助开发者轻松设置外设参数并生成初始项目框架文件。当涉及到具体型号如 STM32F407 芯片时,集成好的 I²C 控制器可以直接被启用而无需深入研究其内部工作原理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值