Hi Antonio, On 4/2/2019 3:06 PM, Antonio Santagiuliana wrote: > Hello, sending again in plain text mode.. > > > On Tue, Apr 2, 2019 at 11:37 AM Antonio Santagiuliana > <santantonioswap@xxxxxxxxx> wrote: >> >> Hello, >> thank you for the reply. >> We transmit at 46800 bps from 16 devices to the UART side of the UART to USB bridges ( at the moment cp2105 UART to USB bridges ) . >> If we transmit from all of these devices at low throughput small packets of some bytes ( 16 to 64 bytes ) let's say every 20 ms , at the receiver side on the USB host device ( Raspberry PI ) we can follow all of the messages from all of the 16 UART to USB bridges without any problem. >> We can then activate a particular mode by which 1 of the devices connected to one of the UART to USB bridges starts sending data still at the same baudrate, but at much higher throughput, sending packets of 1460 bytes with silence interval between packets of around 20 ms. >> When this happens the normal messages from the other 15 devices appear to be retrieved correctly while these longer messages from the high throughput mode device sometimes miss some bytes , let's say I receive fewer bytes than expected. >> It doesn't appear the problem is the latency of the application layer as I verified it wakes up with short delay. >> if I connect only 1 or 2 devices rather than all of 16 and I activate this high throughput mode on one device , then the system works perfectly. Problem happens when all of the 16 devices are connected and high throughput mode on one device is enabled. >> So I was wondering if we got into a limitation of USB system due to polling rate from the host linked to the fact that the buffers USB 2.0 specified inside these UART-USB bridges are very limited in size ( I think 64 bytes and 32 bytes on the two USB ports of the UART to USB dual bridge ) and the are also translation buffers on the USB hub that could delay further the whole thing. >> I was wondering also if I could raise priority of USB polling that particular device more frequently from the host rather than lopping to the others and I was checking if it could be useful to log events so to see if I can get some clues of what is going on. >> any idea would be welcome. >> thank you >> >> Looks like really bandwidth limitation issue. Actually to analyze that you need to record USB trace to understand what going on the bus. Record debug log to see any delays in transfer starting, etc. Don't think that I can help you with this because it more probably not a bug. Thanks, Minas >> >> On Tue, Apr 2, 2019 at 8:56 AM Minas Harutyunyan <minas.harutyunyan@xxxxxxxxxxxx> wrote: >>> >>> Hi, >>> >>> On 4/1/2019 9:01 PM, Felipe Balbi wrote: >>>> >>>> Hi, >>>> >>>> (I can't answer private queries. Please, always Cc the public mailing >>>> list) >>>> >>>> Antonio Santagiuliana <santantonioswap@xxxxxxxxx> writes: >>>> >>>>> Hello >>>>> I am using RaspberryPI for a project and we want to connect 16 USB to UART >>>>> bridges ( at the moment we are using 8 dual UART cp2105 from Silicon Labs ). >>>>> I have seen your page at : >>>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__dri.freedesktop.org_docs_drm_driver-2Dapi_usb_dwc3.html&d=DwIBAg&c=DPL6_X_6JkXFx7AXWqB0tg&r=cQBKt4q-qzNVC53rNAwuwplH23V61rHQhhULvdLA0U8&m=RfK-uhEeZZ8yf79ch5you3BpE1JNPDHRzgmOGkeLBss&s=rGrgFKpJ6-CEmAtR-hiae64T80Z7oCTx3r4xHn-lf4I&e= >>>>> so I was trying to get tracefs output. >>>>> Problem is that on the /t/events subfolder I cannot find the >>>>> dwc3/enable because >>>>> there is not any /dwc3 in /t/events. >>>>> Because of this I cannot set echo 1 > /t/events/dwc3/enable >>>>> as instead your page says I should do. >>>>> I can only find */t/events/enable* should I activate that ? >>>>> running usb-devices command I get this about the drivers loaded : >>>>> >>>>> T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1 >>>>> D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1 >>>>> P: Vendor=1d6b ProdID=0002 Rev=04.14 >>>>> S: Manufacturer=Linux 4.14.39 dwc_otg_hcd >>>> >>>> You're not using dwc3. That's dwc2, instead. Also, dwc3 tracepoints are >>>> peripheral side only. Host side is a standard xhci, so you would use >>>> xhci tracepoints for that. >>>> >>>> Still, you're using dwc2 from what I can tell. Minas is the maintainer >>>> of that driver. >>>> >>>> >>> It's not dwc2 driver. It's dwc_otg Synopsys reference driver which >>> supplying along with HSOTG core. >>> >>> But what the issue? >>>> >>>> >>>> >>>> >>>>> S: Product=DWC OTG Controller >>>>> S: SerialNumber=3f980000.usb >>>>> C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=0mA >>>>> I: If#=0x0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub >>>>> >>>>> T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 5 >>>>> D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=02 MxPS=64 #Cfgs= 1 >>>>> P: Vendor=0424 ProdID=9514 Rev=02.00 >>>>> C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=2mA >>>>> I: If#=0x0 Alt= 1 #EPs= 1 Cls=09(hub ) Sub=00 Prot=02 Driver=hub >>>>> >>>>> T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=480 MxCh= 0 >>>>> D: Ver= 2.00 Cls=ff(vend.) Sub=00 Prot=01 MxPS=64 #Cfgs= 1 >>>>> P: Vendor=0424 ProdID=ec00 Rev=02.00 >>>>> C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=2mA >>>>> I: If#=0x0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=ff Driver=smsc95xx >>>>> >>>>> T: Bus=01 Lev=02 Prnt=02 Port=01 Cnt=02 Dev#= 14 Spd=480 MxCh= 4 >>>>> D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1 >>>>> P: Vendor=0409 ProdID=005a Rev=01.00 >>>>> C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA >>>>> I: If#=0x0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub >>>>> >>>>> T: Bus=01 Lev=03 Prnt=14 Port=00 Cnt=01 Dev#= 15 Spd=12 MxCh= 0 >>>>> D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 >>>>> P: Vendor=10c4 ProdID=ea70 Rev=01.00 >>>>> S: Manufacturer=Silicon Labs >>>>> S: Product=CP2105 Dual USB to UART Bridge Controller >>>>> S: SerialNumber=008714B9 >>>>> C: #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA >>>>> I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> >>>>> T: Bus=01 Lev=03 Prnt=14 Port=01 Cnt=02 Dev#= 16 Spd=12 MxCh= 0 >>>>> D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 >>>>> P: Vendor=10c4 ProdID=ea70 Rev=01.00 >>>>> S: Manufacturer=Silicon Labs >>>>> S: Product=CP2105 Dual USB to UART Bridge Controller >>>>> S: SerialNumber=0086F956 >>>>> C: #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA >>>>> I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> >>>>> T: Bus=01 Lev=03 Prnt=14 Port=02 Cnt=03 Dev#= 17 Spd=12 MxCh= 0 >>>>> D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 >>>>> P: Vendor=10c4 ProdID=ea70 Rev=01.00 >>>>> S: Manufacturer=Silicon Labs >>>>> S: Product=CP2105 Dual USB to UART Bridge Controller >>>>> S: SerialNumber=00870FBD >>>>> C: #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA >>>>> I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> >>>>> T: Bus=01 Lev=03 Prnt=14 Port=03 Cnt=04 Dev#= 18 Spd=480 MxCh= 4 >>>>> D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1 >>>>> P: Vendor=0409 ProdID=005a Rev=01.00 >>>>> C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA >>>>> I: If#=0x0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub >>>>> >>>>> T: Bus=01 Lev=04 Prnt=18 Port=00 Cnt=01 Dev#= 19 Spd=12 MxCh= 0 >>>>> D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 >>>>> P: Vendor=10c4 ProdID=ea70 Rev=01.00 >>>>> S: Manufacturer=Silicon Labs >>>>> S: Product=CP2105 Dual USB to UART Bridge Controller >>>>> S: SerialNumber=00870E54 >>>>> C: #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA >>>>> I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> >>>>> T: Bus=01 Lev=04 Prnt=18 Port=01 Cnt=02 Dev#= 20 Spd=12 MxCh= 0 >>>>> D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 >>>>> P: Vendor=10c4 ProdID=ea70 Rev=01.00 >>>>> S: Manufacturer=Silicon Labs >>>>> S: Product=CP2105 Dual USB to UART Bridge Controller >>>>> S: SerialNumber=00870B3F >>>>> C: #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA >>>>> I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> >>>>> T: Bus=01 Lev=04 Prnt=18 Port=02 Cnt=03 Dev#= 21 Spd=12 MxCh= 0 >>>>> D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 >>>>> P: Vendor=10c4 ProdID=ea70 Rev=01.00 >>>>> S: Manufacturer=Silicon Labs >>>>> S: Product=CP2105 Dual USB to UART Bridge Controller >>>>> S: SerialNumber=0086F938 >>>>> C: #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA >>>>> I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> >>>>> T: Bus=01 Lev=04 Prnt=18 Port=03 Cnt=04 Dev#= 22 Spd=12 MxCh= 0 >>>>> D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 >>>>> P: Vendor=10c4 ProdID=ea70 Rev=01.00 >>>>> S: Manufacturer=Silicon Labs >>>>> S: Product=CP2105 Dual USB to UART Bridge Controller >>>>> S: SerialNumber=00870981 >>>>> C: #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA >>>>> I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> >>>>> T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=03 Dev#= 23 Spd=12 MxCh= 0 >>>>> D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 >>>>> P: Vendor=10c4 ProdID=ea70 Rev=01.00 >>>>> S: Manufacturer=Silicon Labs >>>>> S: Product=CP2105 Dual USB to UART Bridge Controller >>>>> S: SerialNumber=0086E7E6 >>>>> C: #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA >>>>> I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=vcpsilabs >>>>> >>>>> >>>>> >>>>> >>>>> thank you very much for your page , very interesting. >>>>> >>>>> >>>>> Kind Regards >>>>> Antonio Santagiuliana >>>> >>> >>> Thanks, >>> Minas >