void jtagtap_srst(void) { platform_buffer_flush(); //ftdi_write_data(ftdic, "\x80\x88\xAB", 3); //usleep(1000); //ftdi_write_data(ftdic, "\x80\xA8\xAB", 3); }
int platform_buffer_write(const uint8_t *data, int size) { if((bufptr + size) / BUF_SIZE > 0) platform_buffer_flush(); memcpy(outbuf + bufptr, data, size); bufptr += size; return size; }
int platform_buffer_read(uint8_t *data, int size) { int index = 0; platform_buffer_flush(); while((index += ftdi_read_data(ftdic, data + index, size-index)) != size); return size; }
int platform_buffer_read(uint8_t *data, int size) { int index = 0; outbuf[bufptr++] = SEND_IMMEDIATE; platform_buffer_flush(); while((index += ftdi_read_data(ftdic, data + index, size-index)) != size); return size; }
int swdptap_init(void) { assert(ftdic != NULL); swdptap_init_internal(); /* This must be investigated in more detail. * As described in STM32 Reference Manual... */ /* swdptap_seq_out(0xFFFF, 16); */ swdptap_reset(); swdptap_seq_out(0xE79E, 16); /* 0b0111100111100111 */ /* swdptap_seq_out(0xffffffff, 32); */ /* swdptap_seq_out(0xfffff, 24); */ swdptap_reset(); platform_buffer_flush(); return 0; }
void swdptap_turnaround(uint8_t dir) { static uint8_t olddir = 0; //DEBUG("%s", dir ? "\n-> ":"\n<- "); platform_buffer_flush(); if(dir == olddir) return; olddir = dir; if(dir) /* SWDIO goes to input */ assert(ftdi_set_bitmode(ftdic, 0xA3, BITMODE_BITBANG) == 0); /* One clock cycle */ ftdi_write_data(ftdic, "\xAB\xA8", 2); if(!dir) /* SWDIO goes to output */ assert(ftdi_set_bitmode(ftdic, 0xAB, BITMODE_BITBANG) == 0); }
static void swdptap_init_internal(void) { int err; if((err = ftdi_set_bitmode(ftdic, 0, BITMODE_RESET)) || (err = ftdi_set_bitmode(ftdic, 0, BITMODE_MPSSE))) { fprintf(stderr, "ftdi_set_bitmode: %d: %s\n", err, ftdi_get_error_string(ftdic)); abort(); } uint8_t setup[] = { DIS_DIV_5, TCK_DIVISOR, 0, 1, LOOPBACK_END }; platform_buffer_write(setup, sizeof(setup)); swdptap_set_bits(); platform_buffer_flush(); }
void platform_srst_set_val(bool assert) { (void)assert; platform_buffer_flush(); }