1、 EEPROM读写测试实验读写测试实验 ? 意义与作用意义与作用 EEPROM是一种电可擦可编程只读存储器,掉电后数据不丢失。是单片机应用系统中 经常会用到的存储器。EEPROM掉电后数据不会丢失,而且可以用电信号直接清除存储数 据和再编程,正是由于它的这一特性,EEPROM在嵌入式设备中应用广泛,用于产品出厂 数据的保存,产品运行过程中一些数据量不大的重要数据保存等。 在本章节, 我们以最常见的 I2C 接口的 24CXX 芯片为例进行学习研究。 它采用 PHILIPS 公司开发的两线式串行总线(I2C 总线),读写访问简单。通过本章节实验,我们将对 I2C 总 线有一个深入的了解,进而掌握
2、如何读写访问 24CXX 这一系列的 I2C 接口 EEPROM。 ? 实验原理实验原理 24CXX系列EEPROM采用的访问接口是I2C接口。 I2C(InterIntegrated Circuit)总线是一 种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进 行双向传送,高速I2C总线一般可达400kbps以上。 I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应 答信号。 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开
3、始传送数据。 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平 脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单 元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否 继续传递信号的判断。 若未收到应答信号, 由判断为受控单元出现故障。 I2C总线时序图如下: 神舟IV号开发板板载的EEPROM芯片型号为24C02,该芯片的总容量是256个字节。 本节实验的基本原理:神舟 IV 号通过 STM32F107VCT6 处理器本身自带的硬件 I2C 接 口与 24C02
4、 相连,我们首先往 EEPROM 中写入一连串的有规律的数据,然后顺序读出,通 过串口打印读出的数据, 判断读出的数据是否正确, 从而得知 EERPOM 是否可以正常访问。 ? 硬件设计硬件设计 本实验需要用到的硬件资源: ? 串口 1:串口的输入输出实验在前面已经进行了详细的讲解,在这里就不在重 复。 具体见 4.5 串口输入输出实验。 ? I2C EEPROM 24C02 STM32F107VCT6处理器具有两个I2C接口,I2C接口与管脚对应关系如下表所示。 I2C接口 管脚名 对应GPIO 功能描述 I2C1_SCL PB6 I2C1接口的时钟 I2C1 I2C1_SDA PB7 I2
5、C1接口的数据 I2C2_SCL PB10 I2C2接口的时钟 I2C2 I2C2_SDA PB11 I2C2接口的数据 神舟IV号自带了24C02的EEPROM芯片,该芯片的容量为2Kbit,也就是256个字节,对于 我们普通应用来说是足够了的。你也可以选择换大的芯片,因为在原理上是兼容 24C0224C512全系列的EEPROM芯片的。神舟IV号通过处理器自带硬件I2C1接口与EEPROM 24C02连接,电路图如下: 图表 1 EEPROM 原理图 AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含2568位存储空 间,具有工作电压宽(2.55.5V)、擦写次数
6、多(大于10000次)、写入速度快(小于10ms) 等特点。 AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。如上图中,A0A2全 部接地,对应I2C的硬件地址为0xA0。 第4脚为电源输入端,第8脚为GND管脚。 第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,在神舟IV号中, 与处理器的PB7管脚连接。 第6脚SCL为串行时钟输入线,在神舟IV号中,与处理器的PB6管脚连接。 SDA和SCL都需要和正电源间各接一个5.1K的电阻上拉。 第7脚为AT24C02的写保护端,如果需要禁止对AT24C02进行读写,需要上拉到电源。 在神舟IV号中,为了方便随
7、时对AT24C02进行访问操作,将WP管脚接地,禁止AT24C02的 写保护功能。 24C02的特性如下: ? 软件设计软件设计 神 舟 IV 号 EEPROM 读 写 试 验 位 于神 舟IV号 光 盘源 码 STM32F10x_StdPeriph_Lib_V3.3.0.rar Project 11、EEPROM读写测试目录。 进入11、EEPROM读写测试 EWARMv5 目录后,双击Project.eww可以打开IAR工程, 以下为工程文件中主要代码的解释与说明。 神舟IV号I2C1接口初始化。 我们首先将I2C1接口初始化为复用功能开漏输出。 然后,对I2C1接口进行初始化,具体为设置
8、I2C接口的模式(由于I2C接口可工作在I2C 模式或者SMBA模式,因此在初始化时,需要设置其具体工作模式),I2C主机地址,以及 I2C速率等等。 在完成了I2C接口初始化以后,我们就可以正常的使用I2C1接口了,下面是神舟IV号 EEPROM读写访问程序。 这段代码主要是将0x000xFF顺序写入到EEPROM中, 然后再依次从EEPROM中读出这 些数据,并通过串口打印。 24C02中带有片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1, 以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间, 一次操作可写入多达8个字节的数据。 其中I2C_W
9、riteS_24C函数,是24CXX EEPROM的页写入函数,在神舟IV号,我们使用 的24C02的页大小为8,也就是说,可以单次连续8个字节写入。具体的函数实现如下: 其中I2C_ReadS_24C函数,是24CXX EEPROM的页读出函数,在神舟IV号,我们使用 的24C02的页大小为8,也就是说,可以单次连续8个字节读出。具体的函数实现如下: 以下是 MAIN 函数: ? 下载与验证下载与验证 神舟IV号光盘源码目录包含本实验的工程源码,在神舟IV号光盘源码11、EEPROM 读写测试.rarProject11、EEPROM读写测试EWARMv5STM32F107VC- ARMJIS
10、HUExe目录 下的ARMJISHU_EEPROM读写测试.hex文件即为前面我们分析的EEPROM实验编译好的固 件,我们可以直接将固件下载到神舟IV号开发板中,观察运行效果。 如果使用JLINK下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。下载固件 到神舟IV号开发板小节进行操作。 如果使用USB下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。小节进行操 作。 如果使用串口下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。小节进行 操作。 如果在IAR开发环境中, 下载编译好的固件或者在线调试, 请按错误! 未找到引用源。错误! 未找到引用源。 错误!未找到引用源。错误!未找到引用源。小节进行操作。 如果在MDK开发环境中,下载编译好的固件或者在线调试,请按错误!未找到引用源。错误!未找到引用源。 错误!未找到引用源。错误!未找到引用源。小节进行操作。 ? 实验现象实验现象 将JP11跳帽连接上,程序下载运行后,正常情况下,串口打印如下信息。 其中”写入的数据”程序从0x00地址顺序写入到24C02中的数据, ”读出的数据”程序从24C02 0x00 地址顺序读出的数据,正常的情况下,读出的数据和之前写入的数据一致。