Here is my hack to make the USRP work with USB 1.1. I haven’t been able
to do
extensive testing with them unfortunately, but they did work with my
OMAP OSK
board. I was running the OSSIE SCA rather than gnu radio, but I could
get the
gnu radio test programs to work at high interpolation/decimation rates.
Hopefully, someone can take these and make sure they don’t break USB 2.0
support and get them into the USRP code
Philip
diff -ur usrp-0.8/firmware/include/fpga_regs_standard.h
usrp-0.8-usb11/firmware/include/fpga_regs_standard.h
— usrp-0.8/firmware/include/fpga_regs_standard.h 2004-12-10
23:25:42.000000000 -0500
+++ usrp-0.8-usb11/firmware/include/fpga_regs_standard.h
2005-04-18
15:48:58.000000000 -0400
@@ -103,6 +103,7 @@
// 3 chan 1 Q
#define FR_TX_MUX 39
+#define FR_USB_PACKET_SIZE 40
#endif /* INCLUDED_FPGA_REGS_STANDARD_H */
diff -ur usrp-0.8/firmware/src/common/usrp_common.c
usrp-0.8-usb11/firmware/src/common/usrp_common.c
— usrp-0.8/firmware/src/common/usrp_common.c 2004-03-28
17:28:58.000000000
-0500
+++ usrp-0.8-usb11/firmware/src/common/usrp_common.c 2005-04-17
12:10:26.000000000 -0400
@@ -101,9 +101,13 @@
// set autoin length for EP6
// FIXME should be f(enumeration)
- EP6AUTOINLENH = (512) >> 8; SYNCDELAY; // this is the length for
high
speed- EP6AUTOINLENL = (512) & 0xff; SYNCDELAY;
- if (USBCS & bmHSM) {
- EP6AUTOINLENH = (512) >> 8; SYNCDELAY; // this is the
length for
high speed - EP6AUTOINLENL = (512) & 0xff; SYNCDELAY;
- } else {
- EP6AUTOINLENH = (64) >> 8; SYNCDELAY; // this is the length for
full
speed+ EP6AUTOINLENL = (64) & 0xff; SYNCDELAY; - }
init_board ();
}
diff -ur usrp-0.8/firmware/src/usrp2/usb_descriptors.a51
usrp-0.8-usb11/firmware/src/usrp2/usb_descriptors.a51
— usrp-0.8/firmware/src/usrp2/usb_descriptors.a51 2004-12-08
16:11:24.000000000 -0500
+++ usrp-0.8-usb11/firmware/src/usrp2/usb_descriptors.a51
2005-04-14
11:51:07.000000000 -0400
@@ -236,7 +236,7 @@
.db DSCR_CONFIG
.db <(_full_speed_config_descr_end -
_full_speed_config_descr) ;
LSB .db >(_full_speed_config_descr_end -
_full_speed_config_descr)
; MSB- .db 1 ; bNumInterfaces
-
.db 3 ; bNumInterfaces .db 1 ; bConfigurationValue .db 0 ; iConfiguration .db 0x80 | bmSELF_POWERED ; bmAttributes
@@ -253,7 +253,53 @@
.db 0xff ; bInterfaceSubClass (vendor specific)
.db 0xff ; bInterfaceProtocol (vendor specific)
.db SI_COMMAND_AND_STATUS ; iInterface (description)
+
-
;; interface descriptor 1 (transmit path, ep2 OUT BULK)
-
.db DSCR_INTRFC_LEN
-
.db DSCR_INTRFC
-
.db 1 ; bInterfaceNumber (zero based)
-
.db 0 ; bAlternateSetting
-
.db 1 ; bNumEndpoints
-
.db 0xff ; bInterfaceClass (vendor specific)
-
.db 0xff ; bInterfaceSubClass (vendor specific)
-
.db 0xff ; bInterfaceProtocol (vendor specific)
-
.db SI_TX_PATH ; iInterface (description)
-
;; interface 1's end point
-
.db DSCR_ENDPNT_LEN
-
.db DSCR_ENDPNT
-
.db 0x02 ; bEndpointAddress (ep 2 OUT)
-
.db ET_BULK ; bmAttributes
-
.db <64 ; wMaxPacketSize (LSB)
-
.db >64 ; wMaxPacketSize (MSB)
-
.db 0 ; bInterval (iso only)
-
;; interface descriptor 2 (receive path, ep6 IN BULK)
-
.db DSCR_INTRFC_LEN
-
.db DSCR_INTRFC
-
.db 2 ; bInterfaceNumber (zero based)
-
.db 0 ; bAlternateSetting
-
.db 1 ; bNumEndpoints
-
.db 0xff ; bInterfaceClass (vendor specific)
-
.db 0xff ; bInterfaceSubClass (vendor specific)
-
.db 0xff ; bInterfaceProtocol (vendor specific)
-
.db SI_RX_PATH ; iInterface (description)
-
;; interface 2's end point
-
.db DSCR_ENDPNT_LEN
-
.db DSCR_ENDPNT
-
.db 0x86 ; bEndpointAddress (ep 6 IN)
-
.db ET_BULK ; bmAttributes
-
.db <64 ; wMaxPacketSize (LSB)
-
.db >64 ; wMaxPacketSize (MSB)
-
.db 0 ; bInterval (iso only)
_full_speed_config_descr_end: