Skip to main content
 首页 » 编程设计

arm之JTAG 适配器 ULINK-ME 和 openocd(在 ArchLinux 上)

2024年02月20日11artech

我今天从官方 Arch Linux 存储库安装了 Openocd,现在尝试将它与我的 JTAG 适配器一起使用 ULINK-ME 。我发现ULINK-ME使用CMSIS-DAP调试固件。 Openocd 有 CMSIS-DAP 驱动程序,因此应该能够与我的适配器通信,但在我编写下面的命令后,我收到了错误。

我正在将 ULINK-ME 连接到开发板 EA3141它集成了微 Controller LPC3141 - 与 LPC3131 的近亲,我为其加载配置文件。

sudo openocd -f /usr/local/share/openocd/scripts/interface/cmsis-dap.cfg -f /usr/local/share/openocd/scripts/target/lpc3131.cfg -d3 
 
Open On-Chip Debugger 0.8.0-dev-00175-g8b7acca-dirty (2014-10-14-19:53) 
Licensed under GNU GPL v2 
For bug reports, read 
        http://openocd.sourceforge.net/doc/doxygen/bugs.html 
User : 13 1 command.c:549 command_print(): debug_level: 3 
Debug: 14 1 configuration.c:45 add_script_search_dir(): adding /root/.openocd 
Debug: 15 1 configuration.c:45 add_script_search_dir(): adding /usr/local/share/openocd/site 
Debug: 16 1 configuration.c:45 add_script_search_dir(): adding /usr/local/share/openocd/scripts 
Debug: 17 1 configuration.c:86 find_file(): found /usr/local/share/openocd/scripts/interface/cmsis-dap.cfg 
Debug: 18 1 command.c:145 script_debug(): command - ocd_command ocd_command type ocd_interface cmsis-dap 
Debug: 19 2 command.c:145 script_debug(): command - interface ocd_interface cmsis-dap 
Debug: 21 2 command.c:369 register_command_handler(): registering 'ocd_cmsis-dap'... 
Debug: 22 2 command.c:369 register_command_handler(): registering 'ocd_cmsis_dap_vid_pid'... 
Debug: 23 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 24 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 25 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 26 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 27 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 28 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 29 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 30 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 31 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Info : 32 2 transport.c:118 allow_transports(): only one transport option; autoselect 'cmsis-dap' 
Debug: 33 2 adi_v5_cmsis_dap.c:246 cmsis_dap_select(): CMSIS-ADI: cmsis_dap_select 
Debug: 34 2 command.c:404 register_command(): command 'cmsis-dap' is already registered in '<global>' context 
Debug: 35 2 command.c:369 register_command_handler(): registering 'ocd_cmsis-dap'... 
Error: 36 7 cmsis_dap_usb.c:175 cmsis_dap_usb_open(): unable to open CMSIS-DAP device 
Error: 37 7 adi_v5_cmsis_dap.c:266 cmsis_dap_select(): unable to init CMSIS-DAP driver 
Error: 38 7 transport.c:83 transport_select(): Error selecting 'cmsis-dap' as transport 
Debug: 39 7 command.c:631 run_command(): Command failed with error code -4 
User : 40 7 command.c:669 command_run_line(): Runtime Error: /usr/local/share/openocd/scripts/interface/cmsis-dap.cfg:7:  
in procedure 'script'  
at file "embedded:startup.tcl", line 58 
in procedure 'interface' called at file "/usr/local/share/openocd/scripts/interface/cmsis-dap.cfg", line 7 

有人知道为什么我会收到错误吗?

<小时 />

我也尝试以另一种方式启动它,但它再次打印错误。这次有点不同。

sudo openocd -c "interface cmsis-dap" -f /usr/local/share/openocd/scripts/target/lpc3131.cfg -d3 
 
Open On-Chip Debugger 0.8.0-dev-00175-g8b7acca-dirty (2014-10-14-19:53) 
Licensed under GNU GPL v2 
For bug reports, read 
        http://openocd.sourceforge.net/doc/doxygen/bugs.html 
