通过Arm调试端口SWD和J-Link调试
WICED蓝牙设备的硬件调试可以使用OpenOCD支持的接口完成。但是,如果你的设备处于BLE连接状态,当CPU在调试器中停止时(在BLE连接超时之后),它会删除该连接。因此,对于BLE应用程序,通常使用BTSpy进行调试,而不是使用硬件调试器。
在本节中,我们将描述两组不同的硬件:Cypress MiniProg4和Segger J-Link调试器。也可以使用一个附加的ARM-JTAG-SWD适配器的Olimex ARM-USB-TINY-H调试探针。对于J-Link和Olimex,可能需要一个适配器,将20针连接器转换为占地面积小的10针连接器,这取决于组件上可用的调试连接器。下表列出了每个选项所需的硬件:
下面的图片显示了每个配置的调试设置:
在名为“Hardware Debugging for CYW207xx and CYW208xx.pdf”的指南中详细描述了设置和运行调试器的过程。本指南可从Eclipse中获得,因此这里不再重复相关信息。要从Eclipse IDE中访问该指南,请执行以下操作:
Quick Panel > Documentation > WICED Bluetooth SDK Documentation > CYW208XX API Reference > WICED Hardware Debugging for Bluetooth Kits
一些重要的注意事项:
- 将makefile中的ENABLE_DEBUG设置为1将在文件wiced_btsdk/dev-kit/baselib/20819A1//WICED/common/spar_utils.h 中做三件事:
a.配置SWD引脚。
CYW920819EVB-02 Kit使用P2用于SWD_CLK,使用P3用于SWD_IO。如果你的硬件使用的pin与文件中指定的不同,你需要修改它。
b.关闭看门狗定时器。c.在程序的开头启用一个繁忙-等待循环,这样应用程序直到用户连接到调试端口并更改一个变量为continue时才往下跑。这样以来,用户就可以从应用程序的起点开始调试。因为设备在上电时处于忙碌-等待循环中,在编程或重置之后,设备将不会显示任何活动,直到用户从调试器内部跳出循环。
-
有一个拨码开关(SW9),控制P2和P3到调试头的路由。开关必须处于OFF位置以启用调试标头连接。当开关处于ON位置时,P2和P3路由到Arduino头引脚。
-
由于调试器的SWD使用P2 (SWD_CLK)和P3 (SWD_IO),这些引脚可能不会用于应用程序中的其他任何东西。
-
调试器连接到正在运行的目标。因此,在运行适当的Debug Attach启动之前,必须先执行构建/程序步骤。
-
如果你在使用调试后重新下载程序有问题,尝试以下方法:
- 按住工具箱上的“Recover”按钮。
- 按下并释放“Reset”按钮。
- 松开“Recover”按钮。
- 尝试再次下载程序。
- 除了在文件wiced_btsdk/dev-kit/baselib/20819A1//platforms/CYW20819A1_openocd.cfg中更改默认适配器设置之外,Olimex调试探针的工作方式与MiniProg4相同。所需要的更改是取消对Olimex适配器配置的2行注释,并注释掉对KitProg3适配器配置的1行(在本例中,KitProg3和MiniProg 4是等价的)。文件的适用部分如下所示:
- 如果你在启动调试器时收到关于另一个已经运行的实例的错误消息,打开任务管理器(Ctrl-Alt-Del)并结束任何名为arm-none-eabi-gdb.exe的任务
使用Debuger
一旦您配置了固件、对板进行了编程并启动了调试器,应用程序将位于BUSY_WAIT_TILL_MANUAL_CONTINUE_IF_DEBUG_ENABLED循环中。开始执行(如果它还没有运行),然后暂停以确保固件在循环中。
在Quick Panel的“Variables”选项卡中,删除spar_debug_contine的值,输入新值1并按enter键。一旦更改了spar_debug_continue的值,就可以继续执行,程序将跳出繁忙等待循环。
当程序执行暂停时,您可以添加断点以在代码中的特定点暂停。要添加断点,请打开源文件,单击需要断点的行,双击代码窗口左侧的栏,或者右键单击该区域并选择“Toggle breakpoint”。启用的断点是旁边带有黑色复选标记的蓝色圆圈。
一旦线程由于断点而挂起,您将看到上面以绿色突出显示的代码行,您将看到线程由于在调试窗口中出现断点而挂起,如下所示。
您可以通过双击源代码中该行旁边的绿色圆圈或快速面板中的“断点”选项卡来启用或禁用断点。
如果断点是在启动当前调试会话之前创建的,那么它们可能与当前线程没有关联,并且将用一个没有选中标记的蓝色圆圈表示。要在当前线程中启用断点,右键单击所需的断点并选择breakpoint Properties…
如果在“断点”窗口中没有看到任何断点,请关闭“显示所选目标支持的断点”按钮,如下所示。
点击红色的“终止”按钮,停止调试。一旦调试停止,您可能希望切换回Project Explorer选项卡,而不是Debug选项卡。或者,您可以使用菜单项Window > Perspective > Reset Perspective将ModusToolbox透视图重置为默认的窗口大小和位置。
关于调试的一些额外注意事项:
- 单步执行代码需要一个自由断点(free breakpoint )。
- 有两个可用的硬件断点。
- ROM操作码只能使用硬件断点。
- 该设备使用ROM和RAM作为固件。例如,许多WICED API函数将调用ROM代码来支持。
- 源代码和符号没有提供ROM和一些补丁库区域。源代码调试将仅限于您拥有源代码的代码。
- 通常,如果断点不可用,GDB会忽略step命令。
評論