Re: Raspberry Pi 3B USB Printing Issue

Hans Petter Selasky <[email protected]>
Newsgroups gmane.os.freebsd.devel.arm
Message-ID <[email protected]>
On 3/14/22 10:20, Archimedes Gaviola wrote:
> On Sun, Mar 13, 2022 at 11:25 PM Archimedes Gaviola <
> [email protected]> wrote:
> 
>>
>>
>> On Sun, Mar 13, 2022 at 2:27 PM Archimedes Gaviola <
>> [email protected]> wrote:
>>
>>>
>>>
>>> On Sun, Mar 13, 2022 at 12:38 AM Hans Petter Selasky <[email protected]>
>>> 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
> [email protected]:/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,

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?

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. Maybe the chip is out of USB HW endpoints and is only polling 
for RX data ...

--HPS
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.