0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32: 介绍IIC总线、读写AT24C02(模拟时序)

1126626497 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-03-17 09:23 次阅读

一、环境介绍

编程软件: keil5

操作系统: win10

MCU型号: STM32F103ZET6

STM32编程方式: 寄存器开发 (方便程序移植到其他单片机)

IIC总线:STM32本身支持IIC硬件时序的,本文采用的是模拟时序,下篇文章就介绍配置STM32的IIC硬件时序读写AT24C02和AT24C08。

模拟时序更加方便移植到其他单片机,通用性更高,不分MCU;硬件时序效率更高,单每个MCU配置方法不同,依赖硬件本身支持。

目前器件: 采用AT24C02 EEPROM存储芯片

二、AT24C02存储芯片介绍

2.1 芯片功能特性介绍

AT24C02 是串行CMOS类型的EEPROM存储芯片,AT24C0x这个系列包含了AT24C01、AT24C02、AT24C04、AT24C08、AT24C16这些具体的芯片型号。

他们容量分别是:1K (128 x 8)、2K (256 x 8)、4K (512 x 8)、8K (1024 x 8)、16K (2048 x 8) ,其中的8表示8位(bit)

它们的管脚功能、封装特点如下:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

芯片功能描述:

AT24C02系列支持I2C,总线数据传送协议I2C,总线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器;数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,由于A0、A1和A2可以组成000~111八种情况,即通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上,通过进行不同的配置进行选择器件。

芯片特性介绍:

1. 低压和标准电压运行
–2.7(VCC=2.7伏至5.5伏)
–1.8(VCC=1.8伏至5.5伏)

2. 两线串行接口(SDA、SCL)

3. 有用于硬件数据保护的写保护引脚

4. 自定时写入周期(5毫秒~10毫秒),因为内部有页缓冲区,向AT24C0x写入数据之后,还需要等待AT24C0x将缓冲区数据写入到内部EEPROM区域.

5. 数据保存可达100年

6. 100万次擦写周期

7. 高数据传送速率为400KHz、低速100KHZ和IIC总线兼容。 100 kHz(1.8V)和400 kHz(2.7V、5V)

8. 8字节页写缓冲区
这个缓冲区大小与芯片具体型号有关: 8字节页(1K、2K)、16字节页(4K、8K、16K)

2.2 芯片设备地址介绍

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

IIC设备的标准地址位是7位。上面这个图里AT24C02的1010是芯片内部固定值,A2 、A1、 A0是硬件引脚、由硬件决定电平;最后一位是读/写位(1是读,0是写),读写位不算在地址位里,但是根据IIC的时序顺序,在操作设备前,都需要先发送7位地址,再发送1位读写位,才能启动对芯片的操作,我们在写模拟时序为了方便统一写for循环,按字节发送,所以一般都是将7地址位与1位读写位拼在一起,组合成1个字节,方便按字节传输数据。

我现在使用的开发板上AT24C02的原理图是这样的:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

那么这个AT24C02的标准设备地址就是: 0x50(十六进制),对应的二进制就是: 1010000

如果将读写位组合在一起,读权限的设备地址: 0xA1 (10100001) 、写权限的设备地址: 0xA0 (10100000)

2.3 对AT24C02 按字节写数据的指令流程(时序)

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

详细解释:

1. 先发送起始信号

2. 发送设备地址(写权限)

3. 等待AT24C02应答、低电平有效

4. 发送存储地址、AT24C02内部一共有256个字节空间,寻址是从0开始的,范围是(0~255);发送这个存储器地址就是告诉AT24C02接下来的数据改存储到哪个地方。

5.等待AT24C02应答、低电平有效

6. 发送一个字节的数据,这个数据就是想存储到AT24C02里保存的数据。

7.等待AT24C02应答、低电平有效

8. 发送停止信号

2.3 对AT24C02 按页写数据的指令流程(时序)

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

详细解释:

1. 先发送起始信号

2. 发送设备地址(写权限)

