diff --git a/project/beagle-test/init.c b/project/beagle-test/init.c
index afa5d34..12a0fbf 100644
--- a/project/beagle-test/init.c
+++ b/project/beagle-test/init.c
@@ -24,6 +24,26 @@
 #include <arch/arm.h>
 #include <app/console.h>
 #include <app/tests.h>
+#include <dev/usb.h>
+
+#include "usb_descriptors.h"
+
+static usb_config config = { 
+	.lowspeed = {
+		.device = { dev_descr, sizeof(dev_descr) },
+		.device_qual = { devqual_descr, sizeof(devqual_descr) },
+		.config = { cfg_descr_lowspeed, sizeof(cfg_descr_lowspeed) },
+	},
+	.highspeed = {
+		.device = { dev_descr, sizeof(dev_descr) },
+		.device_qual = { devqual_descr, sizeof(devqual_descr) },
+		.config = { cfg_descr_highspeed, sizeof(cfg_descr_highspeed) },
+	},
+	.device_string = { dstring, sizeof(dstring) },
+	.mfg_string = { mstring, sizeof(mstring) },
+	.serial_string = { NULL, 0 },
+	.langid = { langid, sizeof(langid) }
+};
 
 extern int string_tests(void);
 extern int thread_tests(void);
@@ -33,6 +53,10 @@
 	console_init();
 	tests_init();
 	
+	usb_init();
+	usb_setup(&config);
+	usb_start();
+
 	console_start();
 }
 
diff --git a/project/beagle-test/usb_descriptors.h b/project/beagle-test/usb_descriptors.h
new file mode 100644
index 0000000..1bfce4c
--- /dev/null
+++ b/project/beagle-test/usb_descriptors.h
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2008 Travis Geiselbrecht
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+#ifndef __USB_DESCRIPTORS_H
+#define __USB_DESCRIPTORS_H
+
+#include <sys/types.h>
+#include <compiler.h>
+
+#define W(w) (w & 0xff), (w >> 8)
+
+/* top level device descriptor */
+static uint8_t __ALIGNED(2) dev_descr[] = {
+    0x12,           /* descriptor length */
+    0x01,           /* Device Descriptor type */
+    W(0x0200),      /* USB Version */
+    0x00,           /* class */
+    0x00,           /* subclass */
+    0x00,           /* protocol */
+    0x40,           /* max packet size, ept0 */
+    W(0x1234),      /* vendor */
+    W(0x5678), /* product */
+    W(0x1000),      /* release */
+    0x01,           /* manufacturer string */
+    0x02,           /* product string */
+    0x00,           /* serialno string */
+    0x01,           /* num configs */
+};
+
+/* high/low speed device qualifier */
+static uint8_t devqual_descr[] = {
+	0x0a,			/* len */
+	0x06,			/* Device Qualifier type */
+	W(0x0200),		/* USB version */
+    0x00,           /* class */
+    0x00,           /* subclass */
+    0x00,           /* protocol */
+    0x40,           /* max packet size, ept0 */
+    0x01,           /* num configs */
+	0x00			/* reserved */
+};
+
+static uint8_t cfg_descr_lowspeed[] = {
+    0x09,           /* Length of Cfg Descr */
+    0x02,           /* Type of Cfg Descr */
+    W(0x09),        /* Total Length (incl ifc, ept) */
+    0x00,           /* # Interfaces */
+    0x01,           /* Cfg Value */
+    0x00,           /* Cfg String */
+    0xc0,           /* Attributes -- self powered */
+    0,              /* Power Consumption - none */
+};
+
+static uint8_t cfg_descr_highspeed[] = {
+    0x09,           /* Length of Cfg Descr */
+    0x02,           /* Type of Cfg Descr */
+    W(0x09),        /* Total Length (incl ifc, ept) */
+    0x00,           /* # Interfaces */
+    0x01,           /* Cfg Value */
+    0x00,           /* Cfg String */
+    0xc0,           /* Attributes -- self powered */
+    0,              /* Power Consumption - none */
+};
+
+static ushort dstring[] = {
+    0x0306, /* numchars * 2 + 2 */
+    'l', 'k'
+};
+
+static ushort mstring[] = {
+    0x0310, /* numchars * 2 + 2 */
+    'l', 'k', ',', 'i', 'n', 'c', '.'
+};
+
+static uchar langid[] __ALIGNED(2) = { 0x04, 0x03, 0x09, 0x04 };
+
+#endif
+
