0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT106X Secure JTAG测试与IDE调试

恩智浦MCU加油站 来源:未知 2023-07-20 08:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、概述关于RT10XX Secure JTAG的使用,官方早已经推出了一篇非常好的应用笔记AN12419Secure JTAG for i.MXRT10xx:

https://www.nxp.com/docs/en/application-note/AN12419.pdf

AN12419讲述了关于Secure JTAG的原理、如何修改fuse实现Secure JTAG功能,以及JLINKscript相关文件内容,给出了使用JLINK commander形式实现了内核的识别。通常情况下,内核能够找到就说明Secure JTAG已经成功了,但在实际的使用中,客户还是会遇到很多问题。比如:SecureJTAG找不到内核或时有时无;如何在通用的IDE,MCUXPresso,IAR, MDK中添加Secure JTAG的功能,从而实现基于Secure JTAG debug的功能等。多说一句,关于secure JTAG的测试,实际上还是需要一点成本的,因为需要修改fuse,如果粗心修改错了fuse的位置,那么可能导致无法恢复的问题。由于每个客户的情况不尽相同,小编也做了较多测试,借助其他部门带有芯片夹能够换芯片的板子测试,测过RT1050,RT1060, RT1064,但在实际使用中,仍有些客户提到EVK上会复现,导致小编一度怀疑是否和EVK不一致所导致,所以也测过RT1060,RT1064 EVK的secure JTAG。

本文就把之前所有相关经验写入到这篇文章,便于后来者遇到类似问题能够有个参考,避免一些不必要的雷区踏入,请大家借鉴。

二、本文测试平台情况

MIMXRT1064-EVKrevA: RT1060-EVK, RT1050-EVKB 情况类似

SDK_2_13_0_EVK-MIMXRT1064

MCUXpressoIDE v11.7.1_9221

MDKV5.36:高版本也是如此

IAR 9.30.1:高版本也是如此

SeggerJLINK plus

JLINK驱动V788D

NXP-MCUBootUtility-5.1.

三、RT1064 secure JTAG修改

通常情况下,不建议客户一股脑把所有的相关fuse直接烧完然后再测,小编通常情况下会循序渐进,硬件摸排,保证能支持JTAG,然后fuse原始读取保持,烧JTAG,测JTAG,最后上secure JTAG的其他fuse烧录和测试。

3.1MIMXRT1064-EVK硬件修改

对于RT10XX EVK,默认和芯片一样,是支持SWD的,JTAG的引脚从硬件上连接到了其他的硬件模块,所以会对JTAG有所影响,在确定要使用JTAG的时候,需要修改电路,正如MIMXRT105060HDUG说的那样:

(1). Burn fuse DAP_SJC_SWD_SEL from ‘0’ to ‘1’ to choose JTAG.

(2). DNP R323,R309,R152 to isolate JTAG multiplexed signals.

(3). Keep off J47 to J50to isolate board level debugger.

当然,这里硬件目前只需要修改,去掉R323, R309, R152,然后断开J47,J48,J49,J50。使用Segger JLINK JTAG连接到EVK J21。

3.2 原始fuse读取 首先MIMXRT1064-EVK板子进入到serial download模式,SW7:1-OFF,2-OFF,3-OFF,4-ON。使用MCUBootUtility工具连接EVK,并且读取初始fuse map,情况如下:70002e1e-2696-11ee-962d-dac502259ad0.png

3.3 JTAG 修改与测试

修改fuse实现SWD->JTAG:0X460[19]DAP_SJC_SWD_SEL=1:

7066fe64-2696-11ee-962d-dac502259ad0.png

JTAG方式测试连接,找到内核:

70dfc5e2-2696-11ee-962d-dac502259ad0.png

果找不到内核,说明硬件修改不正确,或者fuse修改的位置不对,需要自行进一步检查,确保JLINK commander的JTAG能够找到内核,才能继续下一步。

3.4 secureJTAG 修改

修改fuse实现secure JTAG:

