[update] unused stlinkv2 commands
authorFabien Le Mentec <texane@gmail.com>
Sat, 15 Oct 2011 22:21:35 +0000 (17:21 -0500)
committerFabien Le Mentec <texane@gmail.com>
Sat, 15 Oct 2011 22:21:35 +0000 (17:21 -0500)
src/stlink-common.h
src/stlink-usb.c

index 237aa66d5950b02cf6eae771b652cee2f7de7c76..6110875fbc51dae132ebaedfe69c10e6196ec4ed 100644 (file)
@@ -18,7 +18,7 @@ extern "C" {
     // Max data transfer size.
     // 6kB = max mem32_read block, 8kB sram
     //#define Q_BUF_LEN        96
-#define Q_BUF_LEN      1024 * 100
+#define Q_BUF_LEN                      (1024 * 100)
 
     // st-link vendor cmd's
 #define USB_ST_VID                     0x0483
index 9675d37f671c8cf5c4e4a75cac7e9a13d531342d..6eb456c88011d4f5687c69a696aac7c8751eb4df 100644 (file)
@@ -414,6 +414,9 @@ void _stlink_usb_read_mem32(stlink_t *sl, uint32_t addr, uint16_t len) {
     stlink_print_data(sl);
 }
 
+
+#if 1 /* stlinkv1 */
+
 void _stlink_usb_read_all_regs(stlink_t *sl, reg *regp) {
     struct stlink_libusb * const slu = sl->backend_data;
     unsigned char* const buf = sl->q_buf;
@@ -448,6 +451,41 @@ void _stlink_usb_read_all_regs(stlink_t *sl, reg *regp) {
     DD(sl, "rw2        = 0x%08x\n", read_uint32(sl->q_buf, 80));
 }
 
+#else /* stlinkv2 */
+
+static void _stlink_usb_read_all_regs(stlink_t *sl, reg *regp) {
+    struct stlink_libusb * const slu = sl->backend_data;
+    unsigned char* const buf = sl->q_buf;
+    unsigned char* const cmd_buf = sl->c_buf;
+    ssize_t size;
+    int i;
+
+#define STLINK_JTAG_COMMAND 0xf2
+#define STLINK_JTAG_READALLREGS2 0x3a
+    memset(cmd_buf, 0, STLINK_CMD_SIZE);
+    cmd_buf[0] = STLINK_JTAG_COMMAND;
+    cmd_buf[1] = STLINK_JTAG_READALLREGS2;
+    size = send_recv(slu, cmd_buf, STLINK_CMD_SIZE, buf, 84);
+
+    if (size == -1) {
+        printf("[!] send_recv\n");
+        return;
+    }
+
+    sl->q_len = (size_t) size;
+
+    for(i=0; i<16; i++)
+      regp->r[i]= read_uint32(sl->q_buf, i*4);
+
+    regp->xpsr       = read_uint32(sl->q_buf, 64);
+    regp->main_sp    = read_uint32(sl->q_buf, 68);
+    regp->process_sp = read_uint32(sl->q_buf, 72);
+    regp->rw         = read_uint32(sl->q_buf, 76);
+    regp->rw2        = read_uint32(sl->q_buf, 80);
+}
+
+#endif /* stlinkv1 */
+
 void _stlink_usb_read_reg(stlink_t *sl, int r_idx, reg *regp) {
     struct stlink_libusb * const slu = sl->backend_data;
     unsigned char* const buf = sl->q_buf;
@@ -490,6 +528,9 @@ void _stlink_usb_read_reg(stlink_t *sl, int r_idx, reg *regp) {
     }
 }
 
+
+#if 1 /* stlinkv1 */
+
 void _stlink_usb_write_reg(stlink_t *sl, uint32_t reg, int idx) {
     struct stlink_libusb * const slu = sl->backend_data;
     unsigned char* const buf = sl->q_buf;
@@ -510,6 +551,32 @@ void _stlink_usb_write_reg(stlink_t *sl, uint32_t reg, int idx) {
     stlink_print_data(sl);
 }
 
+#else /* stlinkv2 */
+
+void _stlink_usb_write_reg(stlink_t *sl, uint32_t reg, int idx) {
+    struct stlink_libusb * const slu = sl->backend_data;
+    unsigned char* const buf = sl->q_buf;
+    unsigned char *cmd_buf = sl->c_buf;
+    ssize_t size;
+
+#define STLINK_JTAG_WRITEREG2 0x34
+    memset(cmd_buf, 0, STLINK_CMD_SIZE);
+    cmd_buf[0] = STLINK_JTAG_COMMAND;
+    cmd_buf[1] = STLINK_JTAG_WRITEREG2;
+    cmd_buf[2] = idx;
+    write_uint32(cmd_buf + 3, reg);
+    size = send_recv(slu, cmd_buf, STLINK_CMD_SIZE, buf, 2);
+    if (size == -1) {
+        printf("[!] send_recv\n");
+        return;
+    }
+    sl->q_len = (size_t) size;
+    stlink_print_data(sl);
+}
+
+#endif /* stlinkv1 */
+
+
 stlink_backend_t _stlink_usb_backend = {
     _stlink_usb_close,
     _stlink_usb_exit_debug_mode,