查看: 6300|回复: 1

[原创] 【经验分享】RT1020 SDK safety flash测试注意事项

[复制链接]

该用户从未签到

730

主题

6389

帖子

0

超级版主

Rank: 8Rank: 8

积分
25857
最后登录
2025-10-14
发表于 2021-1-25 16:49:19 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2021-1-25 16:52 编辑

【经验分享】RT1020 SDK safety flash测试注意事项
一 文档描述
   最近有网友在调试官方的RT1020 SDK safety_iec60730b工程的时候遇到了一些问题,工程路径如下:
SDK_2.9.0_EVK-MIMXRT1020\boards\evkmimxrt1020\demo_apps\safety_iec60730b
   主要问题是MCUXPresso 工程中,FLASH TEST的功能运行问题,纵然已经参考了SDK配套的文档:IEC60730B_Example_User_Guide_IMXrt_v4_1.pdf
由于SDK不同版本,对于这个工程,以及freemaster的文件都有所区别,问题表现在老SDK版本freemaster IEC60730B_safety_flash.pmp报错,下载使能Flash Test功能的代码之后,不能使用串口连接freemaster,CRC运行不正确,使用P&E Multilink不能成功下载运行带有flash test功能的代码等等。
所以这里以SDK2.9.0为例,说明如何正确去运行safety_iec60730b工程的flash test功能。


二. 测试注意点
   safety_iec60730b工程Flash Test,即IEC60730B_Example_User_Guide_IMXrt_v4_1.pdf 文档所提到的Invariable memory test功能,user guide可以在SDK单独文档包如下路径找到:
SDK_2.9.0_EVK-MIMXRT1020_doc\docs\safety
   Invariable memory也就是Flash Test,提供特定区域的内存CRC的检查,下载代码中计算好特地内存区域的CRC值并放在指定flash地址,然后在Flash Test工程运行的时候,实时计算对应块的flash crc值,并与之前存储CRC值比较防止flash代码在运行中出错,同时也将测试的数据上传到freemaster文件中予以显示,通信接口是MIMXRT1020-EVK板载虚拟串口。
   下面讲解具体操作步骤:
     打开safety_config.h
  • #define SAFETY_ERROR_ACTION 0

  配置这个为0的目的是关闭出错的时候死循环在SafetyErrorHandling()函数中,这个问题会导致一部分客户刚开始不知道,下载的代码直接是不带有CRC的flash test工程,这样会导致代码直接死机在SafetyErrorHandling()函数中,从而导致另外一个问题,freemaster
IEC60730B_safety_flash.pmp连接失败,如下图:
1.png 图1
看下SafetyErrorHandling函数情况:
  1. void SafetyErrorHandling(safety_common_t *psSafetyCommon)
  2. {
  3.     *SAFETY_ERROR_CODE = psSafetyCommon->safetyErrors;
  4.     test_end();
  5. #if SAFETY_ERROR_ACTION
  6.     __asm("CPSID i"); /* disable interrupts */
  7.     while(1);
  8. #endif
  9. }
复制代码


可以看到,一旦FLASH Test出错,而且SAFETY_ERROR_ACTION为1的情况下,会导致死循环。而默认的代码是使能SAFETY_ERROR_ACTION的,所以,我们在刚开始关闭SAFETY_ERROR_ACTION ,防止后续freemaster连接出错,至少能够用.pmp查看具体通信数据。

2. 如果需要使用外部的仿真器,如P&E Multilink

断开MIMXRT1020-EVK板 J27,J28,也是断开板载仿真器,连接P&E Mulitlink的JTAG接口到MIMXRT1020-EVK开发板的J16。如下图:
2.jpg
图2
3. 具体操作步骤

