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>
This commit is contained in:
parent
18df479f0a
commit
61672009c4
|
@ -2671,6 +2671,26 @@ which are not currently documented here.
|
||||||
|
|
||||||
@deffn {Interface Driver} {stlink}
|
@deffn {Interface Driver} {stlink}
|
||||||
ST Micro ST-LINK adapter.
|
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
|
@end deffn
|
||||||
|
|
||||||
@deffn {Interface Driver} {ZY1000}
|
@deffn {Interface Driver} {ZY1000}
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
#define STLINK_CMD_SIZE_V1 (10)
|
#define STLINK_CMD_SIZE_V1 (10)
|
||||||
|
|
||||||
enum stlink_jtag_api_version {
|
enum stlink_jtag_api_version {
|
||||||
STLINK_JTAG_API_V1 = 0,
|
STLINK_JTAG_API_V1 = 1,
|
||||||
STLINK_JTAG_API_V2,
|
STLINK_JTAG_API_V2,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1132,6 +1132,7 @@ static int stlink_usb_open(struct stlink_interface_param_s *param, void **fd)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct stlink_usb_handle_s *h;
|
struct stlink_usb_handle_s *h;
|
||||||
|
enum stlink_jtag_api_version api;
|
||||||
|
|
||||||
LOG_DEBUG("stlink_usb_open");
|
LOG_DEBUG("stlink_usb_open");
|
||||||
|
|
||||||
|
@ -1213,8 +1214,17 @@ static int stlink_usb_open(struct stlink_interface_param_s *param, void **fd)
|
||||||
return err;
|
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 */
|
/* 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 */
|
/* initialize the debug hardware */
|
||||||
err = stlink_usb_init_mode(h);
|
err = stlink_usb_init_mode(h);
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
#include <target/target.h>
|
#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)
|
int stlink_interface_open(enum stlink_transports tr)
|
||||||
{
|
{
|
||||||
|
@ -200,6 +200,21 @@ COMMAND_HANDLER(stlink_interface_handle_vid_pid_command)
|
||||||
return ERROR_OK;
|
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[] = {
|
static const struct command_registration stlink_interface_command_handlers[] = {
|
||||||
{
|
{
|
||||||
.name = "stlink_device_desc",
|
.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",
|
.help = "the vendor and product ID of the STLINK device",
|
||||||
.usage = "(vid pid)* ",
|
.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
|
COMMAND_REGISTRATION_DONE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,8 @@ struct stlink_interface_param_s {
|
||||||
/** */
|
/** */
|
||||||
uint16_t pid;
|
uint16_t pid;
|
||||||
/** */
|
/** */
|
||||||
|
unsigned api;
|
||||||
|
/** */
|
||||||
enum stlink_transports transport;
|
enum stlink_transports transport;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue