LPC1100处理器通过SD卡实现IAP功能
下面先介绍LPC1100处理器IAP的基础知识:
1. LPC1100处理器(LPC1114)Flash分配:LPC1114一共有32K Flash,共分为8个扇区,每个扇区的大小为4K,具体如下:
2.NXP的IAP命令都一样,一共有9条:
3.IAP命令是通过寄存器R0和R1进行参数传递的,R0传递参数,R1传递返回值:
IAP功能应用:
1.定义IAP程序的入口地址
代码:
#define
2.定义参数
代码:
uint32
uint32
3.定义函数类型指针
代码:
void (*IAP_Entry)(uint32 *param_tab, uint32 *result_tab) =
(void(*)())IAP_ENTER_ADR; // 定义函数指针
4.注意事项:
①按照上面函数类型调用IAP函数即可,不过要注意函数的参数。
②由于在擦写操作期间,片上Flash存储器不可访问。IAP代码不能使用或禁止中断。
③Flash编程命令使用片上RAM顶端32字节,用户程序不能使用此空间。
IAP命令应用(代码来自周工):
IAP有多个命令,这里我们只把编程常用的几个命令函数贴出来,如果网友需要其他代码可以在网络上自行搜索。
1.准备写操作扇区
代码:
uint32 SectorPrepare(uint8 sec1, uint8 sec2)
{
}
2.将RAM 内容复制到Flash
代码:
uint32 RamToFlash(uint32 dst, uint32 src, uint32 no)
{
}
3.擦除扇区
代码:
uint32 SectorErase(uint8 sec1, uint8 sec2)
{
}
4.扇区查空
代码:
uint32 BlankChk(uint8 sec1, uint8 sec2)
{
}
5.比较<地址1><地址2><字节数>
代码:
uint32 DataCompare(uint32 dst, uint32 src, uint32 no)
{
}
有上面的几个函数后,下面就可以根据需要编写SD卡升级函数了:
1.定义用户程序地址
定义用户程序的起始地址,用户可以根据自己的实际情况设定,一般都从0x0000 0000开始存放IAP代码,之后的空间才是存放用户代码的。
代码:
#define APP_CODE_START_ADDR
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;
UINT br;
FRESULT res;
}
3.主函数:
主函数实现按键扫描,如果有按键,进行SD卡升级,如果没有按键直接跳转到应用程序。
代码一开始判断按键,所以一般都是需要按下按键后复位系统,当然也可以适当循环扫描按键的次数。等待一定的时间。。。。。。。
代码:
int main(void)
{
}
到此IAP程序完成了,
LPC1100处理器SD卡IAP功 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)