【朝花夕拾】RT1170 flexSPI1 secondary QSPI flash debug flashdriver

一,文档简介

RT1170 有两组flexSPI:FlexSPI1, FlexSPI2. 每组flexSPI还分为primary option group和secondary pin group,具体芯片连接可以参考如下文章:
FlexSPI NOR连接方式大全(RT1160/1170)
官方提供的烧录算法,都是从flexSPI1 primary group启动,但是实际使用中,还有客户需要从FlexSPI1 secondary pin group的flash启动,并且使用debugger去烧录仿真,怎么准备对应的烧录算法呢?而且不同的debugger对应的烧录算法也不同。
本文将以RT1170 flexSPI1 secondary pin group flash启动为例,讲解如何使用CMSIS DAP 和JLINK 作为debugger去准备对应的烧录算法和仿真,还有从secondary口启动的必备条件,并提供修改好的烧录算法,可以直接调用去仿真烧录。
在此,感谢网友提供的测试平台,因为官方的MIMXRT1170-EVK是从FlexSPI1 primary口接的外部QSPI flash,没有提供secondary group的接口。

二,相关准备

要测试FlexSPI1 Secondary pin group,首先要准备一个把QSPI flash连接到Secondary pin的板子,然后需要配置FlexSPI_PIN_GROUP_SEL fuse为1, 由于FlexSPI1 secondary pin group连接的已经是GPIO_AD口,所以,最高速度限速为104Mhz。
在这里插入图片描述

图 1

2.1 硬件准备

在这里插入图片描述

图 2

2.2 fuse FLEXSPI_PIN_GROUP_SEL烧录

FLEXSPI_PIN_GROUP_SEL fuse 地址是0X9A0[10]:
在这里插入图片描述

图 3
烧录,可以让芯片进入serial download模式,通过MCUBootutility连接,连接的时候,需要选择为FlexSPI1 secondary 选项,如下:
在这里插入图片描述

图 4
烧录fuse结果如下:
在这里插入图片描述

图 5
烧录好之后,板子启动模式改为internal boot模式,就可以烧录app去从FlexSPI1 secondary pin group启动了。

三,烧录算法修改与仿真测试

关于RT1170 FlexSPI1 secondary pin group的烧录算法,本文主要针对MCUxpresso IDE, 两种debugger:CMSIS DAP 的.cfx, 和JLINK 的RT-UFL烧录算法准备与测试。
这里简单说明下烧录算法修改的原理,其实还是基于ROM API的方式,所以,主要修改点就在于option0 =0xc1000005,option1=0x00010000.
在这里插入图片描述

图 6

3.1 CMSIS DAP .cfx 算法准备与测试

RT1170 CMSIS DAP的算法源码可以在MCUXpressoIDE的路径下找到:
C:\nxp\MCUXpressoIDE_11.8.0_1165\ide\Examples\Flashdrivers\NXP\iMXRT\iMXRT117x_FlexSPI_SFDP.zip
导入算法源码之后,首先编译LPCXFlashDriverLib<Release_SectorHashing>版本,得到需要调用的lib,iMXRTt117x_FlexSPI_SFDP选择MIMXRT1170_SFDP_QSPI(FlexSPI1 Port A QSPI)版本,修改Imxrt117xFlexSPI_SFDP, FlashConfig.h中的:#define CONFIG_OPTION0 0xc1000005
#define CONFIG_OPTION1 0x00010000
然后再次编译lib,编译Imxrt117xFlexSPI_SFDP生成.cfx,
在这里插入图片描述

图7
.cfx编译之后的路径在工程文件夹:iMXRT117x_FlexSPI_SFDP\builds
改名为:MIMXRT1170_SFDP_QSPI1_Secondary.cfx, 并拷贝到IDE安装目录:
C:\nxp\MCUXpressoIDE_11.8.0_1165\ide\binaries\Flash
这样做是为了后面app,可以直接在列表中选择对应的.cfx。
具体如何编译算法源码得到.cfx,可以参考文章:
https://www.cnblogs.com/henjay724/p/14190485.html
准备好APP, CMSIS DAP debugger之后,在app工程中选择刚刚编译好的.cfx烧录算法:
在这里插入图片描述

图 8
对于APP,需要注意的是FCB中的serialClkFreq,配置为100MHz, LUT commander为匹配使用的flash的命令,这里对于W25Q128的FCB如下:

