Board logo

标题: LPC21XX的BootLoader的实现(3) [打印本页]

作者: yuyang911220    时间: 2014-10-26 12:09     标题: 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。如图:




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0