Re: Raspberry Pi 3B USB Printing Issue

From: Hans Petter Selasky <hps_at_selasky.org>
Date: Fri, 11 Mar 2022 16:20:21 UTC
On 3/11/22 16:36, Archimedes Gaviola wrote:
> On Thu, Mar 10, 2022 at 8:53 PM Hans Petter Selasky <hps@selasky.org> wrote:
> 
>> On 3/10/22 13:37, Archimedes Gaviola wrote:
>>> On Thu, Mar 10, 2022 at 3:47 PM Hans Petter Selasky <hps@selasky.org>
>> wrote:
>>>
>>>> On 3/10/22 00:24, Archimedes Gaviola wrote:
>>>>> On Thu, Mar 10, 2022 at 4:14 AM Hans Petter Selasky <hps@selasky.org>
>>>> wrote:
>>>>>
>>>>>> On 3/9/22 18:55, Archimedes Gaviola wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> I have an Epson printer connected to one of the USB ports of my RPi
>> 3B.
>>>>>> The
>>>>>>> printer is detected as a ugen(4) driver and then I have a text file -
>>>>>>> myfile3.txt which contains 10 lines of repeating sentences.
>>>>>>>
>>>>>>> freebsd@generic:~ % dmesg | grep EPSON
>>>>>>> ugen1.4: <EPSON EPSON UB-U03II> at usbus1
>>>>>>>
>>>>>>> freebsd@generic:~ % cat myfile3.txt
>>>>>>> The quick brown fox jumps over the lazy dog.
>>>>>>> The quick brown fox jumps over the lazy dog.
>>>>>>> The quick brown fox jumps over the lazy dog.
>>>>>>> The quick brown fox jumps over the lazy dog.
>>>>>>> The quick brown fox jumps over the lazy dog.
>>>>>>> The quick brown fox jumps over the lazy dog.
>>>>>>> The quick brown fox jumps over the lazy dog.
>>>>>>> The quick brown fox jumps over the lazy dog.
>>>>>>> The quick brown fox jumps over the lazy dog.
>>>>>>> The quick brown fox jumps over the lazy dog.
>>>>>>>
>>>>>>> freebsd@generic:~ % cat myfile3.txt  > /dev/usb/1.4.1
>>>>>>>
>>>>>>> I print the file successfully through device file redirection with
>> cat
>>>>>>> command as described above. However, there were times that printing
>>>>>> seemed
>>>>>>> to suspend and withhold especially when my RPi 3B system got idle for
>>>>>> some
>>>>>>> period of time. Suspended or withhold in such a way that out of the
>> 10
>>>>>>> lines there were only 2-3 lines to be printed in the paper. So, the
>>>> only
>>>>>>> remedy I have for now is to reboot the system to be able to get back
>> to
>>>>>>> normal printing. I'm using the 14.0-CURRENT #0
>>>> main-n253384-45c23c2608e:
>>>>>>> Thu Feb 24 09:18:58 UTC 2022 and my RPi 4B does not manifest this
>>>>>> behavior
>>>>>>> using this same 14.0-CURRENT version. Any idea what's going on?
>>>>>>>
>>>>>>> I found these sysctl knobs thinking if some tweaks would help but not
>>>>>> sure
>>>>>>> what are the exact settings beyond these defaults.
>>>>>>>
>>>>>>> hw.usb.timings.port_resume_delay: 40
>>>>>>> hw.usb.timings.port_powerup_delay: 300
>>>>>>> hw.usb.timings.port_reset_recovery: 10
>>>>>>> hw.usb.timings.port_root_reset_delay: 200
>>>>>>> hw.usb.timings.port_reset_delay: 50
>>>>>>>
>>>>>>> (Resend this message without dmesg and sysctl outputs as files are
>>>> quite
>>>>>>> big, sorry I didn't notice it.)
>>>>>>>
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> Why are you not using /dev/ulpt<N> ?
>>>>>>
>>>>>> /dev/usb/1.4.1 is the raw BULK endpoint.
>>>>>>
>>>>>
>>>>>
>>>>> Hi Hans,
>>>>>
>>>>> The ulpt(4) driver isn't detected with this Epson printer. Only my
>> other
>>>>> printer which is an Xprinter brand is able to get detected with
>> ulpt(4).
>>>>>
>>>>
>>>> Hi,
>>>>
>>>> Is it correctly detected if you the VID and PID to
>>>> /usr/src/sys/dev/usb/serial/ulpt.c ?
>>>>
>>>
>>> Hi Hans,
>>>
>>> Not sure how to make the current ugen(4) driver into ulpt(4). Is there a
>>> need to disable ugen(4) and recompile the kernel and let ulpt(4) driver
>>> loaded and enabled? As far as vendor ID and product ID of this Epson
>>> printer are concerned, these are  0x04b8 and  0x0200 respectively. I
>>> checked it with usbconfig below. I checked also
>>> /usr/src/sys/dev/usb/usbdevs file and it seems only the vendor ID is
>>> present but no product ID on these particular model which is TM-U220B.
>>>
>>> root@generic:~ # usbconfig -u 1 -a 4 dump_device_desc
>>> ugen1.4: <EPSON EPSON UB-U03II> at usbus1, cfg=0 md=HOST spd=FULL
>> (12Mbps)
>>> pwr=ON (10mA)
>>>
>>>     bLength = 0x0012
>>>     bDescriptorType = 0x0001
>>>     bcdUSB = 0x0110
>>>     bDeviceClass = 0x0000  <Probed by interface class>
>>>     bDeviceSubClass = 0x0000
>>>     bDeviceProtocol = 0x0000
>>>     bMaxPacketSize0 = 0x0008
>>>     idVendor = 0x04b8
>>>     idProduct = 0x0202
>>>     bcdDevice = 0x0200
>>>     iManufacturer = 0x0001  <EPSON>
>>>     iProduct = 0x0002  <EPSON UB-U03II>
>>>     iSerialNumber = 0x0003  <20160118193053218M03C>
>>>     bNumConfigurations = 0x0001
>>>
>>>
>>>>
>>>> When you use the printer via the BULK endpoint, there might be a missing
>>>> flush packet, to flush all the printed text. This happens when the
>>>> payload length is a multiple of the wMaxPacketSize.
>>>>
>>>
>>> Okay this is noted but what I found lately in usbdump are the presence of
>>> ioerrors ERR=IOERROR in capturing the ugen1.4.1 device while printing
>> were
>>> the printed outputs are intermittent. This time I'm going to use the word
>>> "intermittent" as I don't have any idea when this occurs. It just behaves
>>> anytime without any warnings or notices to the system not even logs in
>> the
>>> dmesg. On the other hand, normal printing will prompts with ERR=0 with
>>> complete outputs.
>>>
>>> root@generic:~ # usbdump -d ugen1.4.1 -v
>>> 19:14:11.861532 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:14:12.147498 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:14:23.491555 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:14:23.777222 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:14:32.325817 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:14:32.612222 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:18:46.334624 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:18:46.620474 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:18:53.975846 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:18:54.262223 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:21:38.505907 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:21:38.792224 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:22:06.235833 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:22:06.521723 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:22:16.344551 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:22:16.630472 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:22:31.625887 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:22:31.911723 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:22:40.325843 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:22:40.612223 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:23:53.484761 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:23:53.514428 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,
>>>    frame[0] WRITE 128 bytes
>>> 19:23:57.055902 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:23:57.084227 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:24:00.244450 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:00.274206 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:24:03.974541 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:04.004203 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 144 bytes
>>> 19:24:06.975851 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:07.004209 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:24:09.605790 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:09.633980 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:24:12.385923 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:12.413760 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:24:15.224542 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:15.253771 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:24:18.174530 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:18.203756 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:24:21.125927 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:21.153752 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 136 bytes
>>> 19:24:24.275854 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:24.303756 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 144 bytes
>>> 19:24:27.485857 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:27.772223 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:36.194633 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:36.223750 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:24:39.115831 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:39.143771 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 144 bytes
>>> 19:24:41.855851 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:41.883758 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:24:44.215882 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:44.243755 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:24:47.634603 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:47.663751 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:24:50.324493 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:50.353755 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:24:52.864637 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:52.893756 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 144 bytes
>>> 19:24:54.944528 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:54.973743 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:24:57.254498 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:24:57.537227 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:25:06.024607 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:25:06.053747 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:25:08.214550 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:25:08.243749 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 144 bytes
>>> 19:25:10.355858 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:25:10.383752 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:25:12.435851 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:25:12.463752 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:25:14.574555 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:25:14.603740 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:25:17.814561 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:25:17.844015 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:25:19.924529 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:25:19.954029 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:25:28.075867 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:25:28.104036 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 144 bytes
>>> 19:25:30.195823 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:25:30.224035 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:25:32.574567 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:25:32.604028 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:25:34.624522 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:25:34.654016 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 128 bytes
>>> 19:25:36.895889 usbus1.4
>>> SUBM-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=1264,IVAL=0
>>>    frame[0] WRITE 1264 bytes
>>> 19:25:36.924007 usbus1.4
>>> DONE-BULK-EP=00000001,SPD=FULL,NFR=1,SLEN=0,IVAL=0,ERR=IOERROR
>>>    frame[0] WRITE 144 bytes
>>>
>>> 86 packets captured
>>> 41546 packets received by filter
>>> 0 packets dropped by kernel
>>>
>>> What could be these ioerrors? As I am also firm that my Epson printer's
>>> status is good and this only happens in RPi 3B but not RPi 4B. My RPi 4B
>>> using the same printer and ugen(4) driver is very stable.
>>
>> Hi,
>>
>> IOERROR usually means an electrical error. The RPI3B will use a
>> transaction translator for the FULL speed traffic, which is driven by
>> software. Maybe there is a bug in the HC driver,
>> "dev/usb/controller/dwc_otg.c". There are some sysctls to enable full HC
>> debugging, see hw.usb.xxx.debug=17 .
>>
>> Is the device self-powered?
>>
>>
> Try something like this:
>>
>>> diff --git a/sys/dev/usb/serial/ulpt.c b/sys/dev/usb/serial/ulpt.c
>>> index c566da92437..d663800f4fc 100644
>>> --- a/sys/dev/usb/serial/ulpt.c
>>> +++ b/sys/dev/usb/serial/ulpt.c
>>> @@ -499,6 +499,9 @@ static const STRUCT_USB_HOST_ID ulpt_devs[] = {
>>>          {USB_IFACE_CLASS(UICLASS_PRINTER),
>>>           USB_IFACE_SUBCLASS(UISUBCLASS_PRINTER),
>>>           USB_IFACE_PROTOCOL(UIPROTO_PRINTER_1284)},
>>> +
>>> +       /* Epson printer */
>>> +       {USB_VPI(USB_VENDOR_EPSON, USB_PRODUCT_EPSON_TMU220B, 0)},
>>>   };
>>>
>>>   static int
>>> diff --git a/sys/dev/usb/usbdevs b/sys/dev/usb/usbdevs
>>> index 01c25d7c096..632b8f19610 100644
>>> --- a/sys/dev/usb/usbdevs
>>> +++ b/sys/dev/usb/usbdevs
>>> @@ -1941,6 +1941,7 @@ product EPSON 1270                0x0120
>> Perfection 1270 scanner
>>>   product EPSON 2480             0x0121  Perfection 2480 scanner
>>>   product EPSON 3590             0x0122  Perfection 3590 scanner
>>>   product EPSON 4990             0x012a  Perfection 4990 Photo scanner
>>> +product EPSON TMU220B          0x0200  TM-U220B
                                     ^^^ 0x0202 (should be this value)
>>>   product EPSON CRESSI_EDY       0x0521  Cressi Edy diving computer
>>>   product EPSON N2ITION3         0x0522  Zeagle N2iTion3 diving computer
>>>   product EPSON STYLUS_875DC     0x0601  Stylus Photo 875DC Card Reader
>>
>>
> Hi Hans,
> 
> The patch above has no effect. My Epson printer is still obtaining the
> ugen(4) driver after I apply and recompile the kernel. Anything I've missed?
> 
> Thanks,
> Archimedes
> 

Hi,

See comment above!

--HPS