蓝桥杯嵌入式之EEPROM讲解

2019-08-01 10:08:17 浏览数 (2)

蓝桥杯开发板板载一个AT24C02的2KB的EEPROM芯片,主要考察对IIC通信的掌握。IIC通信因其需要的数据线少、通信方式可自己决定等优点在嵌入式开发板中运用很多。AT24C02需要2根数据线(一根为数据线,一根为时钟线)就可以与开发板进行通信。

IIC初始化

因为EEPROM的通信方式IIC通信,所以需要对IIC进行初始化。需要的文件有i2c.c和i2c.h文件。在比赛的时候会提供完整的i2c.c和i2c.h文件,所以只需将这两个文件包含在工程里即可。IIC初始化代码为

代码语言:javascript复制
i2c_init();

AT24C02指定地址读取数据

代码语言:javascript复制
/**
  * @说明     从AT24C02指定地址读出一个字节数据
  * @参数     address:AT24C02内部存储地址
  * @返回值   val:读出数据
  */
uint8_t x24c02_read(uint8_t address)
{
  unsigned char val;
  
  I2CStart(); 
  I2CSendByte(0xa0);
  I2CWaitAck(); 
  
  I2CSendByte(address);
  I2CWaitAck(); 
  
  I2CStart();
  I2CSendByte(0xa1); 
  I2CWaitAck();
  val = I2CReceiveByte(); 
  I2CWaitAck();
  I2CStop();
  
  return(val);
}

函数I2CStart是打开IIC;函数I2CSendByte是发送一个字节的数据,可以是地址,也可以是指令;函数I2CWaitAck是等待IIC器件的相应;函数I2CReceiveByte是接收器件发送的一个字节数据;函数I2CStop是关闭IIC通信。比赛的时候只提供IIC原始函数,AT24C02的读写代码需要自己组织代码,难点是逻辑顺序会记错,导致代码无法使用

AT24C02向指定地址写入指定数据

代码语言:javascript复制
/**
  * @说明     向AT24C02指定地址写入一个字节数据
  * @参数     address:AT24C02内部存储地址
  * @参数     info:写入数据
  * @返回值   None
  */
void x24c02_write(unsigned char address,unsigned char info)
{
  I2CStart(); 
  I2CSendByte(0xa0); 
  I2CWaitAck(); 
  
  I2CSendByte(address);  
  I2CWaitAck(); 
  I2CSendByte(info); 
  I2CWaitAck(); 
  I2CStop();
}

由以上两个AT24C02读写函数可知,当发送0xa0指令是读取相应地址的数据,发送0xa1指令是向指定地址写入指定的数据。两者的函数内容相似,需要认真记忆。

需要注意的是AT24C02的地址是从0x00~0xff,如果超出该地址值会出现错误。地址和写入或读取的数据的类型都是字符型,其他类型的数据有可能出现错误。

0 人点赞