NXP AN14120 调试 Cortex-M 软件用户指南
介绍
本文档介绍如何使用 Microsoft Visual Studio Code 交叉编译、部署和调试 i.MX 8M 系列、i.MX 8ULP 和 i.MX 93 Cortex-M 处理器的应用程序。
软件环境
该解决方案可以在Linux和Windows主机上实施。对于本应用笔记,假设使用 Windows PC,但不是强制的。
本应用笔记中使用 Linux BSP 版本 6.1.22_2.0.0。使用以下预构建映像:
- i.MX 8M Mini:imx-image-full-imx8mmevk.wic
- i.MX 8M Nano:imx-image-full-imx8mnevk.wic
- i.MX 8M Plus:imx-image-full-imx8mpevk.wic
- i.MX 8ULP:imx-image-full-imx8ulpevk.wic
- i.MX 93:imx-image-full-imx93evk.wic
有关如何构建这些映像的详细步骤,请参阅 i.MX Linux 用户指南(文档 IMXLUG)和 i.MX Yocto 项目用户指南(文档 IMXLXYOCTOUG)。
如果使用 Windows PC,请使用 Win32 Disk Imager 将预构建映像写入 SD 卡上(https:// win32diskimager.org/) 或 Balena 蚀刻机 (https://etcher.balena.io/)。如果使用 Ubuntu PC,请使用以下命令将预构建映像写入 SD 卡:
$ sudo dd if=.wic of=/dev/sd bs=1M status=progress conv=fsync
笔记:检查你的读卡器分区,将sd替换为你对应的分区。 1.2
硬件设置和设备
- 开发套件:
- 恩智浦 i.MX 8MM EVK LPDDR4
- 恩智浦 i.MX 8MN EVK LPDDR4
- 恩智浦 i.MX 8MP EVK LPDDR4
- 适用于 93×11 mm LPDDR11 的 NXP i.MX 4 EVK – NXP i.MX 8ULP EVK LPDDR4
- Micro SD 卡:当前实验使用 SanDisk Ultra 32-GB Micro SDHC I Class 10。
- 用于调试端口的 Micro-USB (i.MX 8M) 或 Type-C (i.MX 93) 电缆。
- SEGGER J-Link 调试探针。
先决条件
在开始调试之前,必须满足几个先决条件才能正确配置调试环境。
PC 主机 – i.MX 板调试连接
要建立硬件调试连接,请执行以下步骤:
- 使用 USB 电缆通过 DEBUG USB-UART 和 PC USB 连接器将 i.MX 板连接到主机 PC。 Windows 操作系统自动查找串行设备。
- 在设备管理器中的端口(COM 和 LPT)下找到两个或四个已连接的 USB 串行端口 (COM)。其中一个端口用于 Cortex-A 内核生成的调试消息,另一个端口用于 Cortex-M 内核。在确定所需的正确端口之前,请记住:
- [i.MX 8MP、i.MX 8ULP、i.MX 93]: 设备管理器中有四个可用端口。最后一个端口用于 Cortex-M 调试,倒数第二个端口用于 Cortex-A 调试,按升序计数调试端口。
- [i.MX 8MM、i.MX 8MN]: 设备管理器中有两个可用端口。第一个端口用于 Cortex-M 调试,第二个端口用于 Cortex-A 调试,按升序计数调试端口。
- 使用您首选的串行终端仿真器打开正确的调试端口(例如ample PuTTY)通过设置以下参数:
- 速度达到 115200 bps
- 8 个数据位
- 1个停止位(115200、8N1)
- 无奇偶校验
- 将SEGGER调试探针USB连接到主机,然后连接SEGGER JTAG 连接至 i.MX 板 JTAG 界面。如果 i.MX 板 JTAG 接口没有引导连接器,方向是通过将红线与引脚 1 对齐来确定的,如图 1 所示。
VS 代码配置
要下载并配置 VS Code,请执行以下步骤:
- 从官方下载并安装最新版本的Microsoft Visual Studio Code web地点。如果使用 Windows 作为主机操作系统,请从 Visual Studio Code 主页选择“下载 Windows 版”按钮。
- 安装 Visual Studio Code 后,打开它并选择“扩展”选项卡或按 Ctrl + Shift + X 组合。
- 在专用搜索栏中,键入 MCUXpresso for VS Code 并安装扩展。 VS Code 窗口左侧会出现一个新选项卡。
MCUXpresso 扩展配置
要配置 MCUXpresso 扩展,请执行以下步骤:
- 单击左侧栏中的 MCUXpresso 扩展专用选项卡。在快速启动面板中,单击
打开 MCUXpresso 安装程序并授予下载安装程序的权限。 - 安装程序窗口很快就会出现。单击 MCUXpresso SDK Developer,然后单击 SEGGER JLink,然后单击安装按钮。安装程序安装存档、工具链、Python 支持、Git 和调试探针所需的软件
安装所有软件包后,请确保 J-Link 探针已连接到主机 PC。然后,检查探针在调试探针下的 MCUXpresso 扩展中是否也可用 view,如图所示
导入 MCUXpresso SDK
根据您运行的主板,从 NXP 官方构建并下载特定的 SDK web地点。对于本应用说明,已测试以下 SDK:
- SDK_2.14.0_EVK-MIMX8MM
- SDK_2.14.0_EVK-MIMX8MN
- SDK_2.14.0_EVK-MIMX8MP
- SDK_2.14.0_EVK-MIMX8ULP
- SDK_2.14.0_MCIMX93-EVK
建立一个前任ampi.MX 93 EVK 的文件,参见图 7:
- 要在 VS Code 中导入 MCUXpresso SDK 存储库,请执行以下步骤:
- 下载 SDK 后,打开 Visual Studio Code。单击左侧的 MCUXpresso 选项卡,然后展开已安装的存储库和项目 views.
- 单击导入存储库并选择本地存档。单击“存档”字段对应的“浏览...”,然后选择最近下载的 SDK 存档。
- 选择存档解压的路径并填写位置字段。
- 名称字段可以保留默认值,也可以选择自定义名称。
- 根据需要选中或取消选中“创建 Git 存储库”,然后单击“导入”。
导入前任amp申请
导入SDK后,会出现在 安装的存储库 view.
导入前任amp要从 SDK 存储库获取文件应用程序,请执行以下步骤:
- 单击导入Examp来自项目的存储库按钮的文件 view.
- 从下拉列表中选择一个存储库。
- 从下拉列表中选择工具链。
- 选择目标板。
- 选择 demo_apps/hello_world examp从选择模板列表中选择文件。
- 为项目选择一个名称(可以使用默认值)并将路径设置为项目位置。
- 单击“创建”。
- 仅针对 i.MX 8M 系列执行以下步骤。在项目下 view、扩大进口项目。转到“设置”部分并单击 mcuxpresso-tools.json file.
a. 添加“接口”:“JTAG”在“调试”>“segger”下
b。对于 i.MX 8MM,添加以下配置:“debug”>“segger”下的“device”:“MIMX8MM6_M4”
c. 对于 i.MX 8MN,添加以下配置:“device”:“debug”>“segger”下的“MIMX8MN6_M7”
d. 对于 i.MX 8MP,添加以下配置:
“设备”:“调试”>“segger”下的“MIMX8ML8_M7”
下面的代码显示了一个前amp对 mcuxpresso-tools.json 执行上述修改后,i.MX8 MP“调试”部分的文件:
导入ex后amp申请成功后,必须在PROJECTS下可见 view。另外,项目来源 files 在资源管理器 (Ctrl + Shift + E) 选项卡中可见。
构建应用程序
要构建应用程序,请按左侧的“构建所选”图标,如图 9 所示。
为调试器准备电路板
使用 JTAG 对于调试 Cortex-M 应用程序,根据平台的不同,有一些先决条件:
- 适用于 i.MX 93
要支持 i.MX 93,必须安装 SEGGER J-Link 补丁:SDK_MX93_3RDPARTY_PATCH.zip。
笔记: 这个补丁必须要用,即使是以前安装过的。下载完成后,解压存档并复制Devices目录和JLinkDevices.xml file 到 C:\程序 Files\SEGGER\JLink。如果使用Linux PC,则目标路径为/opt/SEGGER/JLink。- 仅在 Cortex-M33 运行时调试 Cortex-M33
在此模式下,启动模式开关 SW1301[3:0] 必须设置为 [1010]。然后可以使用调试按钮直接加载和调试M33映像。有关更多详细信息,请参阅第 5 节。
如果需要与Cortex-M55并行运行在Cortex-A33上的Linux,有两种调试Cortex-M33的方法: - Cortex-A33 处于 U-Boot 时调试 Cortex-M55
首先,复制sdk20-app.bin file (位于armgcc/debug目录下)将第3节生成的文件放入SD卡的boot分区中。启动开发板并在 U-Boot 中停止它。当启动开关配置为启动 Cortex-A 时,启动顺序不会启动 Cortex-M。必须使用以下命令手动启动它。如果 Cortex-M 未启动,JLink 将无法连接到内核。
- 注意:如果系统无法正常调试,请尝试右键单击MCUXpresso for VS中的项目
编码并选择“附加以调试项目”。 - Cortex-A33 在 Linux 中时调试 Cortex-M55
必须修改内核 DTS 以禁用 UART5,该 UARTXNUMX 使用与 J 相同的引脚TAG 界面。
如果使用Windows PC,最简单的是安装WSL + Ubuntu 22.04 LTS,然后交叉编译DTS。
WSL + Ubuntu 22.04 LTS 安装完成后,打开运行在 WSL 上的 Ubuntu 机器并安装所需的软件包:
现在,可以下载内核源代码:
要禁用 UART5 外设,请在 linux-imx/arch/arm5/boot/dts/freescale/imx64-93×11-evk.dts 中搜索 lpuart11 节点 file 并将正常状态替换为禁用:
重新编译DTS:
复制新创建的linux-imx/arch/arm64/boot/dts/freescale/imx93 11×11-evk.dtb file 在SD卡的启动分区上。复制 hello_world.elf file (位于armgcc/debug目录下)将第3节生成的文件放入SD卡的boot分区中。在 Linux 中启动开发板。由于 Cortex-A 启动时启动 ROM 不会启动 Cortex-M,因此必须手动启动 CortexM。
笔记:hello_world.elf file 必须放置在 /lib/firmware 目录中。
- 仅在 Cortex-M33 运行时调试 Cortex-M33
- 适用于 i.MX 8M
要支持 i.MX 8M Plus,必须安装 SEGGER J-Link 补丁:
iar_segger_support_patch_imx8mp.zip。
下载完成后,解压压缩包并复制Devices目录和
JLinkDevices.xml file 从 JLink 目录到 C:\Program Files\SEGGER\JLink。如果是 Linux 电脑
使用时,目标路径为/opt/SEGGER/JLink。- Cortex-A 处于 U-Boot 时调试 Cortex-M
在这种情况下,无需执行任何特殊操作。在 U Boot 中启动开发板并跳转到第 5 节。 - Cortex-A 位于 Linux 中时调试 Cortex-M
要与 Cortex-A 上运行的 Linux 并行运行和调试 Cortex-M 应用程序,必须为 Cortex-M 分配和保留特定时钟。它是在 U-Boot 内部完成的。在 U-Boot 中停止开发板并运行以下命令:
- Cortex-A 处于 U-Boot 时调试 Cortex-M
- 对于 i.MX 8ULP
要支持 i.MX 8ULP,必须安装 SEGGER J-Link 补丁:SDK_MX8ULP_3RDPARTY_PATCH.zip。
笔记: 即使以前安装过这个补丁也必须使用。
下载后,解压存档并复制Devices目录和JLinkDevices.xml file 到 C:\程序 Files\SEGGER\JLink。如果使用Linux PC,则目标路径为/opt/SEGGER/JLink。对于 i.MX 8ULP,由于 Upower 单元,首先使用我们的“VSCode”存储库中的 m33_image 构建 flash.bin。 M33 映像可以在 {CURRENT REPO}\armgcc\debug\sdk20-app.bin 中找到。有关如何构建 flash.bin 映像的信息,请参阅 SDK_6_xx_x_EVK-MIMX8ULP/docs 中适用于 EVK-MIMX9ULP 和 EVK8-MIMX2ULP 的 MCUX presso SDK 入门的第 8 节。
笔记: 使用活动 VSCode 存储库中的 M33 映像。否则,程序无法正确附加。右键单击并选择“附加”。
运行与调试
按下调试按钮后,选择“调试”项目配置,调试会话将启动。
当调试会话启动时,会显示专用菜单。调试菜单包含用于启动执行直至出现断点、暂停执行、单步执行、单步执行、单步执行、重新启动和停止的按钮。
此外,我们还可以查看局部变量、寄存器值、观察某些表达式以及检查调用堆栈和断点
在左侧导航器中。这些功能区域位于“运行和调试”选项卡下,而不是在 MCUXpresso 中
对于 VS 代码。
注意文档中的源代码
Examp本文档中显示的文件代码具有以下版权和 BSD-3-Clause 许可证:
版权所有 2023 NXP 在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用(无论是否经过修改):
- 源代码的重新分发必须保留上述版权声明、本条件列表和以下免责声明。
- 以二进制形式重新分发必须在分发时提供文档和/或其他材料中的上述版权声明、条件列表和以下免责声明。
- 未经事先特别书面许可,不得使用版权所有者的姓名或其贡献者的名字来认可或促销从该软件衍生的产品。
本软件由版权所有者和贡献者“按原样”提供,不承担任何明示或默示的保证,包括但不限于适销性和特定用途适用性的默示保证。在任何情况下,版权持有者或贡献者均不对任何直接、间接、附带、特殊、惩戒性或后果性损害(包括但不限于采购替代商品或服务;使用损失、数据或利润损失;或损失)承担责任。或业务中断),无论是何种原因造成的,并且基于任何责任理论,无论是合同责任、严格责任还是侵权行为(包括疏忽或其他原因),均因使用本软件而产生,即使已被告知发生此类损害的可能性
法律信息
定义
草稿 — 文档的草稿状态表明内容仍处于草稿状态
内部审查中view 并须经正式批准,否则可能会有修改或补充。恩智浦半导体不对文档草稿版本中包含的信息的准确性或完整性做出任何陈述或保证,并且对使用此类信息的后果不承担任何责任。
免责声明
有限保修和责任 — 本文件中的信息被认为是准确和可靠的。然而,恩智浦半导体不对此类信息的准确性或完整性做出任何明示或暗示的陈述或保证,并且对使用此类信息的后果不承担任何责任。如果本文档中的内容由恩智浦半导体之外的信息源提供,恩智浦半导体不承担任何责任。在任何情况下,恩智浦半导体均不对任何间接、偶然、惩罚性、特殊或后果性损害(包括但不限于利润损失、储蓄损失、业务中断、与移除或更换任何产品相关的成本或返工费用)承担责任,无论是此类损害是否基于侵权(包括疏忽)、保证、违反合同或任何其他法律理论。
尽管客户可能因任何原因遭受任何损害,恩智浦半导体对本文所述产品的客户的总和累积责任应根据恩智浦半导体的商业销售条款和条件进行限制。
作出更改的权利 — 恩智浦半导体保留随时更改本文档中发布的信息的权利,包括但不限于规格和产品描述,恕不另行通知。本文件取代并替换本文件发布之前提供的所有信息。
适用性 — 恩智浦半导体产品的设计、授权或保证不适合用于生命支持、生命关键或安全关键系统或设备,也不适合恩智浦半导体产品的故障或故障合理预期会导致人身伤害的应用。受伤、死亡或严重的财产或环境损害。恩智浦半导体及其供应商对于在此类设备或应用中包含和/或使用恩智浦半导体产品不承担任何责任,因此此类包含和/或使用的风险由客户自行承担。
应用 — 此处描述的任何这些应用程序
产品仅供说明之用。恩智浦半导体不声明或保证此类应用程序无需进一步测试或修改即可适合指定用途。
客户负责其设计和运营
使用恩智浦半导体产品的应用程序和产品,恩智浦半导体对应用程序或客户产品设计方面的任何帮助不承担任何责任。客户自行负责确定恩智浦半导体产品是否适合客户的应用和计划产品,以及客户的第三方客户的计划应用和使用。客户应提供适当的设计和操作保障措施,以尽量减少与其应用和产品相关的风险。
恩智浦半导体不承担因客户的应用程序或产品、或客户的第三方客户的应用程序或使用中的任何缺陷或缺陷而导致的任何违约、损害、成本或问题相关的任何责任。客户负责使用恩智浦半导体产品对客户的应用程序和产品进行所有必要的测试,以避免应用程序和产品或客户第三方的应用程序或使用出现故障。
商业销售条款和条件—— 恩智浦半导体产品的销售须遵守商业销售的一般条款和条件,如 https://www.nxp.com/pro 上发布的file/条款,除非有效的书面个人协议中另有约定。如果签订单独协议,则仅适用相应协议的条款和条件。恩智浦半导体特此明确反对在客户购买恩智浦半导体产品时应用客户的一般条款和条件。
出口管制 — 本文件以及此处描述的项目可能受出口管制法规的约束。 出口可能需要主管当局的事先授权。
适用于非汽车合格产品 — 除非本文件明确指出该特定恩智浦半导体
产品符合汽车标准,但不适合汽车使用。它既不符合汽车测试或应用要求,也不经过测试。恩智浦半导体对于在汽车设备或应用中包含和/或使用非汽车合格产品不承担任何责任。
如果客户将产品用于设计和使用
汽车应用符合汽车规范和标准,
顾客 (一个) 不得在恩智浦半导体针对此类汽车应用、用途和规格提供产品保证的情况下使用该产品,并且 (二) 每当客户将产品用于超出恩智浦半导体规格的汽车应用时,客户应自行承担此类使用的风险,并且 (c) 客户应全额赔偿恩智浦半导体因客户设计和使用产品而导致的任何责任、损坏或失败的产品索赔适用于超出恩智浦半导体标准保修和恩智浦半导体产品规格的汽车应用。
翻译 — 文件的非英文(翻译)版本,包括该文件中的法律信息,仅供参考。 如果翻译版本与英文版本之间存在任何差异,则以英文版本为准。
安全 — 客户了解所有 NXP 产品都可能存在未识别的漏洞,或者可能支持具有已知限制的既定安全标准或规范。 客户负责其应用程序和产品的整个生命周期的设计和操作,以减少这些漏洞对客户应用程序和产品的影响。 客户的责任还延伸至恩智浦产品支持的其他开放和/或专有技术,以用于客户的应用程序。 恩智浦对任何漏洞不承担任何责任。 客户应定期检查 NXP 的安全更新并适当跟进。
客户应选择具有最符合预期应用的规则、法规和标准的安全功能的产品,并对其产品做出最终设计决策,并全权负责遵守与其产品相关的所有法律、法规和安全相关要求,无论恩智浦可能提供的任何信息或支持。恩智浦设有产品安全事件响应团队 (PSIRT)(可通过 PSIRT@nxp.com 联系),负责管理恩智浦产品安全漏洞的调查、报告和解决方案发布。
NXP BV — NXP BV 不是一家运营公司,也不分销或销售产品。
文件/资源
![]() |
NXP AN14120 调试 Cortex-M 软件 [pdf] 用户指南 i.MX 8ULP、i.MX 93、AN14120 调试 Cortex-M 软件、AN14120、调试 Cortex-M 软件、Cortex-M 软件、软件 |