Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
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);
}
Ejemplo n.º 7
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();
}
Ejemplo n.º 8
0
void platform_srst_set_val(bool assert)
{
	(void)assert;
	platform_buffer_flush();
}