3. 等待AT24C02应答、低电平有效

4. 发送存储地址、AT24C02内部一共有256个字节空间,寻址是从0开始的,范围是(0~255);发送这个存储器地址就是告诉AT24C02接下来的数据改存储到哪个地方。

5.等待AT24C02应答、低电平有效

6. 可以循环发送8个字节的数据,这些数据就是想存储到AT24C02里保存的数据。

AT24C02的页缓冲区是8个字节,所有这里的循环最多也只能发送8个字节,多发送的字节会将前面的覆盖掉。

需要注意的地方: 这个页缓冲区的寻址也是从0开始,比如: 0~7算第1页,8~15算第2页......依次类推。 如果现在写数据的起始地址是3,那么这一页只剩下5个字节可以写;并不是说从哪里都可以循环写8个字节。

详细流程: 这里程序里一般使用for循环实现

(1). 发送字节1

(2). 等待AT24C02应答,低电平有效

(3). 发送字节2

(4).等待AT24C02应答,低电平有效

.........

最多8次.

7.等待AT24C02应答、低电平有效

8. 发送停止信号

2.4 从AT24C02任意地址读任意字节数据(时序)

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

AT24C02支持当前地址读、任意地址读,最常用的还是任意地址读,因为可以指定读取数据的地址,比较灵活,上面这个指定时序图就是任意地址读。

详细解释:

1. 先发送起始信号

2. 发送设备地址(写权限)

3. 等待AT24C02应答、低电平有效

4. 发送存储地址、AT24C02内部一共有256个字节空间,寻址是从0开始的,范围是(0~255);发送这个存储器地址就是告诉AT24C02接下来应该返回那个地址的数据给单片机。

5.等待AT24C02应答、低电平有效

6. 重新发送起始信号(切换读写模式)

7.发送设备地址(读权限)

8.等待AT24C02应答、低电平有效

9. 循环读取数据: 接收AT24C02返回的数据.

读数据没有字节限制,可以第1个字节、也可以连续将整个芯片读完。

10. 发送非应答(高电平有效)

11. 发送停止信号

三、IIC总线介绍

2.1 IIC总线简介

I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。

I2C规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。

I2C 总线通过串行数据(SDA)线和串行时钟(SCL)线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别,而且都可以作为一个发送器或接收器(由器件的功能决定)。

I2C有四种工作模式:
1.主机发送
2.主机接收
3.从机发送
4.从机接收

I2C总线只用两根线:串行数据SDA(Serial Data)、串行时钟SCL(Serial Clock)。

总线必须由主机(通常为微控制器)控制,主机产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。

SDA线上的数据状态仅在SCL为低电平的期间才能改变。

2.2 IIC总线上的设备连接图

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。

其中上拉电阻范围是4.7K~100K。

2.3I2C总线特征

I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个从设备都会对应一个唯一的地址(可以从I2C器件的数据手册得知)。主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。

1. 总线上能挂接的器件数量
I2C总线上可挂接的设备数量受总线的最大电容400pF 限制,如果所挂接的是相同型号的器件,则还受器件地址的限制。
一般I2C设备地址是7位地址(也有10位),地址分成两部分:芯片固化地址(生产芯片时候哪些接地,哪些接电源,已经固定),可编程地址(引出IO口,由硬件设备决定)。
例如: 某一个器件是7 位地址,其中10101 xxx 高4位出厂时候固定了,低3位可以由设计者决定。
则一条I2C总线上只能挂该种器件最少8个。
如果7位地址都可以编程,那理论上就可以达到128个器件,但实际中不会挂载这么多。

2. 总线速度传输速度:
I2C总线数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。一般通过I2C总线接口可编程时钟来实现传输速率的调整。

3. 总线数据长度
I2C总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传输。

2.4 I2C总线协议基本时序信号

空闲状态:SCL和SDA都保持着高电平。

起始条件:总线在空闲状态时,SCL和SDA都保持着高电平,当SCL为高电平期间而SDA由高到低的跳变,表示产生一个起始条件。在起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他I2C器件无法访问总线。

