全部
  • 全部
  • 解决方案
  • 技术问答
  • 视频中心
  • 知识分享
  • 技术资讯
  • SEED产品
400-048-1230
订阅
  • 首页
  • 解决方案
  • 技术问答
  • 视频中心
  • 知识分享
  • 技术资讯
  • SEED产品
i.MX RT117x 想要使用不同引脚外扩FLASH启动怎么办?
来源:Arrow 发布:2022/07/06 浏览量:394

部分使用i.MX RT117x的朋友可能会遇到一种情况,就是为了引脚分配,不希望使用官方默认使用的QSPI Flash引脚(例如艾睿的板卡SEED-DBS117X),但是不管是各种IDE,还是芯片默认设置都是官方引脚,这种情况怎么办呢?大家看这篇文章就够了。

恩智浦强大的i.MX RT117x问世已经有一段时间了,部分使用i.MX RT117x的朋友可能会遇到一种情况,就是为了引脚分配,不希望使用官方默认使用的QSPI Flash引脚(例如艾睿的板卡SEED-DBS117X),但是不管是各种IDE,还是芯片默认设置都是官方引脚,这种情况怎么办呢?大家看这篇文章就够了。

首先,我们简单了解一下QSPI Flash引脚分配会涉及到哪些地方:

第一,如果我们修改了外挂Flash的引脚,按照芯片启动流程,虽然boot mode选择成了Flash启动,但芯片启动时并不知道Flash外挂在哪些引脚下,需要去efuse里面读取配置,默认配置一定是官方配置,因此芯片会发现找不到Flash,因此,为了让芯片启动时能找到Flash,我们需要修改Fuse相应的位。需要注意的是一个芯片efuse位只能修改一次,改了就再也改不回来了。

第二,我们使用IDE对芯片进行开发时,如果想要把程序下载到芯片外挂的Flash里,会用到一个叫flashloader的程序,IDE先把这个程序下载到芯片里,然后这个程序会对芯片flash相关的引脚进行初始化,初始化完成后,IDE才能把需要调试的程序下载到Flash里。不同的IDE使用的下载算法并不完全相同,MCUXpresso使用的就是Segger Jlink自带的算法,该算法使用的引脚配置就是官方配置;Keil和IAR也是自带下载算法,默认官方配置。因此,如果我们想要更换QSPI Flash引脚,必须修改IDE的下载算法,调试时才能将代码下载到Flash里。

第三,完成以上两步大部分工作就完成了,但是如果直接使用官方代码,会发现板卡仍然无法启动,因为虽然上电时芯片的bootrom对Flash引脚根据Fuse进行了初始化,但是下载到flash的程序运行之前还会对Flash引脚重新配置,因此程序里Flash引脚相关代码也需要修改。

了解了以上内容,我们就可以着手进行修改了。本文使用的板卡基于SEED-DBS117x,调试工具为Jlink,主芯片为MIMXRT1176DVMAA,外挂Flash为IS25LP128F-JBLE,外挂引脚为PORTA Secondary Pin Group。首先是:

eFuse熔丝位修改