0X460[23:22]:JTAG_SMODE =1

0X460[26]: KTE_FUSE=1

0X610,0X600烧录key: 0xedcba987654321,用户可以烧录自己的key,记录下来放到自己的JLINKscript中皆可。

7149c4ec-2696-11ee-962d-dac502259ad0.png上面的相关的secure JTAG fuse和key fuse烧录好之后,最后烧录fuse 0X400[6]: SJC_RESP_LOCK=1,关闭secret response key的读写:

71a1b0a8-2696-11ee-962d-dac502259ad0.png

可以看到,这里的0X600,0X610key区域已经不可见。这里记录下UUID0,UUID1,后续需要脚本读取的时候进行正确性查看。

3.5 secureJTAG JLINK commander测试

因为在secure JTAG的连接过程中,需要拉低拉高JTAG_MOD引脚,所以需要接一根线用于拉低拉高JTAG_MOD,MIMXRT1064-EVK可以使用J25_4,该引脚是3.3V,JTAG_MOD信号使用TP11测试点。默认JTAG_MOD是拉低,需要拉高的时候,可以接到J25_4.测试过程中需要使用到JLINK script,脚本内容如下,具体查看附件NXP_RT1064_SecureJTAG.JlinkScript:

int  InitTarget(void) {


  int r;


  int v;


  int Key0;


  int Key1;


   JLINK_SYS_Report("***********************************************");


  JLINK_SYS_Report("J-Link script:  InitTarget()                    *");


  JLINK_SYS_Report("NXP iMXRT, Enable  Secure JTAG *");


   JLINK_SYS_Report("***********************************************");


  JLINK_SYS_MessageBox("Set pin JTAG_MOD  => 1 and press any key to continue...");


 


  // Secure response stored @ 0x600, 0x610 in  eFUSE region (OTP memory)


  Key0 = 0x87654321;


  Key1 = 0xedcba9;


   JLINK_CORESIGHT_Configure("IRPre=0;DRPre=0;IRPost=0;DRPost=0;IRLenDevice=5");


  CPU = CORTEX_M7;


  JLINK_SYS_Sleep(100);


  JLINK_JTAG_WriteIR(0xC); // Output  Challenge instruction


 


  // Readback Challenge, Shift 64 dummy bits  on TDI, TODO: receive Challenge bits on TDO


  JLINK_JTAG_StartDR();


  JLINK_SYS_Report("Reading Challenge  ID....");


  JLINK_JTAG_WriteDRCont(0xffffffff, 32); //  32-bit dummy write on TDI / read 32 bits on TDO


  v = JLINK_JTAG_GetU32(0);


  JLINK_SYS_Report1("Challenge  UUID0:", v);


  JLINK_JTAG_WriteDREnd(0xffffffff, 32);


  v = JLINK_JTAG_GetU32(0);


  JLINK_SYS_Report1("Challenge  UUID1:", v);


  JLINK_JTAG_WriteIR(0xD); // Output Response  instruction 


 


  JLINK_JTAG_StartDR();


  JLINK_JTAG_WriteDRCont(Key0, 32);


  JLINK_JTAG_WriteDREnd(Key1, 24);


  JLINK_SYS_MessageBox("Change pin  JTAG_MOD => 0, press any key to continue...");


  return 0;


}
SecJtag.bat文件如下:jlink.exe-JLinkScriptFile NXP_RT1064_SecureJTAG.JlinkScript -device MIMXRT1064XXX6A -ifJTAG -speed 4000 -autoconnect 1 -JTAGConf -1,-1;

要用于使用JLINK commander和JLINKscript实现secure JTAG的连接。SecJtag.bat,JLink.exe, NXP_RT1064_SecureJTAG.JlinkScript三个文件放到一个文件夹。

测试时可以配置板子到internal boot模式:SW7:1-OFF,2-OFF,3-ON, 4-OFF.

运行SecJtag.bat测试情况如下:首先提示连接JTAG_MOD到1:

