From faf6554c895b76cb6f5d3747b72f34b2f90c4c3a Mon Sep 17 00:00:00 2001 From: Sean Cross Date: Tue, 21 May 2019 09:14:18 +0800 Subject: [PATCH] remote: usb: use 0x43/0xc3 for packet header 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 --- litex/tools/remote/comm_usb.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/litex/tools/remote/comm_usb.py b/litex/tools/remote/comm_usb.py index 1e4ea1e4..53ee4c81 100644 --- a/litex/tools/remote/comm_usb.py +++ b/litex/tools/remote/comm_usb.py @@ -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, -- 2.30.2