停止条件:当SCL为高而SDA由低到高的跳变,表示产生一个停止条件。

答应信号:每个字节传输完成后的下一个时钟信号,在SCL高电平期间,SDA为低,则表示一个应答信号。

非答应信号:每个字节传输完成后的下一个时钟信号,在SCL高电平期间,SDA为高,则表示一个应答信号。应答信号或非应答信号是由接收器发出的,发送器则是检测这个信号(发送器,接收器可以从设备也可以主设备)。

注意:起始和结束信号总是由主设备产生。

2.5 起始信号与停止信号

起始信号就是: 时钟线SCL处于高电平的时候,数据线SDA由高电平变为低电平的过程。SCL=1;SDA=1;SDA=0;

停止信号就是: 时钟线SCL处于低电平的时候, 数据线SDA由低电平变为高电平的过程。SCL=1;SDA=0;SDA=1;

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

2.6 应答信号

数据位的第9位就时应答位。 读取应答位的流程和读取数据位是一样的。示例: SCL=0;SCL=1;ACK=SDA; 这个ACK就是读取的应答状态。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

2.7 数据位传输时序

通过时序图了解到,SCL处于高电平的时候数据稳定,SCL处于低电平的时候数据不稳定。

那么对于写一位数据(STM32--->AT24C02):SCL=0;SDA=data;SCL=1;

那么对于读一位数据(STM32<-----AT24C02): SCL=0;SCL=1;data=SDA;

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

2.8 总线时序

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

四、IIC总线时序代码、AT24C02读写代码

在调试IIC模拟时序的时候,可以在淘宝上买一个24M的USB逻辑分析仪,时序出现问题,使用逻辑分析仪一分析就可以快速找到问题。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

4.1 iic.c 这是IIC模拟时序完整代码

完整的工程源码下载地址,下载即可编译运行测试(包含了模拟IIC时序、STM32硬件IIC时序分别驱动AT24C02和AT24C08):https://download.csdn.net/download/xiaolong1126626497/19399945

#include "iic.h"

/*
函数功能:IIC接口初始化
硬件连接:
SDA:PB7
SCL:PB6
*/
void IIC_Init(void)
{
	RCC->APB2ENR|=1<<3;//PB
	GPIOB->CRL&=0x00FFFFFF;
	GPIOB->CRL|=0x33000000;
	GPIOB->ODR|=0x3<<6;
}

/*
函数功能:IIC总线起始信号
*/
void IIC_Start(void)
{
	IIC_SDA_OUTMODE(); //初始化SDA为输出模式
	IIC_SDA_OUT=1; 		 //数据线拉高
	IIC_SCL=1;     		 //时钟线拉高
	DelayUs(4);        //电平保持时间
	IIC_SDA_OUT=0; 		 //数据线拉低
	DelayUs(4);        //电平保持时间
	IIC_SCL=0;     		 //时钟线拉低
}


/*
函数功能:IIC总线停止信号
*/
void IIC_Stop(void)
{
	IIC_SDA_OUTMODE();    //初始化SDA为输出模式
	IIC_SDA_OUT=0; 		 //数据线拉低
	IIC_SCL=0;     		 //时钟线拉低
	DelayUs(4);           //电平保持时间
	IIC_SCL=1;     		 //时钟线拉高
	DelayUs(4);           //电平保持时间
	IIC_SDA_OUT=1; 		 //数据线拉高
}

/*
函数功能:获取应答信号
返 回 值:1表示失败,0表示成功
*/
u8 IIC_GetACK(void)
{
	u8 cnt=0;
	IIC_SDA_INPUTMODE();//初始化SDA为输入模式
	IIC_SDA_OUT=1; 		  //数据线上拉
	DelayUs(2);         //电平保持时间
	IIC_SCL=0;     		  //时钟线拉低,告诉从机,主机需要数据
	DelayUs(2);         //电平保持时间,等待从机发送数据
	IIC_SCL=1;     		  //时钟线拉高,告诉从机,主机现在开始读取数据
	while(IIC_SDA_IN)   //等待从机应答信号
	{
		cnt++;
		if(cnt>250)return 1;
	}
	IIC_SCL=0;     		  //时钟线拉低,告诉从机,主机需要数据
	return 0;
}


