新闻中心

EEPW首页>嵌入式系统>设计应用> LPC1100处理器通过SD卡实现IAP功能

LPC1100处理器通过SD卡实现IAP功能

作者: 时间:2016-11-27 来源:网络 收藏

代码:

本文引用地址://m.amcfsurvey.com/article/201611/322352.htm


uint32 BlankChk(uint8 sec1, uint8 sec2)
{
ParamIn[0] = IAP_BLANKCHK;
ParamIn[1] = sec1;
ParamIn[2] = sec2;
(*IAP_Entry)(ParamIn, ParamOut);

return (ParamOut[0]);
}

5.比较 <地址1> <地址2> <字节数>

代码:


uint32 DataCompare(uint32 dst, uint32 src, uint32 no)
{
ParamIn[0] = IAP_COMPARE;
ParamIn[1] = dst;
ParamIn[2] = src;
ParamIn[3] = no;
(*IAP_Entry)(ParamIn, ParamOut);

return (ParamOut[0]);
}

有上面的几个函数后,下面就可以根据需要编写SD卡升级函数了:

1.定义用户程序地址

定义用户程序的起始地址,用户可以根据自己的实际情况设定,一般都从0x0000 0000开始存放IAP代码,之后的空间才是存放用户代码的。

代码:

#define APP_CODE_START_ADDR0x00006000// 用户程序起始地址

2.从SD卡中读写bin文件更新升级

从SD卡中升级程序很简单。流程是:从SD卡中打开升级文件,每次读取512字节,然后写入Flash,直到编写完成。

IAP支持256/512/1024/2048/4096等多字节编程方式,只是SD卡每扇区大小一般都是512字节,所以这里使用512字节为单位进行编程。

代码:
uint8 UCSDCardProgram(uint8 *fileName, uint8 *buf)
{
uint32 addr = 0;
FATFS fs;
FIL file;
UINTbr;
FRESULT res;

DisableIRQ();// 禁止中断
SectorPrepare(6, 6);// 选择扇区
SectorErase(6, 6);// 擦除扇区
EnableIRQ();// 使能中断


f_mount(0, &fs);


res = f_open(&file, (const TCHAR *)fileName, FA_OPEN_EXISTING|FA_READ);

if(res != FR_OK)
{
return res;
}
else
{
while (1)
{
res = f_read(&file, buf, 512, &br);// 读取数据

DisableIRQ();
SectorPrepare(6, 6);
RamToFlash(APP_CODE_START_ADDR + addr, (uint32)buf, 512); // 写数据到FLASH
EnableIRQ();
addr += 512;

if ((res != FR_OK) || (br < 512))
{
break;
}
}
}


f_close(&file);// 关闭文件,必须和f_open函数成对出现


f_mount(0, 0);

return FR_OK;
}

3.主函数:

主函数实现按键扫描,如果有按键,进行SD卡升级,如果没有按键直接跳转到应用程序。

代码一开始判断按键,所以一般都是需要按下按键后复位系统,当然也可以适当循环扫描按键的次数。等待一定的时间。。。。。。。

代码:


int main(void)
{
void (*userProgram)() = (void (*)())OSInit;// 函数指针

OSInit();// 初始化系统

while (1)
{
if (KeyGetValue())
{
UCSDCardProgram("LPC1114.bin", SDBuf);
}

userProgram = (void (*)())(APP_CODE_START_ADDR + 1);
(*userProgram)();// 启动程序
}
}

到此IAP程序完成了,下面就是编写应用程序了。。。。。。。。。。。。。。。。。。。。。。

应用程序编写:

应用程序编写没有什么特殊的,只是需要注意几个地方的设置

1.设置编译地址:

设置用户程序的开始地址,根据需要设置,一般都在IAP函数之上,需要适当大于IAP,给IAP自己增加功能提供空间。内存也可以适当设置一下,不过一般应用程都没有完全使用完内存,所以不设置也是可以的。

2.编译设置

设置NO_CRP条件编译,否则程序编译会出错,此字段在启动代码中使用,如果要加密代码,此段号也需要设置。

3.生存bin文件

设置bin文件生成命令,具体的设置方法请看< >:http://bbs.eeworld.com.cn/thread-314169-1-1.html

4.编写应用程序,并把bin文件存放SD卡中,运行IAP升级程序。

具体的升级过程:

1.把IAP程序下载到板子上。

2.编写并编译好应用程序,需要是的bin文件。

3.把应用程序的bin文件拷贝到SD卡中。

4.在板子上插入SD卡,并按下按键重启系统。

5.板子就会自动实现升级并跳转到应用中运行。



上一页 1 2 下一页

评论


技术专区

关闭