722f3040-2696-11ee-962d-dac502259ad0.png

这个时候板子上,使用杜邦线连接J25_4和TP11, 也就是将JTAG_MOD=1,点击OK,进入下一步:

72579634-2696-11ee-962d-dac502259ad0.png这里可以看到,已经能够识别正确的UUID,和上面MCUBootutility读到的UUID一致,很多客户在这个地方就不能读到正确的UUID,说明要么硬件修改有问题,要么fuse修改有问题,要么另外一种情况,app里面JTAG引脚没使能,后续详细讲。

这里松开TP11和J25_4的连接,默认为JTAG_MOD=0,点击OK,继续:72aae06e-2696-11ee-962d-dac502259ad0.png这里可以看到,ARM CM7内核已经成功找到,意味着,硬件平台已经能够实现JTAG的通讯。下面可以进入IDE Secure JTAG debug阶段了。

四、Secure JTAG在三大IDE的debug

本章针对如何使用secure JTAG在RT10XX常用三大IDE:mcuxpresso, IAR, MDK中实现secure jtag的代码debug运行。

4.1 软件代码准备

本文选择SDK的hello_world工程测试:

SDK_2_13_0_EVK-MIMXRT1064oardsevkmimxrt1064demo_appshello_world

这里需要注意两个点:(1)不要直接使用led_blinky,因为代码使用的led控制引脚GPIO_AD_B0_09是 JTAG_TDI,会导致下载了这个代码之后,不能实现下次的Secure JTAG连接,因为JTAG的引脚功能被修改;

(2)在app pinmux.c中添加对于JTAG的引脚配置,否则会因为缺少JTAG的引脚配置,出现一种现象,空的RT1064,也就是没有烧过代码的片子能够使用Secure JTAG连接,一旦烧录代码之后,就无法连接的情况。Pinmux.c添加如下代码:
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_11_JTAG_TRSTB,  0U);


   IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_06_JTAG_TMS, 0U);


   IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_07_JTAG_TCK, 0U);


  IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_09_JTAG_TDI,  0U);


   IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_10_JTAG_TDO, 0U);
4.2 MCUXpressoSecure JTAG debug

使用MCUXpresso IDE导入hello world代码,修改pinmux.c,添加JTAG引脚配置。

配置MCUXPresso IDE的JLinkGDBServerCL.exe版本为使用的JLINK驱动版本,Window->preferences:

72e0f55a-2696-11ee-962d-dac502259ad0.png

Run->Debugconfigurations,配置为JTAG,选择device为MIMXRT1064xxx6A,添加JLINKscript脚本:

73e387c4-2696-11ee-962d-dac502259ad0.png

741d4e46-2696-11ee-962d-dac502259ad0.png连接JTAG_MOD=1, 即TP11连接J25_4,点击OK:

7468ef22-2696-11ee-962d-dac502259ad0.png可以看到,已经获取到正确的UUID,并且要求连接JTAG_MOD=0, 这时候让TP11悬空,点击OK继续:74a34096-2696-11ee-962d-dac502259ad0.png这时候已经能够成功进入到debug模式,能够仿真,具体可以查看附件中的MCUXpresso11_7_1_MIMXRT1064_SJTAG.mp4文件。

这里测试经验是,发现MCUXpresso V11.7.1有点不太稳定,需要多试几次,但是后续的V11.8.0版本,下载非常稳定。如果能够拿到高于V11.7.1的版本,建议使用高版本IDE。

4.3 IAR SecureJTAG debug

有些客户需要使用IAR版本debug Secure JTAG功能,可以使用SDK demo中的helloworld,修改pinmux.c添加JTAG引脚配置代码。

不同之处在于:

(1)运行JLINK驱动,JLinkDLLUpdater.exe 刷新JLINK驱动到IAR,MDK IDE:

74bfdfda-2696-11ee-962d-dac502259ad0.png

