diff --git a/usb_serial.c b/usb_serial.c
new file mode 100644
index 0000000000000000000000000000000000000000..be3e1a5215eff42998b428dde3f37eb3bfab2ca7
--- /dev/null
+++ b/usb_serial.c
@@ -0,0 +1,35 @@
+#include "usb_serial.h"
+
+void usb_init(void) {
+    tusb_init();  // Setup USB
+}
+
+int usb_write(const uint8_t *buf, int len) {
+    if (!tud_cdc_connected()) return -1;
+
+    int sent_total = 0;
+    while (len > 0) {
+        int sent = tud_cdc_write(buf, len);
+        if (sent < 0) return sent;
+        tud_cdc_write_flush();
+        buf += sent;
+        len -= sent;
+        sent_total += sent;
+    }
+    return sent_total;
+}
+
+int usb_read(uint8_t *buf, int len) {
+    if (tud_cdc_available()) {
+        return tud_cdc_read(buf, len);
+    }
+    return 0;
+}
+
+void usb_cleanup(void) {
+  
+}
+
+bool usb_connected(void) {
+    return tud_cdc_connected();
+}