4个接口,1个AC,2个AS,1个HID。播放是双通道的,录音是单通道的。原本配置描述符里录音也是双通道的,代码也是没问题的。我现在改为单通道,就出现了问题。协议是:usb1.1版本,usb audio1.0版本。
录音拓扑结构是: IT4--FU5--OT2--Endpoint2(端点2是等时输入端点)
const uint8_t gu8ConfigDescriptor[] =
{
LEN_CONFIG,
DESC_CONFIG,
0xDB, 0x00,
0x04, /* bNumInterfaces */
0x01, /* bConfigurationValue */
0x00, /* iConfiguration */
0x80, /* bmAttributes */
0x20, /* Max power */
/* Standard AC inteface */
0x09,
0x04,
0x00,
0x00,
0x00,
0x01,
0x01,
0x00,
0x00,
/* Class-spec AC interface descriptor*/
0x0A,
0x24,
0x01, /* bDescriptorSubType:HEADER */
0x00, 0x01, /* bcdADC:1.0 */
0x47, 0x00, /* wTotalLength */
0x02, /* bInCollection */
0x01, /* baInterfaceNr(1) out audiostreaming interface*/
0x02, /* baInterfaceNr(n) */
/* TID 1: Input for usb streaming */
0x0C, /* bLength */
0x24, /* bDescriptorType:CS_INTERFACE */
0x02, /* bDescriptorSubType*/
0x01, /* bTerminalID */
0x01, 0x01, /* wTerminalType: 0x0101 usb streaming */
0x00, /* bAssocTerminal */
PLAY_CHANNELS, /* bNrChannels */
PLAY_CH_CFG, 0x00, /* wChannelConfig */
0x00, /* iChannelNames */
0x00, /* iTerminal */
/* UNIT ID 5: Feature Unit */
0x09, /* bLength */
0x24, /* bDescriptorType */
0x06, /* bDescriptorSubType */
REC_FEATURE_UNITID, /* bUnitID */
0x04, /* bSourceID */
0x01, /* bControlSize */
0x01, /* bmaControls(0) */
0x02, /* bmaControls(0) */
//0x02, /* bmaControls(0) */
0x00, /* iFeature */
/* TID 2: Output Terminal for usb streaming */
0x09, /* bLength */
0x24, /* bDescriptorType:CS_INTERFACE */
0x03, /* bDescriptorSubType:OUTPUT_TERMINAL */
0x02, /* bTerminalID */
0x01, 0x01, /* wTerminalType: 0x0101 usb streaming */
0x00, /* bAssocTerminal */
REC_FEATURE_UNITID, /* bSourceID */
0x00, /* iTerminal */
/* UNIT ID 6: Feature Unit */
0x0A,
0x24,
0x06,
PLAY_FEATURE_UNITID, /* bUnitID */
0x01,
0x01,
0x01, /* bmaControls(0) */
0x02, /* bmaControls(0) */
0x02, /* bmaControls(0) */
0x00, /* iFeature */
/* TID 3: Output for speaker */
0x09, /* bLength*/
0x24, /* bDescriptorType:CS_INTERFACE*/
0x03, /* bDescriptorSubType:OUTPUT_TERMINAL*/
0x03, /* bTerminalID*/
0x01, 0x03, /* wTerminalType: 0x0301 speaker*/
0x00, /* bAssocTerminal*/
0x06, /* bSourceID*/
0x00, /* iTerminal*/
/* TID 4: Input Terminal for microphone */
0x0C, /* bLength */
0x24, /* bDescriptorType:CS_INTERFACE */
0x02, /* bDescriptorSubType:INPUT_TERMINAL*/
0x04, /* bTerminalID*/
0x01, 0x02, /* wTerminalType: 0x0201 microphone*/
0x00, /* bAssocTerminal*/
REC_CHANNELS, /* bNrChannels*/
REC_CH_CFG, 0x00, /* wChannelConfig*/
0x00, /* iChannelNames*/
0x00, /* iTerminal*/
/* Standard AS interface 1, alternate 0 */
0x09, /* bLength */
0x04, /* bDescriptorType */
0x01, /* bInterfaceNumber */
0x00, /* bAlternateSetting */
0x00, /* bNumEndpoints */
0x01, /* bInterfaceClass:AUDIO */
0x02, /* bInterfaceSubClass:AUDIOSTREAMING */
0x00, /* bInterfaceProtocol */
0x00, /* iInterface */
/* Standard AS interface 1, alternate 1 */
0x09, /* bLength */
0x04, /* bDescriptorType */
0x01, /* bInterfaceNumber */
0x01, /* bAlternateSetting */
0x01, /* bNumEndpoints */
0x01, /* bInterfaceClass:AUDIO */
0x02, /* bInterfaceSubClass:AUDIOSTREAMING */
0x00, /* bInterfaceProtocol */
0x00, /* iInterface */
/* Class-spec AS interface, this interface's endpoint connect to TID 0x02 */
0x07, /* bLength */
0x24, /* bDescriptorType:CS_INTERFACE */
0x01, /* bDescriptorSubType:AS_GENERAL */
0x02, /* bTernimalLink */
0x01, /* bDelay */
0x01, 0x00, /* wFormatTag:0x0001 PCM */
/* Type I format type Descriptor */
0x0B, /* bLength */
0x24, /* bDescriptorType:CS_INTERFACE */
0x02, /* bDescriptorSubType:FORMAT_TYPE */
0x01, /* bFormatType:FORMAT_TYPE_I */
REC_CHANNELS, /* bNrChannels */
0x02, /* bSubFrameSize */
0x10, /* bBitResolution */
0x01, /* bSamFreqType : 0 continuous; 1 discrete */
REC_RATE_LO,
REC_RATE_MD,
REC_RATE_HI, /* Sample Frequency */
/* Standard AS ISO Audio Data Endpoint */
0x09, /* bLength */
0x05, /* bDescriptorType */
ISO_IN_EP_NUM | EP_INPUT, /* bEndpointAddress */
0x0d, /* bmAttributes */
0x96, 0x00, /* wMaxPacketSize*/
0x01, /* bInterval*/
0x00, /* bRefresh*/
0x00, /* bSynchAddress*/
/* Class-spec AS ISO Audio Data endpoint Descriptor */
0x07, /* bLength */
0x25, /* bDescriptorType:CS_ENDPOINT */
0x01, /* bDescriptorSubType:EP_GENERAL */
0x00, /* bmAttributes */
0x00, /* bLockDelayUnits */
0x00, 0x00, /* wLockDelay */
/* Standard AS interface 2, alternate 0 */
0x09, /* bLength */
0x04, /* bDescriptorType */
0x02, /* bInterfaceNumber */
0x00, /* bAlternateSetting */
0x00, /* bNumEndpoints */
0x01, /* bInterfaceClass:AUDIO */
0x02, /* bInterfaceSubClass:AUDIOSTREAMING */
0x00, /* bInterfaceProtocol */
0x00, /* iInterface */
/* Standard AS interface 2, alternate 1 */
0x09, /* bLength */
0x04, /* bDescriptorType */
0x02, /* bInterfaceNumber */
0x01, /* bAlternateSetting */
0x01, /* bNumEndpoints */
0x01, /* bInterfaceClass:AUDIO */
0x02, /* bInterfaceSubClass:AUDIOSTREAMING */
0x00, /* bInterfaceProtocol */
0x00, /* iInterface */
/* Class-spec AS inf this interface's endpoint connect to TID 0x01 */
0x07, /* bLength */
0x24, /* bDescriptorType:CS_INTERFACE */
0x01, /* bDescriptorSubType:AS_GENERAL */
0x01, /* bTernimalLink */
0x01, /* bDelay */
0x01, 0x00, /* wFormatTag:0x0001 PCM */
/* Type I format type Descriptor */
0x0B, /* bLength */
0x24, /* bDescriptorType:CS_INTERFACE */
0x02, /* bDescriptorSubType:FORMAT_TYPE */
0x01, /* bFormatType:FORMAT_TYPE_I */
PLAY_CHANNELS, /* bNrChannels */
0x02, /* bSubFrameSize */
0x10, /* bBitResolution */
0x01, /* bSamFreqType : 0 continuous; 1 discrete */
PLAY_RATE_LO,
PLAY_RATE_MD,
PLAY_RATE_HI, /* Sample Frequency */
/* Standard AS ISO Audio Data Endpoint, output, addtess 2, Max 0x40 */
0x09, /* bLength */
0x05, /* bDescriptorType */
ISO_OUT_EP_NUM | EP_OUTPUT, /* bEndpointAddress */
0x0d, /* bmAttributes */
EP3_MAX_PKT_SIZE, 0x00, /* wMaxPacketSize */
0x01, /* bInterval */
0x00, /* bRefresh */
0x00, /* bSynchAddress */
/* Class-spec AS ISO Audio Data endpoint Descriptor */
0x07, /* bLength */
0x25, /* bDescriptorType:CS_ENDPOINT */
0x01, /* bDescriptorSubType:EP_GENERAL */
0x80, /* bmAttributes */
0x00, /* bLockDelayUnits */
0x00, 0x00, /* wLockDelay */
//------------------------------------------------------------------------
/* I/F descr: HID */
LEN_INTERFACE, // bLength
DESC_INTERFACE, // bDescriptorType
0x03, // bInterfaceNumber
0x00, // bAlternateSetting
0x01, // bNumEndpoints
0x03, // bInterfaceClass,表明是HID
0x01, // bInterfaceSubClass
0x01, // bInterfaceProtocol
0x00, // iInterface
// HID Descriptor
LEN_HID, // Size of this descriptor in UINT8s.
DESC_HID, // HID descriptor type.
0x10, 0x01, // HID Class Spec. release number.
0x00, // H/W target country.
0x01, // Number of HID class descriptors to follow.
DESC_HID_RPT, // Dscriptor type.
/* Total length of report descriptor */
HID_REPORT_DESCRIPTOR_SIZE & 0x00FF,
(HID_REPORT_DESCRIPTOR_SIZE & 0xFF00) >> 8,
/* EP Descriptor: interrupt in */
LEN_ENDPOINT, // bLength
DESC_ENDPOINT, // bDescriptorType
(HID_IN_EP_NUM | EP_INPUT), // bEndpointAddress
EP_INT, // bmAttributes
// wMaxPacketSize
EP4_MAX_PKT_SIZE & 0x00FF,
(EP4_MAX_PKT_SIZE & 0xFF00) >> 8,
10 // bInterval
};
音频是48K,16bit的,MCU是新塘的NUC123,cortex-M0内核
配置描述符是参考usb官网的BasicAudioDevice-10文档修改的,第一个AS就是麦克风接口,
枚举问题算是解决了。
新问题是麦克风的信号传进了MCU,却还是没能通过usb传到电脑
from: http://bbs.csdn.net/topics/391995022