|
一、 文档说明 写这篇经验分享的目的是给出如何在LPC546xx中使用IAP进入USB MSC ISP 和UART ISP更新用户程序。通常客户可以使用外部引脚状态的配置实现直接进入到相应的ISP模式。引脚状态与进入ISP模式对应关系如下图:
其中:ISP0对应引脚PIO0_4;ISP_1对应引脚PIO0_5;ISP_2对应引脚PIO0_6。 但是问题是实际使用过程中,还有一些客户不想通过按键的配置进入相应的模式,而是希望能够直接从程序进入到相应的ISP模式,那么这个时候,我们就可以使用程序中调用IAP进入ISP,这样就不需要外部硬件的配置了。
本文主要讲解如何使用IAP进入USB MSC ISP 以及UART ISP从而实现用户程序的更新。代码基于SDK2.2_LPCXpresso54618, flashiap程序,开发板为LPCXpresso54618,分享这篇文章的原因也是因为SDK里面没有给出对应的IAP进入ISP的代码。
二、 使用IAP 进入ISP代码实现 首先进行理论知识补充,查看LPC54618的用户手册 ISP和IAP章节,IAR进入ISP的命令,具体如下:
这里一定要注意的是输入的param0是指针,和其他系列不一样,其他系列是直接给具体的参数,所以这里有网友吃亏了。 下面给出我写的对应程序:
- status_t Chip_IAP_ReinvokeISP( uint8_t IspMode )
- {
- uint32_t command[9], result[4];
- uint8_t Param[8];
- uint8_t *p=Param;
- Param[0] = 0;
- Param[1] = IspMode; //usb 8// 6 usart
- Param[2] = 0;
- Param[3] = 0;
- Param[4] = 0;
- Param[5] = 0;
- Param[6] = 0;
- Param[7] = IspMode;
- command[0] = kIapCmd_FLASHIAP_ReinvokeISP; //57
- command[1] = (uint32_t )p;
- iap_entry(command, result);
- return translate_iap_status(result[0]);
- }
复制代码调用如下: - status = Chip_IAP_ReinvokeISP(6); //usb 8// 6 usart
- {
- PRINTF("\r\nstatus=%x\n",status);
- }
复制代码
其中6代表选择usart, 8为USB。 下载SDK2.2_LPCXpresso54618代码,链接:https://mcuxpresso.nxp.com/en/welcome
在页面选择SDK Builder,然后选择开发板为LPCXpresso54618, 生成代码并下载。本次代码修改基于flashiap,路径: SDK_2.2_LPCXpresso54618\boards\lpcxpresso54618\driver_examples\flashiap 把上面status_t Chip_IAP_ReinvokeISP( uint8_t IspMode )函数放到fsl_flashiap.c, 并且在fsl_flashiap.h中定义。Flashiap.c的main函数中调用这个函数。
三、 使用IAP进入ISP测试 首先准备一个应用程序的.bin和.hex文件。Bin文件的名称改为firmware.bin。hex文件名称无所谓。
3.1 UART ISP更新程序 Flashiap.c 的main中调用为: - status = Chip_IAP_ReinvokeISP(6);
复制代码
代码编译之后,用仿真器烧录运行之后,等待进入UART ISP, 然后使用FlashMagic下载用户程序, flashMagic可以到这个链接下载:http://www.flashmagictool.com/
进入UART ISP之后,可以使用FlashMagic以下操作查看下是否能够连上:ISP-> Read device signature。
上面的图片说明已经连上了,然后可以直接点击start下载代码,下载完成后,ISP->Go,即可看到用户程序运行。
3.2 USB MSC ISP 更新程序 Flashiap.c 的main中调用为: - status = Chip_IAP_ReinvokeISP(8);
复制代码
代码编译之后,用仿真器烧录运行之后,等待进入USB0 MSC ISP,找一个USB线连接板上J3。进入USB0 MSC ISP,会发现一个名叫“CRP DISABLD”的磁盘,如下图:
打开CRP DISABLD磁盘,删掉里面的firmware.bin文件,把用户程序bin文件改名为firmware.bin的文件丢进去,记住一定要改为firmware.bin,否则不能运行。然后按下板子的reset按键,可以发现用户程序已经运行。
本文档的PDF格式:
【经验分享】LPC546XX 使用IAP进入USB UART ISP更新程序.pdf
(365.61 KB, 下载次数: 4)
|