Jump to content

    
Sign in to follow this  
Panych

USB

Recommended Posts

Добрый все день! Имеется usb-устройство с cайпрессовским СY7C68013 . Поначалу работа с ним велась в Windows через драйвер cyusb.sys - всё работало, данные посредством FIFO передавались верные (устройство принимает данные и передает по usb в pc ). Затем встал вопрос об аналогичной работе в Линуксе. Была использована библиотека libusb.

 

Что происходит в данный момент : если после включения устройства ,подключенного к компьютеру с Виндоус - перезагрузить компьютер и войти в Линукс - всё работает, данные принимаются в Линуксе правильные. Но стоит только сбросить питание устройства (вне зависимости от того, подключено ли оно шнуром к компьютеру) - как при включении питания обратно - данные принимаются абсолютно левые. Под данными я подразумеваю набор байт. То есть возникло подозрение, что драйвер cyusb.sys вносит какие-то инициализационные изменения , так как если включить Виндоус - все работает - перейти в Линукс - все работает - выключить КОМПЬЮТЕР - включить компьютер - все по-прежнему работает. Перестает работать только в том случае, если сбросить питание УСТРОЙСТВА (если сбросить и включить обратно питание устройства, находясь при этом в Виндоус - всё работает).

 

Исходя из этого у меня вопрос - передает ли драйвер cyusb.sys какие-либо параметры в устройство ? (подчеркну еще раз, что сама передача данных идет исправно, просто сами байты становятся "левыми" - причем всегда одинаковыми, вне зависимости от тех данных, которые устройство должно передать). Такое впечатление, что где-то в какой-то регистр fx2 при сбросе питания вводится значение по умолчанию, при к-ом сами данные могут портиться. Какой (и так ли это) - выяснить не удалось.

 

TRM читал. Надеюсь на помощь

Share this post


Link to post
Share on other sites

Что-то не пойму я поведения 68013A

 

Подключено к арму через асинхронный интерфейс, /mpOE подключен одновременно к /SLOE и /SLRD

 

FIFO и точки настроены как EP2 - IN, EP6 - OUT

 

Когда данные гоняются малыми объемами (<512 байт), все в порядке

 

Когда передается большой кусок, проц вычитывает иногда лишние 2 байта (шина данных 16бит). Вычитывание лишних байтов - четко по границе 512-байтового блока

 

Осциллограф четко показывает, что флаг EP6EF падает еще до того, как закончится /mpCS и /mpOE. Длительность /mpCS и /mpOE как только не менял, вплоть до около 150нс - ноль эмоций. Флаг, как и описано в даташите, падает не позднее 70нс от начала /mpOE

 

Вот код чтения точки:

 

void FX2_USB_ReadFIFO(U16* buf, U32 len)
{
    while(len)
    {
        while(!is_FLAGC);
        *buf++ = FX2_FIFO6;
        len -= 2;    
    }
}

 

сигналы все нормальные, звона нет.

 

Я уже не знаю, в какую сторону думать...

Share this post


Link to post
Share on other sites
сигналы все нормальные, звона нет.

Я уже не знаю, в какую сторону думать...

 

Что-то мне это напоминает... http://electronix.ru/forum/index.php?showtopic=66313&hl=

Share this post


Link to post
Share on other sites

Чтоб не плодить темы задам вопрос тут:

Изучаю cy7c68013a, задача принять аудио данные. Дискриптор написал, устройство определяется нормально, но данные на устройство не уходят.

Вроде всё делаю по примерам, но никак не заставить устройство принимать пакеты. В чём может быть дело?

#pragma NOIV			   // Do not generate interrupt vectors

#include "fx2.h"
#include "fx2regs.h"
#include "fx2sdly.h"			// SYNCDELAY macro

extern BOOL GotSUD;			 // Received setup data flag
extern BOOL Sleep;
extern BOOL Rwuen;
extern BOOL Selfpwr;

BYTE Configuration;			 // Current configuration
BYTE AlternateSetting;		  // Alternate settings

void EZUSB_INITI2C();

//#define bmEP2IRQ		0x10


//-----------------------------------------------------------------------------
// Task Dispatcher hooks
//   The following hooks are called by the task dispatcher.
//-----------------------------------------------------------------------------

