From 37f3d97e05100d5db588f00224955a45285bfb97 Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Thu, 13 Oct 2011 16:33:29 +0200 Subject: [PATCH] Implement _stlink_usb_write_mem32|8 Signed-off-by: Karl Palsson --- src/stlink-usb.c | 32 ++++++++++++++++++++++++++++---- src/test_usb.c | 21 ++++++++++++++++++--- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/src/stlink-usb.c b/src/stlink-usb.c index f2ee2bd..bc80e4d 100644 --- a/src/stlink-usb.c +++ b/src/stlink-usb.c @@ -171,13 +171,37 @@ void _stlink_usb_version(stlink_t *sl) { } void _stlink_usb_write_mem32(stlink_t *sl, uint32_t addr, uint16_t len) { - DD(sl, "oops! no write32 support yet, wanted to write %d bytes to %#x\n", - len, addr); + struct stlink_libusb * const slu = sl->backend_data; + unsigned char* const buf = sl->q_buf; + unsigned char *cmd_buf = sl->c_buf; + + memset(cmd_buf, 0, STLINK_CMD_SIZE); + cmd_buf[0] = STLINK_DEBUG_COMMAND; + cmd_buf[1] = STLINK_DEBUG_WRITEMEM_32BIT; + write_uint32(cmd_buf + 2, addr); + write_uint16(cmd_buf + 6, len); + send_only(slu, cmd_buf, STLINK_CMD_SIZE); + + assert((len & 3) == 0); + stlink_print_data(sl); + send_only(slu, buf, len); + } void _stlink_usb_write_mem8(stlink_t *sl, uint32_t addr, uint16_t len) { - DD(sl, "oops! no write8 support yet, wanted to write %d bytes to %#x\n", - len, addr); + struct stlink_libusb * const slu = sl->backend_data; + unsigned char* const buf = sl->q_buf; + unsigned char *cmd_buf = sl->c_buf; + + memset(cmd_buf, 0, STLINK_CMD_SIZE); + cmd_buf[0] = STLINK_DEBUG_COMMAND; + cmd_buf[1] = STLINK_DEBUG_WRITEMEM_8BIT; + write_uint32(cmd_buf + 2, addr); + write_uint16(cmd_buf + 6, len); + send_only(slu, cmd_buf, STLINK_CMD_SIZE); + + stlink_print_data(sl); + send_only(slu, buf, len); } diff --git a/src/test_usb.c b/src/test_usb.c index cc8ae72..e681aed 100644 --- a/src/test_usb.c +++ b/src/test_usb.c @@ -40,11 +40,26 @@ int main(int ac, char** av) { stlink_read_mem32(sl, CM3_REG_FP_CTRL, 4); // no idea what reg this is.. */ - /* stlink_read_mem32(sl, 0xe000ed90, 4); + // stlink_read_mem32(sl, 0xe000ed90, 4); // no idea what register this is... - /* stlink_read_mem32(sl, 0xe000edf0, 4); + // stlink_read_mem32(sl, 0xe000edf0, 4); // offset 0xC into TIM11 register? TIMx_DIER? - /* stlink_read_mem32(sl, 0x4001100c, 4); */ + // stlink_read_mem32(sl, 0x4001100c, 4); */ + + write_uint32(sl->q_buf,0x01234567); + stlink_write_mem32(sl,0x200000a8,4); + write_uint32(sl->q_buf,0x89abcdef); + stlink_write_mem32(sl,0x200000ac, 4); + stlink_read_mem32(sl, 0x200000a8, 4); + stlink_read_mem32(sl, 0x200000ac, 4); + + write_uint32(sl->q_buf,0x01234567); + stlink_write_mem8(sl,0x200001a8,3); + write_uint32(sl->q_buf,0x89abcdef); + stlink_write_mem8(sl, 0x200001ac, 3); + stlink_read_mem32(sl, 0x200001a8, 4); + stlink_read_mem32(sl, 0x200001ac, 4); + printf("-- status\n"); stlink_status(sl); -- 2.30.2