OpenOCD
buspirate.c
Go to the documentation of this file.
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 
3 /***************************************************************************
4  * Copyright (C) 2010 by Michal Demin *
5  * based on usbprog.c and arm-jtag-ew.c *
6  * Several fixes by R. Diez in 2013. *
7  ***************************************************************************/
8 
9 #ifdef HAVE_CONFIG_H
10 #include "config.h"
11 #endif
12 
13 #include <jtag/interface.h>
14 #include <jtag/swd.h>
15 #include <jtag/commands.h>
16 
17 #include <termios.h>
18 #include <fcntl.h>
19 #include <sys/ioctl.h>
20 
21 #undef DEBUG_SERIAL
22 /*#define DEBUG_SERIAL */
23 static int buspirate_execute_queue(struct jtag_command *cmd_queue);
24 static int buspirate_init(void);
25 static int buspirate_quit(void);
26 static int buspirate_reset(int trst, int srst);
27 
29 static void buspirate_state_move(void);
30 static void buspirate_path_move(unsigned int num_states, tap_state_t *path);
31 static void buspirate_runtest(unsigned int num_cycles);
32 static void buspirate_scan(bool ir_scan, enum scan_type type,
33  uint8_t *buffer, int scan_size, struct scan_command *command);
34 static void buspirate_stableclocks(unsigned int num_cycles);
35 
36 #define CMD_UNKNOWN 0x00
37 #define CMD_PORT_MODE 0x01
38 #define CMD_FEATURE 0x02
39 #define CMD_READ_ADCS 0x03
40 /*#define CMD_TAP_SHIFT 0x04 // old protocol */
41 #define CMD_TAP_SHIFT 0x05
42 #define CMD_ENTER_RWIRE 0x05
43 #define CMD_ENTER_OOCD 0x06
44 #define CMD_UART_SPEED 0x07
45 #define CMD_JTAG_SPEED 0x08
46 #define CMD_RAW_PERIPH 0x40
47 #define CMD_RAW_SPEED 0x60
48 #define CMD_RAW_MODE 0x80
49 
50 #define CMD_TAP_SHIFT_HEADER_LEN 3
51 
52 /* raw-wire mode configuration */
53 #define CMD_RAW_CONFIG_HIZ 0x00
54 #define CMD_RAW_CONFIG_3V3 0x08
55 #define CMD_RAW_CONFIG_2W 0x00
56 #define CMD_RAW_CONFIG_3W 0x04
57 #define CMD_RAW_CONFIG_MSB 0x00
58 #define CMD_RAW_CONFIG_LSB 0x02
59 
60 /* Not all OSes have this speed defined */
61 #if !defined(B1000000)
62 #define B1000000 0010010
63 #endif
64 
65 #define SHORT_TIMEOUT 1 /* Must be at least 1. */
66 #define NORMAL_TIMEOUT 10
67 
68 enum {
69  MODE_HIZ = 0,
70  MODE_JTAG = 1, /* push-pull outputs */
71  MODE_JTAG_OD = 2, /* open-drain outputs */
72 };
73 
74 enum {
75  FEATURE_LED = 0x01,
76  FEATURE_VREG = 0x02,
77  FEATURE_TRST = 0x04,
78  FEATURE_SRST = 0x08,
79  FEATURE_PULLUP = 0x10
80 };
81 
82 enum {
84  ACTION_ENABLE = 1
85 };
86 
87 enum {
89  SERIAL_FAST = 1
90 };
91 
92 enum {
96  SPEED_RAW_400_KHZ = 0x3
97 };
98 
99 /* SWD mode specific */
100 static bool swd_mode;
101 static int queued_retval;
102 static char swd_features;
103 
104 static int buspirate_fd = -1;
107 static int buspirate_vreg;
108 static int buspirate_pullup;
109 static char *buspirate_port;
110 
111 static enum tap_state last_tap_state = TAP_RESET;
112 
113 /* SWD interface */
114 static int buspirate_swd_init(void);
115 static void buspirate_swd_read_reg(uint8_t cmd, uint32_t *value, uint32_t ap_delay_clk);
116 static void buspirate_swd_write_reg(uint8_t cmd, uint32_t value, uint32_t ap_delay_clk);
117 static int buspirate_swd_switch_seq(enum swd_special_seq seq);
118 static int buspirate_swd_run_queue(void);
119 
120 /* TAP interface */
121 static void buspirate_tap_init(void);
122 static int buspirate_tap_execute(void);
123 static void buspirate_tap_append(int tms, int tdi);
124 static void buspirate_tap_append_scan(int length, uint8_t *buffer,
125  struct scan_command *command);
126 static void buspirate_tap_make_space(int scan, int bits);
127 
128 static void buspirate_set_feature(int, char, char);
129 static void buspirate_set_mode(int, char);
130 static void buspirate_set_speed(int, char);
131 
132 /* low level interface */
133 static void buspirate_bbio_enable(int);
134 static void buspirate_jtag_reset(int);
135 static unsigned char buspirate_jtag_command(int, uint8_t *, int);
136 static void buspirate_jtag_set_speed(int, char);
137 static void buspirate_jtag_set_mode(int, char);
138 static void buspirate_jtag_set_feature(int, char, char);
139 static void buspirate_jtag_get_adcs(int);
140 
141 /* low level two-wire interface */
142 static void buspirate_swd_set_speed(int, char);
143 static void buspirate_swd_set_feature(int, char, char);
144 static void buspirate_swd_set_mode(int, char);
145 
146 /* low level HW communication interface */
147 static int buspirate_serial_open(char *port);
148 static int buspirate_serial_setspeed(int fd, char speed, cc_t timeout);
149 static int buspirate_serial_write(int fd, uint8_t *buf, int size);
150 static int buspirate_serial_read(int fd, uint8_t *buf, int size);
151 static void buspirate_serial_close(int fd);
152 static void buspirate_print_buffer(uint8_t *buf, int size);
153 
154 static int buspirate_execute_queue(struct jtag_command *cmd_queue)
155 {
156  /* currently processed command */
157  struct jtag_command *cmd = cmd_queue;
158  int scan_size;
159  enum scan_type type;
160  uint8_t *buffer;
161 
162  while (cmd) {
163  switch (cmd->type) {
164  case JTAG_RUNTEST:
165  LOG_DEBUG_IO("runtest %u cycles, end in %s",
166  cmd->cmd.runtest->num_cycles,
167  tap_state_name(cmd->cmd.runtest
168  ->end_state));
169  buspirate_end_state(cmd->cmd.runtest
170  ->end_state);
171  buspirate_runtest(cmd->cmd.runtest
172  ->num_cycles);
173  break;
174  case JTAG_TLR_RESET:
175  LOG_DEBUG_IO("statemove end in %s",
176  tap_state_name(cmd->cmd.statemove
177  ->end_state));
178  buspirate_end_state(cmd->cmd.statemove
179  ->end_state);
181  break;
182  case JTAG_PATHMOVE:
183  LOG_DEBUG_IO("pathmove: %u states, end in %s",
184  cmd->cmd.pathmove->num_states,
185  tap_state_name(cmd->cmd.pathmove
186  ->path[cmd->cmd.pathmove
187  ->num_states - 1]));
188  buspirate_path_move(cmd->cmd.pathmove
189  ->num_states,
190  cmd->cmd.pathmove->path);
191  break;
192  case JTAG_SCAN:
193  LOG_DEBUG_IO("scan end in %s",
194  tap_state_name(cmd->cmd.scan
195  ->end_state));
196 
197  buspirate_end_state(cmd->cmd.scan
198  ->end_state);
199 
200  scan_size = jtag_build_buffer(cmd->cmd.scan,
201  &buffer);
202  type = jtag_scan_type(cmd->cmd.scan);
203  buspirate_scan(cmd->cmd.scan->ir_scan, type,
204  buffer, scan_size, cmd->cmd.scan);
205 
206  break;
207  case JTAG_SLEEP:
208  LOG_DEBUG_IO("sleep %" PRIu32, cmd->cmd.sleep->us);
210  jtag_sleep(cmd->cmd.sleep->us);
211  break;
212  case JTAG_STABLECLOCKS:
213  LOG_DEBUG_IO("stable clock %u cycles", cmd->cmd.stableclocks->num_cycles);
214  buspirate_stableclocks(cmd->cmd.stableclocks->num_cycles);
215  break;
216  default:
217  LOG_ERROR("BUG: unknown JTAG command type encountered");
218  exit(-1);
219  }
220 
221  cmd = cmd->next;
222  }
223 
224  return buspirate_tap_execute();
225 }
226 
227 
228 /* Returns true if successful, false if error. */
229 
230 static bool read_and_discard_all_data(const int fd)
231 {
232  /* LOG_INFO("Discarding any stale data from a previous connection..."); */
233 
234  bool was_msg_already_printed = false;
235 
236  for ( ; ; ) {
237  uint8_t buffer[1024]; /* Any size will do, it's a trade-off between stack size and performance. */
238 
239  const ssize_t read_count = read(fd, buffer, sizeof(buffer));
240 
241  if (read_count == 0) {
242  /* This is the "end of file" or "connection closed at the other end" condition. */
243  return true;
244  }
245 
246  if (read_count > 0) {
247  if (!was_msg_already_printed) {
248  LOG_INFO("Some stale data from a previous connection was discarded.");
249  was_msg_already_printed = true;
250  }
251 
252  continue;
253  }
254 
255  assert(read_count == -1); /* According to the specification. */
256 
257  const int errno_code = errno;
258 
259  if (errno_code == EINTR)
260  continue;
261 
262  if (errno_code == EAGAIN ||
263  errno_code == EWOULDBLOCK) {
264  /* We know that the file descriptor has been opened with O_NONBLOCK or O_NDELAY,
265  and these codes mean that there is no data to read at present. */
266  return true;
267  }
268 
269  /* Some other error has occurred. */
270  return false;
271  }
272 }
273 
274 
275 static int buspirate_init(void)
276 {
277  if (!buspirate_port) {
278  LOG_ERROR("You need to specify the serial port!");
279  return ERROR_JTAG_INIT_FAILED;
280  }
281 
283  if (buspirate_fd == -1) {
284  LOG_ERROR("Could not open serial port");
285  return ERROR_JTAG_INIT_FAILED;
286  }
287 
288  /* The Operating System or the device itself may deliver stale data from the last connection,
289  so discard all available bytes right after the new connection has been established.
290  After all, we are implementing here a master/slave protocol, so the slave should have nothing
291  to say until the master sends the first command.
292 
293  In the past, there was a tcflush() call in buspirate_serial_setspeed(), but that
294  was not enough. I guess you must actively read from the serial port to trigger any
295  data collection from the device and/or lower USB layers. If you disable the serial port
296  read timeout (if you set SHORT_TIMEOUT to 0), then the discarding does not work any more.
297 
298  Note that we are lowering the serial port timeout for this first read operation,
299  otherwise the normal initialisation would be delayed for too long. */
300 
302  LOG_ERROR("Error configuring the serial port.");
303  return ERROR_JTAG_INIT_FAILED;
304  }
305 
307  LOG_ERROR("Error while attempting to discard any stale data right after establishing the connection.");
308  return ERROR_JTAG_INIT_FAILED;
309  }
310 
312  LOG_ERROR("Error configuring the serial port.");
313  return ERROR_JTAG_INIT_FAILED;
314  }
315 
317 
320 
321  LOG_INFO("Buspirate %s Interface ready!", swd_mode ? "SWD" : "JTAG");
322 
323  if (!swd_mode)
325 
331  buspirate_reset(0, 0);
332 
333  return ERROR_OK;
334 }
335 
336 static int buspirate_quit(void)
337 {
338  LOG_INFO("Shutting down buspirate.");
341 
343 
345 
346  free(buspirate_port);
348  return ERROR_OK;
349 }
350 
351 /* openocd command interface */
352 COMMAND_HANDLER(buspirate_handle_adc_command)
353 {
354  if (buspirate_fd == -1)
355  return ERROR_OK;
356 
357  /* unavailable in SWD mode */
358  if (swd_mode)
359  return ERROR_OK;
360 
361  /* send the command */
363 
364  return ERROR_OK;
365 
366 }
367 
368 COMMAND_HANDLER(buspirate_handle_vreg_command)
369 {
370  if (CMD_ARGC < 1)
372 
373  if (atoi(CMD_ARGV[0]) == 1)
374  buspirate_vreg = 1;
375  else if (atoi(CMD_ARGV[0]) == 0)
376  buspirate_vreg = 0;
377  else
378  LOG_ERROR("usage: buspirate_vreg <1|0>");
379 
380  return ERROR_OK;
381 
382 }
383 
384 COMMAND_HANDLER(buspirate_handle_pullup_command)
385 {
386  if (CMD_ARGC < 1)
388 
389  if (atoi(CMD_ARGV[0]) == 1)
390  buspirate_pullup = 1;
391  else if (atoi(CMD_ARGV[0]) == 0)
392  buspirate_pullup = 0;
393  else
394  LOG_ERROR("usage: buspirate_pullup <1|0>");
395 
396  return ERROR_OK;
397 
398 }
399 
400 COMMAND_HANDLER(buspirate_handle_led_command)
401 {
402  if (CMD_ARGC < 1)
404 
405  if (atoi(CMD_ARGV[0]) == 1) {
406  /* enable led */
408  ACTION_ENABLE);
409  } else if (atoi(CMD_ARGV[0]) == 0) {
410  /* disable led */
413  } else {
414  LOG_ERROR("usage: buspirate_led <1|0>");
415  }
416 
417  return ERROR_OK;
418 
419 }
420 
421 COMMAND_HANDLER(buspirate_handle_mode_command)
422 {
423  if (CMD_ARGC < 1)
425 
426  if (CMD_ARGV[0][0] == 'n')
428  else if (CMD_ARGV[0][0] == 'o')
430  else
431  LOG_ERROR("usage: buspirate_mode <normal|open-drain>");
432 
433  return ERROR_OK;
434 
435 }
436 
437 COMMAND_HANDLER(buspirate_handle_speed_command)
438 {
439  if (CMD_ARGC < 1)
441 
442  if (CMD_ARGV[0][0] == 'n')
444  else if (CMD_ARGV[0][0] == 'f')
446  else
447  LOG_ERROR("usage: buspirate_speed <normal|fast>");
448 
449  return ERROR_OK;
450 
451 }
452 
453 COMMAND_HANDLER(buspirate_handle_port_command)
454 {
455  if (CMD_ARGC < 1)
457 
458  if (!buspirate_port)
459  buspirate_port = strdup(CMD_ARGV[0]);
460 
461  return ERROR_OK;
462 
463 }
464 
465 static const struct command_registration buspirate_subcommand_handlers[] = {
466  {
467  .name = "adc",
468  .handler = &buspirate_handle_adc_command,
469  .mode = COMMAND_EXEC,
470  .help = "reads voltages on adc pins",
471  .usage = "",
472  },
473  {
474  .name = "vreg",
475  .usage = "<1|0>",
476  .handler = &buspirate_handle_vreg_command,
477  .mode = COMMAND_CONFIG,
478  .help = "changes the state of voltage regulators",
479  },
480  {
481  .name = "pullup",
482  .usage = "<1|0>",
483  .handler = &buspirate_handle_pullup_command,
484  .mode = COMMAND_CONFIG,
485  .help = "changes the state of pullup",
486  },
487  {
488  .name = "led",
489  .usage = "<1|0>",
490  .handler = &buspirate_handle_led_command,
491  .mode = COMMAND_EXEC,
492  .help = "changes the state of led",
493  },
494  {
495  .name = "speed",
496  .usage = "<normal|fast>",
497  .handler = &buspirate_handle_speed_command,
498  .mode = COMMAND_CONFIG,
499  .help = "speed of the interface",
500  },
501  {
502  .name = "mode",
503  .usage = "<normal|open-drain>",
504  .handler = &buspirate_handle_mode_command,
505  .mode = COMMAND_CONFIG,
506  .help = "pin mode of the interface",
507  },
508  {
509  .name = "port",
510  .usage = "/dev/ttyUSB0",
511  .handler = &buspirate_handle_port_command,
512  .mode = COMMAND_CONFIG,
513  .help = "name of the serial port to open",
514  },
516 };
517 
518 static const struct command_registration buspirate_command_handlers[] = {
519  {
520  .name = "buspirate",
521  .mode = COMMAND_ANY,
522  .help = "perform buspirate management",
524  .usage = "",
525  },
527 };
528 
529 static const struct swd_driver buspirate_swd = {
531  .switch_seq = buspirate_swd_switch_seq,
532  .read_reg = buspirate_swd_read_reg,
533  .write_reg = buspirate_swd_write_reg,
535 };
536 
537 static const char * const buspirate_transports[] = { "jtag", "swd", NULL };
538 
539 static struct jtag_interface buspirate_interface = {
541 };
542 
544  .name = "buspirate",
545  .transports = buspirate_transports,
546  .commands = buspirate_command_handlers,
547 
548  .init = buspirate_init,
549  .quit = buspirate_quit,
550  .reset = buspirate_reset,
551 
552  .jtag_ops = &buspirate_interface,
553  .swd_ops = &buspirate_swd,
554 };
555 
556 /*************** jtag execute commands **********************/
558 {
561  else {
562  LOG_ERROR("BUG: %i is not a valid end state", state);
563  exit(-1);
564  }
565 }
566 
567 static void buspirate_state_move(void)
568 {
569  int i = 0, tms = 0;
570  uint8_t tms_scan = tap_get_tms_path(tap_get_state(),
572  int tms_count = tap_get_tms_path_len(tap_get_state(),
574 
575  for (i = 0; i < tms_count; i++) {
576  tms = (tms_scan >> i) & 1;
577  buspirate_tap_append(tms, 0);
578  }
579 
581 }
582 
583 static void buspirate_path_move(unsigned int num_states, tap_state_t *path)
584 {
585  for (unsigned int i = 0; i < num_states; i++) {
586  if (tap_state_transition(tap_get_state(), false) == path[i]) {
587  buspirate_tap_append(0, 0);
588  } else if (tap_state_transition(tap_get_state(), true)
589  == path[i]) {
590  buspirate_tap_append(1, 0);
591  } else {
592  LOG_ERROR("BUG: %s -> %s isn't a valid "
593  "TAP transition",
595  tap_state_name(path[i]));
596  exit(-1);
597  }
598 
599  tap_set_state(path[i]);
600  }
601 
603 }
604 
605 static void buspirate_runtest(unsigned int num_cycles)
606 {
607  tap_state_t saved_end_state = tap_get_end_state();
608 
609  /* only do a state_move when we're not already in IDLE */
610  if (tap_get_state() != TAP_IDLE) {
613  }
614 
615  for (unsigned int i = 0; i < num_cycles; i++)
616  buspirate_tap_append(0, 0);
617 
618  LOG_DEBUG_IO("runtest: cur_state %s end_state %s",
621 
622  /* finish in end_state */
623  buspirate_end_state(saved_end_state);
624  if (tap_get_state() != tap_get_end_state())
626 }
627 
628 static void buspirate_scan(bool ir_scan, enum scan_type type,
629  uint8_t *buffer, int scan_size, struct scan_command *command)
630 {
631  tap_state_t saved_end_state;
632 
633  buspirate_tap_make_space(1, scan_size+8);
634  /* is 8 correct ? (2 moves = 16) */
635 
636  saved_end_state = tap_get_end_state();
637 
639 
640  /* Only move if we're not already there */
641  if (tap_get_state() != tap_get_end_state())
643 
645 
646  /* move to PAUSE */
647  buspirate_tap_append(0, 0);
648 
649  /* restore the saved state */
650  buspirate_end_state(saved_end_state);
652 
653  if (tap_get_state() != tap_get_end_state())
655 }
656 
657 static void buspirate_stableclocks(unsigned int num_cycles)
658 {
659  int tms = (tap_get_state() == TAP_RESET ? 1 : 0);
660 
661  buspirate_tap_make_space(0, num_cycles);
662 
663  for (unsigned int i = 0; i < num_cycles; i++)
664  buspirate_tap_append(tms, 0);
665 }
666 
667 /************************* TAP related stuff **********/
668 
669 /* This buffer size matches the maximum CMD_TAP_SHIFT bit length in the Bus Pirate firmware,
670  look for constant 0x2000 in OpenOCD.c . */
671 #define BUSPIRATE_BUFFER_SIZE 1024
672 
673 /* The old value of 32 scans was not enough to achieve near 100% utilisation ratio
674  for the current BUSPIRATE_BUFFER_SIZE value of 1024.
675  With 128 scans I am getting full USB 2.0 high speed packets (512 bytes long) when
676  using the JtagDue firmware on the Arduino Due instead of the Bus Pirate, which
677  amounts approximately to a 10% overall speed gain. Bigger packets should also
678  benefit the Bus Pirate, but the speed difference is much smaller.
679  Unfortunately, each 512-byte packet is followed by a 329-byte one, which is not ideal.
680  However, increasing BUSPIRATE_BUFFER_SIZE for the benefit of the JtagDue would
681  make it incompatible with the Bus Pirate firmware. */
682 #define BUSPIRATE_MAX_PENDING_SCANS 128
683 
684 static uint8_t tms_chain[BUSPIRATE_BUFFER_SIZE]; /* send */
685 static uint8_t tdi_chain[BUSPIRATE_BUFFER_SIZE]; /* send */
686 static int tap_chain_index;
687 
688 struct pending_scan_result /* this was stolen from arm-jtag-ew */
689 {
690  int first; /* First bit position in tdo_buffer to read */
691  int length; /* Number of bits to read */
692  struct scan_command *command; /* Corresponding scan command */
693  uint8_t *buffer;
694 };
695 
696 static struct pending_scan_result
699 
700 static void buspirate_tap_init(void)
701 {
702  tap_chain_index = 0;
704 }
705 
706 static int buspirate_tap_execute(void)
707 {
708  uint8_t tmp[4096];
709  uint8_t *in_buf;
710  int i;
711  int fill_index = 0;
712  int ret;
713  int bytes_to_send;
714 
715  if (tap_chain_index <= 0)
716  return ERROR_OK;
717 
718  LOG_DEBUG("executing tap num bits = %i scans = %i",
720 
721  bytes_to_send = DIV_ROUND_UP(tap_chain_index, 8);
722 
723  tmp[0] = CMD_TAP_SHIFT; /* this command expects number of bits */
724  tmp[1] = tap_chain_index >> 8; /* high */
725  tmp[2] = tap_chain_index; /* low */
726 
727  fill_index = CMD_TAP_SHIFT_HEADER_LEN;
728  for (i = 0; i < bytes_to_send; i++) {
729  tmp[fill_index] = tdi_chain[i];
730  fill_index++;
731  tmp[fill_index] = tms_chain[i];
732  fill_index++;
733  }
734 
735  /* jlink.c calls the routine below, which may be useful for debugging purposes.
736  For example, enabling this allows you to compare the log outputs from jlink.c
737  and from this module for JTAG development or troubleshooting purposes. */
738  if (false) {
741  }
742 
743  ret = buspirate_serial_write(buspirate_fd, tmp, CMD_TAP_SHIFT_HEADER_LEN + bytes_to_send*2);
744  if (ret != bytes_to_send*2+CMD_TAP_SHIFT_HEADER_LEN) {
745  LOG_ERROR("error writing :(");
747  }
748 
749  ret = buspirate_serial_read(buspirate_fd, tmp, bytes_to_send + CMD_TAP_SHIFT_HEADER_LEN);
750  if (ret != bytes_to_send + CMD_TAP_SHIFT_HEADER_LEN) {
751  LOG_ERROR("error reading");
752  return ERROR_FAIL;
753  }
754  in_buf = (uint8_t *)(&tmp[CMD_TAP_SHIFT_HEADER_LEN]);
755 
756  /* parse the scans */
757  for (i = 0; i < tap_pending_scans_num; i++) {
758  uint8_t *buffer = tap_pending_scans[i].buffer;
760  int first = tap_pending_scans[i].first;
762 
763  /* copy bits from buffer */
764  buf_set_buf(in_buf, first, buffer, 0, length);
765 
766  /* return buffer to higher level */
770  }
771 
772  free(buffer);
773  }
775  return ERROR_OK;
776 }
777 
778 static void buspirate_tap_make_space(int scans, int bits)
779 {
781  int have_bits = BUSPIRATE_BUFFER_SIZE * 8 - tap_chain_index;
782 
783  if ((have_scans < scans) || (have_bits < bits))
785 }
786 
787 static void buspirate_tap_append(int tms, int tdi)
788 {
789  int chain_index;
790 
792  chain_index = tap_chain_index / 8;
793 
794  if (chain_index < BUSPIRATE_BUFFER_SIZE) {
795  int bit_index = tap_chain_index % 8;
796  uint8_t bit = 1 << bit_index;
797 
798  if (bit_index == 0) {
799  /* Let's say that the TAP shift operation wants to shift 9 bits,
800  so we will be sending to the Bus Pirate a bit count of 9 but still
801  full 16 bits (2 bytes) of shift data.
802  If we don't clear all bits at this point, the last 7 bits will contain
803  random data from the last buffer contents, which is not pleasant to the eye.
804  Besides, the Bus Pirate (or some clone) may want to assert in debug builds
805  that, after consuming all significant data bits, the rest of them are zero.
806  Therefore, for aesthetic and for assert purposes, we clear all bits below. */
807  tms_chain[chain_index] = 0;
808  tdi_chain[chain_index] = 0;
809  }
810 
811  if (tms)
812  tms_chain[chain_index] |= bit;
813  else
814  tms_chain[chain_index] &= ~bit;
815 
816  if (tdi)
817  tdi_chain[chain_index] |= bit;
818  else
819  tdi_chain[chain_index] &= ~bit;
820 
821  tap_chain_index++;
822  } else {
823  LOG_ERROR("tap_chain overflow, bad things will happen");
824  /* Exit abruptly, like jlink.c does. After a buffer overflow we don't want
825  to carry on, as data will be corrupt. Another option would be to return
826  some error code at this point. */
827  exit(-1);
828  }
829 }
830 
831 static void buspirate_tap_append_scan(int length, uint8_t *buffer,
832  struct scan_command *command)
833 {
834  int i;
839 
840  for (i = 0; i < length; i++) {
841  int tms = (i < length-1 ? 0 : 1);
842  int tdi = (buffer[i/8] >> (i%8)) & 1;
843  buspirate_tap_append(tms, tdi);
844  }
846 }
847 
848 /*************** wrapper functions *********************/
849 
850 /* (1) assert or (0) deassert reset lines */
851 static int buspirate_reset(int trst, int srst)
852 {
853  LOG_DEBUG("trst: %i, srst: %i", trst, srst);
854 
855  if (trst)
857  else
859 
860  if (srst)
862  else
864 
865  return ERROR_OK;
866 }
867 
868 static void buspirate_set_feature(int fd, char feat, char action)
869 {
870  if (swd_mode)
871  buspirate_swd_set_feature(fd, feat, action);
872  else
873  buspirate_jtag_set_feature(fd, feat, action);
874 }
875 
876 static void buspirate_set_mode(int fd, char mode)
877 {
878  if (swd_mode)
880  else
882 }
883 
884 static void buspirate_set_speed(int fd, char speed)
885 {
886  if (swd_mode)
887  buspirate_swd_set_speed(fd, speed);
888  else
889  buspirate_jtag_set_speed(fd, speed);
890 }
891 
892 
893 /*************** swd lowlevel functions ********************/
894 
895 static void buspirate_swd_set_speed(int fd, char speed)
896 {
897  int ret;
898  uint8_t tmp[1];
899 
900  LOG_DEBUG("Buspirate speed setting in SWD mode defaults to 400 kHz");
901 
902  /* speed settings */
903  tmp[0] = CMD_RAW_SPEED | SPEED_RAW_400_KHZ;
904  buspirate_serial_write(fd, tmp, 1);
905  ret = buspirate_serial_read(fd, tmp, 1);
906  if (ret != 1) {
907  LOG_ERROR("Buspirate did not answer correctly");
908  exit(-1);
909  }
910  if (tmp[0] != 1) {
911  LOG_ERROR("Buspirate did not reply as expected to the speed change command");
912  exit(-1);
913  }
914 }
915 
916 static void buspirate_swd_set_mode(int fd, char mode)
917 {
918  int ret;
919  uint8_t tmp[1];
920 
921  /* raw-wire mode configuration */
922  if (mode == MODE_HIZ)
923  tmp[0] = CMD_RAW_MODE | CMD_RAW_CONFIG_LSB;
924  else
926 
927  buspirate_serial_write(fd, tmp, 1);
928  ret = buspirate_serial_read(fd, tmp, 1);
929  if (ret != 1) {
930  LOG_ERROR("Buspirate did not answer correctly");
931  exit(-1);
932  }
933  if (tmp[0] != 1) {
934  LOG_ERROR("Buspirate did not reply as expected to the configure command");
935  exit(-1);
936  }
937 }
938 
939 static void buspirate_swd_set_feature(int fd, char feat, char action)
940 {
941  int ret;
942  uint8_t tmp[1];
943 
944  switch (feat) {
945  case FEATURE_TRST:
946  LOG_DEBUG("Buspirate TRST feature not available in SWD mode");
947  return;
948  case FEATURE_LED:
949  LOG_ERROR("Buspirate LED feature not available in SWD mode");
950  return;
951  case FEATURE_SRST:
952  swd_features = (action == ACTION_ENABLE) ? swd_features | 0x02 : swd_features & 0x0D;
953  break;
954  case FEATURE_PULLUP:
955  swd_features = (action == ACTION_ENABLE) ? swd_features | 0x04 : swd_features & 0x0B;
956  break;
957  case FEATURE_VREG:
958  swd_features = (action == ACTION_ENABLE) ? swd_features | 0x08 : swd_features & 0x07;
959  break;
960  default:
961  LOG_DEBUG("Buspirate unknown feature %d", feat);
962  return;
963  }
964 
965  tmp[0] = CMD_RAW_PERIPH | swd_features;
966  buspirate_serial_write(fd, tmp, 1);
967  ret = buspirate_serial_read(fd, tmp, 1);
968  if (ret != 1) {
969  LOG_DEBUG("Buspirate feature %d not supported in SWD mode", feat);
970  } else if (tmp[0] != 1) {
971  LOG_ERROR("Buspirate did not reply as expected to the configure command");
972  exit(-1);
973  }
974 }
975 
976 /*************** jtag lowlevel functions ********************/
977 static void buspirate_bbio_enable(int fd)
978 {
979  int ret;
980  char command;
981  const char *mode_answers[2] = { "OCD1", "RAW1" };
982  const char *correct_ans = NULL;
983  uint8_t tmp[21] = { [0 ... 20] = 0x00 };
984  int done = 0;
985  int cmd_sent = 0;
986 
987  if (swd_mode) {
989  correct_ans = mode_answers[1];
990  } else {
992  correct_ans = mode_answers[0];
993  }
994 
995  LOG_DEBUG("Entering binary mode, that is %s", correct_ans);
996  buspirate_serial_write(fd, tmp, 20);
997  usleep(10000);
998 
999  /* reads 1 to n "BBIO1"s and one "OCD1" or "RAW1" */
1000  while (!done) {
1001  ret = buspirate_serial_read(fd, tmp, 4);
1002  if (ret != 4) {
1003  LOG_ERROR("Buspirate error. Is binary"
1004  "/OpenOCD support enabled?");
1005  exit(-1);
1006  }
1007  if (strncmp((char *)tmp, "BBIO", 4) == 0) {
1008  ret = buspirate_serial_read(fd, tmp, 1);
1009  if (ret != 1) {
1010  LOG_ERROR("Buspirate did not answer correctly! "
1011  "Do you have correct firmware?");
1012  exit(-1);
1013  }
1014  if (tmp[0] != '1') {
1015  LOG_ERROR("Unsupported binary protocol");
1016  exit(-1);
1017  }
1018  if (cmd_sent == 0) {
1019  cmd_sent = 1;
1020  tmp[0] = command;
1021  ret = buspirate_serial_write(fd, tmp, 1);
1022  if (ret != 1) {
1023  LOG_ERROR("error reading");
1024  exit(-1);
1025  }
1026  }
1027  } else if (strncmp((char *)tmp, correct_ans, 4) == 0)
1028  done = 1;
1029  else {
1030  LOG_ERROR("Buspirate did not answer correctly! "
1031  "Do you have correct firmware?");
1032  exit(-1);
1033  }
1034  }
1035 
1036 }
1037 
1038 static void buspirate_jtag_reset(int fd)
1039 {
1040  uint8_t tmp[5];
1041 
1042  tmp[0] = 0x00; /* exit OCD1 mode */
1043  buspirate_serial_write(fd, tmp, 1);
1044  usleep(10000);
1045  /* We ignore the return value here on purpose, nothing we can do */
1046  buspirate_serial_read(fd, tmp, 5);
1047  if (strncmp((char *)tmp, "BBIO1", 5) == 0) {
1048  tmp[0] = 0x0F; /* reset BP */
1049  buspirate_serial_write(fd, tmp, 1);
1050  } else
1051  LOG_ERROR("Unable to restart buspirate!");
1052 }
1053 
1054 static void buspirate_jtag_set_speed(int fd, char speed)
1055 {
1056  int ret;
1057  uint8_t tmp[2];
1058  uint8_t ack[2];
1059 
1060  ack[0] = 0xAA;
1061  ack[1] = 0x55;
1062 
1063  tmp[0] = CMD_UART_SPEED;
1064  tmp[1] = speed;
1065  buspirate_jtag_command(fd, tmp, 2);
1066 
1067  /* here the adapter changes speed, we need follow */
1068  if (-1 == buspirate_serial_setspeed(fd, speed, NORMAL_TIMEOUT)) {
1069  LOG_ERROR("Error configuring the serial port.");
1070  exit(-1);
1071  }
1072 
1073  buspirate_serial_write(fd, ack, 2);
1074  ret = buspirate_serial_read(fd, tmp, 2);
1075  if (ret != 2) {
1076  LOG_ERROR("Buspirate did not ack speed change");
1077  exit(-1);
1078  }
1079  if ((tmp[0] != CMD_UART_SPEED) || (tmp[1] != speed)) {
1080  LOG_ERROR("Buspirate did not reply as expected to the speed change command");
1081  exit(-1);
1082  }
1083  LOG_INFO("Buspirate switched to %s mode",
1084  (speed == SERIAL_NORMAL) ? "normal" : "FAST");
1085 }
1086 
1087 
1088 static void buspirate_jtag_set_mode(int fd, char mode)
1089 {
1090  uint8_t tmp[2];
1091  tmp[0] = CMD_PORT_MODE;
1092  tmp[1] = mode;
1093  buspirate_jtag_command(fd, tmp, 2);
1094 }
1095 
1096 static void buspirate_jtag_set_feature(int fd, char feat, char action)
1097 {
1098  uint8_t tmp[3];
1099  tmp[0] = CMD_FEATURE;
1100  tmp[1] = feat; /* what */
1101  tmp[2] = action; /* action */
1102  buspirate_jtag_command(fd, tmp, 3);
1103 }
1104 
1105 static void buspirate_jtag_get_adcs(int fd)
1106 {
1107  uint8_t tmp[10];
1108  uint16_t a, b, c, d;
1109  tmp[0] = CMD_READ_ADCS;
1110  buspirate_jtag_command(fd, tmp, 1);
1111  a = tmp[2] << 8 | tmp[3];
1112  b = tmp[4] << 8 | tmp[5];
1113  c = tmp[6] << 8 | tmp[7];
1114  d = tmp[8] << 8 | tmp[9];
1115 
1116  LOG_INFO("ADC: ADC_Pin = %.02f VPullup = %.02f V33 = %.02f "
1117  "V50 = %.02f",
1118  ((float)a)/155.1515, ((float)b)/155.1515,
1119  ((float)c)/155.1515, ((float)d)/155.1515);
1120 }
1121 
1122 static unsigned char buspirate_jtag_command(int fd,
1123  uint8_t *cmd, int cmdlen)
1124 {
1125  int res;
1126  int len = 0;
1127 
1128  res = buspirate_serial_write(fd, cmd, cmdlen);
1129 
1130  if ((cmd[0] == CMD_UART_SPEED)
1131  || (cmd[0] == CMD_PORT_MODE)
1132  || (cmd[0] == CMD_FEATURE)
1133  || (cmd[0] == CMD_JTAG_SPEED))
1134  return 1;
1135 
1136  if (res == cmdlen) {
1137  switch (cmd[0]) {
1138  case CMD_READ_ADCS:
1139  len = 10; /* 2*sizeof(char)+4*sizeof(uint16_t) */
1140  break;
1141  case CMD_TAP_SHIFT:
1142  len = cmdlen;
1143  break;
1144  default:
1145  LOG_INFO("Wrong !");
1146  }
1147  res = buspirate_serial_read(fd, cmd, len);
1148  if (res > 0)
1149  return (unsigned char)cmd[1];
1150  else
1151  return -1;
1152  } else
1153  return -1;
1154  return 0;
1155 }
1156 
1157 /* low level serial port */
1158 /* TODO add support for WIN32 and others ! */
1159 static int buspirate_serial_open(char *port)
1160 {
1161  int fd;
1162  fd = open(buspirate_port, O_RDWR | O_NOCTTY | O_NDELAY);
1163  return fd;
1164 }
1165 
1166 
1167 /* Returns -1 on error. */
1168 
1169 static int buspirate_serial_setspeed(int fd, char speed, cc_t timeout)
1170 {
1171  struct termios t_opt;
1172  speed_t baud = (speed == SERIAL_FAST) ? B1000000 : B115200;
1173 
1174  /* set the serial port parameters */
1175  fcntl(fd, F_SETFL, 0);
1176  if (tcgetattr(fd, &t_opt) != 0)
1177  return -1;
1178 
1179  if (cfsetispeed(&t_opt, baud) != 0)
1180  return -1;
1181 
1182  if (cfsetospeed(&t_opt, baud) != 0)
1183  return -1;
1184 
1185  t_opt.c_cflag |= (CLOCAL | CREAD);
1186  t_opt.c_cflag &= ~PARENB;
1187  t_opt.c_cflag &= ~CSTOPB;
1188  t_opt.c_cflag &= ~CSIZE;
1189  t_opt.c_cflag |= CS8;
1190  t_opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
1191 
1192  /* The serial port may have been configured for human interaction with
1193  the Bus Pirate console, but OpenOCD is going to use a binary protocol,
1194  so make sure to turn off any CR/LF translation and the like. */
1195  t_opt.c_iflag &= ~(IXON | IXOFF | IXANY | INLCR | ICRNL);
1196 
1197  t_opt.c_oflag &= ~OPOST;
1198  t_opt.c_cc[VMIN] = 0;
1199  t_opt.c_cc[VTIME] = timeout;
1200 
1201  /* Note that, in the past, TCSANOW was used below instead of TCSADRAIN,
1202  and CMD_UART_SPEED did not work properly then, at least with
1203  the Bus Pirate v3.5 (USB). */
1204  if (tcsetattr(fd, TCSADRAIN, &t_opt) != 0) {
1205  /* According to the Linux documentation, this is actually not enough
1206  to detect errors, you need to call tcgetattr() and check that
1207  all changes have been performed successfully. */
1208  return -1;
1209  }
1210 
1211  return 0;
1212 }
1213 
1214 static int buspirate_serial_write(int fd, uint8_t *buf, int size)
1215 {
1216  int ret = 0;
1217 
1218  ret = write(fd, buf, size);
1219 
1220  LOG_DEBUG("size = %d ret = %d", size, ret);
1222 
1223  if (ret != size)
1224  LOG_ERROR("Error sending data");
1225 
1226  return ret;
1227 }
1228 
1229 static int buspirate_serial_read(int fd, uint8_t *buf, int size)
1230 {
1231  int len = 0;
1232  int ret = 0;
1233  int timeout = 0;
1234 
1235  while (len < size) {
1236  ret = read(fd, buf+len, size-len);
1237  if (ret == -1)
1238  return -1;
1239 
1240  if (ret == 0) {
1241  timeout++;
1242 
1243  if (timeout >= 10)
1244  break;
1245 
1246  continue;
1247  }
1248 
1249  len += ret;
1250  }
1251 
1252  LOG_DEBUG("should have read = %d actual size = %d", size, len);
1253  buspirate_print_buffer(buf, len);
1254 
1255  if (len != size)
1256  LOG_ERROR("Error reading data");
1257 
1258  return len;
1259 }
1260 
1261 static void buspirate_serial_close(int fd)
1262 {
1263  close(fd);
1264 }
1265 
1266 #define LINE_SIZE 81
1267 #define BYTES_PER_LINE 16
1268 static void buspirate_print_buffer(uint8_t *buf, int size)
1269 {
1270  char line[LINE_SIZE];
1271  char tmp[10];
1272  int offset = 0;
1273 
1274  line[0] = 0;
1275  while (offset < size) {
1276  snprintf(tmp, 5, "%02x ", (uint8_t)buf[offset]);
1277  offset++;
1278 
1279  strcat(line, tmp);
1280 
1281  if (offset % BYTES_PER_LINE == 0) {
1282  LOG_DEBUG("%s", line);
1283  line[0] = 0;
1284  }
1285  }
1286 
1287  if (line[0] != 0)
1288  LOG_DEBUG("%s", line);
1289 }
1290 
1291 /************************* SWD related stuff **********/
1292 
1293 static int buspirate_swd_init(void)
1294 {
1295  LOG_INFO("Buspirate SWD mode enabled");
1296  swd_mode = true;
1297 
1298  return ERROR_OK;
1299 }
1300 
1302 {
1303  const uint8_t *sequence;
1304  int sequence_len;
1305  uint32_t no_bytes, sequence_offset;
1306 
1307  switch (seq) {
1308  case LINE_RESET:
1309  LOG_DEBUG("SWD line reset");
1311  sequence_len = DIV_ROUND_UP(swd_seq_line_reset_len, 8);
1312  break;
1313  case JTAG_TO_SWD:
1314  LOG_DEBUG("JTAG-to-SWD");
1316  sequence_len = DIV_ROUND_UP(swd_seq_jtag_to_swd_len, 8);
1317  break;
1318  case SWD_TO_JTAG:
1319  LOG_DEBUG("SWD-to-JTAG");
1321  sequence_len = DIV_ROUND_UP(swd_seq_swd_to_jtag_len, 8);
1322  break;
1323  default:
1324  LOG_ERROR("Sequence %d not supported", seq);
1325  return ERROR_FAIL;
1326  }
1327 
1328  no_bytes = sequence_len;
1329  sequence_offset = 0;
1330 
1331  while (no_bytes) {
1332  uint8_t tmp[17];
1333  uint32_t to_send;
1334 
1335  to_send = no_bytes > 16 ? 16 : no_bytes;
1336 
1337  tmp[0] = 0x10 + ((to_send - 1) & 0x0F);
1338  memcpy(tmp + 1, &sequence[sequence_offset], to_send);
1339 
1340  buspirate_serial_write(buspirate_fd, tmp, to_send + 1);
1341  buspirate_serial_read(buspirate_fd, tmp, to_send + 1);
1342 
1343  no_bytes -= to_send;
1344  sequence_offset += to_send;
1345  }
1346 
1347  return ERROR_OK;
1348 }
1349 
1350 static uint8_t buspirate_swd_write_header(uint8_t cmd)
1351 {
1352  uint8_t tmp[8];
1353  int to_send;
1354 
1355  tmp[0] = 0x10; /* bus pirate: send 1 byte */
1356  tmp[1] = cmd; /* swd cmd */
1357  tmp[2] = 0x07; /* ack __x */
1358  tmp[3] = 0x07; /* ack _x_ */
1359  tmp[4] = 0x07; /* ack x__ */
1360  tmp[5] = 0x07; /* write mode trn_1 */
1361  tmp[6] = 0x07; /* write mode trn_2 */
1362 
1363  to_send = ((cmd & SWD_CMD_RNW) == 0) ? 7 : 5;
1364  buspirate_serial_write(buspirate_fd, tmp, to_send);
1365 
1366  /* read ack */
1367  buspirate_serial_read(buspirate_fd, tmp, 2); /* drop pirate command ret vals */
1368  buspirate_serial_read(buspirate_fd, tmp, to_send - 2); /* ack bits */
1369 
1370  return tmp[2] << 2 | tmp[1] << 1 | tmp[0];
1371 }
1372 
1373 static void buspirate_swd_idle_clocks(uint32_t no_bits)
1374 {
1375  uint32_t no_bytes;
1376  uint8_t tmp[20];
1377 
1378  no_bytes = (no_bits + 7) / 8;
1379  memset(tmp + 1, 0x00, sizeof(tmp) - 1);
1380 
1381  /* unfortunately bus pirate misbehaves when clocks are sent in parts
1382  * so we need to limit at 128 clock cycles
1383  */
1384  if (no_bytes > 16)
1385  no_bytes = 16;
1386 
1387  while (no_bytes) {
1388  uint8_t to_send = no_bytes > 16 ? 16 : no_bytes;
1389  tmp[0] = 0x10 + ((to_send - 1) & 0x0F);
1390 
1391  buspirate_serial_write(buspirate_fd, tmp, to_send + 1);
1392  buspirate_serial_read(buspirate_fd, tmp, to_send + 1);
1393 
1394  no_bytes -= to_send;
1395  }
1396 }
1397 
1399 {
1400  buspirate_swd_write_reg(swd_cmd(false, false, DP_ABORT),
1402 }
1403 
1404 static void buspirate_swd_read_reg(uint8_t cmd, uint32_t *value, uint32_t ap_delay_clk)
1405 {
1406  uint8_t tmp[16];
1407 
1408  LOG_DEBUG("buspirate_swd_read_reg");
1409  assert(cmd & SWD_CMD_RNW);
1410 
1411  if (queued_retval != ERROR_OK) {
1412  LOG_DEBUG("Skip buspirate_swd_read_reg because queued_retval=%d", queued_retval);
1413  return;
1414  }
1415 
1417  uint8_t ack = buspirate_swd_write_header(cmd);
1418 
1419  /* do a read transaction */
1420  tmp[0] = 0x06; /* 4 data bytes */
1421  tmp[1] = 0x06;
1422  tmp[2] = 0x06;
1423  tmp[3] = 0x06;
1424  tmp[4] = 0x07; /* parity bit */
1425  tmp[5] = 0x21; /* 2 turnaround clocks */
1426 
1429 
1430  /* store the data and parity */
1431  uint32_t data = (uint8_t) tmp[0];
1432  data |= (uint8_t) tmp[1] << 8;
1433  data |= (uint8_t) tmp[2] << 16;
1434  data |= (uint8_t) tmp[3] << 24;
1435  int parity = tmp[4] ? 0x01 : 0x00;
1436 
1437  LOG_DEBUG("%s %s %s reg %X = %08"PRIx32,
1438  ack == SWD_ACK_OK ? "OK" : ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT ? "FAULT" : "JUNK",
1439  cmd & SWD_CMD_APNDP ? "AP" : "DP",
1440  cmd & SWD_CMD_RNW ? "read" : "write",
1441  (cmd & SWD_CMD_A32) >> 1,
1442  data);
1443 
1444  switch (ack) {
1445  case SWD_ACK_OK:
1446  if (parity != parity_u32(data)) {
1447  LOG_DEBUG("Read data parity mismatch %x %x", parity, parity_u32(data));
1449  return;
1450  }
1451  if (value)
1452  *value = data;
1453  if (cmd & SWD_CMD_APNDP)
1454  buspirate_swd_idle_clocks(ap_delay_clk);
1455  return;
1456  case SWD_ACK_WAIT:
1457  LOG_DEBUG("SWD_ACK_WAIT");
1459  return;
1460  case SWD_ACK_FAULT:
1461  LOG_DEBUG("SWD_ACK_FAULT");
1462  queued_retval = ack;
1463  return;
1464  default:
1465  LOG_DEBUG("No valid acknowledge: ack=%d", ack);
1466  queued_retval = ack;
1467  return;
1468  }
1469 }
1470 
1471 static void buspirate_swd_write_reg(uint8_t cmd, uint32_t value, uint32_t ap_delay_clk)
1472 {
1473  uint8_t tmp[16];
1474 
1475  LOG_DEBUG("buspirate_swd_write_reg");
1476  assert(!(cmd & SWD_CMD_RNW));
1477 
1478  if (queued_retval != ERROR_OK) {
1479  LOG_DEBUG("Skip buspirate_swd_write_reg because queued_retval=%d", queued_retval);
1480  return;
1481  }
1482 
1484  uint8_t ack = buspirate_swd_write_header(cmd);
1485 
1486  /* do a write transaction */
1487  tmp[0] = 0x10 + ((4 + 1 - 1) & 0xF); /* bus pirate: send 4+1 bytes */
1488  buf_set_u32((uint8_t *) tmp + 1, 0, 32, value);
1489  /* write sequence ends with parity bit and 7 idle ticks */
1490  tmp[5] = parity_u32(value) ? 0x01 : 0x00;
1491 
1494 
1495  LOG_DEBUG("%s %s %s reg %X = %08"PRIx32,
1496  ack == SWD_ACK_OK ? "OK" : ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT ? "FAULT" : "JUNK",
1497  cmd & SWD_CMD_APNDP ? "AP" : "DP",
1498  cmd & SWD_CMD_RNW ? "read" : "write",
1499  (cmd & SWD_CMD_A32) >> 1,
1500  value);
1501 
1502  switch (ack) {
1503  case SWD_ACK_OK:
1504  if (cmd & SWD_CMD_APNDP)
1505  buspirate_swd_idle_clocks(ap_delay_clk);
1506  return;
1507  case SWD_ACK_WAIT:
1508  LOG_DEBUG("SWD_ACK_WAIT");
1510  return;
1511  case SWD_ACK_FAULT:
1512  LOG_DEBUG("SWD_ACK_FAULT");
1513  queued_retval = ack;
1514  return;
1515  default:
1516  LOG_DEBUG("No valid acknowledge: ack=%d", ack);
1517  queued_retval = ack;
1518  return;
1519  }
1520 }
1521 
1522 static int buspirate_swd_run_queue(void)
1523 {
1524  LOG_DEBUG("buspirate_swd_run_queue");
1525  /* A transaction must be followed by another transaction or at least 8 idle cycles to
1526  * ensure that data is clocked through the AP. */
1528 
1529  int retval = queued_retval;
1531  LOG_DEBUG("SWD queue return value: %02x", retval);
1532  return retval;
1533 }
#define SWD_ACK_FAULT
Definition: arm_adi_v5.h:33
#define DP_ABORT
Definition: arm_adi_v5.h:46
#define WDERRCLR
Definition: arm_adi_v5.h:71
#define STKERRCLR
Definition: arm_adi_v5.h:70
#define ORUNERRCLR
Definition: arm_adi_v5.h:72
#define STKCMPCLR
Definition: arm_adi_v5.h:69
swd_special_seq
Definition: arm_adi_v5.h:236
@ JTAG_TO_SWD
Definition: arm_adi_v5.h:238
@ LINE_RESET
Definition: arm_adi_v5.h:237
@ SWD_TO_JTAG
Definition: arm_adi_v5.h:240
#define SWD_ACK_WAIT
Definition: arm_adi_v5.h:32
#define SWD_ACK_OK
Definition: arm_adi_v5.h:31
enum arm_mode mode
Definition: armv4_5.c:277
void * buf_set_buf(const void *_src, unsigned int src_start, void *_dst, unsigned int dst_start, unsigned int len)
Definition: binarybuffer.c:120
static void buf_set_u32(uint8_t *_buffer, unsigned int first, unsigned int num, uint32_t value)
Sets num bits in _buffer, starting at the first bit, using the bits in value.
Definition: binarybuffer.h:34
static void buspirate_tap_init(void)
Definition: buspirate.c:700
static const struct command_registration buspirate_subcommand_handlers[]
Definition: buspirate.c:465
static int queued_retval
Definition: buspirate.c:101
static enum tap_state last_tap_state
Definition: buspirate.c:111
static int buspirate_tap_execute(void)
Definition: buspirate.c:706
#define BUSPIRATE_MAX_PENDING_SCANS
Definition: buspirate.c:682
static void buspirate_end_state(tap_state_t state)
Definition: buspirate.c:557
#define SHORT_TIMEOUT
Definition: buspirate.c:65
static const char *const buspirate_transports[]
Definition: buspirate.c:537
static void buspirate_swd_clear_sticky_errors(void)
Definition: buspirate.c:1398
static void buspirate_state_move(void)
Definition: buspirate.c:567
static int buspirate_pinmode
Definition: buspirate.c:105
#define CMD_ENTER_RWIRE
Definition: buspirate.c:42
#define B1000000
Definition: buspirate.c:62
static void buspirate_tap_make_space(int scan, int bits)
Definition: buspirate.c:778
static void buspirate_runtest(unsigned int num_cycles)
Definition: buspirate.c:605
static const struct swd_driver buspirate_swd
Definition: buspirate.c:529
static void buspirate_swd_set_feature(int, char, char)
Definition: buspirate.c:939
static const struct command_registration buspirate_command_handlers[]
Definition: buspirate.c:518
static char * buspirate_port
Definition: buspirate.c:109
struct adapter_driver buspirate_adapter_driver
Definition: buspirate.c:543
static int buspirate_fd
Definition: buspirate.c:104
static void buspirate_jtag_set_feature(int, char, char)
Definition: buspirate.c:1096
static int buspirate_baudrate
Definition: buspirate.c:106
#define CMD_TAP_SHIFT_HEADER_LEN
Definition: buspirate.c:50
static void buspirate_path_move(unsigned int num_states, tap_state_t *path)
Definition: buspirate.c:583
static void buspirate_print_buffer(uint8_t *buf, int size)
Definition: buspirate.c:1268
static int buspirate_pullup
Definition: buspirate.c:108
static int buspirate_swd_init(void)
Definition: buspirate.c:1293
static void buspirate_jtag_reset(int)
Definition: buspirate.c:1038
static struct pending_scan_result tap_pending_scans[BUSPIRATE_MAX_PENDING_SCANS]
Definition: buspirate.c:696
static bool swd_mode
Definition: buspirate.c:100
static unsigned char buspirate_jtag_command(int, uint8_t *, int)
Definition: buspirate.c:1122
@ ACTION_ENABLE
Definition: buspirate.c:84
@ ACTION_DISABLE
Definition: buspirate.c:83
static int buspirate_vreg
Definition: buspirate.c:107
static uint8_t buspirate_swd_write_header(uint8_t cmd)
Definition: buspirate.c:1350
static uint8_t tms_chain[BUSPIRATE_BUFFER_SIZE]
Definition: buspirate.c:684
#define CMD_RAW_PERIPH
Definition: buspirate.c:46
static void buspirate_set_speed(int, char)
Definition: buspirate.c:884
#define CMD_RAW_MODE
Definition: buspirate.c:48
static void buspirate_set_mode(int, char)
Definition: buspirate.c:876
static void buspirate_swd_write_reg(uint8_t cmd, uint32_t value, uint32_t ap_delay_clk)
Definition: buspirate.c:1471
@ FEATURE_SRST
Definition: buspirate.c:78
@ FEATURE_PULLUP
Definition: buspirate.c:79
@ FEATURE_LED
Definition: buspirate.c:75
@ FEATURE_VREG
Definition: buspirate.c:76
@ FEATURE_TRST
Definition: buspirate.c:77
static void buspirate_jtag_get_adcs(int)
Definition: buspirate.c:1105
#define CMD_RAW_CONFIG_LSB
Definition: buspirate.c:58
static int buspirate_serial_read(int fd, uint8_t *buf, int size)
Definition: buspirate.c:1229
static void buspirate_set_feature(int, char, char)
Definition: buspirate.c:868
static int buspirate_execute_queue(struct jtag_command *cmd_queue)
Definition: buspirate.c:154
#define CMD_FEATURE
Definition: buspirate.c:38
#define CMD_TAP_SHIFT
Definition: buspirate.c:41
static void buspirate_stableclocks(unsigned int num_cycles)
Definition: buspirate.c:657
static void buspirate_swd_idle_clocks(uint32_t no_bits)
Definition: buspirate.c:1373
#define CMD_UART_SPEED
Definition: buspirate.c:44
static uint8_t tdi_chain[BUSPIRATE_BUFFER_SIZE]
Definition: buspirate.c:685
static int tap_pending_scans_num
Definition: buspirate.c:698
static int buspirate_serial_write(int fd, uint8_t *buf, int size)
Definition: buspirate.c:1214
static int buspirate_swd_run_queue(void)
Definition: buspirate.c:1522
static char swd_features
Definition: buspirate.c:102
@ MODE_HIZ
Definition: buspirate.c:69
@ MODE_JTAG
Definition: buspirate.c:70
@ MODE_JTAG_OD
Definition: buspirate.c:71
#define NORMAL_TIMEOUT
Definition: buspirate.c:66
static void buspirate_swd_set_speed(int, char)
Definition: buspirate.c:895
static int buspirate_serial_setspeed(int fd, char speed, cc_t timeout)
Definition: buspirate.c:1169
static void buspirate_swd_set_mode(int, char)
Definition: buspirate.c:916
#define BYTES_PER_LINE
Definition: buspirate.c:1267
#define LINE_SIZE
Definition: buspirate.c:1266
static bool read_and_discard_all_data(const int fd)
Definition: buspirate.c:230
static void buspirate_jtag_set_speed(int, char)
Definition: buspirate.c:1054
#define CMD_RAW_CONFIG_3V3
Definition: buspirate.c:54
static void buspirate_serial_close(int fd)
Definition: buspirate.c:1261
COMMAND_HANDLER(buspirate_handle_adc_command)
Definition: buspirate.c:352
static struct jtag_interface buspirate_interface
Definition: buspirate.c:539
static void buspirate_bbio_enable(int)
Definition: buspirate.c:977
static int buspirate_quit(void)
Definition: buspirate.c:336
static int buspirate_serial_open(char *port)
Definition: buspirate.c:1159
#define CMD_PORT_MODE
Definition: buspirate.c:37
static void buspirate_tap_append_scan(int length, uint8_t *buffer, struct scan_command *command)
Definition: buspirate.c:831
@ SPEED_RAW_50_KHZ
Definition: buspirate.c:94
@ SPEED_RAW_400_KHZ
Definition: buspirate.c:96
@ SPEED_RAW_100_KHZ
Definition: buspirate.c:95
@ SPEED_RAW_5_KHZ
Definition: buspirate.c:93
static int buspirate_init(void)
Definition: buspirate.c:275
static int buspirate_reset(int trst, int srst)
Definition: buspirate.c:851
static void buspirate_jtag_set_mode(int, char)
Definition: buspirate.c:1088
#define CMD_JTAG_SPEED
Definition: buspirate.c:45
static int tap_chain_index
Definition: buspirate.c:686
static void buspirate_swd_read_reg(uint8_t cmd, uint32_t *value, uint32_t ap_delay_clk)
Definition: buspirate.c:1404
static int buspirate_swd_switch_seq(enum swd_special_seq seq)
Definition: buspirate.c:1301
#define CMD_ENTER_OOCD
Definition: buspirate.c:43
static void buspirate_tap_append(int tms, int tdi)
Definition: buspirate.c:787
static void buspirate_scan(bool ir_scan, enum scan_type type, uint8_t *buffer, int scan_size, struct scan_command *command)
Definition: buspirate.c:628
#define CMD_RAW_SPEED
Definition: buspirate.c:47
#define BUSPIRATE_BUFFER_SIZE
Definition: buspirate.c:671
@ SERIAL_NORMAL
Definition: buspirate.c:88
@ SERIAL_FAST
Definition: buspirate.c:89
#define CMD_READ_ADCS
Definition: buspirate.c:39
#define CMD_ARGV
Use this macro to access the arguments for the command being handled, rather than accessing the varia...
Definition: command.h:156
#define ERROR_COMMAND_SYNTAX_ERROR
Definition: command.h:402
#define CMD_ARGC
Use this macro to access the number of arguments for the command being handled, rather than accessing...
Definition: command.h:151
#define COMMAND_REGISTRATION_DONE
Use this as the last entry in an array of command_registration records.
Definition: command.h:253
@ COMMAND_CONFIG
Definition: command.h:41
@ COMMAND_ANY
Definition: command.h:42
@ COMMAND_EXEC
Definition: command.h:40
int jtag_build_buffer(const struct scan_command *cmd, uint8_t **buffer)
Definition: commands.c:192
enum scan_type jtag_scan_type(const struct scan_command *cmd)
Definition: commands.c:167
int jtag_read_buffer(uint8_t *buffer, const struct scan_command *cmd)
Definition: commands.c:230
scan_type
The inferred type of a scan_command structure, indicating whether the command has the host scan in fr...
Definition: commands.h:22
@ JTAG_TLR_RESET
Definition: commands.h:137
@ JTAG_SCAN
Definition: commands.h:129
@ JTAG_PATHMOVE
Definition: commands.h:140
@ JTAG_STABLECLOCKS
Definition: commands.h:142
@ JTAG_RUNTEST
Definition: commands.h:138
@ JTAG_SLEEP
Definition: commands.h:141
uint8_t type
Definition: esp_usb_jtag.c:0
uint8_t length
Definition: esp_usb_jtag.c:1
bool tap_is_state_stable(tap_state_t astate)
Function tap_is_state_stable returns true if the astate is stable.
Definition: interface.c:200
tap_state_t tap_state_transition(tap_state_t cur_state, bool tms)
Function tap_state_transition takes a current TAP state and returns the next state according to the t...
Definition: interface.c:223
const char * tap_state_name(tap_state_t state)
Function tap_state_name Returns a string suitable for display representing the JTAG tap_state.
Definition: interface.c:344
void tap_set_end_state(tap_state_t new_end_state)
This function sets the state of an "end state follower" which tracks the state that any cable driver ...
Definition: interface.c:48
tap_state_t tap_get_end_state(void)
For more information,.
Definition: interface.c:56
int tap_get_tms_path(tap_state_t from, tap_state_t to)
This function provides a "bit sequence" indicating what has to be done with TMS during a sequence of ...
Definition: interface.c:190
int tap_get_tms_path_len(tap_state_t from, tap_state_t to)
Function int tap_get_tms_path_len returns the total number of bits that represents a TMS path transit...
Definition: interface.c:195
tap_state_t tap_get_state(void)
This function gets the state of the "state follower" which tracks the state of the TAPs connected to ...
Definition: interface.c:37
#define tap_set_state(new_state)
This function sets the state of a "state follower" which tracks the state of the TAPs connected to th...
Definition: interface.h:49
static tap_state_t jtag_debug_state_machine(const void *tms_buf, const void *tdi_buf, unsigned int tap_len, tap_state_t start_tap_state)
Prints verbose TAP state transitions for the given TMS/TDI buffers.
Definition: interface.h:161
void jtag_sleep(uint32_t us)
Definition: jtag/core.c:1068
#define ERROR_JTAG_DEVICE_ERROR
Definition: jtag.h:558
tap_state
Defines JTAG Test Access Port states.
Definition: jtag.h:37
@ TAP_RESET
Definition: jtag.h:56
@ TAP_DRPAUSE
Definition: jtag.h:44
@ TAP_IRSHIFT
Definition: jtag.h:51
@ TAP_IDLE
Definition: jtag.h:53
@ TAP_DRSHIFT
Definition: jtag.h:43
@ TAP_IRPAUSE
Definition: jtag.h:52
#define ERROR_JTAG_QUEUE_FAILED
Definition: jtag.h:556
#define ERROR_JTAG_INIT_FAILED
Definition: jtag.h:552
enum tap_state tap_state_t
Defines JTAG Test Access Port states.
static struct scan_blk scan
Definition: lakemont.c:60
#define LOG_DEBUG_IO(expr ...)
Definition: log.h:101
#define ERROR_FAIL
Definition: log.h:170
#define LOG_ERROR(expr ...)
Definition: log.h:132
#define LOG_INFO(expr ...)
Definition: log.h:126
#define LOG_DEBUG(expr ...)
Definition: log.h:109
#define ERROR_OK
Definition: log.h:164
static uint32_t bit(uint32_t value, unsigned int b)
Definition: opcodes.h:15
uint8_t bits[QN908X_FLASH_MAX_BLOCKS *QN908X_FLASH_PAGES_PER_BLOCK/8]
Definition: qn908x.c:0
size_t size
Size of the control block search area.
Definition: rtt/rtt.c:30
Represents a driver for a debugging interface.
Definition: interface.h:207
const char *const name
The name of the interface driver.
Definition: interface.h:209
const char * name
Definition: command.h:235
const char * usage
a string listing the options and arguments, required or optional
Definition: command.h:241
Represents a driver for a debugging interface.
Definition: interface.h:182
int(* execute_queue)(struct jtag_command *cmd_queue)
Execute commands in the supplied queue.
Definition: interface.h:195
int first
First bit position in tdo_buffer to read.
Definition: arm-jtag-ew.c:513
int length
Number of bits to read.
Definition: arm-jtag-ew.c:514
uint8_t * buffer
Location to store the result.
Definition: arm-jtag-ew.c:516
struct scan_command * command
Definition: arm-jtag-ew.c:515
The scan_command provide a means of encapsulating a set of scan_field structures that should be scann...
Definition: commands.h:35
Definition: osbdm.c:17
int(* init)(void)
Initialize the debug link so it can perform SWD operations.
Definition: swd.h:255
Definition: psoc6.c:83
#define SWD_CMD_A32
Definition: swd.h:19
#define SWD_CMD_PARK
Definition: swd.h:22
static uint8_t swd_cmd(bool is_read, bool is_ap, uint8_t regnum)
Construct a "cmd" byte, in lSB bit order, which swd_driver.read_reg() and swd_driver....
Definition: swd.h:35
static const unsigned int swd_seq_jtag_to_swd_len
Definition: swd.h:125
static const unsigned int swd_seq_line_reset_len
Definition: swd.h:104
#define SWD_CMD_APNDP
Definition: swd.h:17
#define SWD_CMD_START
Definition: swd.h:16
#define SWD_CMD_RNW
Definition: swd.h:18
static const uint8_t swd_seq_line_reset[]
SWD Line reset.
Definition: swd.h:98
static const uint8_t swd_seq_jtag_to_swd[]
JTAG-to-SWD sequence.
Definition: swd.h:115
static const uint8_t swd_seq_swd_to_jtag[]
SWD-to-JTAG sequence.
Definition: swd.h:136
static const unsigned int swd_seq_swd_to_jtag_len
Definition: swd.h:144
#define DIV_ROUND_UP(m, n)
Rounds m up to the nearest multiple of n using division.
Definition: types.h:79
static int parity_u32(uint32_t x)
Calculate the (even) parity of a 32-bit datum.
Definition: types.h:265
#define NULL
Definition: usb.h:16
uint8_t cmd
Definition: vdebug.c:1
uint8_t offset[4]
Definition: vdebug.c:9
uint8_t state[4]
Definition: vdebug.c:21
static unsigned int parity(unsigned int v)
Definition: xscale.c:623