void TD_Init(void)			 // Called once at startup
{

  // set the CPU clock to 48MHz
  CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1);
  SYNCDELAY;

  // set the slave FIFO interface to 48MHz
  IFCONFIG |= 0x40;
  SYNCDELAY;


// b7:		Valid
// b6:		DIR (0=OUT, 1=IN)
// b[5:4]	Type (01=ISO, 10=BULK, 11=INT)
// b3:		Size (0=512, 1=1024 bytes)
// b2:		0
// b[1:0]	Buffering (00=quad, 10=double, 11=triple)		
// Only using endpoint 4, zero the valid bit on all others
EP1OUTCFG = EP1INCFG = EP2CFG = EP4CFG = EP6CFG = EP8CFG = 0x00;
SYNCDELAY;
EP4CFG = 0x98;  // EP4 is DIR=OUT, TYPE=ISOC, SIZE=1024, BUF=4x
SYNCDELAY;

// OUT endpoints do NOT come up armed
EP4BCL = 0x80; // arm first buffer by writing BC w/skip=1
SYNCDELAY;
EP4BCL = 0x80; // arm second buffer by writing BC w/skip=1				  

 // enable dual autopointer feature
 //AUTOPTRSETUP |= 0x01;

 USBIE |= bmSOF;	// Enable the SOF IRQ to serve as LED timers
 //EPIE = bmEP2IRQ;	// Enable EP6 and EP2 Interrupts to turn on transfer LEDS
 //EPIE = bmEP4IRQ;	// Enable EP6 and EP4 Interrupts to turn on transfer LEDS

 OEA = 0xFF;
 IOA = 0xFF;
}

void TD_Poll(void)			  // Called repeatedly while the device is idle
{
IOA = 0x00;
  // check EP4 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty
if(!(EP2468STAT & bmEP4EMPTY))
{ 
	EP4BCL = 0x80;		  // re(arm) EP4OUT
}
  	IOA = 0xFF;
}

BOOL TD_Suspend(void)		  // Called before the device goes into suspend mode
{
  return(TRUE);
}

BOOL TD_Resume(void)		  // Called after the device resumes
{
  return(TRUE);
}

//-----------------------------------------------------------------------------
// Device Request hooks
//   The following hooks are called by the end point 0 device request parser.
//-----------------------------------------------------------------------------

BOOL DR_GetDescriptor(void)
{
  return(TRUE);
}

BOOL DR_SetConfiguration(void)   // Called when a Set Configuration command is received
{
  Configuration = SETUPDAT[2];
  return(TRUE);			// Handled by user code
}

BOOL DR_GetConfiguration(void)   // Called when a Get Configuration command is received
{
  EP0BUF[0] = Configuration;
  EP0BCH = 0;
  EP0BCL = 1;
  return(TRUE);			// Handled by user code
}

BOOL DR_SetInterface(void)	   // Called when a Set Interface command is received
{
  AlternateSetting = SETUPDAT[2];
  return(TRUE);			// Handled by user code
}

BOOL DR_GetInterface(void)	   // Called when a Set Interface command is received
{
  EP0BUF[0] = AlternateSetting;
  EP0BCH = 0;
  EP0BCL = 1;
  return(TRUE);			// Handled by user code
}

BOOL DR_GetStatus(void)
{
  return(TRUE);
}

BOOL DR_ClearFeature(void)
{
  return(TRUE);
}

BOOL DR_SetFeature(void)
{
  return(TRUE);
}

BOOL DR_VendorCmnd(void)
{
 return(TRUE);
}

//-----------------------------------------------------------------------------
// USB Interrupt Handlers
//   The following functions are called by the USB interrupt jump table.
//-----------------------------------------------------------------------------

// Setup Data Available Interrupt Handler
void ISR_Sudav(void) interrupt 0
{
  GotSUD = TRUE;			// Set flag
  EZUSB_IRQ_CLEAR();
  USBIRQ = bmSUDAV;		 // Clear SUDAV IRQ
}

// Setup Token Interrupt Handler
void ISR_Sutok(void) interrupt 0
{
  EZUSB_IRQ_CLEAR();
  USBIRQ = bmSUTOK;		 // Clear SUTOK IRQ
}

void ISR_Sof(void) interrupt 0
{
  EZUSB_IRQ_CLEAR();
  USBIRQ = bmSOF;			  // Clear SOF IRQ
}

void ISR_Ures(void) interrupt 0
{
  // whenever we get a USB reset, we should revert to full speed mode
  pConfigDscr = pFullSpeedConfigDscr;
  ((CONFIGDSCR xdata *) pConfigDscr)->type = CONFIG_DSCR;
  pOtherConfigDscr = pHighSpeedConfigDscr;
  ((CONFIGDSCR xdata *) pOtherConfigDscr)->type = OTHERSPEED_DSCR;

  EZUSB_IRQ_CLEAR();
  USBIRQ = bmURES;		 // Clear URES IRQ
}

void ISR_Susp(void) interrupt 0
{
  Sleep = TRUE;
  EZUSB_IRQ_CLEAR();
  USBIRQ = bmSUSP;
}

void ISR_Highspeed(void) interrupt 0
{
  if (EZUSB_HIGHSPEED())
  {
  pConfigDscr = pHighSpeedConfigDscr;
  ((CONFIGDSCR xdata *) pConfigDscr)->type = CONFIG_DSCR;
  pOtherConfigDscr = pFullSpeedConfigDscr;
  ((CONFIGDSCR xdata *) pOtherConfigDscr)->type = OTHERSPEED_DSCR;
  }

  EZUSB_IRQ_CLEAR();
  USBIRQ = bmHSGRANT;
}
void ISR_Ep0ack(void) interrupt 0
{
}
void ISR_Stub(void) interrupt 0
{
}
void ISR_Ep0in(void) interrupt 0
{
}
void ISR_Ep0out(void) interrupt 0
{
}
void ISR_Ep1in(void) interrupt 0
{
}
void ISR_Ep1out(void) interrupt 0
{
}
void ISR_Ep2inout(void) interrupt 0
{
//BYTE dum;   	
//EZUSB_IRQ_CLEAR();
  	//EPIRQ = bmEP2IRQ;		 // Clear IRQ

 // check EP2 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty
if(!(EP2468STAT & bmEP2EMPTY))
{ 
	EP2BCL = 0x80;		  // re(arm) EP2OUT
}
}
void ISR_Ep4inout(void) interrupt 0
{
//BYTE dum;   	
//EZUSB_IRQ_CLEAR();
  	//EPIRQ = bmEP4IRQ;		 // Clear IRQ

 // check EP4 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty
if(!(EP2468STAT & bmEP4EMPTY))
{ 
	EP4BCL = 0x80;		  // re(arm) EP4OUT
}
}
void ISR_Ep6inout(void) interrupt 0
{
}
void ISR_Ep8inout(void) interrupt 0
{
}
void ISR_Ibn(void) interrupt 0
{
}
void ISR_Ep0pingnak(void) interrupt 0
{
}
void ISR_Ep1pingnak(void) interrupt 0
{
}
void ISR_Ep2pingnak(void) interrupt 0
{
}
void ISR_Ep4pingnak(void) interrupt 0
{
}
void ISR_Ep6pingnak(void) interrupt 0
{
}
void ISR_Ep8pingnak(void) interrupt 0
{
}
void ISR_Errorlimit(void) interrupt 0
{
}
void ISR_Ep2piderror(void) interrupt 0
{
}
void ISR_Ep4piderror(void) interrupt 0
{
}
void ISR_Ep6piderror(void) interrupt 0
{
}
void ISR_Ep8piderror(void) interrupt 0
{
}
void ISR_Ep2pflag(void) interrupt 0
{
}
void ISR_Ep4pflag(void) interrupt 0
{
}
void ISR_Ep6pflag(void) interrupt 0
{
}
void ISR_Ep8pflag(void) interrupt 0
{
}
void ISR_Ep2eflag(void) interrupt 0
{
}
void ISR_Ep4eflag(void) interrupt 0
{
}
void ISR_Ep6eflag(void) interrupt 0
{
}
void ISR_Ep8eflag(void) interrupt 0
{
}
void ISR_Ep2fflag(void) interrupt 0
{
}
void ISR_Ep4fflag(void) interrupt 0
{
}
void ISR_Ep6fflag(void) interrupt 0
{
}
void ISR_Ep8fflag(void) interrupt 0
{
}
void ISR_GpifComplete(void) interrupt 0
{
}
void ISR_GpifWaveform(void) interrupt 0
{
}

