Проблема решилась очень просто - так как используется HighSpeed, то вместо bInterval для конечной точки необходимо было указать = 4 (125мкс * 2^(bInterval-1) = 1мс).
В итоге всё завелось, добавил фитбек для синхронизации и столкнулся с проблемой: после каждой передачи по фитбеку хост даёт Sync reset pipe and clear stall.
может кто-нибудь сталкивался или есть мысли из за чего такое может быть?
Код
HighSpeedConfigDscr:
;; Configuration 1
db 0x09 ;; bLength
db 0x02 ;; bDescriptorType
db (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) mod 256 ;; wTotalLength
db (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) / 256
db 0x02 ;; bNumInterfaces
db 0x01 ;; bConfigurationValue
db 0x00 ;; iConfiguration
db 0xC0 ;; bmAttributes BUS Powred
db 0x32 ;; bMaxPower = 100 mA
;; USB Speaker Standard interface descriptor
db 0x09 ;; bLength
db 0x04 ;; bDescriptorType
db 0x00 ;; bInterfaceNumber
db 0x00 ;; bAlternateSetting
db 0x00 ;; bNumEndpoints
db 0x01 ;; bInterfaceClass
db 0x01 ;; bInterfaceSubClass
db 0x00 ;; bInterfaceProtocol
db 0x00 ;; iInterface
;;USB Speaker Class-specific AC Interface Descriptor
db 0x09 ;; bLength
db 0x24 ;; bDescriptorType
db 0x01 ;; bDescriptorSubtype
db 0x00, 0x01 ;; 1.00 bcdADC
db 0x1E, 0x00;; wTotalLength
db 0x01 ;; bInCollection
db 0x01 ;; baInterfaceNr
;; USB Speaker Input Terminal Descriptor
db 0x0C ;; bLength
db 0x24 ;; bDescriptorType
db 0x02 ;; bDescriptorSubtype
db 0x01 ;; bTerminalID
db 0x01, 0x01 ;; wTerminalType AUDIO_TERMINAL_USB_STREAMING 0x0101
db 0x00 ;; bAssocTerminal
db 0x02 ;; bNrChannels
db 0x03, 0x00 ;; wChannelConfig 0x0003 Mono
db 0x00 ;; iChannelNames
db 0x00 ;; iTerminal
;;USB Speaker Output Terminal Descriptor
db 0x09 ;; bLength
db 0x24 ;; bDescriptorType
db 0x03 ;; bDescriptorSubtype
db 0x02 ;; bTerminalID
db 0x01, 0x03 ;; wTerminalType 0x0301
db 0x00 ;; bAssocTerminal
db 0x01 ;; bSourceID
db 0x00 ;; iTerminal
;; USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith
;; Interface 1, Alternate Setting 0
db 0x09 ;; bLength
db 0x04 ;; bDescriptorType
db 0x01 ;; bInterfaceNumber
db 0x00 ;; bAlternateSetting
db 0x00 ;; bNumEndpoints
db 0x01 ;; bInterfaceClass
db 0x02 ;; bInterfaceSubClass
db 0x00 ;; bInterfaceProtocol
db 0x00 ;; iInterface
;; USB Speaker Standard AS Interface Descriptor - Audio Streaming Operational
;; Interface 1, Alternate Setting 1
db 0x09 ;; bLength
db 0x04 ;; bDescriptorType
db 0x01 ;; bInterfaceNumber
db 0x01 ;; bAlternateSetting
db 0x02 ;; bNumEndpoints
db 0x01 ;; bInterfaceClass
db 0x02 ;; bInterfaceSubClass
db 0x00 ;; bInterfaceProtocol
db 0x00 ;; iInterface
;; USB Speaker Audio Streaming Interface Descriptor
db 0x07 ;; bLength
db 0x24 ;; bDescriptorType
db 0x01 ;; bDescriptorSubtype
db 0x01 ;; bTerminalLink
db 0x00 ;; bDelay
db 0x01, 0x00 ;; wFormatTag AUDIO_FORMAT_PCM 0x0001
;; USB Speaker Audio Type III Format Interface Descriptor
db 0x0B ;; bLength
db 0x24 ;; bDescriptorType
db 0x02 ;; bDescriptorSubtype
db 0x01 ;; bFormatType
db 0x02 ;; bNrChannels
db 0x03 ;; bSubFrameSize : 3 Bytes per frame (24bits)
db 24 ;; bBitResolution (24-bits per sample)
db 0x01 ;; bSamFreqType only one frequency supported
db 0x80, 0xBB, 0x00;; Audio sampling frequency coded on 3 bytes
;; Endpoint 2 - Standard Descriptor
db 0x09 ;; bLength
db 0x05 ;; bDescriptorType
db 0x02 ;; bEndpointAddress 2 out endpoint
db 0x05 ;; bmAttributes (01)
db 0x26, 0x01 ;; wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*3(HalfWord))
db 0x04 ;; bInterval
db 0x00 ;; bRefresh
db 0x88 ;; bSynchAddress
;; Endpoint - Audio Streaming Descriptor
db 0x07 ;; bLength
db 0x25 ;; bDescriptorType
db 0x01 ;; bDescriptor
db 0x00 ;; bmAttributes
db 0x00 ;; bLockDelayUnits
db 0x00 ;; wLockDelay
db 0x00
;; Endpoint 8 - Standard Descriptor
db 0x09 ;; bLength
db 0x05 ;; bDescriptorType
db 0x88 ;; bEndpointAddress 8 in endpoint
db 0x11 ;; bmAttributes
db 0x03, 0x00 ;; wMaxPacketSize in Bytes
db 0x04 ;; bInterval
db 0x04 ;; bRefresh
db 0x00 ;; bSynchAddress
HighSpeedConfigDscrEnd:
Код
while(!(EP2468STAT & bmEP8FULL))
{
EP8FIFOBUF[ 0 ] = 0x00;
EP8FIFOBUF[ 1 ] = 0x00;
EP8FIFOBUF[ 2 ] = 0x0C;
SYNCDELAY;
EP8BCH = 0x00;
SYNCDELAY;
EP8BCL = 0x03; // pass newly-sourced buffer on to host
}