首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

LPC21XX的BootLoader的实现(3)

LPC21XX的BootLoader的实现(3)

擦除扇区,一次至少擦除一个扇区,在写之前必须擦除。

        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;//APPROM地址

       
(*jump2app)();

       

        BootLoader的编写需要注意RAM的设置。

        由于IAP使用到RAM顶部的32个字节,因此KEIL中设置RAM大小时要用总大小减去0X20。我使用的单片机RAM总大小为16K,因此SIZE设置为0X3FE0。如图:
继承事业,薪火相传
返回列表