diff --git a/klippy/mcu.py b/klippy/mcu.py
index cb07658fc..2facba0a1 100644
--- a/klippy/mcu.py
+++ b/klippy/mcu.py
@@ -614,8 +614,11 @@ class MCU:
                 and not os.path.exists(self._serialport)):
                 # Try toggling usb power
                 self._check_restart("enable power")
-            self._serial.connect()
-            self._clocksync.connect(self._serial)
+            try:
+                self._serial.connect()
+                self._clocksync.connect(self._serial)
+            except serialhdl.error as e:
+                raise error(str(e))
         msgparser = self._serial.get_msgparser()
         name = self._name
         log_info = [
diff --git a/klippy/serialhdl.py b/klippy/serialhdl.py
index 0f182da2d..6284fe4de 100644
--- a/klippy/serialhdl.py
+++ b/klippy/serialhdl.py
@@ -67,8 +67,11 @@ class SerialReader:
     def connect(self):
         # Initial connection
         logging.info("Starting serial connect")
+        start_time = self.reactor.monotonic()
         while 1:
-            starttime = self.reactor.monotonic()
+            connect_time = self.reactor.monotonic()
+            if connect_time > start_time + 150.:
+                raise error("Unable to connect")
             try:
                 if self.baud:
                     self.ser = serial.Serial(
@@ -77,7 +80,7 @@ class SerialReader:
                     self.ser = open(self.serialport, 'rb+')
             except (OSError, IOError, serial.SerialException) as e:
                 logging.warn("Unable to open port: %s", e)
-                self.reactor.pause(starttime + 5.)
+                self.reactor.pause(connect_time + 5.)
                 continue
             if self.baud:
                 stk500v2_leave(self.ser, self.reactor)
@@ -87,7 +90,7 @@ class SerialReader:
             self.background_thread.start()
             # Obtain and load the data dictionary from the firmware
             try:
-                identify_data = self._get_identify_data(starttime + 5.)
+                identify_data = self._get_identify_data(connect_time + 5.)
             except error as e:
                 logging.exception("Timeout on serial connect")
                 self.disconnect()