PWM3 = IO3
 PWM4 = IO4
 
-pwmOuts = ( ((1, 0), PWM0), ((1, 2), PWM2), ((1, 3), PWM3), ((1, 4), PWM4) )
\ No newline at end of file
+# orderd as (channel, pin), id
+pwmOuts = ( ((1, 0), PWM0), ((1, 2), PWM2), ((1, 3), PWM3), ((1, 4), PWM4) )
+
+UART1_TX = IO4
+UART1_RX = IO3
+
+# ordered as uartId, txId, rxId
+uartPorts = ( (0, UART1_TX, UART1_RX), )
\ No newline at end of file
 
--- /dev/null
+import time
+
+class UART():
+    ESCAPE_SEQUENCE = "+++UART0"
+    def __init__(self,
+                 portid,
+                 baudrate=9600,
+                 bits=8,
+                 parity=None,
+                 stop=1,
+                 timeout=1000,
+                 read_buf_len=None,
+                 flow=None):
+        from adafruit_blinka.microcontroller.nova import Connection
+        self._nova = Connection.getInstance()
+
+        self._id = portid
+        self._baudrate = baudrate
+        self._parity = parity
+        self._bits = bits
+        self._stop = stop
+        self._timeout = timeout
+
+        if flow is not None:  # default 0
+            raise NotImplementedError(
+                "Parameter '{}' unsupported on Binho Nova".format(
+                    "flow"))
+
+        self._nova.setOperationMode(self._id, 'UART')
+        self._nova.setBaudRateUART(self._id, baudrate)
+        self._nova.setDataBitsUART(self._id, bits)
+        self._nova.setParityUART(self._id, parity)
+        self._nova.setStopBitsUART(self._id, stop)
+        self._nova.setEscapeSequenceUART(self._id, UART.ESCAPE_SEQUENCE)
+        self._nova.beginBridgeUART(self._id)
+
+    def deinit(self):
+        self._nova.writeBridgeUART(UART.ESCAPE_SEQUENCE)
+        self._nova.stopBridgeUART(UART.ESCAPE_SEQUENCE)
+
+    def read(self, nbytes=None):
+        if nbytes is None:
+            return None
+        data = bytearray()
+        for i in range(nbytes):
+            data.append(ord(self._nova.readBridgeUART()))
+        return data
+
+    def readinto(self, buf, nbytes=None):
+        if nbytes is None:
+            return None
+        for i in range(nbytes):
+            buf.append(ord(self._nova.readBridgeUART()))
+        return buf
+
+    def readline(self):
+        out = self._nova.readBridgeUART()
+        line = out
+        while out != '\r':
+            out = self._nova.readBridgeUART()
+            line += out
+        return line
+
+    def write(self, buf):
+        return self._nova.writeBridgeUART(buf)
\ No newline at end of file
 
                  flow=None):
         if detector.board.any_embedded_linux:
             raise RuntimeError('busio.UART not supported on this platform. Please use pyserial instead.')
+        elif detector.board.binho_nova:
+            from adafruit_blinka.microcontroller.nova.uart import UART as _UART
         else:
             from machine import UART as _UART
-        from microcontroller.pin import uartPorts
+
+        if detector.board.binho_nova:
+            from adafruit_blinka.microcontroller.nova.pin import uartPorts
+        else:
+            from microcontroller.pin import uartPorts
 
         self.baudrate = baudrate
 
             )
 
     def deinit(self):
+        if detector.board.binho_nova:
+            self._uart.deinit()
         self._uart = None
 
     def read(self, nbytes=None):