jtagtap_tms_seq(uint32_t MS, int ticks) { while(ticks--) { jtagtap_next(MS & 1, 1); MS >>= 1; } }
int jtagtap_init(void) { TMS_SET_MODE(); /* Go to JTAG mode for SWJ-DP */ for(int i = 0; i <= 50; i++) jtagtap_next(1, 0); /* Reset SW-DP */ jtagtap_tms_seq(0xE73C, 16); /* SWD to JTAG sequence */ jtagtap_soft_reset(); return 0; }
int jtagtap_init(void) { TMS_SET_MODE(); for(int i = 0; i <= 50; i++) jtagtap_next(1,0); jtagtap_tms_seq(0xE73C, 16); jtagtap_soft_reset(); return 0; }
jtagtap_tdi_seq(const uint8_t final_tms, const uint8_t *DI, int ticks) { uint8_t index = 1; while(ticks--) { jtagtap_next(ticks?0:final_tms, *DI & index); if(!(index <<= 1)) { index = 1; DI++; } } }
int jtagtap_init(void) { gpio_set_mode(TMS_PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, TMS_PIN); /* Go to JTAG mode for SWJ-DP */ for(int i = 0; i <= 50; i++) jtagtap_next(1, 0); /* Reset SW-DP */ jtagtap_tms_seq(0xE73C, 16); /* SWD to JTAG sequence */ jtagtap_soft_reset(); return 0; }
jtagtap_tdi_tdo_seq(uint8_t *DO, const uint8_t final_tms, const uint8_t *DI, int ticks) { uint8_t index = 1; while(ticks--) { if(jtagtap_next(ticks?0:final_tms, *DI & index)) { *DO |= index; } else { *DO &= ~index; } if(!(index <<= 1)) { index = 1; DI++; DO++; } } }
int jtagtap_init(void) { int err; assert(ftdic != NULL); 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(); } assert(ftdi_write_data(ftdic, "\x8B\x86\x06\x00\x80\xA8\xAB\x85", 8) == 8); /* Go to JTAG mode for SWJ-DP */ for(int i = 0; i <= 50; i++) jtagtap_next(1, 0); /* Reset SW-DP */ jtagtap_tms_seq(0xE73C, 16); /* SWD to JTAG sequence */ jtagtap_soft_reset(); return 0; }