Implement _stlink_usb_write_mem32|8
authorUwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
Thu, 13 Oct 2011 14:33:29 +0000 (16:33 +0200)
committerKarl Palsson <karlp@tweak.net.au>
Thu, 13 Oct 2011 19:25:02 +0000 (19:25 +0000)
Signed-off-by: Karl Palsson <karlp@tweak.net.au>
src/stlink-usb.c
src/test_usb.c

index f2ee2bd1d995a0077fa8edde6ce8fefbd1661cba..bc80e4d27d4e1d40cdc2bbfbe632f6521315911c 100644 (file)
@@ -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);
 }
 
 
index cc8ae7299dd7317ff3e569cfb1b4c728ddf5e6e9..e681aed697cb283a47b6163ac0e0686bad6fe32c 100644 (file)
@@ -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);