Board logo

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

作者: yuyang911220    时间: 2014-10-26 12:06     标题: LPC21XX的BootLoader的实现(2)

/*********************************************************************************************************
        ** Function name:
blankChk
        ** Descriptions:
扇区查空,命令代码53
        ** input parameters:
ucSec1:
起始扇区

        **
ucSec2:
终止扇区92
        ** output parameters:
GulParamout[0]:
IAP操作状态码,IAP返回值

        ** Returned value:
GulParamout[0]:
IAP操作状态码,IAP返回值

        *********************************************************************************************************/
        unsigned long
blankChk (unsigned char
ucSec1, unsigned char
ucSec2)
        {

       
GulParamin[0] = IAP_BLANKCHK; /* 设置命令字 */
       
GulParamin[1] = ucSec1; /* 设置参数 */
       
GulParamin[2] = ucSec2;
       
(*IAP_Entry)(GulParamin, GulParamout); /* 调用IAP服务程序 */
       

       
return (GulParamout[0]); /* 返回状态码 */
        }
       

        /*********************************************************************************************************
        ** Function name:
parIdRead
        ** Descriptions:
读器件标识号,命令代码54
        ** input parameters:


        ** output parameters:
GulParamout[0]:
IAP操作状态码,IAP返回值

        ** Returned value:
GulParamout[0]:
IAP操作状态码,IAP返回值

        *********************************************************************************************************/
        unsigned long
parIdRead (void)
        {
       
GulParamin[0] = IAP_READPARTID; /* 设置命令字 */
       
(*IAP_Entry)(GulParamin, GulParamout); /* 调用IAP服务程序 */
       

       
return (GulParamout[0]); /* 返回状态码 */
        }
       

        /*********************************************************************************************************
        ** Function name:
codeIdBoot
        ** Descriptions:
Boot代码版本号,命令代码55
        ** input parameters:


        ** output parameters:
GulParamout[0]:
IAP操作状态码,IAP返回值

        ** Returned value:
GulParamout[0]:
IAP操作状态码,IAP返回值

        *********************************************************************************************************/
        unsigned long
codeIdBoot (void)
        {
       
GulParamin[0] = IAP_BOOTCODEID; /* 设置命令字 */
       

(*IAP_Entry)(GulParamin, GulParamout); /* 调用IAP服务程序 */
       

       
return (GulParamout[0]); /* 返回状态码 */
        }
       

        /*********************************************************************************************************
        ** Function name:
dataCompare
        ** Descriptions:
校验数据,命令代码56
        ** input parameters:
ulDst:
目标地址,即RAM/FLASH起始地址。地址必须字对齐

        **
ulSrc:
源地址,即FLASH/RAM地址。地址必须字对齐

        **
ulNo:
待比较的字节数。计数值应当为4的倍数字

        ** output parameters:
GulParamout[0]:
IAP操作状态码,IAP返回值

        ** Returned value:
GulParamout[0]:
IAP操作状态码,IAP返回值

        *********************************************************************************************************/
        unsigned long
dataCompare (unsigned long
ulDst, unsigned long
ulSrc, unsigned long
ulNo)
        {

       
GulParamin[0] = IAP_COMPARE; /* 设置命令字 */
       
GulParamin[1] = ulDst; /* 设置参数 */
       
GulParamin[2] = ulSrc;
       
GulParamin[3] = ulNo;
       
(*IAP_Entry)(GulParamin, GulParamout); /* 调用IAP服务程序 */
       

       
return (GulParamout[0]); /* 返回状态码 */
        }
        以下为用户区代码:

        写扇区,mode一共四种,而且只能使用这四种写入方式:2565121024或者4096字节

        uint8 eepromWrite(uint32 WriteAddr, uint8*pBuffer, IAPWRITEMODE mode)
        {
       
uint8 ucErr = 0;
       

       
__disable_irq();
       

       
if (WriteAddr >
64 * 1024)
       
{
       

__enable_irq();
       
return PARA_BANK_ERROR;
       
}

       

       
if ((((unsigned long)pBuffer) % 4) != 0 )
       
{
       
__enable_irq();
       
return PARA_SRCADDR_ERROR;

       
}
       

       
ucErr= sectorPrepare(EEPROM_STARTSEC, EEPROM_ENDSEC);
       
ucErr= ramCopy(WriteAddr, (unsigned long)pBuffer, mode);
       
ucErr= dataCompare(WriteAddr, (unsigned long)pBuffer, mode);

       


       
if(ucErr != CMD_SUCCESS)
       
{
/*
IAP函数调用出错 */
       
__enable_irq();

       
returnIAP_ERROR;
       
}
       

       
__enable_irq();
       
return EE_SUUCEESS;
        }




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