START,0001,15:09:38.756,,,,,,,,,,,,\r
Create,0002,15:12:32.934,174.174733 s,,Create,stvp.exe,,,,FFFFFA80074F4960h,,WinUsb,FFFFFA8006FD8320h,\r
Create,0003-0002,15:12:32.935,174.174759 s,26 us,Create,stvp.exe,,,,FFFFFA80074F4960h,,WinUsb,FFFFFA8006FD8320h,Success\r
+\r
+\r
URB,0004,15:12:32.935,174.174880 s,,Bulk or Interrupt Transfer,16 bytes data,F1 80 00 00 00 00 00 00...,out,01:00:02,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA8006FD8320h,,F1 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00\r
URB,0005-0004,15:12:32.936,174.176236 s,1.356 ms,Bulk or Interrupt Transfer,16 bytes buffer,,out,01:00:02,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA8006FD8320h,Success (Success)\r
URB,0006,15:12:32.936,174.176269 s,,Bulk or Interrupt Transfer,64 bytes buffer,,in,01:00:81,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA80072A3010h,\r
URB,0007-0006,15:12:32.938,174.178222 s,1.953 ms,Bulk or Interrupt Transfer,6 bytes data,23 80 83 04 48 37,in,01:00:81,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA80072A3010h,Success (Success),23 80 83 04 48 37\r
+\r
+\r
URB,0008,15:12:32.938,174.178249 s,,Bulk or Interrupt Transfer,16 bytes data,F5 00 00 00 00 00 00 00...,out,01:00:02,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA8006FD8320h,,F5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\r
URB,0009-0008,15:12:32.939,174.179221 s,972 us,Bulk or Interrupt Transfer,16 bytes buffer,,out,01:00:02,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA8006FD8320h,Success (Success)\r
URB,0010,15:12:32.939,174.179239 s,,Bulk or Interrupt Transfer,64 bytes buffer,,in,01:00:81,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA80072A3010h,\r
URB,0011-0010,15:12:32.941,174.181221 s,1.982 ms,Bulk or Interrupt Transfer,2 bytes data,00 01,in,01:00:81,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA80072A3010h,Success (Success),00 01\r
+\r
+\r
URB,0012,15:12:32.941,174.181243 s,,Bulk or Interrupt Transfer,16 bytes data,F3 07 00 00 00 00 00 00...,out,01:00:02,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA8006FD8320h,,F3 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00\r
URB,0013-0012,15:12:32.942,174.182221 s,978 us,Bulk or Interrupt Transfer,16 bytes buffer,,out,01:00:02,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA8006FD8320h,Success (Success)\r
+\r
URB,0014,15:12:32.943,174.182760 s,,Bulk or Interrupt Transfer,16 bytes data,F2 30 A3 00 00 00 00 00...,out,01:00:02,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA8006FD8320h,,F2 30 A3 00 00 00 00 00 00 00 00 00 00 00 00 00\r
URB,0015-0014,15:12:32.944,174.184221 s,1.462 ms,Bulk or Interrupt Transfer,16 bytes buffer,,out,01:00:02,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA8006FD8320h,Success (Success)\r
URB,0016,15:12:32.944,174.184238 s,,Bulk or Interrupt Transfer,64 bytes buffer,,in,01:00:81,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA80072A3010h,\r
URB,0017-0016,15:12:32.945,174.185221 s,982 us,Bulk or Interrupt Transfer,2 bytes data,80 00,in,01:00:81,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA80072A3010h,Success (Success),80 00\r
+\r
URB,0018,15:12:32.945,174.185242 s,,Bulk or Interrupt Transfer,16 bytes data,F2 32 00 00 00 00 00 00...,out,01:00:02,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA8006FD8320h,,F2 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00\r
URB,0019-0018,15:12:32.946,174.186221 s,979 us,Bulk or Interrupt Transfer,16 bytes buffer,,out,01:00:02,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA8006FD8320h,Success (Success)\r
URB,0020,15:12:32.946,174.186239 s,,Bulk or Interrupt Transfer,64 bytes buffer,,in,01:00:81,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA80072A3010h,\r
URB,0021-0020,15:12:32.948,174.188221 s,1.982 ms,Bulk or Interrupt Transfer,2 bytes data,80 00,in,01:00:81,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA80072A3010h,Success (Success),80 00\r
+\r
URB,0022,15:12:32.948,174.188240 s,,Bulk or Interrupt Transfer,16 bytes data,F2 35 F0 ED 00 E0 03 00...,out,01:00:02,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA8006FD8320h,,F2 35 F0 ED 00 E0 03 00 5F A0 00 00 00 00 00 00\r
URB,0023-0022,15:12:32.949,174.189220 s,980 us,Bulk or Interrupt Transfer,16 bytes buffer,,out,01:00:02,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA8006FD8320h,Success (Success)\r
URB,0024,15:12:32.949,174.189237 s,,Bulk or Interrupt Transfer,64 bytes buffer,,in,01:00:81,FFFFFA800750D060h,USBPDO-10,usbhub,FFFFFA80072A3010h,\r
if (submit_wait(handle->req_trans)) return -1;
+ /* send_only */
+ if (rxsize == 0) return 0;
+
/* read the response */
libusb_fill_bulk_transfer
}
+static inline int send_only
+(struct stlink_libusb* handle, unsigned char* txbuf, size_t txsize)
+{
+ return send_recv(handle, txbuf, txsize, NULL, 0);
+}
+
+
/* stlink layer independant interface */
enum transport_type
return -1;
}
+ /* mode = (int)read_uint16(buf, 0); */
mode = (int)buf[0];
#if 1 /* DEBUG */
ssize_t size;
memset(buf, 0, sizeof(sl->q_buf));
+ buf[0] = STLINK_DEBUG_COMMAND;
+ buf[1] = STLINK_DEBUG_READCOREID;
- buf[0] = STLINK_DEBUG_READCOREID;
-
- size = send_recv(slu, buf, sizeof(sl->q_buf), buf, sizeof(sl->q_buf));
+ size = send_recv(slu, buf, 16, buf, sizeof(sl->q_buf));
if (size == -1)
{
printf("[!] send_recv\n");
memset(buf, 0, sizeof(sl->q_buf));
- buf[0] = STLINK_DEBUG_GETSTATUS;
+ buf[0] = STLINK_DEBUG_COMMAND;
+ buf[1] = STLINK_DEBUG_GETSTATUS;
- size = send_recv(slu, buf, sizeof(sl->q_buf), buf, sizeof(sl->q_buf));
+ size = send_recv(slu, buf, 16, buf, sizeof(sl->q_buf));
if (size == -1)
{
printf("[!] send_recv\n");
memset(buf, 0, sizeof(sl->q_buf));
- buf[0] = STLINK_DEBUG_ENTER;
- buf[1] = STLINK_DEBUG_ENTER_SWD;
+ buf[0] = STLINK_DEBUG_COMMAND;
+ buf[1] = 0x30; /* magic byte */
+ buf[2] = STLINK_DEBUG_ENTER_JTAG;
- size = send_recv(slu, buf, sizeof(sl->q_buf), buf, sizeof(sl->q_buf));
+ size = send_recv(slu, buf, 16, buf, sizeof(sl->q_buf));
if (size == -1)
{
printf("[!] send_recv\n");
ssize_t size;
memset(buf, 0, sizeof(sl->q_buf));
-
buf[0] = STLINK_DFU_COMMAND;
buf[1] = STLINK_DFU_EXIT;
- size = send_recv(slu, buf, sizeof(sl->q_buf), buf, sizeof(sl->q_buf));
+ size = send_only(slu, buf, 16);
if (size == -1)
{
printf("[!] send_recv\n");
ssize_t size;
memset(buf, 0, sizeof(sl->q_buf));
+ buf[0] = STLINK_DEBUG_COMMAND;
+ buf[1] = STLINK_DEBUG_RESETSYS;
+
+ size = send_recv(slu, buf, 16, buf, sizeof(sl->q_buf));
+ if (size == -1)
+ {
+ printf("[!] send_recv\n");
+ return ;
+ }
+
+ break ;
+ }
+#endif /* CONFIG_USE_LIBUSB */
+
+ default: break ;
+ }
+}
+
+void stlink_step(struct stlink *sl)
+{
+ switch (sl->tt)
+ {
+#if CONFIG_USE_LIBUSB
+ case TRANSPORT_TYPE_LIBUSB:
+ {
+ struct stlink_libusb* const slu = &sl->transport.libusb;
+ unsigned char* const buf = sl->q_buf;
+ ssize_t size;
- buf[0] = STLINK_DEBUG_RESETSYS;
+ memset(buf, 0, sizeof(sl->q_buf));
+ buf[0] = STLINK_DEBUG_COMMAND;
+ buf[1] = STLINK_DEBUG_STEPCORE;
- size = send_recv(slu, buf, 2, buf, sizeof(sl->q_buf));
+ size = send_recv(slu, buf, 16, buf, sizeof(sl->q_buf));
if (size == -1)
{
printf("[!] send_recv\n");
}
}
-void stlink_enter_jtag_mode(struct stlink *sl)
+void stlink_run(struct stlink *sl)
{
+ switch (sl->tt)
+ {
+#if CONFIG_USE_LIBUSB
+ case TRANSPORT_TYPE_LIBUSB:
+ {
+ struct stlink_libusb* const slu = &sl->transport.libusb;
+ unsigned char* const buf = sl->q_buf;
+ ssize_t size;
+
+ memset(buf, 0, sizeof(sl->q_buf));
+ buf[0] = STLINK_DEBUG_COMMAND;
+ buf[1] = STLINK_DEBUG_RUNCORE;
+
+ size = send_recv(slu, buf, 16, buf, sizeof(sl->q_buf));
+ if (size == -1)
+ {
+ printf("[!] send_recv\n");
+ return ;
+ }
+
+ break ;
+ }
+#endif /* CONFIG_USE_LIBUSB */
+
+ default: break ;
+ }
}
void stlink_exit_debug_mode(struct stlink *sl)
{
+ switch (sl->tt)
+ {
+#if CONFIG_USE_LIBUSB
+ case TRANSPORT_TYPE_LIBUSB:
+ {
+ struct stlink_libusb* const slu = &sl->transport.libusb;
+ unsigned char* const buf = sl->q_buf;
+ ssize_t size;
+
+ memset(buf, 0, sizeof(sl->q_buf));
+ buf[0] = STLINK_DEBUG_COMMAND;
+ buf[1] = STLINK_DEBUG_EXIT;
+
+ size = send_only(slu, buf, 16);
+ if (size == -1)
+ {
+ printf("[!] send_only\n");
+ return ;
+ }
+
+ break ;
+ }
+#endif /* CONFIG_USE_LIBUSB */
+
+ default: break ;
+ }
}
printf("-- version\n");
stlink_version(sl);
- printf("-- exit_dfu_mode\n");
- stlink_exit_dfu_mode(sl);
+ if (stlink_current_mode(sl) == STLINK_DEV_DFU_MODE)
+ {
+ printf("-- exit_dfu_mode\n");
+ stlink_exit_dfu_mode(sl);
+ }
printf("-- enter_swd_mode\n");
stlink_enter_swd_mode(sl);
printf("-- status\n");
stlink_status(sl);
+ printf("-- step\n");
+ stlink_step(sl);
+ getchar();
+
+ printf("-- run\n");
+ stlink_run(sl);
+
+ printf("-- exit_debug_mode\n");
+ stlink_exit_debug_mode(sl);
+
stlink_close(sl);
}
stlink_finalize(TRANSPORT_TYPE_LIBUSB);