Re: Raspberry Pi 3B USB Printing Issue
- Reply: Hans Petter Selasky : "Re: Raspberry Pi 3B USB Printing Issue"
- In reply to: Archimedes Gaviola : "Re: Raspberry Pi 3B USB Printing Issue"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 15 Mar 2022 04:57:26 UTC
On Mon, Mar 14, 2022 at 6:12 PM Archimedes Gaviola < archimedes.gaviola@gmail.com> wrote: > > > On Mon, Mar 14, 2022 at 5:31 PM Hans Petter Selasky <hps@selasky.org> > wrote: > >> On 3/14/22 10:20, Archimedes Gaviola wrote: >> > On Sun, Mar 13, 2022 at 11:25 PM Archimedes Gaviola < >> > archimedes.gaviola@gmail.com> wrote: >> > >> >> >> >> >> >> On Sun, Mar 13, 2022 at 2:27 PM Archimedes Gaviola < >> >> archimedes.gaviola@gmail.com> wrote: >> >> >> >>> >> >>> >> >>> On Sun, Mar 13, 2022 at 12:38 AM Hans Petter Selasky <hps@selasky.org >> > >> >>> wrote: >> >>> >> >>>> On 3/12/22 16:31, Archimedes Gaviola wrote: >> >>>>>> >> >>>>>> IOERROR usually means an electrical error. The RPI3B will use a >> >>>>>> transaction translator for the FULL speed traffic, which is driven >> by >> >>>>>> software. >> >>>>> >> >>>> >> >>>> Hi Archimedes, >> >>>> >> >>>>> Hi Hans, >> >>>>> >> >>>>> I'm curious about the transaction translator you've mentioned, any >> >>>> idea why >> >>>>> there's a need for translation and what is being translated? >> >>>> >> >>>> When the High Speed USB HUB was invented, there was a need to support >> >>>> FULL and LOW speed USB transactions. Because FULL and LOW speed >> >>>> transactions are slow and take up much bandwidth, a transactions >> >>>> translator was invented which translates between High Speed USB and >> >>>> FULL/LOW speed USB. That means the RPi 3B consists of a single USB >> HIGH >> >>>> speed port, followed by a USB HUB. These transactions are not >> visible in >> >>>> usbdump . >> >>>> >> >>>> >Does this only >> >>>>> happen when RPi 3B (acting as host controller) is transmitting data >> to >> >>>> the >> >>>>> Epson printer? Are translation events visible in the usbdump? In >> this >> >>>> case >> >>>>> there's a way to possibly track what's going on and how to identify >> any >> >>>>> info that is being translated? >> >>>> >> >>>> By turning on the HC debugging, you can possibly track via debug >> >>>> messages what is going on. Maybe it is a timing issue, that the SW is >> >>>> too slow serving the micro transactions. >> >>>> >> >>>> Any idea also if translation is being >> >>>>> performed in RPi 4B? >> >>>> >> >>>> The later RPi's do the transaction translator bits in HW or via the >> XHCI >> >>>> block. >> >>>> >> >>>> As I have conducted several printing cases with my >> >>>>> Epson printer without any issues with either of the 4 ports. >> >>>>> >> >>>>> Sorry for these questions as I am catching-up to the USB technology >> >>>>> internal workings under the hood. >> >>>> >> >>>> You are welcome! >> >>>> >> >>> >> >>> >> >>> Thank you so much Hans for answering my questions, really appreciate >> it! >> >>> I have a much better understanding now. >> >>> >> >>> I came from testing with 13.0-RELEASE having the same RPi 3B hardware >> and >> >>> setup and it's very stable. I haven't encountered any IOERROR and >> >>> incomplete printed outputs that were encountered with 14.0-CURRENT >> >>> (February 24, 2022). By the way, I found in the repository here >> >>> https://download.freebsd.org/snapshots/arm64/aarch64/ISO-IMAGES/14.0/ >> >>> that there were two latest snapshots released dated March 3 and March >> 10, >> >>> respectively. I need to take printing tests first, especially the >> latest to >> >>> check if it also manifests before I go back to the Feb. 24 snapshot >> and do >> >>> a thorough test with debugging. I'll provide updates for any >> observations. >> >>> >> >>> Thanks, >> >>> Archimedes >> >>> >> >> >> >> >> >> Hi Hans, >> >> >> >> Initial testing conducted with the latest 14.0-CURRENT (March 10, 2022 >> >> snapshot) seems to be stable. Another test will be performed tomorrow. >> >> >> >> Thanks, >> >> Archimedes >> >> >> > >> > Hi Hans, >> > >> > I still encountered the issue this morning with 14.0-CURRENT (March 10, >> > 2022 snapshot). I just noticed when I left my RPi 3B idle for a long >> period >> > of time (2-3 hours and more) and started printing, then the issue >> pops-up. >> > Another concern I encountered was when I started enabling >> > hw.usb.dwc_otg.debug but after 1-2 minutes my USB keyboard and network >> > interface (remotely connected over SSH from my laptop) seemed to freeze >> and >> > I got disconnected. >> > >> > freebsd@generic:~ % uname -a >> > FreeBSD generic 14.0-CURRENT FreeBSD 14.0-CURRENT #0 >> > main-n253697-f1d450ddee6: Thu Mar 10 09:32:38 UTC 2022 >> > root@releng1.nyi.freebsd.org:/usr/obj/usr/src/arm64.aarch64/sys/GENERIC >> > arm64 >> > >> > root@generic:~ # sysctl -w hw.usb.dwc_otg.debug=1 >> > hw.usb.dwc_otg.debug: 0 -> 1 >> > >> > See attached initial debug info (no printing testing yet). >> > > > Hi Hans, > > >> >> Hi, >> >> Nothing obvious there. >> >> Maybe you need to add a conditional to DPRINTF's in the fast path, to >> only print for a certain device, to reduce the debug prints. >> >> How many USB devices are connected? >> > > Only two devices, one is my USB keyboard and the other one is my Epson > printer. > > >> >> One experiment you might try is to comment out: >> >> usbd_transfer_submit(xfer); >> >> in >> >> uhub_intr_callback() >> >> in >> >> /usr/src/sys/dev/usb/usb_hub.c >> >> It will save some USB resources, but also makes USB enumeration a bit >> slower. > > > This is noted, I'll try. > > >> Maybe the chip is out of USB HW endpoints and is only polling >> for RX data ... >> > > This is noted as well, we'll probably see later what's going on. I'll get > back to you once I recompile the kernel and perform the testing. > > Thanks, > Archimedes > Hi Hans, I did comment-out usbd_transfer_submit(xfer) and still the same behavior is experienced when hw.usb.dwc_otg.debug is enabled. The system seems to freeze as my USB keyboard is unresponsive and I cannot connect over the Ethernet NIC with SSH. I can't print and capture. freebsd@generic:/usr/src/sys/dev/usb % diff -Nur usb_hub.c.orig usb_hub.c --- usb_hub.c.orig 2022-03-14 22:37:03.162678000 +0800 +++ usb_hub.c 2022-03-14 22:38:23.832660000 +0800 @@ -202,7 +202,7 @@ case USB_ST_SETUP: usbd_xfer_set_frame_len(xfer, 0, usbd_xfer_max_len(xfer)); - usbd_transfer_submit(xfer); + /* usbd_transfer_submit(xfer); */ break; Let me know our next step. Thanks, Archimedes