jtag/stlink: add STLINK-V3PWR support

STLINK-V3PWR is both a standalone debugger probe compatible with
STLINK-V3 and a source measurement unit (SMU).
Link: http://www.st.com/stlink-v3pwr

This code adds support for the debugger probe functionality.

Change-Id: Ib056e55722528f922c5574bb6fbf77e2f2b2b0c1
Signed-off-by: Laurent LEMELE <laurent.lemele@st.com>
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/7755
Tested-by: jenkins
This commit is contained in:
Laurent LEMELE 2022-12-13 16:12:08 +01:00 committed by Antonio Borneo
parent a27907aed1
commit 4a96776178
5 changed files with 53 additions and 6 deletions

View File

@ -99,6 +99,8 @@ ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", MODE="660", GROUP="plugdev",
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3754", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3754", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3755", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3757", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Cypress SuperSpeed Explorer Kit # Cypress SuperSpeed Explorer Kit
ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="0007", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="0007", MODE="660", GROUP="plugdev", TAG+="uaccess"

View File

@ -463,6 +463,12 @@ They only work with STMicroelectronics chips, notably STM32 and STM8.
@item @b{STLINK-V3} @item @b{STLINK-V3}
@* This is available standalone and as part of some kits. @* This is available standalone and as part of some kits.
@* Link: @url{http://www.st.com/stlink-v3} @* Link: @url{http://www.st.com/stlink-v3}
@item @b{STLINK-V3PWR}
@* This is available standalone.
Beside the debugger functionality, the probe includes a SMU (source
measurement unit) aimed at analyzing power consumption during code
execution. The SMU is not supported by OpenOCD.
@* Link: @url{http://www.st.com/stlink-v3pwr}
@end itemize @end itemize
For info the original ST-LINK enumerates using the mass storage usb class; however, For info the original ST-LINK enumerates using the mass storage usb class; however,
@ -3184,7 +3190,7 @@ passed as is to the underlying adapter layout handler.
@anchor{st_link_dap_interface} @anchor{st_link_dap_interface}
@deffn {Interface Driver} {st-link} @deffn {Interface Driver} {st-link}
This is a driver that supports STMicroelectronics adapters ST-LINK/V2 This is a driver that supports STMicroelectronics adapters ST-LINK/V2
(from firmware V2J24) and STLINK-V3, thanks to a new API that provides (from firmware V2J24), STLINK-V3 and STLINK-V3PWR, thanks to a new API that provides
directly access the arm ADIv5 DAP. directly access the arm ADIv5 DAP.
The new API provide access to multiple AP on the same DAP, but the The new API provide access to multiple AP on the same DAP, but the

View File

@ -84,6 +84,8 @@
#define STLINK_V3S_PID (0x374F) #define STLINK_V3S_PID (0x374F)
#define STLINK_V3_2VCP_PID (0x3753) #define STLINK_V3_2VCP_PID (0x3753)
#define STLINK_V3E_NO_MSD_PID (0x3754) #define STLINK_V3E_NO_MSD_PID (0x3754)
#define STLINK_V3P_USBLOADER_PID (0x3755)
#define STLINK_V3P_PID (0x3757)
/* /*
* ST-Link/V1, ST-Link/V2 and ST-Link/V2.1 are full-speed USB devices and * ST-Link/V1, ST-Link/V2 and ST-Link/V2.1 are full-speed USB devices and
@ -1297,8 +1299,8 @@ static int stlink_usb_version(void *handle)
break; break;
} }
/* STLINK-V3 requires a specific command */ /* STLINK-V3 & STLINK-V3P require a specific command */
if (v == 3 && x == 0 && y == 0) { if (v >= 3 && x == 0 && y == 0) {
stlink_usb_init_buffer(handle, h->rx_ep, 16); stlink_usb_init_buffer(handle, h->rx_ep, 16);
h->cmdbuf[h->cmdidx++] = STLINK_APIV3_GET_VERSION_EX; h->cmdbuf[h->cmdidx++] = STLINK_APIV3_GET_VERSION_EX;
@ -1414,6 +1416,41 @@ static int stlink_usb_version(void *handle)
if (h->version.jtag >= 6) if (h->version.jtag >= 6)
flags |= STLINK_F_HAS_RW8_512BYTES; flags |= STLINK_F_HAS_RW8_512BYTES;
break;
case 4:
/* STLINK-V3P use api-v3 */
h->version.jtag_api = STLINK_JTAG_API_V3;
/* STLINK-V3P is a superset of ST-LINK/V3 */
/* API for trace */
/* API for target voltage */
flags |= STLINK_F_HAS_TRACE;
/* preferred API to get last R/W status */
flags |= STLINK_F_HAS_GETLASTRWSTATUS2;
/* API to access DAP registers */
flags |= STLINK_F_HAS_DAP_REG;
/* API to read/write memory at 16 bit */
/* API to write memory without address increment */
flags |= STLINK_F_HAS_MEM_16BIT;
/* API required to init AP before any AP access */
flags |= STLINK_F_HAS_AP_INIT;
/* API required to return proper error code on close AP */
flags |= STLINK_F_FIX_CLOSE_AP;
/* Banked regs (DPv1 & DPv2) support */
/* API to read memory without address increment */
/* Memory R/W supports CSW */
flags |= STLINK_F_HAS_DPBANKSEL;
/* 8bit read/write max packet size 512 bytes */
flags |= STLINK_F_HAS_RW8_512BYTES;
break; break;
default: default:
break; break;
@ -3402,6 +3439,8 @@ static int stlink_usb_usb_open(void *handle, struct hl_interface_param_s *param)
case STLINK_V3S_PID: case STLINK_V3S_PID:
case STLINK_V3_2VCP_PID: case STLINK_V3_2VCP_PID:
case STLINK_V3E_NO_MSD_PID: case STLINK_V3E_NO_MSD_PID:
case STLINK_V3P_USBLOADER_PID:
case STLINK_V3P_PID:
h->version.stlink = 3; h->version.stlink = 3;
h->tx_ep = STLINK_V2_1_TX_EP; h->tx_ep = STLINK_V2_1_TX_EP;
h->trace_ep = STLINK_V2_1_TRACE_EP; h->trace_ep = STLINK_V2_1_TRACE_EP;
@ -3820,7 +3859,7 @@ static int stlink_config_trace(void *handle, bool enabled,
return ERROR_FAIL; return ERROR_FAIL;
} }
unsigned int max_trace_freq = (h->version.stlink == 3) ? unsigned int max_trace_freq = (h->version.stlink >= 3) ?
STLINK_V3_TRACE_MAX_HZ : STLINK_TRACE_MAX_HZ; STLINK_V3_TRACE_MAX_HZ : STLINK_TRACE_MAX_HZ;
/* Only concern ourselves with the frequency if the STlink is processing it. */ /* Only concern ourselves with the frequency if the STlink is processing it. */

View File

@ -11,7 +11,7 @@
# #
adapter driver st-link adapter driver st-link
st-link vid_pid 0x0483 0x3744 0x0483 0x3748 0x0483 0x374b 0x0483 0x374d 0x0483 0x374e 0x0483 0x374f 0x0483 0x3752 0x0483 0x3753 0x0483 0x3754 st-link vid_pid 0x0483 0x3744 0x0483 0x3748 0x0483 0x374b 0x0483 0x374d 0x0483 0x374e 0x0483 0x374f 0x0483 0x3752 0x0483 0x3753 0x0483 0x3754 0x0483 0x3755 0x0483 0x3757
# transport select dapdirect_jtag # transport select dapdirect_jtag
# transport select dapdirect_swd # transport select dapdirect_swd

View File

@ -8,7 +8,7 @@
adapter driver hla adapter driver hla
hla_layout stlink hla_layout stlink
hla_device_desc "ST-LINK" hla_device_desc "ST-LINK"
hla_vid_pid 0x0483 0x3744 0x0483 0x3748 0x0483 0x374b 0x0483 0x374d 0x0483 0x374e 0x0483 0x374f 0x0483 0x3752 0x0483 0x3753 0x0483 0x3754 hla_vid_pid 0x0483 0x3744 0x0483 0x3748 0x0483 0x374b 0x0483 0x374d 0x0483 0x374e 0x0483 0x374f 0x0483 0x3752 0x0483 0x3753 0x0483 0x3754 0x0483 0x3755 0x0483 0x3757
# Optionally specify the serial number of ST-LINK/V2 usb device. ST-LINK/V2 # Optionally specify the serial number of ST-LINK/V2 usb device. ST-LINK/V2
# devices seem to have serial numbers with unreadable characters. ST-LINK/V2 # devices seem to have serial numbers with unreadable characters. ST-LINK/V2