Browse Source

stlink: add stlink_api cmd

This enables the manual selection of the stlink api version.

Change-Id: I0ec8c5b0a101b6456f426d2fec65971da56db4e7
Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-on: http://openocd.zylin.com/617
Tested-by: jenkins
Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
Reviewed-by: Xiaofan <xiaofanc@gmail.com>
tags/v0.6.0-rc1
Spencer Oliver 10 years ago
parent
commit
61672009c4
4 changed files with 57 additions and 3 deletions
  1. +20
    -0
      doc/openocd.texi
  2. +12
    -2
      src/jtag/drivers/stlink_usb.c
  3. +23
    -1
      src/jtag/stlink/stlink_interface.c
  4. +2
    -0
      src/jtag/stlink/stlink_interface.h

+ 20
- 0
doc/openocd.texi View File

@@ -2671,6 +2671,26 @@ which are not currently documented here.

@deffn {Interface Driver} {stlink}
ST Micro ST-LINK adapter.

@deffn {Config Command} {stlink_device_desc} description
Currently Not Supported.
@end deffn

@deffn {Config Command} {stlink_serial} serial
Currently Not Supported.
@end deffn

@deffn {Config Command} {stlink_layout} (@option{sg}|@option{usb})
Specifies the stlink layout to use.
@end deffn

@deffn {Config Command} {stlink_vid_pid} vid pid
The vendor ID and product ID of the STLINK device.
@end deffn

@deffn {Config Command} {stlink_api} api_level
Manually sets the stlink api used, valid options are 1 or 2.
@end deffn
@end deffn

@deffn {Interface Driver} {ZY1000}


+ 12
- 2
src/jtag/drivers/stlink_usb.c View File

@@ -48,7 +48,7 @@
#define STLINK_CMD_SIZE_V1 (10)

enum stlink_jtag_api_version {
STLINK_JTAG_API_V1 = 0,
STLINK_JTAG_API_V1 = 1,
STLINK_JTAG_API_V2,
};

@@ -1132,6 +1132,7 @@ static int stlink_usb_open(struct stlink_interface_param_s *param, void **fd)
{
int err;
struct stlink_usb_handle_s *h;
enum stlink_jtag_api_version api;

LOG_DEBUG("stlink_usb_open");

@@ -1213,8 +1214,17 @@ static int stlink_usb_open(struct stlink_interface_param_s *param, void **fd)
return err;
}

api = h->version.jtag_api_max;

/* check that user has not requested certain api version
* and if they have check it is supported */
if ((param->api != 0) && (param->api <= h->version.jtag_api_max)) {
api = param->api;
LOG_INFO("using stlink api v%d", api);
}

/* set the used jtag api, this will default to the newest supported version */
h->jtag_api = h->version.jtag_api_max;
h->jtag_api = api;

/* initialize the debug hardware */
err = stlink_usb_init_mode(h);


+ 23
- 1
src/jtag/stlink/stlink_interface.c View File

@@ -34,7 +34,7 @@

#include <target/target.h>

static struct stlink_interface_s stlink_if = { {0, 0, 0, 0, 0}, 0, 0 };
static struct stlink_interface_s stlink_if = { {0, 0, 0, 0, 0, 0}, 0, 0 };

int stlink_interface_open(enum stlink_transports tr)
{
@@ -200,6 +200,21 @@ COMMAND_HANDLER(stlink_interface_handle_vid_pid_command)
return ERROR_OK;
}

COMMAND_HANDLER(stlink_interface_handle_api_command)
{
if (CMD_ARGC != 1)
return ERROR_COMMAND_SYNTAX_ERROR;

unsigned new_api;
COMMAND_PARSE_NUMBER(uint, CMD_ARGV[0], new_api);
if ((new_api == 0) || (new_api > 2))
return ERROR_COMMAND_SYNTAX_ERROR;

stlink_if.param.api = new_api;

return ERROR_OK;
}

static const struct command_registration stlink_interface_command_handlers[] = {
{
.name = "stlink_device_desc",
@@ -229,6 +244,13 @@ static const struct command_registration stlink_interface_command_handlers[] = {
.help = "the vendor and product ID of the STLINK device",
.usage = "(vid pid)* ",
},
{
.name = "stlink_api",
.handler = &stlink_interface_handle_api_command,
.mode = COMMAND_CONFIG,
.help = "set the desired stlink api level",
.usage = "api version 1 or 2",
},
COMMAND_REGISTRATION_DONE
};



+ 2
- 0
src/jtag/stlink/stlink_interface.h View File

@@ -38,6 +38,8 @@ struct stlink_interface_param_s {
/** */
uint16_t pid;
/** */
unsigned api;
/** */
enum stlink_transports transport;
};



Loading…
Cancel
Save