diff --git a/upload/upload.go b/upload/upload.go index 6417f91fa..14a4c1055 100644 --- a/upload/upload.go +++ b/upload/upload.go @@ -143,37 +143,48 @@ func reset(port string, wait bool, l Logger) (string, error) { // Get port list before reset ports, err := serial.GetPortsList() - debug(l, "Get port list before reset") + info(l, "Get port list before reset") if err != nil { return "", errors.Wrapf(err, "Get port list before reset") } else { - debug(l, ports) + info(l, ports) } - // Open port - mode := &serial.Mode{ - BaudRate: 1200, + // Touch port at 1200bps + err = touchSerialPortAt1200bps(port, l) + if err != nil { + return "", errors.Wrapf(err, "1200bps Touch") + } + + // Wait for port to disappear and reappear + if wait { + port = waitReset(ports, l) } - p, err := serial.Open(port, mode) - debug(l, "Open port", port) + + return port, nil +} + +func touchSerialPortAt1200bps(port string, l Logger) error { + info(l, "Touching port ", port, " at 1200bps") + + // Open port + p, err := serial.Open(port, &serial.Mode{BaudRate: 1200}) if err != nil { - return "", errors.Wrapf(err, "Open port %s", port) + return errors.Wrapf(err, "Open port %s", port) } + defer p.Close() // Set DTR err = p.SetDTR(false) - debug(l, "Set DTR") + info(l, "Set DTR off") if err != nil { - return "", errors.Wrapf(err, "Can't set DTR") + return errors.Wrapf(err, "Can't set DTR") } - p.Close() - // Wait for port to disappear and reappear - if wait { - port = waitReset(ports, l) - } + // Wait a bit to allow restart of the board + time.Sleep(200 * time.Millisecond) - return port, nil + return nil } // waitReset is meant to be called just after a reset. It watches the ports connected