;;-----------------------------------------------------------------------------
;;   File:	  dscr.a51
;;   Contents:  This file contains descriptor data tables.
;;
;; $Archive: /USB/Examples/Fx2lp/bulkloop/dscr.a51 $
;; $Date: 9/01/03 8:51p $
;; $Revision: 3 $
;;
;;
;;-----------------------------------------------------------------------------
;; Copyright 2003, Cypress Semiconductor Corporation
;;-----------------------------------------------------------------------------;;-----------------------------------------------------------------------------

DSCR_DEVICE   equ   1  ;; Descriptor type: Device
DSCR_CONFIG   equ   2  ;; Descriptor type: Configuration
DSCR_STRING   equ   3  ;; Descriptor type: String
DSCR_INTRFC   equ   4  ;; Descriptor type: Interface
DSCR_ENDPNT   equ   5  ;; Descriptor type: Endpoint
DSCR_DEVQUAL  equ   6  ;; Descriptor type: Device Qualifier

DSCR_DEVICE_LEN   equ   18
DSCR_CONFIG_LEN   equ	9
DSCR_INTRFC_LEN   equ	9
DSCR_ENDPNT_LEN   equ	7
DSCR_DEVQUAL_LEN  equ   10

ET_CONTROL   equ   0  ;; Endpoint type: Control
ET_ISO	   equ   1  ;; Endpoint type: Isochronous
ET_BULK	  equ   2  ;; Endpoint type: Bulk
ET_INT	   equ   3  ;; Endpoint type: Interrupt

public	  DeviceDscr, DeviceQualDscr, HighSpeedConfigDscr, FullSpeedConfigDscr, StringDscr, UserDscr

DSCR   SEGMENT   CODE PAGE

;;-----------------------------------------------------------------------------
;; Global Variables
;;-----------------------------------------------------------------------------
  rseg DSCR	 ;; locate the descriptor table in on-part memory.

DeviceDscr:   
  db   DSCR_DEVICE_LEN	 ;; Descriptor length
  db   DSCR_DEVICE  ;; Decriptor type
  dw   0002H	 ;; Specification Version (BCD)
  db   00H	   ;; Device class
  db   00H		;; Device sub-class
  db   00H		;; Device sub-sub-class
  db   64		;; Maximum packet size
  dw   0FF00H	 ;; Vendor ID
  dw   0FF0H	 ;; Product ID (Sample Device)
  dw   0000H	 ;; Product version ID
  db   1		;; Manufacturer string index
  db   2		;; Product string index
  db   0		;; Serial number string index
  db   1		;; Number of configurations

DeviceQualDscr:
  db   DSCR_DEVQUAL_LEN  ;; Descriptor length
  db   DSCR_DEVQUAL  ;; Decriptor type
  dw   0002H	 ;; Specification Version (BCD)
  db   00H	   ;; Device class
  db   00H		;; Device sub-class
  db   00H		;; Device sub-sub-class
  db   64		;; Maximum packet size
  db   1		;; Number of configurations
  db   0		;; Reserved

HighSpeedConfigDscr:   

 /* Configuration 1 */
  db   0x09								 /* bLength */
  db   0x02		  /* bDescriptorType */
  db   (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) mod 256	/* wTotalLength  109 bytes*/
  db   (HighSpeedConfigDscrEnd-HighSpeedConfigDscr)  /  256	  
  db   0x02								 /* bNumInterfaces */
  db   0x01								 /* bConfigurationValue */
  db   0x00								 /* iConfiguration */
  db   0xC0								 /* bmAttributes  BUS Powred*/
  db   0x32								 /* bMaxPower = 100 mA*/
 /* 09 byte*/

 /* 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 7??????????*/

