Re: Raspberry Pi 3B USB Printing Issue

From: Archimedes Gaviola <archimedes.gaviola_at_gmail.com>
Date: Mon, 14 Mar 2022 10:12:40 UTC
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