const flexspi_nor_config_t qspiflash_config = {
.memConfig =
{
.tag = FLEXSPI_CFG_BLK_TAG,
.version = FLEXSPI_CFG_BLK_VERSION,
.readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
.csHoldTime = 3u,
.csSetupTime = 3u,
// Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
.controllerMiscOption = 0x10,
.deviceType = kFlexSpiDeviceType_SerialNOR,
.sflashPadType = kSerialFlash_4Pads,
.serialClkFreq = kFlexSpiSerialClk_100MHz,//kFlexSpiSerialClk_133MHz,
.sflashA1Size = 16u * 1024u * 1024u,
.lookupTable =
{
// Read LUTs
[0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEC, RADDR_SDR, FLEXSPI_4PAD, 0x20),
[1] = FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
// Read Status LUTs
[4 * 1 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x04),
// Write Enable LUTs
[4 * 3 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0x0),
// Erase Sector LUTs
[4 * 5 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x21, RADDR_SDR, FLEXSPI_1PAD, 0x20),
// Erase Block LUTs
[4 * 8 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xD8, RADDR_SDR, FLEXSPI_1PAD, 0x18),
// Pape Program LUTs
[4 * 9 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x12, RADDR_SDR, FLEXSPI_1PAD, 0x20),
[4 * 9 + 1] = FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0x04, STOP, FLEXSPI_1PAD, 0x0),
// Erase Chip LUTs
[4 * 11 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0x0),
},
},
.pageSize = 256u,
.sectorSize = 4u * 1024u,
.ipcmdSerialClkFreq = 0x1,
.blockSize = 64u * 1024u,
.isUniformBlockSize = false,
};

仿真结果如下:
在这里插入图片描述

图 9
可以看到,已经成功调用了修改后的flexSPI1 secondary group的烧录算法,并且烧录成功,功能运行正常。

3.2 JLINK RT-UFL 烧录算法准备与测试

有些客户喜欢使用JLINK,但是JLINK中的驱动算法源码,segger并没有开放,所以可以使用RT-UFL算法,修改之后匹配RT1170 FlexSPI1 secondray group的option, 然后再予以调用。
关于RT-UFL算法情况请查看如下连接:
https://www.cnblogs.com/henjay724/p/13951686.html
https://www.cnblogs.com/henjay724/p/14942574.html
https://www.cnblogs.com/henjay724/p/15430619.html
对于超级下载烧录算法的修改点为:ufl_main.c中:

case kChipId_RT116x:
case kChipId_RT117x:
	uflTargetDesc->flexspiInstance = MIMXRT117X_1st_FLEXSPI_INSTANCE;
	uflTargetDesc->flexspiBaseAddr = MIMXRT117X_1st_FLEXSPI_BASE;
	uflTargetDesc->flashBaseAddr   = MIMXRT117X_1st_FLEXSPI_AMBA_BASE;
	uflTargetDesc->configOption.option0.U = 0xc1000005;
	uflTargetDesc->configOption.option1.U = 0x00010000;

然后编译生成:MIMXRT_FLEXSPI_UV5_UFL_Flexspi1secondary_qspi.FLM,并拷贝到:
C:\Program Files\SEGGER\JLINKV768B\Devices\NXP\iMXRT_UFL
在C:\Program Files\SEGGER\JLINKV768B\JLinkDevices.xml中添加如下代码:

 <!------------------------>
  <Device>
    <ChipInfo      Vendor="NXP"
                   Name="MIMXRT1170_UFL_flexspi1_2nd"
                   WorkRAMAddr="0x20240000"
                   WorkRAMSize="0x00040000"
                   Core="JLINK_CORE_CORTEX_M7"
                   JLinkScriptFile="Devices/NXP/iMXRT_UFL/iMXRT117x_CortexM7.JLinkScript"
                   Aliases="MIMXRT1176xxx8_M7; MIMXRT1176xxxA_M7" />
    <FlashBankInfo Name="QSPI Flash"
                   BaseAddr="0x30000000"
                   MaxSize="0x01000000"
                   Loader="Devices/NXP/iMXRT_UFL/MIMXRT_FLEXSPI_UV5_UFL_Flexspi1secondary_qspi.FLM"
                   LoaderType="FLASH_ALGO_TYPE_OPEN" />
  </Device>  
      <!------------------------>

在APP工程中,debug configuration,配置JLINK的device为:
MIMXRT1170_UFL_flexspi1_2nd
这里注意,需要不勾选reset before running选项,否则会停止在ROM中,不勾选就能正常进入debug状态:

在这里插入图片描述

图10
测试debug结果如下:
在这里插入图片描述

图11
可以看到,JLINK的修改后RT-UFL烧录算法也是能正常工作。

四,总结

本文主要提供了RT1170 FlexSPI1 secondary group的算法修改情况,其他Flash接口,算法修改情况类似,主要注意fuse,算法匹配。本文提供修改之后的FlexSPI1 secondary group烧录算法两种:MIMXRT1170_SFDP_QSPI1_Secondary.cfx
RT-UFL修改后的MIMXRT_FLEXSPI_UV5_UFL_Flexspi1secondary_qspi.FLM
附件文件:
CMSIS DAP:
RT117X FlexSPI1 2nd flashalgo->CMSIS DAP->MIMXRT1170_SFDP_QSPI1_Secondary.cfx
JLINK RT-UFL:
RT117X FlexSPI1 2nd flashalgo\JLINK RT-UFL
拷贝JLINK RT-UFL文件夹到Segger JLINK安装驱动目录:
C:\Program Files\SEGGER\JLINKV768B
这样即可按照上面的内容调用相关的烧录算法。
附件链接:
https://community.nxp.com/t5/i-MX-RT-Knowledge-Base/RT1170-flexSPI1-secondary-QSPI-flash-debug-flashdriver/ta-p/1761851

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值