烧录efuse需要用到软件:NXP-MCUBootUtility-master(https://github.com/JayHeng/NXP-MCUBootUtility)
* 以板卡SEED-DBS117x为例,用USB转UART工具将i.MX RT117x的串口uart1连接至电脑,将芯片启动模式设为serial downloader模式,上电

* 运行文件夹*\NXP-MCUBootUtility-master\bin 中的NXP-MCUBootUtility.exe,如下图所示,COM Port中的串口选择为i.MX RT 117x对应的串口号


单击Boot Device Configuration,根据板卡的实际情况进行配置,本文按下图配置进行配置,配置完以后点击OK。




选中eFuse Operation Utility标签页,单击SCAN,会发现地址0x9a0地址对应的值为0x00000000,其含义如下图,eFuse更详细含义可参考用户手册。


用户需要根据实际板卡情况进行修改,本文将其改为0x00000400,单击右侧Burn,等待烧写完成。

IDE下载算法

1. MCUXpresso下载算法修改

我们可以从这个网址下载到下载算法的源代码:
https://github.com/JayHeng/imxrt-tool-flash-algo

下载完之后用Keil打开 \imxrt-tool-flash-algo-master\boards\nxp_evkmimxrt1170_rev.a-c\flash_algo_b0_silicon\Keil_JLink 中的工程。

可以找到option.option0.U = 0xc0000007U; 这行代码,这个是什么意思呢?其实就是芯片的启动配置,详情可以参考芯片的用户手册。对于i.MX RT117x,除了option0,还有一个option1需要我们手动添加。我们需要根据板卡实际情况对这两个变量的值进行修改。以SEED-DBS117x板卡为例,我们改为如下配置:
option.option0.U = 0xc1000007U;
option.option1.U = 0x00010000U;

编译整个工程(编译工具链需要使用compiler version6),可以在工程目录下发现生成了MIMXRT117x_DC_FLEXSPI_B0.FLM文件,随意重命名一下,命名为Customer_FLEXSPI.FLM。算法生成以后我们就可以去替换了。

来到目录*\SEGGER\JLink\Devices\NXP下,新建一个文件夹iMXRT117x,将刚才的Customer_FLEXSPI.FLM拷贝到这里。打开*\SEGGER\JLink文件夹下JLinkDevices.xml文件,添加以下代码

<Device>

<chipinfo </chipinfoVendor="NXP" Name="customer-117x_CM7" WorkRAMAddr="0x20000000" WorkRAMSize="0x00020000" Core="JLINK_CORE_CORTEX_M7"/>
<flashbankinfo </flashbankinfoName="QSPI Flash" BaseAddr="0x30000000" MaxSize="0x1000000" Loader="Devices/NXP/iMXRT117x/Customer_FLEXSPI.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" />
<Device>

如下图所示:


新建一个Hello World 工程,并编译,修改工程调试配置中器件名字为customer-117x_CM7,如下图所示:


改完这两个地方再调试,程序就可以下载到Flash里了,但是依旧无法正常启动,我们接着来看工程文件的修改,以hello world工程为例,打开工程下文件evkmimxrt1170_flexspi_nor_config.c,发现里面是关于Qspi flash 的配置,其中有一行 .controllerMiscOption = 0x10

这是什么意思呢?我们再来看用户手册

可以看起其中Bit8也是关于Flash引脚的,因此这里也需要根据实际情况来修改,本文改为:
.controllerMiscOption = 0x110,

至此,所有和Qspi flash引脚相关的改动就都改完了,但是还会遇到一个调试程序时,下载到flash之后无法go main的问题,这是因为Segger Jlink的一个bug:


这个bug我们可以通过设置PC来规避,回到工程调试配置页,按下图进行配置:
图片




到这里,我们就可以在MCUXpresso下对i.MX RT117x进行调试了,再看Keil。

2. Keil下载算法修改


有了MCUXpresso的基础,Keil下载算法改起来就容易多了,只需要把我们上一步生成的Customer_FLEXSPI.FLM放到Keil安装目录下的\ARM\Flash文件夹里,然后在工程属性里,把下载算法设置成我们刚刚拷贝的文件即可。同样,工程文件evkmimxrt1170_flexspi_nor_config.c,中的配置也需进行如下配置:
.controllerMiscOption = 0x110,

3. IAR下载算法修改


IAR与上两个编译器类似,也是只要修改下载算法即可

首先我们打开文件夹 IAR Systems\Embedded Workbench 9.0\arm\src\ flashloader\NXP\FlashIMXRT1170_FlexSPI 中的工程FlashIMXRT1170_FlexSPI.eww,找到定义option的地方并修改,本文修改为以下值:
option.option0.U = 0xC1000007;
option.option1.U = 0x00010000;


编译工程,将生成的out文件改名为Customer_FlexSPI.out,并拷贝至*\IAR Systems\Embedded Workbench 9.0\arm\config\flashloader\NXP

打开文件夹*\IAR Systems\Embedded Workbench 9.0\arm\config\ flashloader\NXP,复制文件FlashIMXRT1170_FlexSPI.board 并改名为Customer_FlexSPI.board,用记事本打开该文件,找到以下代码

$TOOLKIT_DIR$\config\flashloader\NXP\FlashIMXRT1170_FlexSPI1.flash
修改为:
$TOOLKIT_DIR$\config\flashloader\NXP\Customer_FlexSPI1.flash

找到文件FlashIMXRT1170_FlexSPI1.flash,复制并改名为Customer_FlexSPI1.flash,用记事本打开该文件,找到以下代码

$TOOLKIT_DIR$\config\flashloader\NXP\FlashIMXRT1170_FlexSPI.out
修改为:
$TOOLKIT_DIR$\config\flashloader\NXP\Customer_FlexSPI.out

回到工程中,在工程属性设置中,按下图进行设置:


并将工程文件evkmimxrt1170_flexspi_nor_config.c中的以下配置也进行修改:.controllerMiscOption = 0x110,


设置完之后,就可以正常下载到Flash中调试了。

下图是艾睿电子开发套件SEED-DBS117X,有希望了解的同学欢迎联系。


NXP
请使用浏览器分享功能 请点击右上角,进行分享