天南地北客
发表于: 2017-9-28 21:10:19 | 显示全部楼层

一、 文档说明

写这篇经验分享的目的是给出如何在LPC546xx中使用IAP进入USB MSC ISP 和UART ISP更新用户程序。通常客户可以使用外部引脚状态的配置实现直接进入到相应的ISP模式。引脚状态与进入ISP模式对应关系如下图:

table5.jpg

其中: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的命令,具体如下:

4.6.8.jpg

table——68.jpg

这里一定要注意的是输入的param0是指针,和其他系列不一样,其他系列是直接给具体的参数,所以这里有网友吃亏了。

下面给出我写的对应程序:


  1. status_t Chip_IAP_ReinvokeISP( uint8_t IspMode )
  2. {
  3. uint32_t command[9], result[4];
  4. uint8_t Param[8];
  5. uint8_t *p=Param;
  6. Param[0] = 0;
  7. Param[1] = IspMode; //usb 8// 6 usart
  8. Param[2] = 0;
  9. Param[3] = 0;
  10. Param[4] = 0;
  11. Param[5] = 0;
  12. Param[6] = 0;
  13. Param[7] = IspMode;
  14. command[0] = kIapCmd_FLASHIAP_ReinvokeISP; //57
  15. command[1] = (uint32_t )p;
  16. iap_entry(command, result);
  17. return translate_iap_status(result[0]);
  18. }
复制代码

调用如下:

  1. status = Chip_IAP_ReinvokeISP(6); //usb 8// 6 usart
  2. {
  3. PRINTF("\r\nstatus=%x\n",status);
  4. }
复制代码

其中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中调用为:

  1. status = Chip_IAP_ReinvokeISP(6);
复制代码

代码编译之后,用仿真器烧录运行之后,等待进入UART ISP, 然后使用FlashMagic下载用户程序, flashMagic可以到这个链接下载:http://www.flashmagictool.com/


进入UART ISP之后,可以使用FlashMagic以下操作查看下是否能够连上:ISP-> Read device signature

flashmagic.jpg

上面的图片说明已经连上了,然后可以直接点击start下载代码,下载完成后,ISP->Go,即可看到用户程序运行。


3.2  USB MSC ISP 更新程序

Flashiap.c 的main中调用为:

  1. status = Chip_IAP_ReinvokeISP(8);
复制代码

代码编译之后,用仿真器烧录运行之后,等待进入USB0 MSC ISP,找一个USB线连接板上J3。进入USB0 MSC ISP,会发现一个名叫“CRP DISABLD”的磁盘,如下图:

device.jpg

打开CRP DISABLD磁盘,删掉里面的firmware.bin文件,把用户程序bin文件改名为firmware.bin的文件丢进去,记住一定要改为firmware.bin,否则不能运行。然后按下板子的reset按键,可以发现用户程序已经运行。


本文档的PDF格式: 【经验分享】LPC546XX 使用IAP进入USB UART ISP更新程序.pdf (365.61 KB, 下载次数: 4)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 53 | 回复: 76



手机版|

GMT+8, 2024-12-27 07:16 , Processed in 0.051082 second(s), 11 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表