首页 » 通讯 » 「STM32 」EEPROM(AT24C02)的IIC操作实验_地址_数据

「STM32 」EEPROM(AT24C02)的IIC操作实验_地址_数据

神尊大人 2025-01-22 20:53:02 0

扫一扫用手机浏览

文章目录 [+]

我们利用I2C来操控一个EEPROM(AT24C02)实现数据的读写。

AT24C02的datasheet可直接在网高下载下来,此刻我们只关注一些主要的芯片信息了:

「STM32 」EEPROM(AT24C02)的IIC操作实验_地址_数据 「STM32 」EEPROM(AT24C02)的IIC操作实验_地址_数据 通讯

管脚如下:

「STM32 」EEPROM(AT24C02)的IIC操作实验_地址_数据 「STM32 」EEPROM(AT24C02)的IIC操作实验_地址_数据 通讯
(图片来自网络侵删)

SDA和SCL为I2C总线,vcc和vss分别为电源和地,wc为写保护,mode为模式选择,E0~E2为设置该设备地址的,它是主设备识别的唯一标识。
AT24C02可认为是一个从设备,主设备为我的STM32。

怎么设置AT24C02的地址:

一个8bit的数据:

bit4~bit7:默认为0101

bit1~bit3:是须要我们自己设置的,它对应于E0~E2管脚,如果你的硬件上都接的是地,那么即为000。

bit0:掌握读写的。
1位读操作,0位写操作。

如果E0~E2在硬件上都接的是地线,那么:操作该AT24C02我们要读的话为:1010 0001即0xA1,假如要写的话为1010 0000 即0xA0。
便是这个道理了。

下面再来看看读写一个byte的时序:

写:

先来一个启迪旗子暗记,然后是写入设备地址,即0xA0,然后给一个应答旗子暗记,然后写入我们要写的地址,这个地址大小为256byte,等待应答,然后写入数据,这个数据存放在你前面设置的那个地址里面,然后等待应答,末了发停滞旗子暗记。

读:

我们看比较大略的一中:即从某个地址去读数据

先发起始旗子暗记,然后发送地址,即:0xA1。
确定我们要操作的是哪个AT24C02,等待应答旗子暗记,接下来我们要确定操作的是AT24C02里面的那个地址空间,然后等待应答,然后在发送一个起始旗子暗记,然后发送设备地址,等待应答,然后才是读出数据,等待应答,发送结束旗子暗记。

大略的来说:

对付写,由于I2C总线是可以1主多从的,我们就须要确定我们给哪个从机设备写,我们确定了设备,那么我们就须要在确定把我的数据到底写到设备的那个地址空间里面去,即0~255byte,只要当两个都确定了,我们才能才是写数据了。

对付读,同样的道理,先找到你要读的设备到底是哪一个,找到了设备,还弗成啊,你须要找到你原来把数据从到那个地方了,那你就要找到数据的存放位置,只是读的时候我们发送了两次起始旗子暗记,两次设备地址,然后我们就读数据了。

下面我们再来看重视要源码:

在AT24C02指定地址写入一个数据

对照和协议和源码我们来看一下:

函数的参数为:你要写入数据的存放地址和你要写入的数据

首先发送一个I2C协议的起始旗子暗记,然后确定设备发送写旗子暗记,这个写是与设备的内存容量有关系的,我们这里跑的是else里面的内容,即:

IIC_Send_Byte(0XA0+((WriteAddr/256)<<1)); //发送器件地址0XA0,写数据

这个写入的为0xA0了。
然后等待应答,然后写入内存地址,即我们要把我们的数据放在芯片的内存的哪里?

IIC_Send_Byte(WriteAddr%256); //发送低地址

,等待应答,然后发送数据,然后等待应答,发送停滞旗子暗记结束。

在AT24C02指定地址读出一个数据

函数的参数为:读数据的地址,

函数的返回值为:读到的数据

比拟协议,代码是完备按照协议走的,肯定是没有问题的。
就不多说了。

基于这两个基本函数,在附加一个扩展函数:

在AT24CXX里面的指定地址开始写入长度为Len的数据

该函数用于写入16bit或者32bit的数据.

WriteAddr :开始写入的地址

DataToWrite:数据数组首地址

Len :要写入数据的长度2,4

在AT24CXX里面的指定地址开始读出长度为Len的数据

该函数用于读出16bit或者32bit的数据.

ReadAddr :开始读出的地址

返回值 :数据

Len :要读出数据的长度2,4

检讨AT24CXX是否正常

这里用了24XX的末了一个地址(255)来存储标志字.

如果用其他24C系列,这个地址要修正

返回1:检测失落败

返回0:检测成功

在AT24CXX里面的指定地址开始读出指定个数的数据

ReadAddr :开始读出的地址 对24c02为0~255

pBuffer :数据数组首地址

NumToRead:要读出数据的个数

在AT24CXX里面的指定地址开始写入指定个数的数据

WriteAddr :开始写入的地址 对24c02为0~255

pBuffer :数据数组首地址

NumToWrite:要写入数据的个数

主函数就不说了,直接初始化,然后调函数做操作就好了。

喜好我文章的朋友,欢迎关注、点赞、评论、互换。
版权个人所有,转载请注明出处

标签:

相关文章