;;USB Speaker Class-specific AC Interface Descriptor */
  db   0x09			;;;;/* bLength */
  db   0x24		  ;;;;/* bDescriptorType */
  db   0x01			   ;;;;/* bDescriptorSubtype */
  db   0x00, 0x01		  ;;;;/* 1.00 */			;;/* bcdADC */
  db   0x27, 0x00	;;;;/* wTotalLength = 39 30?????????*/
  db   0x01	;;;;/* bInCollection */
  db   0x01			   ;;;;/* baInterfaceNr */
;;;;/* 09 byte*/

;;;;/* 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, 0x03								;;;;/* bNrChannels */
							;;;;/* wChannelConfig 0x0003  Mono */
  db   0x00
  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								;;/* wTerminalType  0x0301*/
  db   0x03
  db   0x00								;;/* bAssocTerminal */
  db   0x01								;;/* bSourceID */
  db   0x00								;;/* iTerminal */
;;/* 09 byte*/

;;/* 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 */
;;/* 09 byte*/

;;/* 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   0x01								;;/* bNumEndpoints */
  db   0x01			  ;;/* bInterfaceClass */
  db   0x02	   ;;/* bInterfaceSubClass */
  db   0x00			;;/* bInterfaceProtocol */
  db   0x00								;;/* iInterface */
;;/* 09 byte*/

;;/* USB Speaker Audio Streaming Interface Descriptor */
  db   0x07 ;;/* bLength */
  db   0x24	 ;;/* bDescriptorType */
  db   0x01			 ;;/* bDescriptorSubtype */
  db   0x01								;;/* bTerminalLink */
  db   0x01								;;/* bDelay */
  db   0x01								;;/* wFormatTag AUDIO_FORMAT_PCM  0x0001*/
  db   0x00
;;/* 07 byte*/

;;/* 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		;;/* Audio sampling frequency coded on 3 bytes */
  db   0xBB
  db   0x00 ;;/* 11 byte*/

;;/* Endpoint 1 - Standard Descriptor */
  db   0x09   ;;/* bLength */
  db   0x05			  ;;/* bDescriptorType */
  db   0x04						;;/* bEndpointAddress 4 out endpoint*/
  db   0x01;;0x05				   ;;/* bmAttributes */
  db   0x20   ;;/* wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */
  db   0x01
  db   0x01								;;/* bInterval */
  db   0x00								;;/* bRefresh */
  db   0x00;//0x81								;;/* bSynchAddress */
;;/* 09 byte*/

;;/* Endpoint - Audio Streaming Descriptor*/
  db   0x07  ;;/* bLength */
  db   0x25	  ;;/* bDescriptorType */
  db   0x01			  ;;/* bDescriptor */
  db   0x00								;;/* bmAttributes */
  db   0x00								;;/* bLockDelayUnits */
  db   0x00								;;/* wLockDelay */
  db   0x00
;;/* 07 byte*/

;; Endpoint - Standard Descriptor  <-------- additional feedback EP
 ;;db   0x09   				;;/* bLength */
 ;;db   0x05		;;/* bDescriptorType */
 ;;db   0x81				  ;;/* bEndpointAddress */
 ;;db   0x01	   ;;/* bmAttributes */
 ;;db   0x03							;;/*1x 3 bytes wMaxPacketSize */
 ;;db   0x00
 ;;db   0x01								;;/* bInterval */
 ;;db   0x03								;;/* bRefresh, every 2ms */
 ;;db   0x00								;;/* bSynchAddress */
;;/* 09 byte*/

HighSpeedConfigDscrEnd:   

FullSpeedConfigDscr:   

 /* Configuration 1 */
  db   0x09								 /* bLength */
  db   0x02		  /* bDescriptorType */
  db   (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) mod 256	/* wTotalLength  109 bytes*/
  db   (HighSpeedConfigDscrEnd-HighSpeedConfigDscr)  /  256	  
  db   0x02								 /* bNumInterfaces */
  db   0x01								 /* bConfigurationValue */
  db   0x00								 /* iConfiguration */
  db   0xC0								 /* bmAttributes  BUS Powred*/
  db   0x32								 /* bMaxPower = 100 mA*/
 /* 09 byte*/

 /* 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 7??????????*/