/*
函数功能:主机向从机发送应答信号
函数形参:0表示应答,1表示非应答
*/
void IIC_SendACK(u8 stat)
{
	IIC_SDA_OUTMODE(); //初始化SDA为输出模式
	IIC_SCL=0;     		 //时钟线拉低,告诉从机,主机需要发送数据
	if(stat)IIC_SDA_OUT=1; //数据线拉高,发送非应答信号
	else IIC_SDA_OUT=0; 	 //数据线拉低,发送应答信号
	DelayUs(2);            //电平保持时间,等待时钟线稳定
	IIC_SCL=1;     		     //时钟线拉高,告诉从机,主机数据发送完毕
	DelayUs(2);            //电平保持时间,等待从机接收数据
	IIC_SCL=0;     		  	 //时钟线拉低,告诉从机,主机需要数据
}


/*
函数功能:IIC发送1个字节数据
函数形参:将要发送的数据
*/
void IIC_WriteOneByteData(u8 data)
{
	u8 i;
	IIC_SDA_OUTMODE(); //初始化SDA为输出模式
	IIC_SCL=0;     		 //时钟线拉低,告诉从机,主机需要发送数据
	for(i=0;i<8;i++)
	{
		if(data&0x80)IIC_SDA_OUT=1; //数据线拉高,发送1
		else IIC_SDA_OUT=0; 	 //数据线拉低,发送0
		IIC_SCL=1;     		     //时钟线拉高,告诉从机,主机数据发送完毕
		DelayUs(2);            //电平保持时间,等待从机接收数据
		IIC_SCL=0;     		 		 //时钟线拉低,告诉从机,主机需要发送数据
		DelayUs(2);            //电平保持时间,等待时钟线稳定
		data<<=1;              //先发高位
	}
}


/*
函数功能:IIC接收1个字节数据
返 回 值:收到的数据
*/
u8 IIC_ReadOneByteData(void)
{
	u8 i,data;
	IIC_SDA_INPUTMODE();//初始化SDA为输入模式
	for(i=0;i<8;i++)
	{
		IIC_SCL=0;     		  //时钟线拉低,告诉从机,主机需要数据
		DelayUs(2);         //电平保持时间,等待从机发送数据
		IIC_SCL=1;     		  //时钟线拉高,告诉从机,主机现在正在读取数据
		data<<=1;           
		if(IIC_SDA_IN)data|=0x01;
		DelayUs(2);         //电平保持时间,等待时钟线稳定
	}
	IIC_SCL=0;     		  		//时钟线拉低,告诉从机,主机需要数据 (必须拉低,否则将会识别为停止信号)
	return data;
}


poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

4.2 AT24C02.c 这是AT24C02完整的读写代码

#include "at24c02.h"
/*
函数功能:检查AT24C02是否存在
返 回 值:1表示失败,0表示成功
*/
u8 At24c02Check(void)
{
	u8 data;
	At24c02WriteOneByteData(255,0xAA);
	data=At24c02ReadOneByteData(255);
	if(data==0xAA)return 0;
	else return 1;
}


/*
函数功能:AT24C02随机读数据
函数形参:读取的地址(0~255)
返 回 值:读出一个数据
*/
u8 At24c02ReadOneByteData(u32 addr)
{
	u8 data;
	IIC_Start(); //发送起始信号	
	IIC_WriteOneByteData(AT24C02_WRITE_ADDR); //设置写模式
	IIC_GetACK();//获取应答
	IIC_WriteOneByteData(addr); //设置读取数据的位置
	IIC_GetACK();//获取应答

	IIC_Start(); //发送起始信号	
	IIC_WriteOneByteData(AT24C02_READ_ADDR); //设置读模式
	IIC_GetACK();//获取应答
	data=IIC_ReadOneByteData(); //接收数据
	IIC_SendACK(1); //发送非应答信号
	IIC_Stop(); //停止信号
	return data;
}


