Re: USB - Generic Serial device : Unable to read more than 4095 bytes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



/ # lsusb -v
Bus 002 Device 006: ID 045b:0218
Bus 001 Device 001: ID 1d6b:0002
Bus 002 Device 001: ID 1d6b:0001
Bus 003 Device 001: ID 1d6b:0002
Bus 004 Device 001: ID 1d6b:0003

In this my device is
Bus 002 Device 006: ID 045b:0218

I enabled data dumping in usb_serial_generic_read_bulk_callback()
function and found data received in this function is losing.
In this function data is received as 64 bytes packets and two
continuous 64 bytes having no data loss but the next packets are lost
ie
1st packet ok(64 byte)
2nd packet ok(64 byte)
.
. packet lossing....
.
7th packet ok(64 byte)
8th packet ok(64 byte)
.
.
In this way data loss is happening. Number of packets losing is
different not constant always.

>> I think the generic USB driver ignores baud rate. Like Greg suggested, >>you need to
>>use the proper driver for your hardware.

I did't find any other suitable driver inside Linux.
I checked this device in windows in that usbser.sys is detecting(.inf
file is attached with the mail).

 Could you suggest any available drivers for my device. Sorry I am
very new to Linux drivers.
I will post my USB device descriptor values below

[ 1291.908071] ## udev->descriptor.bLength  0x12
[ 1291.908089] ## udev->descriptor.bDescriptorType  0x1
[ 1291.908147] ## udev->descriptor.bcdUSB  0x200
[ 1291.908165] ## udev->descriptor.bDeviceClass  0xef
[ 1291.908181] ## udev->descriptor.bDeviceSubClass  0x2
[ 1291.908196] ## udev->descriptor.bDeviceProtocol  0x1
[ 1291.908211] ## udev->descriptor.bMaxPacketSize0  0x40
[ 1291.908226] ## udev->descriptor.idVendor  0x45b
[ 1291.908241] ## udev->descriptor.idProduct  0x218
[ 1291.908255] ## udev->descriptor.bcdDevice  0x1
[ 1291.908270] ## udev->descriptor.iManufacturer  0x0
[ 1291.908284] ## udev->descriptor.iProduct  0x0
[ 1291.908298] ## udev->descriptor.iSerialNumber  0x0
[ 1291.908313] ## udev->descriptor.bNumConfigurations  0x1

Regards,
Arun











On Wed, Aug 5, 2015 at 9:31 PM, Peter Hurley <peter@xxxxxxxxxxxxxxxxxx> wrote:
> On 08/04/2015 11:57 PM, arun k wrote:
>>> Ok, but does the sending device know how to process in-band software flow control
>>> and is it set up to respond properly?
>>
>> I am not sure about this. I need to check this.
>>
>>> Also, I doubt software flow control is going to work @ 4Mbaud line rate.
>>> If you're stuck using software flow control, start with a 115kbaud line rate
>>> and see if that fixes your data loss problem
>>
>> I tried B115200 also but issue is still there.
>
> I think the generic USB driver ignores baud rate. Like Greg suggested, you need to
> use the proper driver for your hardware.
>
> What is the output from 'lsusb -v' and please identify in that output which
> device you are using.
>
>> I am using a USB device and that sending data at a rate of *409600 bytes/sec*. Is this data rate have any relation with issue.
>
> Yes. Also, can you test this on a newer kernel like 3.18?
>
> Regards,
> Peter Hurley
>
>> On Wed, Aug 5, 2015 at 11:24 AM, Peter Hurley <peter@xxxxxxxxxxxxxxxxxx <mailto:peter@xxxxxxxxxxxxxxxxxx>> wrote:
>>
>>     On 08/04/2015 10:00 PM, arun k wrote:
>>     > I enabled software flow control like below
>>     >
>>     > tty.c_iflag |= (IXON | IXOFF | IXANY);
>>
>>     Ok, but does the sending device know how to process in-band software flow control
>>     and is it set up to respond properly?
>>
>>     Also, I doubt software flow control is going to work @ 4Mbaud line rate.
>>     If you're stuck using software flow control, start with a 115kbaud line rate
>>     and see if that fixes your data loss problem.
>>
>>     Regards,
>>     Peter Hurley
>>
>>
>>     > On Wed, Aug 5, 2015 at 12:59 AM, Peter Hurley <peter@xxxxxxxxxxxxxxxxxx <mailto:peter@xxxxxxxxxxxxxxxxxx>> wrote:
>>     >> On 08/03/2015 10:47 PM, arun k wrote:
>>     >>> Thank you for the reply
>>     >>>
>>     >>>>> The tty layer is limiting you, just keep reading in a loop until you
>>     >>>>> run out of data, you should not ever expect to read a specific number of
>>     >>>>> bytes from a tty device at a time, the read call will tell you the
>>     >>>>> number that was read properly.
>>     >>>
>>     >>> I tried this method but in my case I found data loss. By changing any buffer size modification in driver side , can we fix this issue ?
>>     >>
>>     >> The data loss is probably occurring because you have all flow control disabled
>>     >> and the line speed is too fast for no flow control.
>>     >>
>>     >> Regards,
>>     >> Peter Hurley
>>     >>
>>     >>>>> Please don't use the "generic" driver, it's slow and not the best to
>>     >>>>> use
>>     >>>
>>     >>> Could you tell me is generic driver is suitable for my application ( My usb device sending data at a rate of 409600 bytes/sec) , ?
>>     >>> or do you have any other suggestion for me ?
>>     >>>
>>     >>> My Linux kernel  version is 3.4.35
>>     >>>
>>     >>> Regards,
>>     >>> Arun
>>     >>>
>>     >>> On Tue, Aug 4, 2015 at 1:13 AM, Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx <mailto:gregkh@xxxxxxxxxxxxxxxxxxx> <mailto:gregkh@xxxxxxxxxxxxxxxxxxx <mailto:gregkh@xxxxxxxxxxxxxxxxxxx>>> wrote:
>>     >>>
>>     >>>     On Mon, Aug 03, 2015 at 04:44:07PM +0900, arun k wrote:
>>     >>>     > Hi ,
>>     >>>     >
>>     >>>     > I have a trouble with using usb serial generic device.
>>     >>>     >  I am using USB - Generic Serial driver for communicating with my usb
>>     >>>     > device and my embedded device.
>>     >>>
>>     >>>     Please don't use the "generic" driver, it's slow and not the best to
>>     >>>     use.
>>     >>>
>>     >>>     > My usb device sending data at a rate of 409600 bytes/sec, and in host
>>     >>>     > side application I tried to read 16384 bytes in one read. But the read
>>     >>>     > size returning is always  4095
>>     >>>
>>     >>>     The tty layer is limiting you, just keep reading in a loop until you
>>     >>>     run out of data, you should not ever expect to read a specific number of
>>     >>>     bytes from a tty device at a time, the read call will tell you the
>>     >>>     number that was read properly.
>>     >>>
>>     >>>     thanks,
>>     >>>
>>     >>>     greg k-h
>>     >>>
>>     >>>
>>     >>
>>
>>
>

Attachment: inf.rar
Description: application/rar


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux