|
LPC11E68内部包含一个4KB的片上EEPROM,该存储可以单字节进行擦除和写入。对于需要存储少量数据的应用,可以不必外加存储器,从而减少设计的难度。
原理:
EEPROM可以通过片上的引导程序使用IAP的方式进行读写。
实现
1. 首先定义IAP指令的入口地址。IAP指令位于0x1FFF 1FF0地址。
- #define IAP_LOCATION 0x1FFF1FF1
复制代码
然后定义IAP指令的数据结构。IAP指令
- unsigned int command_param[5];
- unsigned int status_result[5];
复制代码定义一个函数指针
- typedef void (*IAP_ENTRY_T)(unsigned int [],unsigned int[]);
- IAP_ENTRY_T iap_entry;
- ap_entry =( IAP_ENTRY_T)IAP_ENTRY_LOCATION</p>
复制代码
在调用该IAP时就可以使用下面的方式:
- iap_entry (cmd_param, status_result);
复制代码
2. IAP中共有两个与EEPROM相关的命令,分别是EEPROM Write和EEPROM Read。
2.1 EEPROM Write命令
该命令主要是将数据从RAM地址复制到EEPROM中。共有五个输入参数,分别是:
参数0:命令代码61;
参数1:EEPROM地址
参数2:RAM地址
参数3:要写入的字节数
参数4:系统内核主频(KHz)
实现代码如下:
- /* Write data to EEPROM */
- uint8_t Chip_EEPROM_Write(uint32_t dstAdd, uint8_t *ptr, uint32_t byteswrt)
- {
- uint32_t command[5], result[4];
- command[0] = IAP_EEPROM_WRITE;
- command[1] = dstAdd;
- command[2] = (uint32_t) ptr;
- command[3] = byteswrt;
- command[4] = SystemCoreClock / 1000;
- iap_entry(command, result);
- return result[0];
- }
复制代码
2.2 EEPROM Read命令
该命令主要是将数据从EEPROM地址复制到RAM中。共有五个输入参数,分别是:
参数0:命令代码62;
参数1:EEPROM地址
参数2:RAM地址
参数3:要写入的字节数
参数4:系统内核主频(KHz)
实现代码如下:
- /* Read data from EEPROM */
- uint8_t Chip_EEPROM_Read(uint32_t srcAdd, uint8_t *ptr, uint32_t bytesrd)
- {
- uint32_t command[5], result[4];
- command[0] = IAP_EEPROM_READ;
- command[1] = srcAdd;
- command[2] = (uint32_t) ptr;
- command[3] = bytesrd;
- command[4] = SystemCoreClock / 1000;
- iap_entry(command, result);
- return result[0];
- }
复制代码
测试
下面的测试程序主要实现的是将固定数据写入到EEPROM的0x00地址,然后再进行读取,查看是否与写入的数据是否一致。
- int main()
- {
- uint8_t Data[16];
- uint8_t result;
- uint32_t i;
-
- SystemCoreClockUpdate();
-
- result = Chip_EEPROM_Read(0x00, Data, sizeof(Data));
-
- for(i=0;i<5000;i++) ;
-
- Data[0] = 0x01;
- Data[1] = 0x02;
- Data[2] = 0x03;
- Data[3] = 0x04;
- Data[4] = 0x06;
- result = Chip_EEPROM_Write(0x00, Data, sizeof(Data));
-
- for(i=0;i<5000;i++) ;
-
- result = Chip_EEPROM_Read(0x00, Data, sizeof(Data));
-
- result = result;
- while(1) ;
-
- }
复制代码测试结果如下:
|