(2)修改JLINKscript的文件名,和demo名称一致,并放到工程文件夹的settings文件夹下面,比如这里的例程是hello_world_flexspi_nor_debug,则需要JlinkScript的文件名为:hello_world_flexspi_nor_debug.JlinkScript,这样IAR就会自动调用对应的JlinkScript文件:74f6ea66-2696-11ee-962d-dac502259ad0.png(3)配置IAR debugger为JLINK JTAG:

752b31b8-2696-11ee-962d-dac502259ad0.png

  1. 点击debug,进入debug:756a21b6-2696-11ee-962d-dac502259ad0.png
  2. 提示配置JTAG_MOD=1, 则连接TP11到J25_4:
75adb142-2696-11ee-962d-dac502259ad0.pngc. 提示JTAG_MOD=0, 则让TP11悬空,点击OK继续:75e032d4-2696-11ee-962d-dac502259ad0.png已经显示IAR已经能够成功进行secureJTAG debug.4.4 MDK SecureJTAG debug

对于MDK的secure JTAG配置,基本要求如下:

(1)修改pinmux.c 代码,使能JTAG 引脚功能

(2)运行JLINK驱动,JLinkDLLUpdater.exe,刷新到MDK

(3)JlinkScript文件名修改为JLinkSettings.JlinkScript,拷贝到工程所在目录下,这样MDK就会自动调用客户的JLINK脚本

76402266-2696-11ee-962d-dac502259ad0.png

(4)修改debugger为JLINK,并且修改为JTAG接口

768031bc-2696-11ee-962d-dac502259ad0.png

76d2aa96-2696-11ee-962d-dac502259ad0.png到目前为止,MDK的Secure JTAG相关配置已经完成,按道理,可以直接debug去运行了。但是小编这里经过多次测试发现有些问题,对于RAM的代码(hello_world debug),能够进行secure JTAG debug没问题,但是对于flash的代码(hello_world_flexspi_nor_debug),通过secure jtagdownload没有问题,但是debug会程序跑飞,检查memory数据,读不出正确的数据:

7721c176-2696-11ee-962d-dac502259ad0.pngUUID也能读正确了,通常这种情况可能和MDK与JLINK驱动的lashloader有关,但是JLINK的Flashloader并没有直接开放出来,所以,小编又尝试使用RT-UFL作为Flashloader,能够debugger成功。如果遇到类似问题的网友,需要MDK secure。

具体步骤,请参考文档:

https://www.cnblogs.com/henjay724/p/13951686.html

https://www.cnblogs.com/henjay724/p/15465655.html

这里总结下,拷贝iMXRT_UFL文件到JLINK驱动:

C:Program FilesSEGGERJLINKDevicesNXP

拷贝JLinkDevices.xml到:

C:Program FilesSEGGERJLINK

Jlinkscript的添加和图21一样。

修改JlinkSettings.ini文件,device为MIMXRT1064_UFL, override =1.

775da1b4-2696-11ee-962d-dac502259ad0.png

删除烧录算法

778781dc-2696-11ee-962d-dac502259ad0.png

去掉update target before Debugging:77b0452c-2696-11ee-962d-dac502259ad0.png

进入debug模式:77e20030-2696-11ee-962d-dac502259ad0.png

配置JTAG_MOD=1, 连接TP11到J25_4,点击OK继续:78143424-2696-11ee-962d-dac502259ad0.png配置JTAG_MOD=0, 让TP11 浮空,点击OK, 进入debug模式,并且运行如下:78304b50-2696-11ee-962d-dac502259ad0.png

可以看到,换过flashloader为RT-UFL之后,MDK 工程Secure JTAG debug也能成功运行。附件给出RT-UFL相关的文件。

五、总结

对于Secure JTAG,需要修改硬件支持JTAG, 修改fuse支持secure JTAG, 修改代码引脚使能JTAG功能,对于IDE,需要配置相关的接口为JTAG,添加正确的JlinkScriptfile,这样就能成功的运行Secure JTAG功能,并且进行IDE的代码debug。

附件情况:

evkmimxrt1064_hello_world_SJTAG.zip:mcuxpresso工程

EVK-MIMXRT1064-hello_world_iar.7z:IAR工程

EVK-MIMXRT1064-hello_world_mdk.7z:mdk工程

File NXP_RT1064_SecureJTAG.JlinkScript, JLINK 脚本

File SecJtag.bat,结合JLink.exe 和NXP_RT1064_SecureJTAG.JlinkScript实现JLINK Commander形式的内核查找连接

File RT-UFL:超级下载算法,来源https://github.com/JayHeng/RT-UFL

附件可到官方论坛下载:

https://community.nxp.com/t5/i-MX-RT-Knowledge-Base/RT106X-secure-JTAG-test-and-IDE-debug/ta-p/1685577

作者:周晶晶

END

更多恩智浦AI-IoT市场和产品信息,邀您同时关注“NXP客栈”微信公众号

7878ab84-2696-11ee-962d-dac502259ad0.jpg      

NXP客栈


恩智浦致力于打造安全的连接和基础设施解决方案,为智慧生活保驾护航。

长按二维码,关注我们

恩智浦MCU加油站


这是由恩智浦官方运营的公众号,着重为您推荐恩智浦MCU的产品信息、开发技巧、教程文档、培训课程等内容。

78968488-2696-11ee-962d-dac502259ad0.jpg  

长按二维码,关注我们


原文标题:RT106X Secure JTAG测试与IDE调试

文章出处:【微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    18605

    浏览量

    386979
  • 恩智浦
    +关注

    关注

    14

    文章

    6051

    浏览量

    134401