1) 编译工程,检查工程evkmimxrt1020_safety_iec60730b\Debug可以看到文件:evkmimxrt1020_safety_iec60730b_crc.hex,这个文件就是带有crc的app文件,需要实际下载到工程中去的,而不是单独生成的不带CRC的文件。也可以检查工程build result,可以发现如下信息:
  1. make --no-print-directory post-build
  2. Performing post-build steps
  3. arm-none-eabi-objcopy -v -O ihex "evkmimxrt1020_safety_iec60730b.axf" "evkmimxrt1020_safety_iec60730b.hex"; C:/KerryPC/IMXRTCode/Question/RT1020/safety/iec60730b/new/evkmimxrt1020_safety_iec60730b/linker/crc_hex.bat -..\\Debug\\evkmimxrt1020_safety_iec60730b.hex -..\\Debug\\evkmimxrt1020_safety_iec60730b_crc.hex -..\\tools\\srecord\\srec_cat -CRC32
  4. copy from `evkmimxrt1020_safety_iec60730b.axf' [elf32-littlearm] to evkmimxrt1020_safety_iec60730b.hex' [ihex]
  5. #----------------------------------
  6. #      CRC CALCULATOR V1.2
  7. #----------------------------------
  8. #
  9. # Getting CRC information:
  10. # -------------------------------
  11. # CRC table found at: 0x6000AA00
  12. # Safety FLASH start: 0x60000000
  13. # Safety FLASH end:   0x6000A870
  14. #
  15. # Calculating new CRC value:
  16. # -------------------------------
  17. # CRC-32 value: 0xF67D1116
  18. #
  19. # Saving new CRC value:
  20. # -------------------------------
  21. # CRC written at 0x6000AA0A
复制代码

可以看到,CRC写在地址0x6000AA0A,CRC的值为0xF67D1116,打开生成好的evkmimxrt1020_safety_iec60730b_crc.hex,可以发现地址0x6000AA0A的值正是0xF67D1116.如下
3.jpg
图3
生成evkmimxrt1020_safety_iec60730b PE Debug.launch,双击打开
修改如下地方为:${workspace_loc:\evkmimxrt1020_safety_iec60730b\Debug\evkmimxrt1020_safety_iec60730b_crc.hex}
4.jpg 图4
这个是经过测试可以工作的,当然如果使用CMSIS DAP板载仿真器,可以直接参考文档里面的图12.
这里会使得客户在下载的时候,直接下载带有CRC的代码,当然,由于下载的直接是.hex,所以会导致进入debug不能直接跑到C代码,而是在对于hex的汇编代码,如果客户要debug,建议下载之后,再勾选下面的attach选项。
这里需要注意的是,如果flash test打开,并且debug,当使用断点的时候,会改变计算的CRC值,而导致CRC结果出错。所以可以烧进芯片,直接运行,查看freemaster的相关变量结果。
2) evkmimxrt1020_safety_iec60730b\GUI\safety.pmp
  如果直接参考user guide的文档,客户将会不能成功通信,这里两点需要注意:
   MAPfiles:..\Debug\evkmimxrt1020_safety_iec60730b.axf
   ComRS232: COM number, and 19200 bps.
   客户在添加了MAPfile为编译后的MCUXPresso的.axf后,还会遇到如下这个问题:
5.jpg
图5
这几个变量无需关心,直接continue即可,因为我们的SDK.pmp不仅仅是用于RT,还用于kinetis其他产品,所以这些报错的变量是用于其他NXP产品的,RT可以忽略这个问题。
下载代码之后,按下reset按键,freemaster运行起来,可以查到如下结果:
6.jpg
图6
可以看到,测试的flashCRC值和烧进去计算好的CRC值一致,可以运行通过。
另外,如果有网友使用SDK2.9.0之前的SDK版本,那么会存在.pmp运行的问题,可以使用附件中的老版本.pmp。
【经验分享】RT1020 SDK safety flash测试注意事项.pdf (701.77 KB, 下载次数: 8)
回复

使用道具 举报

  • TA的每日心情
    开心
    2024-9-13 10:02
  • 签到天数: 297 天

    连续签到: 1 天

    [LV.8]以坛为家I

    34

    主题

    3513

    帖子

    38

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    6104

    活跃会员

    最后登录
    2025-9-23
    发表于 2021-1-26 09:30:38 | 显示全部楼层
    下载器有点高级啊!!!!!!!!!!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-10-15 06:05 , Processed in 0.083189 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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