关于 LPC5506 烧录代码的读取问题的解决方法

一. 前言

       对于 LPC5506,在使用 JFlash 的 Read Back 时,会出现读取失败的情况,这种情况出现的原因是擦除后的 Flash,ECC 校验将不通过,导致 Flash 无法读取,图 1 为 AN12949 中的相关描述。


图 1. AN12949 中关于 Flash Read 的描述

       针对这种情况,作者将给出两种解决方法:① 通过读取烧录代码的大小,通过 Read Range 设置地址范围,只读取烧录了代码的地址的数据。② 通过 FlashMagic 对未烧录代码的地址进行填充操作。

二. 方法一

       通过查找下载代码的结束地址来防止读到 Erase 后的地址的数据,通过测试发现 Range 的结束地址可以设到代码结束地址所在 Sector 的终止地址。

       代码实际的结束地址是 0X00001DE0,可以看到这个结束地址在 JFlash 软件中在第 14 个 Sector 中,由于对于 Flash 的操作的最小单位为 32bit 即 4 个字节,因此可以确定可以读到的最终的地址为 0X00001DFF – 0X4 = 0X00001DFC。

图 2. JFlash 对 Sector 的划分

       设置 Range 的结束地址为 0X1DFC 进行 0X0 到 0X1DFF 地址数据的读取:

图 3. 选择 Read Range

图 4. 设置 Range 范围

图 5. 原始代码和读到的代码

当试图读取超出代码所在的 Sector 时,将出现报错:

图 6. 读取出错

三. 方法二

  1. 首先下载 FlashMagic

       进入 FlashMagic 官网 Download - Flash Magic (flashmagictool.com) 下载安装 FlashMagic。

  1. 在 FlashMagic 下进行 LPC5506 的配置
    • 在 LPC5500 系列下方选择 UART;
    • 然后勾选 LPC5506。

图 7. 选择 LPC5506 Device

  • 选择连接到 LPC5506 的 UART0,对于 LPC5506,P0_30 为 TX,P0_29 为 RX,对于作者的电脑,串口识别为 COM25;
  • 让板子处于 ISP 模式:将 ISP (P0_5)脚拉低,之后 Reset 即可进入 ISP 模式;
  • 设置波特率为 115200。

图 8. 设置端口和波特率

  1. 进行烧录设置

       在 Firmware 栏目下点击 Browse… 可选择编译或链接生成的 hex 或 bin 文件

图 9. 设置文件名和地址

       在 Option 栏目下可进行烧录设置,下面将就是否勾选 Fill Unused Flash 对 Flash 的烧录情况进行对比:

  • 不勾选 Fill Unused Flash:

       点击 Start 按钮进行烧录


图 10. 点击烧录按钮

       点击为放大镜的 Read 图标,在出来的界面可以点击划定 Sector 的地址范围的代码数据


图 11. 点击 Read 图标

图 12. 读取一个 Sector 地址的数据

       导出读取到的代码数据:勾选 Export Memory,选择导出的位置和文件名,选择导出数据的地址范围,最后要点击确认。

图 13. 导出读取到的地址数据

       通过观察可以发现在没有勾选 Fill Unused Flash 时,未烧录代码的数据为 0XFF,此时不可以通过 JFlash 读取到全为 0XFF 的 Sector 的代码数据。

图 14. 读取到的地址数据与原数据对比

       点击 Blank Check 可以查看当前 Flash 各个 Sector 是否为空

图 15. Blank Check 按钮

 

       由于作者的代码是下载到了第一个 Sector 中,所以只有第一个 Blank 不为空,其余的 Sector 均为空。

图 16. Blank Check 结果

  • 勾选 Fill Unused Flash:

       可以看到未烧录代码的地址,将被填充为 0X00,此时通过 JFlash 可以把 0X00000000 到 0X0003CFFF 的地址的数据都读到。

图 17. 读取到的地址数据与原数据对比

       通过 FlashMagic 的 Blank Check 可以看到所有的 Sector 都不为空。

图 18. Blank Check 结果

 

四. 结语

       本篇博文针对 LPC5506 介绍应对 LPC5506 已烧录程序无法读取的问题,提出两种解决方法,读者可以针对自己的项目的情况在设计项目时选择留出供 ISP 烧录的 UART0 和 ISP 引脚,或者在未留出 ISP 烧录方式时,选择计算当前代码的结束地址,通过 JFlash 读取 Range 范围的代码数据。

五. 参考资料

技术文档

类型标题档案
硬件Application Note

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论