LPC1768 IAP升级解析及例程分享
5、串口IAP升级
本例程是根据官方提供的串口IAP更新图片进行修改而来,直接使用官方的IAP.c文件,该文件中提供了如上图IAP命令的各种函数,其具体参数可以参考IAP命令。根据官方例程里面将bmp图片经过串口采用Xmodem1K协议发送到开发板存放在地址0x0001
?体;q?kr?Sx?S255,255,255); mso-shading:rgb(255,255,255); " >扇区查空、读器件ID、读boot版本、比较、重新调用ISP等。
?体; ????Sx?S??的外部硬件请求。假定在/RESET
在IAP升级中,程序正常执行即用户代码(这里的用户代码是我们所说的IAP引导程序),如下是IAP升级流程图,程序将预留端口(这里提供有串口和CAN总线接口两种)接收到的APP程序bin文件,将接收到的数据写入到指定的Flash区域(例程APP地址为0x0001
5、串口IAP程序分析
例程通过按键对开发板进行控制,INT0键擦除Flash,确认键等待串口IAP,向上键显示菜单,向下键执行应用程序,使用LCD来开发板状态,其主函数如下
int
{
uint32_t
SystemClockUpdate();
LCD_BSP_Init(); //LCD初始化
LCD_Clear(Black);
LCD_SetBackColor(Black);
LCD_SetTextColor(White);
cmd
while(1)
{
switch(cmd)
{
case
if (!(LPC_GPIO2->FIOPIN
{
Screen_Fresh("Erasing
cmd
}
else
{
cmd
}
else
{
Screen_Fresh("Waiting
cmd
}
else
{
Screen_Fresh("Execute
cmd
}
break;
case
if(u32IAP_ReadBootVersion(&ints[0],&ints[1])==IAP_STA_CMD_SUCCESS)
{
snprintf((char
}
if(u32IAP_ReadPartID(&ints[0])
{
snprintf((char
}
u32IAP_ReadSerialNumber(&ints[0],
snprintf((char
Screen_Fresh("Menu");
cmd
break;
case
if
Screen_Fresh("Erase
else
Screen_Fresh("Erase
cmd
break;
case
received_data
vXmodem1k_Client(&load_image);
Screen_Fresh("Updata
cmd
break;
case
Boot();
cmd
break;
}
}
}
当串口接收到数据后将数据写入到Flash,其写入步骤是:发送准备写扇区命令,执行RAM内容复制到Flash最后比较复制内容,其代码如下:
static
{
if(length
if(u32IAP_PrepareSectors(16,
{
if(u32IAP_CopyRAMToFlash(IMG_START_SECTOR
{
if(u32IAP_Compare(IMG_START_SECTOR
{
received_data
return
}
}
}
Screen_Fresh("FAIL
return
}
else
return
LPC1768IAP升级解 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)