原文标题:RT106X Secure JTAG测试与IDE调试

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式开发调试神器全解析:JTAG、SWD、串口打印

    写嵌入式代码只是第一步,调试才是决定项目能不能顺利推进的关键。MCU不跑?外设不响应?代码跑飞?没有合适的调试手段,排查问题就像摸黑找路。本文带你搞懂三大调试利器——JTAG、SWD、
    的头像 发表于 11-24 19:04 217次阅读
    嵌入式开发<b class='flag-5'>调试</b>神器全解析:<b class='flag-5'>JTAG</b>、SWD、串口打印

    恩智浦i.MX RT1180 MCU如何进入Boundary Scan模式

    本文重点介绍RT1180如何进入Boundary Scan模式,通过Jtag来进行板级硬件测试的过程。遵循IEEE1149.1中的测试访问端口和BoundaryScan体系结构的标准。
    的头像 发表于 10-22 09:50 2903次阅读
    恩智浦i.MX <b class='flag-5'>RT</b>1180 MCU如何进入Boundary Scan模式

    【干货分享】RT-Trace国产调试工具 | 技术集结

    在嵌入式系统开发中,调试一直是最具挑战性的环节之一。传统的调试方式往往依赖低速串口输出、简单的断点调试或离线日志记录,这些手段在面对复杂的实时系统时存在诸多局限。RT-Trace是
    的头像 发表于 09-16 08:07 571次阅读
    【干货分享】<b class='flag-5'>RT</b>-Trace国产<b class='flag-5'>调试</b>工具 | 技术集结

    【直播预告】RT-Trace调试工具V1.1.0版本功能全解析 | 问学直播

    RT-Thread一直致力于为开发者提供更高效的工具和技术支持。RT-Trace调试工具自面世以来持续演进,功能不断丰富:2025年5月:RT-Trace首次亮相,开创性地实现了基于S
    的头像 发表于 09-05 11:53 959次阅读
    【直播预告】<b class='flag-5'>RT</b>-Trace<b class='flag-5'>调试</b>工具V1.1.0版本功能全解析 | 问学直播

    JTAG标准的状态机实现

    JTAG作为一项国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试调试。目前的主流芯片均支持JTAG协议,如DSP、FPG
    的头像 发表于 08-21 15:12 2054次阅读
    <b class='flag-5'>JTAG</b>标准的状态机实现

    CYW43907如果将SECURE_BIT设置为 1,设备上的USB和HSIC接口是否被禁用?

    一旦 SECURE_BIT 设置为 1 ,OTP 和闪存就无法编程,因此这必须是最后一项任务 安全启动和安全闪存程序完成后执行。 当安全位(SECURE_BIT)设置为 1 时,设备上的 JTAG
    发表于 07-09 07:19

    RT-Trace调试工具正式发布!

    嵌入式开发者打造的高性能调试工具。RT-Trace支持SWD/JTAG高速连接,搭载板载显示屏离线交互系统与WebUI实时监控平台,助力代码调试、性能分析、故障排查全流程
    的头像 发表于 06-18 12:02 1205次阅读
    <b class='flag-5'>RT</b>-Trace<b class='flag-5'>调试</b>工具正式发布!

    有办法让SDK 1.3.5与JTAG调试器配合使用吗?

    .... 的 DIE 引用的位于 0x0 的 DIE 调试器停止在主界面。 之后,如果我继续执行(运行),调试器就不再响应--不会在任何断点处停止,也不允许暂停。 我只能终止调试会话
    发表于 05-23 07:32

    重磅预售!RT-Trace调试工具

    重磅登场。它支持SWD/JTAG高速连接,搭载板载显示屏离线交互系统与WebUI实时监控平台,助力代码调试、性能分析、故障排查全流程,大幅提升开发效率。RT-Tra
    的头像 发表于 05-20 18:15 983次阅读
    重磅预售!<b class='flag-5'>RT</b>-Trace<b class='flag-5'>调试</b>工具

    RISC-V JTAG:开启MCU 芯片调试之旅

    基于 RISC-V 架构的 MCU 芯片JTAG 调试过程及操作,为后续类似调试工作提供详实参考的依据,助力研发团队高效推进芯片研发进程。 RISC-V 架构以其开源、模块化等优势在 MCU 芯片领域崭露头角。
    的头像 发表于 05-07 17:57 2341次阅读
    RISC-V <b class='flag-5'>JTAG</b>:开启MCU 芯片<b class='flag-5'>调试</b>之旅

    FPGA的Jtag接口烧了,怎么办?

    在展开今天的文章前,先来讨论一个问题:FPGA的jtag接口烧了怎么办?JTAG接口的输入引脚通常设计为高阻抗,这使得它们对静电电荷积累非常敏感,由于JTAG接口需要频繁连接调试器、下
    的头像 发表于 04-27 11:01 2118次阅读
    FPGA的<b class='flag-5'>Jtag</b>接口烧了,怎么办?

    蜂鸟N203移植到xilinx ZCU104板子上,用JTAG调试的时出现报错怎么解决?

    求助各位大佬,蜂鸟N203移植到xilinx ZCU104板子上,用JTAG调试的时候出现这样的错误 在vivado里面跟JTAG有关的约束如下: 在调试的时候,用的是Nucle
    发表于 04-17 06:33

    将NXP RT1166更换为RT1064,可以使用JTAG/SWD存储和检索其闪存上的数据吗?

    我在我的项目中使用了 RT1166,但是,其中一个要求是芯片应该具有可被 JTAG/SWD 访问的内部闪存。 RT1166 有,但 RT1064 有 4MB 的内部 Flash。 我
    发表于 04-07 06:29

    蜂鸟N203移植到xilinx ZCU104板子上,用JTAG调试的时候出现错误怎么解决?

    求助各位大佬,蜂鸟N203移植到xilinx ZCU104板子上,用JTAG调试的时候出现这样的错误 在vivado里面跟JTAG有关的约束如下: 在调试的时候,用的是Nucle
    发表于 03-07 16:46

    AN-1086: ADM106x的热插拔应用

    电子发烧友网站提供《AN-1086: ADM106x的热插拔应用.pdf》资料免费下载
    发表于 01-12 10:00 0次下载
    AN-1086: ADM<b class='flag-5'>106x</b>的热插拔应用