;;USB Speaker Class-specific AC Interface Descriptor */
  db   0x09			;;;;/* bLength */
  db   0x24		  ;;;;/* bDescriptorType */
  db   0x01			   ;;;;/* bDescriptorSubtype */
  db   0x00, 0x01		  ;;;;/* 1.00 */			;;/* bcdADC */
  db   0x27, 0x00	;;;;/* wTotalLength = 39 30?????????*/
  db   0x01	;;;;/* bInCollection */
  db   0x01			   ;;;;/* baInterfaceNr */
;;;;/* 09 byte*/

;;;;/* 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, 0x03								;;;;/* bNrChannels */
							;;;;/* wChannelConfig 0x0003  Mono */
  db   0x00
  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								;;/* wTerminalType  0x0301*/
  db   0x03
  db   0x00								;;/* bAssocTerminal */
  db   0x01								;;/* bSourceID */
  db   0x00								;;/* iTerminal */
;;/* 09 byte*/

;;/* 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 */
;;/* 09 byte*/

;;/* 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   0x01								;;/* bNumEndpoints */
  db   0x01			  ;;/* bInterfaceClass */
  db   0x02	   ;;/* bInterfaceSubClass */
  db   0x00			;;/* bInterfaceProtocol */
  db   0x00								;;/* iInterface */
;;/* 09 byte*/

;;/* USB Speaker Audio Streaming Interface Descriptor */
  db   0x07 ;;/* bLength */
  db   0x24	 ;;/* bDescriptorType */
  db   0x01			 ;;/* bDescriptorSubtype */
  db   0x01								;;/* bTerminalLink */
  db   0x01								;;/* bDelay */
  db   0x01								;;/* wFormatTag AUDIO_FORMAT_PCM  0x0001*/
  db   0x00
;;/* 07 byte*/

;;/* 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		;;/* Audio sampling frequency coded on 3 bytes */
  db   0xBB
  db   0x00 ;;/* 11 byte*/

;;/* Endpoint 1 - Standard Descriptor */
  db   0x09   ;;/* bLength */
  db   0x05			  ;;/* bDescriptorType */
  db   0x04						;;/* bEndpointAddress 4 out endpoint*/
  db   0x01;;0x05				   ;;/* bmAttributes */
  db   0x20   ;;/* wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */
  db   0x01
  db   0x01								;;/* bInterval */
  db   0x00								;;/* bRefresh */
  db   0x00;//0x81								;;/* bSynchAddress */
;;/* 09 byte*/

;;/* Endpoint - Audio Streaming Descriptor*/
  db   0x07  ;;/* bLength */
  db   0x25	  ;;/* bDescriptorType */
  db   0x01			  ;;/* bDescriptor */
  db   0x00								;;/* bmAttributes */
  db   0x00								;;/* bLockDelayUnits */
  db   0x00								;;/* wLockDelay */
  db   0x00
;;/* 07 byte*/

;; Endpoint - Standard Descriptor  <-------- additional feedback EP
 ;;db   0x09   				;;/* bLength */
 ;;db   0x05		;;/* bDescriptorType */
 ;;db   0x81				  ;;/* bEndpointAddress */
 ;;db   0x01	   ;;/* bmAttributes */
 ;;db   0x03							;;/*1x 3 bytes wMaxPacketSize */
 ;;db   0x00
 ;;db   0x01								;;/* bInterval */
 ;;db   0x03								;;/* bRefresh, every 2ms */
 ;;db   0x00								;;/* bSynchAddress */
;;/* 09 byte*/

FullSpeedConfigDscrEnd:   

StringDscr:

StringDscr0:   
  db   StringDscr0End-StringDscr0	 ;; String descriptor length
  db   DSCR_STRING
  db   09H,04H
StringDscr0End:

StringDscr1:   
  db   StringDscr1End-StringDscr1	 ;; String descriptor length
  db   DSCR_STRING
  db   'R',00
  db   '6',00
  db   'M',00
  db   'F',00
  db   '4',00
  db   '9',00
  db   'T',00
  db   '2',00
StringDscr1End:

StringDscr2:   
  db   StringDscr2End-StringDscr2	 ;; Descriptor length
  db   DSCR_STRING
  db   'Q',00
  db   'W',00
  db   'E',00
  db   'R',00
  db   'T',00
  db   'Y',00
StringDscr2End:

UserDscr:	  
  dw   0000H
  end

Edited by maxis

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this