/*
函数功能:AT24C02写一个字节的数据
函数形参:
		addr:写入的地址(0~255)
		data:写入的数据
*/
void At24c02WriteOneByteData(u32 addr,u8 data)
{
	IIC_Start(); //发送起始信号
	IIC_WriteOneByteData(AT24C02_WRITE_ADDR); //设置写模式
	IIC_GetACK();//获取应答
	IIC_WriteOneByteData(addr); //设置写入数据的位置
	IIC_GetACK();//获取应答
	IIC_WriteOneByteData(data); //设置写入的数据
	IIC_GetACK();//获取应答
	IIC_Stop();  //停止信号
	DelayMs(10); //等待写入完毕
}


/*
函数 功 能:AT24C02当前位置读一个字节数据
函数返回值:读出的数据
*/
u8 At24c02CurrentAddrReadOneByteData(void)
{
	u8 data;
	IIC_Start(); //发送起始信号
	IIC_WriteOneByteData(AT24C02_READ_ADDR); //设置读模式
	IIC_GetACK();//获取应答
	data=IIC_ReadOneByteData(); //接收数据
	IIC_SendACK(1); //发送非应答信号
	IIC_Stop(); //停止信号
	return data;
}



/*
函数功能:AT24C02连续读数据
函数形参:
u8 addr   //读取的地址(0~255)
u8 len    //读取的长度
u8 *buff  //读出的数据存放缓冲区
*/
void At24c02ReadByteData(u32 addr,u8 len,u8 *buff)
{
	u8 i;
	IIC_Start(); //发送起始信号	
	IIC_WriteOneByteData(AT24C02_WRITE_ADDR); //设置写模式
	IIC_GetACK();//获取应答
	IIC_WriteOneByteData(addr); //设置读取数据的位置
	IIC_GetACK();//获取应答	
	IIC_Start(); //发送起始信号	
	IIC_WriteOneByteData(AT24C02_READ_ADDR); //设置读模式
	IIC_GetACK();//获取应答

	for(i=0;i=len)
    {
        page_remain=len;
    }
    while(1)
    {
        At24c02PageWrite(addr,data,page_remain);
        if(page_remain==len)
        {
            break;
        }
        addr+=page_remain;
        data+=page_remain;
        len-=page_remain;
        if(len>=8)page_remain=8;
        else page_remain=len;
    }
}
;i++)>


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    4523

    浏览量

    116194
  • STM32
    +关注

    关注

    2197

    文章

    10054

    浏览量

    345065
  • 总线
    +关注

    关注

    10

    文章

    2456

    浏览量

    86570
  • IIC
    IIC
    +关注

    关注

    11

    文章

    262

    浏览量

    37364
  • AT24C02
    +关注

    关注

    0

    文章

    75

    浏览量

    23940
