请选择 进入手机版 | 继续访问电脑版
查看: 993|回复: 0

[原创] 【经验分享】SPT保留用户RT10XX代码FCB下载方法

[复制链接]

该用户从未签到

654

主题

6310

帖子

0

超级版主

Rank: 8Rank: 8

积分
19910
最后登录
2024-4-18
发表于 2021-10-18 16:30:16 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2021-10-18 16:31 编辑

【经验分享】SPT保留用户RT10XX代码FCB下载方法
1.   文档说明
SPT(MCUXpressosecure provisioning tool)是NXP官方出的RT/LPC55Sxx系列烧录普通代码以及加密代码的工具,下载链接:
本文不涉及加密,是针对工具下载RT10XX 代码,如何保持客户代码中的FCB头的情况,类如,直接使用SDK代码生成带有FCB头的app.s19文件,如何保持源文件的FCB下载,通常情况下,如果不保留客户代码FCB,SPT工具会使用blhost直接使用Configure-memory命令写入FCB到外部flash0X60000000处,这个将是根据option0,option1配置ROM直接写入,而不是使用客户的APP文件中的FCB,实际下载的是从偏移0X1000开始带有IVT以及APP的代码。
但是实际项目中,往往客户需要保证烧录的代码和原来提供的代码文件是一致的,所以本文讲给出如何保留客户app FCB头的方法。
以SDK代码led_blinky为例,直接生成.s19文件,使用SPT 工具下载:
1.jpg
图1
可以发现,选择SDK生成的.s19文件,保留客户FCB头,下载之后,情况如下:
2.jpg
图2
这里发现,在flash erase 的时候,失败了。
那么为何SDK工程直接下载,保留FCB会出现这个情况呢?
其实从图1中的SPT工具提示也可以发现,这里需要客户的FCB头带有read, erase和programLUT, 但是打开SDK的xip/evkmimxrt1060_flexspi_nor_config.c,会发现,只带有read LUT, 没有其他LUT。
知道原因之后,就可以知道如何修改SDK APP FCB去满足保留客户FCB了。
2.   FCB 代码修改与测试
打开SDK的xip/evkmimxrt1060_flexspi_nor_config.c,添加write, erase, program等LUT,具体代码如下:

  1. const flexspi_nor_config_t qspiflash_config = {
  2.     .memConfig =
  3.         {
  4.             .tag              = FLEXSPI_CFG_BLK_TAG,
  5.             .version          = FLEXSPI_CFG_BLK_VERSION,
  6.             .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
  7.             .csHoldTime       = 3u,
  8.             .csSetupTime      = 3u,
  9.             .sflashPadType    = kSerialFlash_4Pads,
  10.             .serialClkFreq    = kFlexSpiSerialClk_100MHz,
  11.             .sflashA1Size     = 8u * 1024u * 1024u,
  12.             .lookupTable =
  13.                 {
  14.                     // Read LUTs
  15.                     FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
  16.                     FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),

  17.                     // Read status
  18.                                         [4*1] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x04),
  19.                     //write Enable
  20.                                         [4*3] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
  21.                                         // Sector Erase byte LUTs
  22.                                         [4*5] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 0x18),
  23.                                         // Block Erase 64Kbyte LUTs
  24.                                         [4*8] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xD8, RADDR_SDR, FLEXSPI_1PAD, 0x18),
  25.                     //Page Program - single mode
  26.                                     [4*9] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 0x18),
  27.                                         [4*9+1] = FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0x04, STOP, FLEXSPI_1PAD, 0x0),
  28.                                         //Erase whole chip
  29.                                         [4*11] =FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0),


  30.                 },
  31.         },
  32.     .pageSize           = 256u,
  33.     .sectorSize         = 4u * 1024u,
  34.     .blockSize          = 64u * 1024u,
  35.     .isUniformBlockSize = false,
  36. };
复制代码

然后再次测试,结果如下:
3.jpg
图3
可以发现,下载以及成功运行。
读出QSPI memory之后,和源文件对比,可以发现一致:
4.jpg
图4
5.jpg
图5

那么查看不保留用户FCB头的情况下,看看读出的实际FCB和源代码FCB的对比情况:
6.jpg
图6
7.jpg
图7
8.jpg
图8
可见,如果不保留客户APP的FCB, blhost会使用命令烧录一个完整的LUT,这个LUT已经包含了erase, read,program等。
所以,如果需要保留客户APP的FCB,并且使用SPT工具成功下载,那么客户的FCB中需要添加read, program,erase等LUT,可以使用上述代码添加到flexspi_nor_config_t qspiflash_config 中。





回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-4-18 14:18 , Processed in 0.110335 second(s), 20 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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