On Mon, Jun 7, 2021 at 9:53 AM Johan Hovold <johan@xxxxxxxxxx> wrote: > > On Mon, Jun 07, 2021 at 09:44:59AM -0700, David Frey wrote: > > On Sat, Jun 5, 2021 at 3:13 AM Johan Hovold <johan@xxxxxxxxxx> wrote: > > > > > > I found an errata for A01 on here, but no mention if this particular > > > bug: > > > > > > https://www.silabs.com/documents/public/pcns/190315471-CP2102N-Product-Revision-with-Datasheet-and-Errata-Update.pdf > > > > I believe this document has some more errata details: > > https://www.silabs.com/documents/public/errata/cp2102n-errata.pdf' > > Thanks for the link. > > This seems to confirm that this is a known issue with A01 that was fixed > in A02: > > 3.6 CP2102N_E104 – IO Exception in .NET Applications when > Manually Controlling RTS > > The CP2102N uses the incorrect byte of the SERIAL_HANDFLOW > structure > (https://msdn.microsoft.com/en-us/library/windows/hard- > ware/jj680685(v=vs.85).aspx) to control the RTS signal. Instead > of looking at the first byte of FlowReplace, the device is > reading the first byte of the XonLimit and interpreting that as > the first byte of FlowReplace. > > Applications written in .NET set the Xon/Xoff limits to 160, > equal to 0xA0, which the CP2102N interprets as hardware flow > control, and so it returns an error when manually setting RTS. > > Now we just need to figure out how to determine the firmware revision. > > Johan I made a bit of progress. I found that CP210xManufacturing.dll was bundled with Simplicity Studio and in the same folder as the DLL was inspect_usbxpress.exe. It looks like that tool is able to report the firmware version of the device. In the output below, the first run is against the device that I am able to program successfully on any kernel and that shows firmware 1.0.6. The second run is against a device that I can't program and it shows firmware version 1.0.4. I recall reading some information that 1.0.6 is A02 and that 1.0.4 is A01, but I think there might have been another firmware revision that's also A01 (maybe 1.0.2?). I can't find the source of this information anymore. I'm going to try to figure out how to use wireshark to capture USB traffic now. C:\SiliconLabs\SimplicityStudio\v5\developer\adapter_packs\inspect_usbxpress>.\inspect_usbxpress.exe -slist serial_no = deviceCount = 1 device (0) { SoftIndex = 0 adapterLabel = CP2102N USB to UART Bridge Controller (ID:0) SerialNo = 1017bfe99d98e8118ea47540c3e5cfbd Vid = 0 Pid = 0 PartNumber = 32 BoardID = BoardCount = 0 FirmwareVersion = 1.0.6 Name = cp2102N version 1.0.6 Type = CP210x Family = USBXpress Locked = 1 } C:\SiliconLabs\SimplicityStudio\v5\developer\adapter_packs\inspect_usbxpress>.\inspect_usbxpress.exe -slist serial_no = deviceCount = 1 device (0) { SoftIndex = 0 adapterLabel = CP2102N USB to UART Bridge Controller (ID:0) SerialNo = f06e721e74e1ea11bd9ddc2d9a583cc7 Vid = 0 Pid = 0 PartNumber = 32 BoardID = BoardCount = 0 FirmwareVersion = 1.0.4 Name = cp2102N version 1.0.4 Type = CP210x Family = USBXpress Locked = 1 }