本文档介绍如何使用Segger J-Link OpenSDAv2.1 固件和Kinetis Design Studio V1.1.0调试 FRDM-K22F 板。
适用于:
FRDM-K22F 板( FRDM-K22F|Freedom 开发板|Kinetis|Freescale )附带编程的 OpenSDAv2.1,并且默认具有 CMSIS-DAP 调试固件。
(有关 OpenSDA 差异,请参阅最后的“技术细节”)
KDS V1.1.0不支持用于 FRDM-K22F 的带有 CMSIS-DAP 的 OpenOCD。尝试使用 KDS V1.1.0 调试 FRDM-K22F 板并且 OpenOCD/CMSIS-DAP 会导致控制台视图出现错误,目前无法实现,直到 OpenSDA 更新(参见Kinetis Design Studio V1.1.0:发行说明和新闻)。
一种解决方案是使用Segger J-Link OpenSDAv2.1 固件来调试电路板。
(另一个解决方案是使用 P&E Multilink OpenSDAv2.1 固件,请参阅FRDM-K22F:使用 P&E OpenSDAv2.1 固件进行调试)
您需要在主板上安装 Segger J-Link OpenSDAv2.1 固件,并且只需执行一次(除非您再次更改固件)。
创建一个新的调试/启动配置:选择您的项目,然后使用菜单运行>调试配置。
使用“新建”图标为您的应用程序和项目创建新配置(主选项卡):
指定 MK22FN512xxx12 作为您的设备名称,并确保选择“SWD”:
已禁用 SWO:
就是这样。现在您可以使用板上的 Segger J-Link OpenSDA V2.1 固件调试您的应用程序 :-)。
您可以使用启动配置中的“调试”按钮:
或者使用调试图标下拉列表:
祝您调试愉快
目前,OpenSDA 有三个版本可用:
板上的调试电路对于所有 OpenSDA 版本(Kinetis K20 微控制器)都是相同的:区别在于 K20 上编程的引导加载程序:OpenSDAv1.0 上的引导加载程序无法被删除/更改。OpenSDAv2.x 上的引导加载程序可以被擦除/更改,以及OpenSDAv2.0之间的区别并且 v2.1 是调试应用程序启动的地址:对于 OpenSDAv2.0,它期望应用程序位于地址 0x5000,而 OpenSDAv2.1 期望应用程序从地址 0x8000 启动。
另请参阅: OpenSDAv2
OpenSDA 2.1 的起始地址是 0x8000,这反映在 ELF 头中(尽管我很好奇构建从哪里获得这个值)。
我的错。我的问题是获取错误的 segger 引导加载程序并且没有注意到 FRDM-K64F 和 FRDM-K22F 之间的引脚名称发生了变化。修复了这些问题,现在一切正常。
readelf -h -l mbed_22blinky.elf(以下输出)
我认为这一点,特别是 .isr_vector位于 0x8000,告诉我这个 elf 文件与 OpenSDA 2.1 不兼容(当我阅读原始帖子时应该是 0x5000)。现在要找到在哪里调整该设置。我认为它可能被埋在 mbed 的某个地方,因为我在 kds 设置中的任何位置都找不到它。将从源而不是 .o 导入 mbed出口(出于其他原因这样做会更好)。
ELF 头:
魔法:7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
类别:ELF32
数据:2 的补码,小端
版本:1(当前版本)
操作系统/ABI:UNIX - System V
ABI 版本:0
类型:EXEC(可执行文件)
机器:ARM
版本:0x1
入口点地址:0x199
程序头开始:52(文件中的字节数)
节头开始:142632(文件中的字节数)
标志:0x5000002,有入口点,Version5 EABI
此标头的大小:52(字节)
程序头大小:32(字节)
程序头数量:5
节头大小:40(字节)
节标题数量:22
节头字符串表索引:19
程序头:
类型偏移量VirtAddrPhysAddrFileSizMemSizFlg对齐
EXIDX 0x011b80 0x00009b80 0x00009b80 0x00390 0x00390 R 0x4
加载 0x008000 0x00000000 0x00000000 0x001f0 0x001f0 RE 0x8000
加载 0x008400 0x00000400 0x00000400 0x00010 0x00010 R 0x8000
加载 0x008410 0x00000410 0x00000410 0x09b00 0x09b00 重新 0x8000
加载 0x018400 0x1fff0400 0x00009f10 0x002c8 0x00cac RW 0x8000
部分到段的映射:
分段部分...
00 .ARM.exidx
01 .isr_vector
02 .flash_protect
03 .text .ARM.extab .ARM.exidx
04 .数据.bss
谢谢你的信息。我升级到了Segger J-Link OpenSDAv2.1 固件,但是当程序启动时,似乎程序的基地址是关闭的。KDS 及其工具链是否会为错误的基地址生成可执行文件?我应该检查某个地方的设置吗?或者代码是可重定位的,而这只是加载器细节的事情?
我可以在FRDM-K22F|Freedom Development Board|Kinetis|Freescale找到 K22F 包中的原理图文档
FRDMK22FUG.pdf 包含部分原理图。但它并不完整。
感谢您的信息。
我比较了OpenSDA的V1和V2之间的区别。我发现它的硬件有以下几点不同:
从 V1 到 V2 的变化
因此,与P16/P20最大的区别在于SDA_SWD_EN和SDA_SWD_OE的控制逻辑。
如果我错了,请纠正我。