SAM4E USP: Re-vamp read request queue handling. Add logic to handle RX overrun errors
This commit is contained in:
parent
9350b9d4d0
commit
698a4c2cd2
@ -674,9 +674,8 @@ USB Full-Speed Device
|
|||||||
2014-3-25: Marginally functional. Very slow to come up. USB analyzer
|
2014-3-25: Marginally functional. Very slow to come up. USB analyzer
|
||||||
shows several resets before the host decides that it is
|
shows several resets before the host decides that it is
|
||||||
happy with the device. There are no obvious errors in the
|
happy with the device. There are no obvious errors in the
|
||||||
USB data capture.
|
USB data capture. Testing is insufficient. This needs to
|
||||||
2014-3-25: There also seem to be issues about writing files. This
|
be revisited.
|
||||||
needs more investigation.
|
|
||||||
|
|
||||||
CDC/ACM Serial Device Class
|
CDC/ACM Serial Device Class
|
||||||
---------------------------
|
---------------------------
|
||||||
@ -714,6 +713,38 @@ USB Full-Speed Device
|
|||||||
than requires that you first install a serial driver (a .inf file). There
|
than requires that you first install a serial driver (a .inf file). There
|
||||||
are example .inf files for NuttX in the nuttx/configs/spark directories.
|
are example .inf files for NuttX in the nuttx/configs/spark directories.
|
||||||
|
|
||||||
|
3. There is hand-shaking to pace incoming serial data. As a result, you may
|
||||||
|
experience data loss due to RX overrun errors. The overrun errors occur
|
||||||
|
when more data is received than can be buffered in memory on the target.
|
||||||
|
|
||||||
|
At present, the only workaround is to increase the amount of buffering
|
||||||
|
in the target. That allow the target to accept short bursts of larger
|
||||||
|
volumes of data (but would still fail on sustained, high speed incoming
|
||||||
|
data. The following configuration options can be changed to increase
|
||||||
|
the buffering.
|
||||||
|
|
||||||
|
1. RX buffer size. All incoming data is buffered by the serial driver
|
||||||
|
until it can be read by the application. The default size of this
|
||||||
|
RX buffer is only 256 but can be increased as you see fit:
|
||||||
|
|
||||||
|
CONFIG_CDCACM_RXBUFSIZE=256 : Default RX buffer size is only 256 bytes
|
||||||
|
|
||||||
|
2. Upstream from the RX buffers are USB read request buffers. Each
|
||||||
|
buffer is the maximum size of one USB packet (64 byte) and that cannot
|
||||||
|
really be changed. But if you want to increase this upstream buffering
|
||||||
|
capability, you can increase the number of available read requests.
|
||||||
|
The default is four, providing an additional buffering capability of
|
||||||
|
of 4*64=256 bytes.
|
||||||
|
|
||||||
|
Each read request receives data from USB, copies the data into the
|
||||||
|
serial RX buffer, and then is available to receive more data. This
|
||||||
|
recycling of read requests stalls as soon as the serial RX buffer is
|
||||||
|
full. Data loss occurs when there are no available read requests to
|
||||||
|
accept the next packet from the host. So increasing the number of
|
||||||
|
read requests can also help to minimize RX overrun:
|
||||||
|
|
||||||
|
CONFIG_CDCACM_NRDREQS=4 : Default is only 4 read requests
|
||||||
|
|
||||||
STATUS:
|
STATUS:
|
||||||
|
|
||||||
2013-2-23: Checks out OK. See discussion of the usbnsh configuration
|
2013-2-23: Checks out OK. See discussion of the usbnsh configuration
|
||||||
@ -1174,15 +1205,13 @@ Configurations
|
|||||||
above under "USB Full-Speed Device."
|
above under "USB Full-Speed Device."
|
||||||
|
|
||||||
STATUS:
|
STATUS:
|
||||||
2014-3-21: USB support is under development and USB MSC support is
|
2014-3-21: USB support is partially functional. Additional test and
|
||||||
only partially functional. Additional test and integration
|
integration is required. See STATUS in the "USB Full-Speed
|
||||||
is required.
|
Device" for further information
|
||||||
2014-3-22: USB seems to work properly (there are not obvious errors
|
2014-3-22: USB seems to work properly (there are not obvious errors
|
||||||
in a USB bus capture. However, the AT25 does not mount
|
in a USB bus capture. However, as of this data the AT25
|
||||||
on either the Linux or Windows host. Since there are no
|
does not mount on either the Linux or Windows host. This
|
||||||
USB errors, this could only be an issue with the USB MSC
|
needs to be retested.
|
||||||
protocol (not likely) or with the FAT format on the AT25
|
|
||||||
serial FLASH (likely).
|
|
||||||
|
|
||||||
7. This configuration can be used to verify the touchscreen on on the
|
7. This configuration can be used to verify the touchscreen on on the
|
||||||
SAM4E-EK LCD. See the instructions above in the paragraph entitled
|
SAM4E-EK LCD. See the instructions above in the paragraph entitled
|
||||||
@ -1201,7 +1230,8 @@ Configurations
|
|||||||
to data overrun problems. The current HSMCI driver
|
to data overrun problems. The current HSMCI driver
|
||||||
supports DMA via the DMAC. However, the data sheet
|
supports DMA via the DMAC. However, the data sheet
|
||||||
only discusses PDC-based HSMCI DMA (although there is
|
only discusses PDC-based HSMCI DMA (although there is
|
||||||
a DMA channel interface definition for HSMCI).
|
a DMA channel interface definition for HSMCI). So
|
||||||
|
this is effort is dead-in-the-water for now.
|
||||||
|
|
||||||
usbnsh:
|
usbnsh:
|
||||||
|
|
||||||
@ -1224,7 +1254,7 @@ Configurations
|
|||||||
entitled "USB Full-Speed Device",
|
entitled "USB Full-Speed Device",
|
||||||
|
|
||||||
b. The CDC/ACM serial class is enabled as described in the paragraph
|
b. The CDC/ACM serial class is enabled as described in the paragraph
|
||||||
"CDC/ACM Serial Device Class"
|
"CDC/ACM Serial Device Class".
|
||||||
|
|
||||||
c. The serial console is disabled:
|
c. The serial console is disabled:
|
||||||
|
|
||||||
@ -1241,6 +1271,10 @@ Configurations
|
|||||||
d. Support for debug output on UART0 is provided as described in the
|
d. Support for debug output on UART0 is provided as described in the
|
||||||
next note.
|
next note.
|
||||||
|
|
||||||
|
3. If you send large amounts of data to the target, you may see data
|
||||||
|
loss due to RX overrun errors. See the NOTES in the section entitle
|
||||||
|
"CDC/ACM Serial Device Class" for some possible work-arounds.
|
||||||
|
|
||||||
3. This configuration does have UART0 output enabled and set up as
|
3. This configuration does have UART0 output enabled and set up as
|
||||||
the system logging device:
|
the system logging device:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user