diff --git a/src/updi_link.c b/src/updi_link.c index 684b6b8d..1f179398 100644 --- a/src/updi_link.c +++ b/src/updi_link.c @@ -53,7 +53,7 @@ static void updi_set_rtsdtr_mode(PROGRAMMER* pgm) static int updi_physical_open(PROGRAMMER* pgm, int baudrate, unsigned long cflags) { - serial_recv_timeout = 100; + serial_recv_timeout = 1000; union pinfo pinfo; pinfo.serialinfo.baud = baudrate; @@ -155,6 +155,8 @@ static int updi_physical_send_double_break(PROGRAMMER * pgm) serial_send(&pgm->fd, buffer, 1); serial_recv(&pgm->fd, buffer, 1); + serial_drain(&pgm->fd, 0); + if (serial_setparams(&pgm->fd, pgm->baudrate? pgm->baudrate: 115200, SERIAL_8E2) < 0) { return -1; } @@ -196,10 +198,14 @@ int updi_physical_sib(PROGRAMMER * pgm, unsigned char * buffer, uint8_t size) int updi_link_open(PROGRAMMER * pgm) { + unsigned char init_buffer[1]; + if (updi_physical_open(pgm, pgm->baudrate? pgm->baudrate: 115200, SERIAL_8E2) < 0) { return -1; } - return updi_physical_send_double_break(pgm); + + init_buffer[0]=UPDI_BREAK; + return updi_physical_send(pgm, init_buffer, 1); } void updi_link_close(PROGRAMMER * pgm)