- UID
- 1029342
- 性别
- 男
|
擦除扇区,一次至少擦除一个扇区,在写之前必须擦除。
uint8 eepromErase(IAPCHANNEL StartSec,IAPCHANNEL EndSec)
{
uint8 ucErr = 0;
__disable_irq();
ucErr= sectorPrepare(StartSec, EndSec);
ucErr= sectorErase(StartSec, EndSec);
ucErr= blankChk(StartSec, EndSec);
if(ucErr!= CMD_SUCCESS)
{
/*
IAP函数调用出错 */
__enable_irq();
returnIAP_ERROR;
}
__enable_irq();
return EE_SUUCEESS;
}
读扇区,读取相应地址处的数据
void eepromRead(uint32 ReadAddr, uint8*pBuffer, uint16 NumToRead)
{
uint16 i;
for (i = 0; i < NumToRead; i++)
{
pBuffer = *(uint8 * )ReadAddr;
ReadAddr += 1;
}
}
在成功实现IAP功能后,就是BootLoader的编写了,BootLoader实现比较简单,里面完成APP的写入即可,APP的写入大家可以按需要实现,用串口等方式进行数据的传输。在APP写完后将PC指针跳转到指定位置即可。PC指针的跳转相信大家都不陌生,使用以下方法实现:
//定义一个函数类型的参数
typedef
void (*iapfun)(void);
iapfun jump2app;
jump2app = (iapfun)0x4000;//APP的ROM地址
(*jump2app)();
BootLoader的编写需要注意RAM的设置。
由于IAP使用到RAM顶部的32个字节,因此KEIL中设置RAM大小时要用总大小减去0X20。我使用的单片机RAM总大小为16K,因此SIZE设置为0X3FE0。如图: |
|