收藏 人收藏

    评论

    相关推荐

    IICAT24C02读写

    IICAT24C02读写(单片机实验)有问题欢迎私信哦课程设计(综合实验)内容及要求通过IIC总线扩展1片AT24C02芯片 ,实现单片机对存储器24C02读写,并通过LED灯或8段数
    发表于 07-16 06:27

    如何使用IIC总线AT24C02存储芯片去读写代码呢

    AT24C02存储芯片有哪些功能特性?IIC总线有哪些特征呢?如何使用IIC总线AT24C02存储芯片去读写代码呢?
    发表于 11-25 06:45

    采用IIC硬件时序读写AT24C08的方法步骤

    时序的,上篇文章已经介绍了采用IIC模拟时序读写AT24C02,这篇文章介绍STM32的硬件IIC配置方法,并读写AT24C08。文章地址:https://xiaolong.blog.csdn
    发表于 11-30 07:48

    配置STM32IIC硬件时序读写AT24C02和AT24C08

    时序的,本文采用的是模拟时序,下篇文章就介绍配置STM32IIC硬件时序读写AT24C02和AT24C08。模拟时序更加方便移植到其他单片机,通用性更高,不分MCU;硬件时序
    发表于 12-08 06:27

    51单片机模拟IIC时序

    模拟IIC时序读写访问AT24C02STM32操作类似
    发表于 03-01 06:33

    【技术精选】嵌入式STM32原创征文活动精选文章

    总线、W25Q64(FLASH)的详细介绍STM32: 介绍IIC总线读写AT24C02(模拟时序)STM32F103实现IAP在线升级应用程序基于STM32完成FATFS文件系统移植与运用
    发表于 07-27 18:26

    使用单片机读写IIC AT24C02的仿真设计实例文件免费下载

    介绍的是使用单片机读写IIC AT24C02的单片机仿真设计实例文件免费下载。
    发表于 03-16 11:16 30次下载

    IICAT24C02读写(单片机实验)

    IICAT24C02读写(单片机实验)有问题欢迎私信哦课程设计(综合实验)内容及要求通过IIC总线扩展1片AT24C02芯片 ,实现单片机对存储器24C02读写,并通过LED灯或8段数
    发表于 11-22 09:21 63次下载
    <b>IIC</b>及<b>AT24C02</b>的<b>读写</b>(单片机实验)

    STM32入门开发: 介绍IIC总线读写AT24C02(EEPROM)(采用模拟时序)

    时序的,本文采用的是模拟时序,下篇文章就介绍配置STM32IIC硬件时序读写AT24C02和AT24C08。模拟时序更加方便移植到其他单片机,通用性更高,不分MCU;硬件时序
    发表于 11-25 20:06 39次下载
    <b>STM32</b>入门开发: <b>介绍</b><b>IIC</b><b>总线</b>、<b>读写</b><b>AT24C02</b>(EEPROM)(采用<b>模拟</b><b>时序</b>)

    IIC通信以及AT24C02使用

    IIC协议②IIC协议原理讲解③IIC协议代码讲解2.AT24C02模块①AT24C02模块有什么用②如何实现AT24C02与单片机通信③代码解析1.什么是通信协议
    发表于 11-30 20:51 14次下载
    <b>IIC</b>通信以及<b>AT24C02</b>使用

    STM32f103系列i2c读写文件at24c02

    STM32f103系列i2c读写文件at24c02免费下载。
    发表于 03-04 09:43 11次下载

    Linux驱动开发-编写(EEPROM)AT24C02驱动

    AT24C02IIC接口的EEPROM存储芯片,这颗芯片非常经典,百度搜索可以找到非常多的资料,大多都是51、STM32单片机的示例代码,大多采用模拟时序、裸机系统运行。当前文章介绍在Linux
    的头像 发表于 09-17 15:29 2437次阅读
    Linux驱动开发-编写(EEPROM)<b>AT24C02</b>驱动

    STM32 IIC读写AT24C02(一)

    IIC读写AT24C02,首先要了解IIC是什么。
    发表于 07-22 10:28 233次阅读
    <b>STM32</b> <b>IIC</b><b>读写</b><b>AT24C02</b>(一)

    STM32 IIC读写AT24C02(二)

    IIC读写AT24C02的协议层,现在开始编写读写AT24C02的驱动函数。先从单字节的读写开始。
    发表于 07-22 10:31 299次阅读
    <b>STM32</b> <b>IIC</b><b>读写</b><b>AT24C02</b>(二)

    STM32 IIC读写AT24C02(三)

    AT24C02的单字节读写,但是对于对于2K内存来说,如果对全部数据的读取或者写入都只用单字节读写来完成,这样就会很不方便。
    发表于 07-22 10:33 223次阅读
    <b>STM32</b> <b>IIC</b><b>读写</b><b>AT24C02</b>(三)