/*********************************************************************************************************
** 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一共四种,而且只能使用这四种写入方式:256、512、1024或者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;
} |