assert(handle != NULL);
- if (h->st_mode == STLINK_MODE_DEBUG_SWIM) {
- res = stlink_usb_mode_enter(handle, h->st_mode);
- if (res != ERROR_OK)
- return TARGET_UNKNOWN;
-
- res = stlink_swim_resync(handle);
- if (res != ERROR_OK)
- return TARGET_UNKNOWN;
-
- return ERROR_OK;
- }
-
if (h->reconnect_pending) {
LOG_INFO("Previous state query failed, trying to reconnect");
res = stlink_usb_mode_enter(handle, h->st_mode);
assert(handle != NULL);
- if (h->st_mode == STLINK_MODE_DEBUG_SWIM)
- return stlink_swim_generate_rst(handle);
-
stlink_usb_init_buffer(handle, h->rx_ep, 2);
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
if (count < bytes_remaining)
bytes_remaining = count;
- if (h->st_mode == STLINK_MODE_DEBUG_SWIM) {
- retval = stlink_swim_readbytes(handle, addr, bytes_remaining, buffer);
- if (retval != ERROR_OK)
- return retval;
- } else
/*
* all stlink support 8/32bit memory read/writes and only from
* stlink V2J26 there is support for 16 bit memory read/write.
if (count < bytes_remaining)
bytes_remaining = count;
- if (h->st_mode == STLINK_MODE_DEBUG_SWIM) {
- retval = stlink_swim_writebytes(handle, addr, bytes_remaining, buffer);
- if (retval != ERROR_OK)
- return retval;
- } else
/*
* all stlink support 8/32bit memory read/writes and only from
* stlink V2J26 there is support for 16 bit memory read/write.
static int stlink_swim_op_srst(void)
{
- return stlink_usb_reset(stlink_dap_handle);
+ return stlink_swim_generate_rst(stlink_dap_handle);
}
static int stlink_swim_op_read_mem(uint32_t addr, uint32_t size,
uint32_t count, uint8_t *buffer)
{
- return stlink_usb_read_mem(stlink_dap_handle, addr, size, count, buffer);
+ int retval;
+ uint32_t bytes_remaining;
+
+ LOG_DEBUG_IO("read at 0x%08x len %d*0x%08x", addr, size, count);
+ count *= size;
+
+ while (count) {
+ bytes_remaining = (count > STLINK_DATA_SIZE) ? STLINK_DATA_SIZE : count;
+ retval = stlink_swim_readbytes(stlink_dap_handle, addr, bytes_remaining, buffer);
+ if (retval != ERROR_OK)
+ return retval;
+
+ buffer += bytes_remaining;
+ addr += bytes_remaining;
+ count -= bytes_remaining;
+ }
+
+ return ERROR_OK;
}
static int stlink_swim_op_write_mem(uint32_t addr, uint32_t size,
uint32_t count, const uint8_t *buffer)
{
- return stlink_usb_write_mem(stlink_dap_handle, addr, size, count, buffer);
+ int retval;
+ uint32_t bytes_remaining;
+
+ LOG_DEBUG_IO("write at 0x%08x len %d*0x%08x", addr, size, count);
+ count *= size;
+
+ while (count) {
+ bytes_remaining = (count > STLINK_DATA_SIZE) ? STLINK_DATA_SIZE : count;
+ retval = stlink_swim_writebytes(stlink_dap_handle, addr, bytes_remaining, buffer);
+ if (retval != ERROR_OK)
+ return retval;
+
+ buffer += bytes_remaining;
+ addr += bytes_remaining;
+ count -= bytes_remaining;
+ }
+
+ return ERROR_OK;
}
static int stlink_swim_op_reconnect(void)
{
- return stlink_usb_state(stlink_dap_handle);
+ int retval;
+
+ retval = stlink_usb_mode_enter(stlink_dap_handle, STLINK_MODE_DEBUG_SWIM);
+ if (retval != ERROR_OK)
+ return retval;
+
+ return stlink_swim_resync(stlink_dap_handle);
}
static int stlink_dap_config_trace(bool enabled,