Да не очень пока продвигается

, протестировал на скорость в bulk, делал на примере VCP и получил скорость ~30Mbit/sec Loopback-ом, вполне достаточно для потока какой я хочу пропихнуть в изохронном режиме в аудио, но по прежнему не могу разобраться что есть источник бесконечных Incomplete isochronous OUT

, как узнать причину их возникновения, возможно я не те регистры смотрю?.
Есть мысль что у меня не вычитываются FIFO при приеме, но как я их могу вычитать если прерывания по приему вообще не приходят по конечной точке данных ( EP1 )

Вот дескрипторы сразу для UAC1/UAC2, описанная выше проблема возникает в обоих режимах.
CODE
#ifdef USE_AUDIO_CLASS_01_00
/* USB Standard Device Descriptor */
__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] __ALIGN_END =
{
0x12, /*bLength */
USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
0x00, /*bcdUSB */
0x02,
USB_DEVICE_CLASS_AUDIO, /*bDeviceClass*/
0x00, /*bDeviceSubClass*/
0x00, /*bDeviceProtocol*/
USB_OTG_MAX_EP0_SIZE, /*bMaxPacketSize*/
LOBYTE(USBD_VID), /*idVendor*/
HIBYTE(USBD_VID), /*idVendor*/
LOBYTE(USBD_PID), /*idVendor*/
HIBYTE(USBD_PID), /*idVendor*/
0x00, /*bcdDevice rel. 2.00*/
0x02,
USBD_IDX_MFC_STR, /*Index of manufacturer string*/
USBD_IDX_PRODUCT_STR, /*Index of product string*/
USBD_IDX_SERIAL_STR, /*Index of serial number string*/
USBD_CFG_MAX_NUM /*bNumConfigurations*/
}
; /* USB_DeviceDescriptor */
/* USB Standard Device Descriptor */
uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] =
{
USB_LEN_DEV_QUALIFIER_DESC,
USB_DESC_TYPE_DEVICE_QUALIFIER,
0x00,
0x02,
0x00,
0x00,
0x00,
USB_OTG_MAX_EP0_SIZE,
0x01,
0x00,
};
#else
/* USB Standard UAC2 Device Descriptor */
__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] __ALIGN_END =
{
USB_SIZ_DEVICE_DESC, /*bLength */
USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
0x00, /*bcdUSB 0x0200 */
0x02,
0xEF, /*bDeviceClass*/
0x02, /*bDeviceSubClass*/
0x01, /*bDeviceProtocol*/
USB_OTG_MAX_EP0_SIZE, /*bMaxPacketSize*/
LOBYTE(USBD_VID), /*idVendor*/
HIBYTE(USBD_VID), /*idVendor*/
LOBYTE(USBD_PID), /*idVendor*/
HIBYTE(USBD_PID), /*idVendor*/
0x00, /*bcdDevice rel. 2.00*/
0x02,
USBD_IDX_MFC_STR, /*Index of manufacturer string*/
USBD_IDX_PRODUCT_STR, /*Index of product string*/
USBD_IDX_SERIAL_STR, /*Index of serial number string*/
USBD_CFG_MAX_NUM /*bNumConfigurations*/
}; /* USB_DeviceDescriptor */
/* USB Standard UAC2 Device Descriptor */
__ALIGN_BEGIN uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END =
{
USB_LEN_DEV_QUALIFIER_DESC,
USB_DESC_TYPE_DEVICE_QUALIFIER,
0x00,
0x02,
0xEF,
0x02,
0x01,
USB_OTG_MAX_EP0_SIZE,
0x01,
0x00,
};
#endif
#ifdef USE_AUDIO_CLASS_01_00
/* USB AUDIO device Configuration Descriptor */
__ALIGN_BEGIN uint8_t usbd_audio_CfgDesc[AUDIO_CONFIG_DESC_SIZE] __ALIGN_END =
{
/* Configuration 1 */
0x09, /* bLength */
USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType */
LOBYTE(AUDIO_CONFIG_DESC_SIZE), /* wTotalLength */
HIBYTE(AUDIO_CONFIG_DESC_SIZE),
0x02, /* bNumInterfaces */
0x01, /* bConfigurationValue */
0x00, /* iConfiguration */
0xC0, /* bmAttributes BUS Powred */
0x0A, /* bMaxPower */
/* 09 byte*/
/* USB Speaker Standard interface descriptor */
AUDIO_INTERFACE_DESC_SIZE, /* bLength */
USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
0x00, /* bInterfaceNumber */
0x00, /* bAlternateSetting */
0x00, /* bNumEndpoints */
USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
AUDIO_SUBCLASS_AUDIOCONTROL, /* bInterfaceSubClass */
AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */
0x00, /* iInterface */
/* 09 byte*/
/* USB Speaker Class-specific AC Interface Descriptor */
AUDIO_INTERFACE_DESC_SIZE, /* bLength */
AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_CONTROL_HEADER, /* bDescriptorSubtype */
0x00, /* 1.00 */ /* bcdADC */
0x01,
LOBYTE(0x27), /* wTotalLength = 39*/
HIBYTE(0x27),
0x01, /* bInCollection */
0x01, /* baInterfaceNr */
/* 09 byte*/
/* USB Speaker Input Terminal Descriptor */
AUDIO_INPUT_TERMINAL_DESC_SIZE, /* bLength */
AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_CONTROL_INPUT_TERMINAL, /* bDescriptorSubtype */
AUDIO_INPUT_TERMINAL_ID, /* bTerminalID */
0x01, /* wTerminalType AUDIO_TERMINAL_USB_STREAMING 0x0101 */
0x01,
0x00, /* bAssocTerminal */
AUDIO_CHANNELS_COUNT, /* bNrChannels */
LOBYTE(AUDIO_CHANNELS_INPUT_TERMINAL_SETTINGS), /* wChannelConfig 0x0001 - LF, 0x0002 - RF, 0x0004 - CF, 0x0008 - LFE */
HIBYTE(AUDIO_CHANNELS_INPUT_TERMINAL_SETTINGS),
0x00, /* iChannelNames */
0x00, /* iTerminal */
/* 12 byte*/
/* USB Speaker Audio Feature Unit Descriptor */
0x09, /* bLength */
AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_CONTROL_FEATURE_UNIT, /* bDescriptorSubtype */
AUDIO_FEATURE_UNIT_TERMINAL_ID, /* bUnitID */
AUDIO_INPUT_TERMINAL_ID, /* bSourceID */
0x01, /* bControlSize */
0x01, /* bmaControls(0) MUTE */
0x00, /* bmaControls(1) */
0x00, /* iTerminal */
/* 09 byte*/
/*USB Speaker Output Terminal Descriptor */
0x09, /* bLength */
AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_CONTROL_OUTPUT_TERMINAL, /* bDescriptorSubtype */
AUDIO_OUTPUT_TERMINAL_ID, /* bTerminalID */
0x05, /* wTerminalType 0x0301 - headphone, 0x0602 - Digital Interface, 0x0305 - Room speaker*/
0x03,
0x00, /* bAssocTerminal */
AUDIO_FEATURE_UNIT_TERMINAL_ID, /* bSourceID */
0x00, /* iTerminal */
/* 09 byte*/
/* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */
/* Interface 1, Alternate Setting 0 */
AUDIO_INTERFACE_DESC_SIZE, /* bLength */
USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
0x01, /* bInterfaceNumber */
0x00, /* bAlternateSetting */
0x00, /* bNumEndpoints */
USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */
AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */
0x00, /* iInterface */
/* 09 byte*/
/* USB Speaker Standard AS Interface Descriptor - Audio Streaming Operational */
/* Interface 1, Alternate Setting 1 */
AUDIO_INTERFACE_DESC_SIZE, /* bLength */
USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
0x01, /* bInterfaceNumber */
0x01, /* bAlternateSetting */
0x01, /* bNumEndpoints */
USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */
AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */
0x00, /* iInterface */
/* 09 byte*/
/* Class-specific Audio Streaming Interface Descriptor */
AUDIO_STREAMING_INTERFACE_DESC_SIZE, /* bLength */
AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_STREAMING_GENERAL, /* bDescriptorSubtype */
AUDIO_INPUT_TERMINAL_ID, /* bTerminalLink */
0x00, /* bDelay */
0x01, /* wFormatTag AUDIO_FORMAT_PCM 0x0001*/
0x00,
/* 07 byte*/
/* USB Speaker Audio Type I Format Interface Descriptor */
0x0B, /* bLength */
AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_STREAMING_FORMAT_TYPE, /* bDescriptorSubtype */
AUDIO_FORMAT_TYPE_I, /* bFormatType */
AUDIO_CHANNELS_COUNT, /* bNrChannels */
AUDIO_FRAME_SIZE, /* bSubFrameSize */
AUDIO_BITRESOLUTION, /* bBitResolution*/
0x01, /* bSamFreqType only one frequency supported */
SAMPLE_FREQ, /* Audio sampling frequency coded on 3 bytes */
/* 11 byte*/
/* Endpoint 1 - Standard Descriptor */
AUDIO_STANDARD_ENDPOINT_DESC_SIZE, /* bLength */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_OUT_EP, /* bEndpointAddress 1 out endpoint*/
USB_ENDPOINT_TYPE_ISOCHRONOUS, /* bmAttributes, isochronus, async */
LOBYTE((uint16_t)AUDIO_OUT_PACKET),
HIBYTE((uint16_t)AUDIO_OUT_PACKET),
0x04, /* bInterval */
0x00, /* bRefresh */
0x00, /* bSynchAddress */
/* 09 byte*/
/* Endpoint - Audio Streaming Descriptor*/
AUDIO_STREAMING_ENDPOINT_DESC_SIZE, /* bLength */
AUDIO_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_ENDPOINT_GENERAL, /* bDescriptor */
0x00, /* bmAttributes */
0x00, /* bLockDelayUnits */
0x00, /* wLockDelay */
0x00,
/* 07 byte*/
};
#endif
#ifdef USE_AUDIO_CLASS_02_00
/* USB AUDIO UAC2 device Configuration Descriptor */
static volatile uint8_t usbd_audio_CfgDesc[USB_AUDIO_DESC_SIZ] =
{
/* Configuration 1 */
0x09, /* bLength */
USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType */
LOBYTE(AUDIO_CONFIG_DESC_SIZE), /* wTotalLength */
HIBYTE(AUDIO_CONFIG_DESC_SIZE),
0x02, /* bNumInterfaces */
0x01, /* bConfigurationValue */
0x00, /* iConfiguration */
0xC0, /* bmAttributes BUS Powred*/
250, /* bMaxPower = 100 mA*/
/* 09 byte*/
/* --- UAC2 configuration description, see page 46 in
* "Universal Serial Bus Device Class Definition for Audio Devices" (Audio20 final.pdf) --- */
/* Standard IAD Interface Descriptor */
8, /* bLength */
AUDIO_IAD_DESCRIPTOR_TYPE, /* bDescriptorType */
0x00, /* bFirstInterface */
0x02, /* bInterfaceNumber */
USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass AUDIO */
0x00, /* bInterfaceSubClass UNDEFINED */
AUDIO_PROTOCOL_IP_VERSION_02_00, /* bInterfaceProtocol */
0x00, /* iInterface */
/* 08 byte*/
/* Standard AC(AudioControl) Interface Descriptor */
AUDIO_INTERFACE_DESC_SIZE, /* bLength */
USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
0x00, /* bInterfaceNumber */
0x00, /* bAlternateSetting */
0x00, /* bNumEndpoints */
USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
AUDIO_SUBCLASS_AUDIOCONTROL, /* bInterfaceSubClass */
AUDIO_PROTOCOL_IP_VERSION_02_00, /* bInterfaceProtocol */
0x00, /* iInterface */
/* 09 byte*/
/* Class-specific AC(AudioControl) Interface Descriptor */
AUDIO_INTERFACE_DESC_SIZE, /* bLength */
AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_CONTROL_HEADER, /* bDescriptorSubtype */
0x00, 0x02, /* bcdADC 2.00 */
0x01, /* bCategory */
LOBYTE(0x003C), /* wTotalLength Total number of bytes returned for the class-specific */
HIBYTE(0x003C), /* AudioControl interface descriptor. Includes the combined length */
/* of this descriptor header and all Clock Source, Unit and Terminal descriptors.*/
0x00, /* bmControls */
/* 09 byte*/
/* Standart CSD(Clock Sourse) 44.1k Interface Descriptor */
8, /* bLength */
AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_CONTROL_CLOCK_SOURSE, /* bDescriptorSubtype */
0x10, /* bClockID */
0x01, /* bmAttributes, 0x01 - Internal fixed Clock */
0x07, /* bmControls, 0b00000111 - freq r/w, validity r */
0x00, /* bAssocTerminal */
0x00, /* iClockSource */
/* 08 byte*/
/* Audio Input Terminal Descriptor */
0x11, /* bLength */
AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_CONTROL_INPUT_TERMINAL, /* bDescriptorSubtype */
0x20, /* bTerminalID */
0x01, 0x01, /* wTerminalType AUDIO_TERMINAL_USB_STREAMING 0x0101 */
0x00, /* bAssocTerminal */
0x10, /* bCSourceID - CSD/CXD ID */
0x01, /* bNrChannels */
0x00, 0x00, 0x00, 0x00, /* bmChannelConfig 0x00000003 - Left&Right; 0x0000 - Mono; 0x0004 - FrontCenter */
0x00, /* iChannelNames */
0x00, 0x00, /* bmControls */
0x00, /* iTerminal */
/* 17 byte*/
/* USB Speaker Audio Feature Unit Descriptor */
0x0E, /* bLength */
AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_CONTROL_FEATURE_UNIT, /* bDescriptorSubtype */
0x30, /* bUnitID */
0x20, /* bSourceID */
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, /* iTerminal */
/* 6 + ((ch + 1) * 4) byte */
/* USB Speaker Output Terminal Descriptor */
0x0C, /* bLength */
AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_CONTROL_OUTPUT_TERMINAL, /* bDescriptorSubtype */
0x40, /* bTerminalID */
0x01, /* wTerminalType 0x0301, headphones*/
0x03,
0x00, /* bAssocTerminal */
0x30, /* bSourceID */
0x10, /* bCSourceID - CXD ID */
0x00, 0x00, /* bmControls */
0x00, /* iTerminal */
/* 12 byte*/
/* Standard AS Interface Descriptor - Audio Streaming Zero Bandwith
Interface 1, Alternate Setting 0 */
AUDIO_INTERFACE_DESC_SIZE, /* bLength */
USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
0x01, /* bInterfaceNumber */
0x00, /* bAlternateSetting */
0x00, /* bNumEndpoints */
USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */
AUDIO_PROTOCOL_IP_VERSION_02_00, /* bInterfaceProtocol */
0x00, /* iInterface */
/* 09 byte*/
/* Standard AS Interface Descriptor - Audio Streaming
Interface 1, Alternate Setting 1 */
AUDIO_INTERFACE_DESC_SIZE, /* bLength */
USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
0x01, /* bInterfaceNumber */
0x01, /* bAlternateSetting */
0x01, /* bNumEndpoints */
USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */
AUDIO_PROTOCOL_IP_VERSION_02_00, /* bInterfaceProtocol */
0x00, /* iInterface */
/* 09 byte*/
/* Class-specific AS Interface Descriptor */
0x10, /* bLength */
AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_STREAMING_GENERAL, /* bDescriptorSubtype */
0x20, /* bTerminalLink - Input Terminal */
0x00, /* active alt settings r/w, valid alt settings r */
AUDIO_FORMAT_TYPE_I, /* bFormatType */
0x01, 0x00, 0x00, 0x00, /* bFormatTag - AUDIO_FORMAT_PCM 0x0001*/
0x01, /* bNrChannels */
0x00, 0x00, 0x00, 0x00, /* L+R front */
0x00, /* iChannelNames */
/* 16 byte*/
/* USB Speaker Audio Type I Format Interface Descriptor */
0x06, /* bLength */
AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_STREAMING_FORMAT_TYPE, /* bDescriptorSubtype */
AUDIO_FORMAT_TYPE_I, /* bFormatType */
0x02, /* bSubFrameSize; bytes per frame */
0x18, /* bBitResolution; bits per sample */
/* 06 byte*/
/* Endpoint 1 - Standard Descriptor */
0x07, /* bLength */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_OUT_EP, /* bEndpointAddress 1 out endpoint*/
0x01, /* bmAttributes, isochronus, async, explict fb */
0xC0, 0x00, /* wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */
0x04, /* bInterval */
/* 07 byte*/
/* Endpoint - Audio Streaming Descriptor*/
0x08, /* bLength */
AUDIO_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_ENDPOINT_GENERAL, /* bDescriptor */
0x00, /* bmAttributes, default 0x00 */
0x01, /* bmControls, default 0x00 */
0x01, /* bLockDelayUnits */
0x01, 0x00, /* wLockDelay */
/* 08 byte*/
};
#endif