]> git.sur5r.net Git - openocd/commitdiff
stlink: add stlink_api cmd
authorSpencer Oliver <spen@spen-soft.co.uk>
Fri, 4 May 2012 13:31:25 +0000 (14:31 +0100)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 14 May 2012 09:34:00 +0000 (09:34 +0000)
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>
doc/openocd.texi
src/jtag/drivers/stlink_usb.c
src/jtag/stlink/stlink_interface.c
src/jtag/stlink/stlink_interface.h

index 5733aa27b2ccccc0aa17b07697b9a3d71ae1a6b3..3134afdef618811559143f6f8da07f5b376303b8 100644 (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}
index 1de42efb92790a7e73a5fcc6e656e7c40d668931..b4944f56cd77e98ce3d125de7745bc6ab8a54c32 100644 (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);
index 389ab3fff5e0ecae0ec433d1e9a03447ce4ad6b3..379e68d46fdc793660f7c0825079c0ebf3e2e3a5 100644 (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
 };
 
index 4b6949e42f100d3a7c367813bd6fd519a018625d..ee2fefff199e0aa435380d3379a596c781a89774 100644 (file)
@@ -38,6 +38,8 @@ struct stlink_interface_param_s {
        /** */
        uint16_t pid;
        /** */
+       unsigned api;
+       /** */
        enum stlink_transports transport;
 };