查看: 290|回复: 0

[原创] 【LPC845-BRK板卡试用申请】(十)程序镜像CRC校验

[复制链接]
  • TA的每日心情
    奋斗
    前天 13:25
  • 签到天数: 594 天

    [LV.9]以坛为家II

    51

    主题

    2222

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7060
    最后登录
    2024-4-27
    发表于 2023-11-25 01:04:40 | 显示全部楼层 |阅读模式
    本帖最后由 andeyqi 于 2023-11-28 11:04 编辑

    简介:

          收到日天邮寄的LPC860开发板已经有几天了,不过一直没有时间搞起来,下载资料后发现LPC860 SDK里有功能安全相关的软件包,看到其中有一条功能安全机制是运行中对image 进行CRC校验,从而保证程序运行过程中执行代码的正确无误,查看了官方的帮助文档该功能在IAR 环境是通过IAR IDE自身带的CRC校验生成工具完成的,在KEIL 和  MCUXpress 环境是通过NXP提供的工具在镜像的指定位置放置校验的CRC值和用户计算出的值进行比较验证镜像文件的正缺性,该方法理论上是个通用的方法,之前申请的LPC845 的卡发板卡本地使用的是 MCUXpress  开发环境,该环境也是被支持的,我们今天将LPC860  SDK 里面提到的功能应用到LPC845。


    1.拷贝工具至工程目录
           按照文档描述,需要在 MCUXpress  环境中调用,sdk 下的如下路径的工具,我们拷贝需要的文件至LPC845 工程目录下备用。
    tools.png

    图1.1
    crc_path.png
    图1.2

    2.MCUXpress 开发环境加入 CRC 镜像配置

    按照文档说明我们要完成以下三步的配置即可,我们按照此步骤来完成适配工作
    1. 1. Set the "Options → C/C++ Build → Settings → Build steps → Post-build steps"
    2. options correctly.
    3. 2. Set the debug sesion (or the GUI Flash tool) configuration correctly.
    4. 3. Put the "Information table" at the end of the invariable memory
    复制代码
    • "Options → C/C++ Build →Settings → Build steps → Post-build steps" 路径下加入如下两条post build 命令

    1. 1.arm-none-eabi-objcopy -v -O ihex "${BuildArtifactFileName}"
    2. "${BuildArtifactFileBaseName}.hex"
    3. 2.${ProjDirPath}/crc_hex.bat -${ConfigName}/${BuildArtifactFileBaseName}.hex -
    4. ${ConfigName}/${BuildArtifactFileBaseName}_crc.hex -tools\\srecord\\srec_cat.exe
    复制代码
    Postbuild.png

    图2.1 MCUXpress  配置

    加入图2.1的命令后重新编译会有如下提示,说明上述命令已经正确执行只是结果是失败了。

    crc32_failed.png

    图2.2 crc_hex.bat 脚本执行失败

    • Place information table
            修改代码及链接脚本在代码中加入配置表信息,按照文档说明定义 在link file 定义".flshcrc" 段,并在代码中引用。
             crc_code.png

    图2.3 定义.flshcrc 段


    link_crc.png

    图2.4 linkile 添加.flshcrc 段


          重新编译代码,编译结果LOG可知镜像中已经添加CRC,对应测CRC值为CRC-32 value: 0xFE0961F0

        CRC_oK.png

    图2.5 追加CRC编译结果


    • Flash loader configuration
         Open the "Debug Configurations" menu ("Run → Debug configuration")and select the "Startup" tab. In this tab, select "Load Image -> Use File ->
          <YOUR_PROJECT_NAME_crc.hex".
           按照上述说明配置flash loader,配置如下。

    flash_loader.png

    图2.6 flash loader 配置


    3.MCUXpress CRC 镜像检验功能验证
    按照 上述三步的配置已经完成了CRC镜像校验的配置,我们追击测试命令来验证我们的功能,测试代码如下
    1. unsigned int crcimage(char argc,char ** argv)
    2. {
    3.         uint32_t checksum32 = 0x00;
    4.     CRC_Type *base = CRC;

    5.     /* ***************
    6.      * CRC-32 *
    7.      *************** */
    8.         InitCrc32_mpeg2(base, 0xffffFFFF);
    9.     CRC_WriteData(base, (uint8_t *)&_image_start, &_image_size);
    10.     checksum32 = CRC_Get32bitResult(base);
    11.     if(checksum32 == c_sfsCRC.ui32CRC)
    12.             PRINTF("image crc check ok %x = %x\r\n",checksum32,c_sfsCRC.ui32CRC);
    13.     else
    14.             PRINTF("image crc check failed %x != %x\r\n",checksum32,c_sfsCRC.ui32CRC);

    15.         return 0;
    16. };

    17. LTSH_FUNCTION_EXPORT(crcimage,"test image crc");
    复制代码
    输入测试命令crcimage 执行校验结果如下:
    crc_image_test.png

    图3.1 crc 镜像校验结果


    至此已经将镜像CRC校验功能追加到LPC845开发板,理论上该方法是个通用的方法,可以用于其他处理器,NXP的工具的CRC32的校验方法使用的是Crc32_mpeg2 的校验算法,调试过程中在此也是浪费了些时间,后续有时间可以在其他处理器及KEIL上适配下理论上方法都是一致的,CRC镜像检验功能就先到这里。

    =================资料分割线================
    IEC60730B_Example_User_Guide_LPC_CM0_v4_3.pdf (5.17 MB, 下载次数: 0)
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-27 16:09 , Processed in 0.127611 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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