ZLP - zero length packet is used to indicate that the device has no more data to send. If the Host asks for more data that the device can provide and the data size is mutliplication of Endpoint wMaxPacketSize then the device must terminate the data transfer with ZLP. Until this patch Nordic device driver controller was not aware of the requested data length and could not determine when the ZLP was required. This patch introduces a fix that prevents the driver from starting setup stage before the ZLP is being send. For consistance with the Zephyr USB stack sending ZLP must be issued from the stack level. Making trans_zlp flag true results in blocking the driver from starting setup stage without required ZLP. After the data transfer finishes the driver will be prepared for ZLP and will call back the stack to start writing ZLP. After the ZLP is being send the driver will automatically start status stage and end the Control Transfer. This patch also removes CONFIG_USB_DEVICE_DISABLE_ZLP_EPIN_HANDLING and aligns Nordic driver with others. Without this patch the issue could occur when handling get requests. Typical case is string descriptor of length equal to wMaxPacketSize. Hosts usually asks for wLength = 255 Bytes when string descriptors are being requested. In that case to successfully finish the data stage of the Control transfer the device must send wMacPacketSize Bytes of actual string descriptor and then ZLP to indicate that no more data are present. After ZLP the status stage may start and the request is finished successfully. Without this patch the driver will not send ZLP making it unable to end the Control Request successful - this may lead to failing 'Device Descriptor Test' from USB3CV test tool. Signed-off-by: Emil Obalski <emil.obalski@nordicsemi.no>
110 lines
2.7 KiB
Plaintext
110 lines
2.7 KiB
Plaintext
# USB device configuration options
|
|
|
|
# Copyright (c) 2016 Wind River Systems, Inc.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
if USB
|
|
|
|
config USB_DEVICE_DRIVER
|
|
bool
|
|
|
|
config USB_DW
|
|
bool "Designware USB Device Controller Driver"
|
|
select USB_DEVICE_DRIVER
|
|
help
|
|
Designware USB Device Controller Driver.
|
|
|
|
config USB_DW_USB_2_0
|
|
bool "DesignWare Controller and PHY support for USB specification 2.0"
|
|
depends on USB_DW
|
|
help
|
|
Indicates whether or not USB specification version 2.0 is supported
|
|
|
|
config USB_DC_STM32
|
|
bool "USB device controller driver for STM32 devices"
|
|
depends on SOC_FAMILY_STM32
|
|
select USB_DEVICE_DRIVER
|
|
select USE_STM32_LL_USB
|
|
select USE_STM32_HAL_PCD
|
|
select USE_STM32_HAL_PCD_EX
|
|
help
|
|
Enable USB support on the STM32 F0, F1, F2, F3, F4, F7, L0, L4 and G4 family of
|
|
processors.
|
|
|
|
config USB_DC_SAM0
|
|
bool "SAM0 series USB Device Controller driver"
|
|
default y
|
|
depends on SOC_FAMILY_SAM0
|
|
select USB_DEVICE_DRIVER
|
|
help
|
|
SAM0 family USB device controller Driver.
|
|
|
|
config USB_DC_SAM
|
|
bool "SAM series USB HS Device Controller driver"
|
|
depends on SOC_SERIES_SAME70 || \
|
|
SOC_SERIES_SAMV71
|
|
select USB_DEVICE_DRIVER
|
|
help
|
|
SAM family USB HS device controller Driver.
|
|
|
|
menuconfig USB_NRFX
|
|
bool "Nordic Semiconductor USB Device Controller Driver"
|
|
default y
|
|
depends on HAS_HW_NRF_USBD
|
|
select USB_DEVICE_DRIVER
|
|
select NRFX_USBD
|
|
select NRFX_POWER
|
|
help
|
|
nRF USB Device Controller Driver
|
|
|
|
config USB_NRFX_EVT_QUEUE_SIZE
|
|
int "USBD event queue size"
|
|
range 4 64
|
|
default 32
|
|
depends on USB_NRFX
|
|
help
|
|
Size of the driver's internal event queue.
|
|
Required size will depend on number of endpoints (class instances) in use.
|
|
|
|
config USB_NRFX_WORK_QUEUE_STACK_SIZE
|
|
int "USBD work queue stack size"
|
|
default 1024
|
|
depends on USB_NRFX
|
|
help
|
|
Size of the stack for the work queue thread that is used in the driver
|
|
for handling the events from the USBD ISR, i.e. executing endpoint
|
|
callbacks and providing proper notifications to the USB device stack.
|
|
|
|
config USB_KINETIS
|
|
bool "Kinetis USB Device Controller Driver"
|
|
select USB_DEVICE_DRIVER
|
|
help
|
|
Kinetis USB Device Controller Driver.
|
|
|
|
config USB_DC_NXP_EHCI
|
|
bool "Kinetis and RT EHCI USB Device Controller Driver"
|
|
depends on HAS_MCUX_USB_EHCI
|
|
select USB_DEVICE_DRIVER
|
|
select NOCACHE_MEMORY if HAS_MCUX_CACHE
|
|
help
|
|
Kinetis and RT EHCI USB Device Controller Driver.
|
|
|
|
module = USB_DRIVER
|
|
module-str = usb driver
|
|
source "subsys/logging/Kconfig.template.log_config"
|
|
|
|
config USB_DC_STM32_DISCONN_ENABLE
|
|
bool
|
|
depends on USB_DC_STM32
|
|
help
|
|
Say Y if your board uses USB DISCONNECT pin to enable the
|
|
pull-up resistor on USB DP.
|
|
|
|
config USB_NATIVE_POSIX
|
|
bool "Native Posix USB Device Controller Driver"
|
|
select USB_DEVICE_DRIVER
|
|
help
|
|
Native Posix USB Device Controller Driver.
|
|
|
|
endif # USB
|