remote: usb: use 0x43/0xc3 for packet header
authorSean Cross <sean@xobs.io>
Tue, 21 May 2019 01:14:18 +0000 (09:14 +0800)
committerSean Cross <sean@xobs.io>
Tue, 21 May 2019 01:14:18 +0000 (09:14 +0800)
The previous value -- 0xc0 -- is used by Windows all the time to query
special descriptors.  This was causing a conflict when using the USB
bridge on a Windows device.

Change the magic packet from "Vendor: Device" queries to "Vendor:
Other" by setting the bottom two bits.

Signed-off-by: Sean Cross <sean@xobs.io>
litex/tools/remote/comm_usb.py

index 1e4ea1e477f5cdc84a91df157dbeb5f357757262..53ee4c8182193ddfb0fb807cc7c566fb8cae5e04 100644 (file)
@@ -20,12 +20,12 @@ import time
 # The SETUP packet looks like this:
 #
 # +----+----+----------+----+----+
-# | C0 | 00 | ADDRESS  | 04 | 00 |   read packet
+# | C3 | 00 | ADDRESS  | 04 | 00 |   read packet
 # +----+----+----------+----+----+
 #   1    1        4      1    1
 #
 # +----+----+----------+----+----+
-# | 40 | 00 | ADDRESS  | 04 | 00 |   write packet
+# | 43 | 00 | ADDRESS  | 04 | 00 |   write packet
 # +----+----+----------+----+----+
 #   1    1        4      1    1
 #
@@ -37,8 +37,8 @@ import time
 # byte indicates what type of packet it is, and that it is a Wishbone Bridge
 # packet.  This is the value "0x40" (VENDOR type packet destined for DEVICE)
 # with the "Data Phase Transfer" bit either set or cleared:
-#     - Read:  0xc0
-#     - Write: 0x40
+#     - Read:  0xc3
+#     - Write: 0x43
 #
 # The next byte is bRequest, which in the current implementation is unused.
 # Set this value to 0.
@@ -103,7 +103,7 @@ class CommUSB:
 
     def usb_read(self, addr, depth=0):
         try:
-            value = self.dev.ctrl_transfer(bmRequestType=0xc0,
+            value = self.dev.ctrl_transfer(bmRequestType=0xc3,
                         bRequest=0x00,
                         wValue=addr & 0xffff,
                         wIndex=(addr >> 16) & 0xffff,
@@ -127,7 +127,7 @@ class CommUSB:
 
     def usb_write(self, addr, value, depth=0):
         try:
-            self.dev.ctrl_transfer(bmRequestType=0x40, bRequest=0x00,
+            self.dev.ctrl_transfer(bmRequestType=0x43, bRequest=0x00,
                     wValue=addr & 0xffff,
                     wIndex=(addr >> 16) & 0xffff,
                     data_or_wLength=bytes([(value >> 0) & 0xff,