User : 13 2 command.c:549 command_print(): debug_level: 3 
Debug: 14 2 configuration.c:45 add_script_search_dir(): adding /root/.openocd 
Debug: 15 2 configuration.c:45 add_script_search_dir(): adding /usr/local/share/openocd/site 
Debug: 16 2 configuration.c:45 add_script_search_dir(): adding /usr/local/share/openocd/scripts 
Debug: 17 2 command.c:145 script_debug(): command - ocd_command ocd_command type ocd_interface cmsis-dap 
Debug: 18 2 command.c:145 script_debug(): command - interface ocd_interface cmsis-dap 
Debug: 20 2 command.c:369 register_command_handler(): registering 'ocd_cmsis-dap'... 
Debug: 21 2 command.c:369 register_command_handler(): registering 'ocd_cmsis_dap_vid_pid'... 
Debug: 22 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 23 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 24 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 25 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 26 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 27 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 28 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 29 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Debug: 30 2 command.c:369 register_command_handler(): registering 'ocd_jtag'... 
Info : 31 2 transport.c:118 allow_transports(): only one transport option; autoselect 'cmsis-dap' 
Debug: 32 2 adi_v5_cmsis_dap.c:246 cmsis_dap_select(): CMSIS-ADI: cmsis_dap_select 
Debug: 33 2 command.c:404 register_command(): command 'cmsis-dap' is already registered in '<global>' context 
Debug: 34 2 command.c:369 register_command_handler(): registering 'ocd_cmsis-dap'... 
Error: 35 7 cmsis_dap_usb.c:175 cmsis_dap_usb_open(): unable to open CMSIS-DAP device 
Error: 36 7 adi_v5_cmsis_dap.c:266 cmsis_dap_select(): unable to init CMSIS-DAP driver 
Error: 37 7 transport.c:83 transport_select(): Error selecting 'cmsis-dap' as transport 
Debug: 38 7 command.c:631 run_command(): Command failed with error code -4 
User : 39 7 command.c:669 command_run_line(): in procedure 'interface' 
<小时 />

更新:

ULINK-ME 的 `sudo lsusb -v 命令的输出是:

Bus 005 Device 018: ID c251:2721 Keil Software, Inc. 
Device Descriptor: 
  bLength                18 
  bDescriptorType         1 
  bcdUSB               1.10 
  bDeviceClass            0 (Defined at Interface level) 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64 
  idVendor           0xc251 Keil Software, Inc. 
  idProduct          0x2721 
  bcdDevice            1.00 
  iManufacturer           4 Keil Software 
  iProduct               32 Keil ULINK-ME 
  iSerial                 0 
  bNumConfigurations      1 
  Configuration Descriptor: 
    bLength                 9 
    bDescriptorType         2 
    wTotalLength           41 
    bNumInterfaces          1 
    bConfigurationValue     1 
    iConfiguration          0 
    bmAttributes         0x80 
      (Bus Powered) 
    MaxPower              100mA 
    Interface Descriptor: 
      bLength                 9 
      bDescriptorType         4 
      bInterfaceNumber        0 
      bAlternateSetting       0 
      bNumEndpoints           2 
      bInterfaceClass         3 Human Interface Device 
      bInterfaceSubClass      0 No Subclass 
      bInterfaceProtocol      0 None 
      iInterface              0 
        HID Device Descriptor: 
          bLength                 9 
          bDescriptorType        33 
          bcdHID               1.00 
          bCountryCode            0 Not supported 
          bNumDescriptors         1 
          bDescriptorType        34 Report 
          wDescriptorLength      25 
         Report Descriptors: 
           ** UNAVAILABLE ** 
      Endpoint Descriptor: 
        bLength                 7 
        bDescriptorType         5 
        bEndpointAddress     0x81  EP 1 IN 
        bmAttributes            3 
          Transfer Type            Interrupt 
          Synch Type               None 
          Usage Type               Data 
        wMaxPacketSize     0x0040  1x 64 bytes 
        bInterval               1 
      Endpoint Descriptor: 
        bLength                 7 
        bDescriptorType         5 
        bEndpointAddress     0x01  EP 1 OUT 
        bmAttributes            3 
          Transfer Type            Interrupt 
          Synch Type               None 
          Usage Type               Data 
        wMaxPacketSize     0x0040  1x 64 bytes 
        bInterval               1 
Device Status:     0x0000 
  (Bus Powered) 

因为其中没有字符串“CMSIS-DAP”,我想这意味着我有一个较旧的 ULINK-ME(2013 年之前购买)适配器,没有 CMSIS-DAP 固件。我希望 Keil 提供一些将 CMSIS-DAP 刷新到我的旧 ULINK-ME 的方法。

<小时 />

解决方案:

我写信给Keil,他们声称ULINK-ME的固件可以更新,这是真的。他们向我指出了这三个链接:

1. - check serial number

2. - upgrade if Keil uVision hasn't done this by itself in point 1.

3. - manipulate your ULINK-ME even further

我必须在 Windows 计算机上安装 MDK-ARM v5,然后单击工具栏上一个非常隐藏的图标(魔杖)。在调试过程中,我选择了 ULINK2/ME 选项,它自行更新了我的固件。现在我的 ULINK-ME(旧型号)上有一个 CMSIS-DAP,我可以使用 sudo lsusb -v 确认这一点:

Bus 005 Device 026: ID c251:2723 Keil Software, Inc.  
Device Descriptor: 
  bLength                18 
  bDescriptorType         1 
  bcdUSB               2.00 
  bDeviceClass            0 (Defined at Interface level) 
  bDeviceSubClass         0  
  bDeviceProtocol         0  
  bMaxPacketSize0        64 
  idVendor           0xc251 Keil Software, Inc. 
  idProduct          0x2723  
  bcdDevice            1.00 
  iManufacturer           1 Keil Software 
  iProduct                2 Keil ULINK-ME CMSIS-DAP 
  iSerial                 3 M0489MAE 
  bNumConfigurations      1 
  Configuration Descriptor: 
    bLength                 9 
    bDescriptorType         2 
    wTotalLength           41 
    bNumInterfaces          1 
    bConfigurationValue     1 
    iConfiguration          0  
    bmAttributes         0x80 
      (Bus Powered) 
    MaxPower              100mA 
    Interface Descriptor: 
      bLength                 9 
      bDescriptorType         4 
      bInterfaceNumber        0 
      bAlternateSetting       0 
      bNumEndpoints           2 
      bInterfaceClass         3 Human Interface Device 
      bInterfaceSubClass      0 No Subclass 
      bInterfaceProtocol      0 None 
      iInterface              4 CMSIS-DAP 
        HID Device Descriptor: 
          bLength                 9 
          bDescriptorType        33 
          bcdHID               1.00 
          bCountryCode            0 Not supported 
          bNumDescriptors         1 
          bDescriptorType        34 Report 
          wDescriptorLength      33 
         Report Descriptors:  
           ** UNAVAILABLE ** 
      Endpoint Descriptor: 
        bLength                 7 
        bDescriptorType         5 
        bEndpointAddress     0x81  EP 1 IN 
        bmAttributes            3 
          Transfer Type            Interrupt 
          Synch Type               None 
          Usage Type               Data 
        wMaxPacketSize     0x0040  1x 64 bytes 
        bInterval               1 
      Endpoint Descriptor: 
        bLength                 7 
        bDescriptorType         5 
        bEndpointAddress     0x01  EP 1 OUT 
        bmAttributes            3 
          Transfer Type            Interrupt 
          Synch Type               None 
          Usage Type               Data 
        wMaxPacketSize     0x0040  1x 64 bytes 
        bInterval               1 
Device Status:     0x0000 
  (Bus Powered) 

我尝试使用 Wine 来做到这一点,但这是不可能的。至少现在我不再需要Windows了。

请您参考如下方法:

0.8.0-dev-00175-g8b7acca-dirty 这看起来不像官方的 OpenOCD。你从哪里得到的?

注意:您的版本应该是0.9.0,而不是'dirty'

您的 OpenOCD 版本可能存在 CMSIS-DAP 问题。 我强烈建议您从这里克隆当前的 HEAD:

git clone git://git.code.sf.net/p/openocd/code openocd 

(请记住在克隆后执行 ./configure ... 之前执行 ./bootstrap)

-或从Freddie Chopin's site下载如果您在 Windows 下运行它。

sudo openocd 这里也有问题。您不必每次使用 OpenOCD 时都必须“sudo”。

无论如何,你应该能够使用JTAG(LPC3141似乎太旧了,不支持SWD)。