|
|
  |
Проектирование USB аудиокарты, Высокоточный АЦП |
|
|
|
Jan 23 2008, 16:47
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
Цитата Ну и что что 30мбайт, частота всеравно около 500МГц, вне зависимости от скорости. Или я не прав? Конечно работает, но вы же сами на глюки жаловались... Или там глюки другого рода? Я писал в чем были глюки. С самой плисиной.. Там сльно большие задержки. На дорожке клок уже пришел.пока долез до стейт-машин в плисе,пока изменилось состояние машины и пока оно вылезло наружу(на дорожку), так клок уже упал,или даже собрался подыматься. Вобщем переделывал машины... В железе глюк был только один - генератор для аналогового тракта был на 5в,я их переводил в 3в полевиком. полевикаа чет колбасило,я резанул дорогу,подал на генер 3в и пустил клок на прямую.а аналоговая часть и 3вольтовый клок прохавывает без проблем. Частота то 480мгц,но там ей и место  Цитата Выше предлагали использовать неизохронный режим USB. Какая макс. скорость возможна? Из за чего могут быть потери в изохронном режиме? (если используем хороший экранированный USB кабель, и нормально разведена плата) Изохрон имиет высокий приоритет, но не имеет коррекции ошибок. Он гарантирует, кажись 80%(не помню) пропускной способности шины. Но он не гарантирует доставку информации в ее исходном виде,те могут быть ошибки. Дорога вам на usb.org Цитата Кстати вы не ответели что есть такое MAX3000 и MAX2? Это семейства плисов. Как было написано выше, altera.com все скажет  Цитата Уважаемый brag,а не могли бы вы выложить проект здесь, либо на почту cbv22@mail.ru К сожалению, пока нет. Проект имеет возможность принести денег, почему бы ею не воспользоватся. Ведь это все таки должен быть мой хлеб. Да и зачем он вам? вы же свое делаете. Тем более инфы много в инете,а ее особо там и не надо много. Даташитов достаточно. По драйверам сам помочь не могу,тк сам еще баран в них. На вопросы отвечу  Цитата Каков протокол аудиоданных на компьютере? Как их софт понимает? А то без этих знаний и схему не нарисовать! НА каком компютере?  на моем? Почему не нарисовать? вам надо доставить даные на комп,а что дальше с ними делать - проблеммы вашего драйвера. Вобще я гоню, как есть. 8bit dummy+24bit Signed big endian msb first. те всего у нас 8 байт. первые 4-левый,вторые-правый.первый байт ис каждого канала лишний,остальные идут в порядке от старшего к младшему. вот и все. Цитата Мне Cypress тоже очень понравился, тока вот времени небыло разобратся со связью Cypress с АЦП . Только через плисочку,если ацп с последовательным интерфейсом
Сообщение отредактировал brag - Jan 23 2008, 16:58
|
|
|
|
|
Jan 23 2008, 20:14
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Цитата(brag @ Jan 23 2008, 19:47)  Изохрон имиет высокий приоритет, но не имеет коррекции ошибок. Он гарантирует, кажись 80%(не помню) пропускной способности шины. Но он не гарантирует доставку информации в ее исходном виде,те могут быть ошибки. Дорога вам на usb.org Только через плисочку,если ацп с последовательным интерфейсом  С изохрлоном ясно. А ошибки-то вот откуда возьмутся, если используем хороший экранированный USB кабель, и нормально разведена плата? Вы изохрон пользуете? А через регистр сдвига + триггер почему нет?
|
|
|
|
|
Jan 23 2008, 21:27
|
Гуру
     
Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965

|
В нормальных условиях взяться им неоткуда. Мы много разных деталей делаем на USB - нет там ошибок, пока не работаешь на электроподстанции. Там - есть, когда земля импульсно на десяток наносекунд киловольта на 2 подскакивает. Но в этом случае все кончается, как правило, переподключением устройства, чтобы подвисшие драйвера освободить. Но это экзотика. Средней пропускной способности хватит как в изохроне, так и в балке, но в последнем никто не гарантирует равномерность потока. Если буфер в устройстве большой - без проблем магабайт 25-30 в секунду качается. Есть еще одна проблема. Если падать на микрософтовские драйвера, а не делать свои, то по спецификации USB-audio они требуют изохрона. Еще одна проблема с драйверами - Vista. У мелкомягкого как всегда семь пятниц на неделе. Вместо того, чтобы вылизать имеющееся - сделали новую спецификацию на драйвера. По мне, так лучше немного помучиться с железом, но лечь в стандарт, а дальше пусть микрософт разбирается, что он там нагородил.
|
|
|
|
|
Jan 24 2008, 04:30
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
Цитата Если можно немного подробнее. Через какой ендпоинт гонится поток? Поток изохронный? Можете ли поделится дескриптором устройства? Формат и скорость жестко забиты или ими можно управлять с компа? Частота кварца? Очень большое пожалуста ответить. Какая разница, через какой. через какой захотел,через такой и погнал. сейчас 2-OUT,4-IN. Сейчас Bulk. Причем сдесь скорость? или вы о частоте дискретизации? - тогда жестко. мне надо макс. разрешение. Одного 24.000мгц. второго 24.576мгц. Тоже из серии - почитай даташит... дескриптор: Код // Device Descriptor { 0x12, // bLength USB_DESCRIPTOR_DEVICE, // bDescriptorType USBW(0x0200), // USB 2.0 0xFF, // bDeviceClass 0x00, // bDeviceSubclass 0x00, // bDeviceProtocol 0x40, // bMaxPacketSize0 USBW(USB_VENDOR_BRAG), // idVendor USBW(USB_PRODUCT_BRAG_DD2), // idProduct USBW(0x0001), // bcdDevice :Device Release Number 0x01, // iManufacturer 0x02, // iProduct 0x00, // iSerialNumber 0x01 // bNumConfigurations },
// Configuration Descriptor { // std configuration descriptor 0x09, // bLength USB_DESCRIPTOR_CONFIG, // bDescriptorType USBW(USB_CFGDESCSIZE), // wTotalLength 0x01, // bNumInterfaces 0x01, // bConfigurationValue 0x00, // iConfiguration 0xC0, // bmAttributes 0x00, // bMaxPower
// Interface descriptor 0x09, // bLength USB_DESCRIPTOR_IFACE, // bDescriptorType 0x00, // bInterfaceNumber 0x00, // bAlternateSetting 0x03, // bNumEndpoints 0xFF, // bInterfaceClass 0x00, // bInterfaceSubClass 0x00, // bInterfaceProtocol 0x00, // iInterface
// Endpoint descriptor (OUT EP2) 0x07, // bLength USB_DESCRIPTOR_ENDPOINT, // bDescriptorType 0x02, // bEndpointAddress : D0..D3 - ep num; D7 - IN endpoint 0x02, // bmAttributes USBW(0x200), // wMaxPacketSize 0x01, // bInterval
// Endpoint descriptor (IN EP4) 0x07, // bLength USB_DESCRIPTOR_ENDPOINT, // bDescriptorType 0x84, // bEndpointAddress : D0..D3 - ep num; D7 - IN endpoint 0x02, // bmAttributes USBW(0x200), // wMaxPacketSize 0x01, // bInterval
// Endpoint descriptor (IN EP1) 0x07, // bLength USB_DESCRIPTOR_ENDPOINT, // bDescriptorType 0x81, // bEndpointAddress : D0..D3 - ep num; D7 - IN endpoint 0x02, // bmAttributes USBW(0x40), // wMaxPacketSize 0x80 // bInterval }, #if USB_CFGDESCSIZE & 1 0, #endif
// LangID {USB_DESCRIPTOR_STRING_SIZE(1),USB_DESCRIPTOR_STRING,USB_LANG_EN_US}, // Manufacturer { USB_DESCRIPTOR_STRING_SIZE(4),USB_DESCRIPTOR_STRING, 'B',0,'r',0,'a',0,'g',0 }, // Product { USB_DESCRIPTOR_STRING_SIZE(12),USB_DESCRIPTOR_STRING, 'D',0,'i',0,'g',0,'i',0,'D',0,'e',0,'g',0,'a',0,'n',0,' ',0,'I',0,'I',0 } Толку вам от него? Дескрипторов никогда не видели?  Где-то видел страницу - сборник дескрипторов популярных усб-устройств, типа для коллекции :D Код С изохрлоном ясно. А ошибки-то вот откуда возьмутся, если используем хороший экранированный USB кабель, и нормально разведена плата? Вы изохрон пользуете? Ошибки дажа на шинах ATA,SATA,DDR,... есть, не даром есть такие вещи,как ECC, CRC итп..а вы тут о usb.. Читайте доку с usb.org Ошибки - это не подвисание драйвера. Это просто ошибки и они всегда могут встретится. usb_20.pdf say: Цитата isochronous transfers have the general implication of constant-rate, errortolerant transfers. In the USB environment, requesting an isochronous transfer type provides the requester with the following: • Guaranteed access to USB bandwidth with bounded latency • Guaranteed constant data rate through the pipe as long as data is provided to the pipe • In the case of a delivery failure due to error, no retrying of the attempt to deliver the data и еще Цитата USB Communication Flow Transfer |Bandwidth |Error Detection |Retrying
Control |Not guaranteed |Yes |Automatic Isochronous |Guaranteed |Yes |No Interrupt |Not guaranteed |Yes |Yes Bulk |Not guaranteed |Yes |Yes USB-audio мягкий не по карману.глючный он сильно,особенно в win2000 В FreeBSD он и то более-менее работает
Сообщение отредактировал brag - Jan 24 2008, 04:49
|
|
|
|
|
Jan 24 2008, 07:44
|
Частый гость
 
Группа: Участник
Сообщений: 174
Регистрация: 23-01-08
Из: Нижний Новгород
Пользователь №: 34 339

|
На счет аудиоданных я имел ввиду чтобы стандартный драйвер все понимал. Да хоть чтоб Winamp  играл! Как определить левый правый канал?
Сообщение отредактировал MegaElektronik - Jan 24 2008, 07:50
|
|
|
|
|
Jan 24 2008, 15:15
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
Фильтр еще будем думать. О гальв.развязке..ее где-то ставят на более-менее крутых картах? сомневаюсь,что она нужна. тогда уж надо делать гальваническую развязку по 3.3в на питание цыфровой части  ) Да.даное устройство никаким боком к usb-audio class не относится. Вот дескриптор для аудио класса.только ацп. Код const struct usbDevDesc UsbDevDesc={ sizeof(struct usbDevDesc), USB_DESCRIPTOR_DEVICE, 0x0200, // USB 2.0 0xEF, // bDeviceClass 0x02, // bDeviceSubclass 0x01, // bDeviceProtocol USB_EP0_MAXSIZE, USB_VENDOR_BRAG, USB_BRAG_PRODUCT_DD, 0x0001, // Serial 0x01, // iManufacturer 0x02, // iProduct 0x00, // iSerialNumber 0x01 //bNumConfigurations };
const struct usbAuCfgDesc UsbCfgDesc={ { sizeof(struct usbStdCfgDesc), USB_DESCRIPTOR_CONFIG, sizeof(struct usbAuCfgDesc), 1, //interfaces 1, //bConfigurationValue 0, //iConfiguration 0xC0, //SelfPowered 0 //bMaxPower }, /* Audio Control Interface */ { sizeof(struct usbStdIfDesc), USB_DESCRIPTOR_IFACE, 0, //bInterfaceNumber 0, //bAlternateSetting 0, //bNumEndpoints 0x01, //AUDIO 0x01, //AUDIOCONTROL 0, 0 //iInterface }, { sizeof(struct usbCsAcDesc), 0x24, //CS_INTERFACE 0x01, //HEADER 0x0100, //bcdADC sizeof(struct usbCsAcDesc)+sizeof(struct usbCsItDesc)+ sizeof(struct usbCsOtDesc), //wTotalLength USB_AUDIO_IFS, 1 //baInterfaceNr }, { sizeof(struct usbCsItDesc), 0x24, //CS_INTERFACE 0x02, //INPUT_TERMINAL 0x01, //bTerminalID 0x0200, //Input Undefined term type 0x00, //bAssocTerminal 2, //bNrChannels 0x00000003, //wChannelConfig 0, //iChannelNames 0 //iTerminal }, { sizeof(struct usbCsOtDesc), 0x24, //CS_INTERFACE 0x03, //OUTPUT_TERMINAL 0x02, //bTerminalID 0x0101, //Usb Streaming 0x00, //bAssocTerminal 0x01, //bSourceID (from input terminal) 0 //iTerminal }, /* Zero Bandwidth (alt setting 0) */ { sizeof(struct usbStdIfDesc), USB_DESCRIPTOR_IFACE, 1, //bInterfaceNumber 0, //bAlternateSetting 0, //bNumEndpoints 0x01, //AUDIO 0x02, //AUDIOSTREAMING 0, 0 //iInterface }, /* Audio Streaming descriptor (alt setting 1) */ { sizeof(struct usbStdIfDesc), USB_DESCRIPTOR_IFACE, 1, //bInterfaceNumber 1, //bAlternateSetting 1, //bNumEndpoints 0x01, //AUDIO 0x02, //AUDIOSTREAMING 0, 0 //iInterface }, { sizeof(struct usbAuCsAsDesc), 0x24, //CS_INTERFACE 0x01, //AS_GENERAL 0x02, //bTerminalLink (Out Terminal) 0x01, //bDelay 0x0001 //wFormatTag (PCM format) }, { sizeof(struct usbAuCsFmt1Desc), 0x24, //CS_INTERFACE 0x02, //FORMAT_TYPE 0x01, //FORMAT_TYPE1 0x02, //bNrChannels 0x03, //3 bytes/frame 24, //24 bits/sample 0x01, //bSamFreqType - One frequency supported {B3VAL(96000)} //tSamFreq }, /* IN ISO Endpoint 1 */ { {sizeof(struct usbAuStdAsIsoEpDesc), USB_DESCRIPTOR_ENDPOINT, 0x81, //IN endpoint 1 0x01, //Isochronous, No synchronous, Data endpoint 64, //wMaxPacketSize 9}, //packets per frame 0,0 //bRefresh, bSynchAddress }, { sizeof(struct usbAuCsAsIsoEpDesc), 0x25, //CS_ENDPOINT 0x01, //EP_GENERAL 0x00, //bmAttributes 0x00, //bLockDelayUnits 0x0000 //wLockDelay } }; Также есть пару примеров в тех ссылках,что я давал. именно аудио. Джиттер нечем мерять...
Сообщение отредактировал brag - Jan 24 2008, 15:21
|
|
|
|
|
Jan 24 2008, 21:15
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
brag и Alex 11, благодарю за помощь! Цитата(brag @ Jan 24 2008, 22:45)  Вот теперь такая платка  Вижу, вы все же прислушались к моему совету доработать разводку USB  Эти изменения что-то дали? Еще, как я вижу вы убрали X2. Я так понимаю вы через него программировали ЕЕПРОМ. А теперь как? Цитата(khach @ Jan 24 2008, 14:57)  По поводу платы. Я незря спрашивал про то, что дал Rightmark Audioanalyzer. Без него понять что и как шумит - невозможно. Я бы обязательно поставил между Альтерой и АЦП_ЦАП RC цепи по цифровым линиям. А возможно и предусмотрел место под гальваноразвязку. Запаять вместо нее перемычки никогда не поздно, а вот наоборот... Фильтр по питанию преобразователей как организован? Джиттер вы не меряли? Полгостью согласен! Я уже давно про это говорил... Но это если вы особо заботитесь о качестве. Помехи и джиттер могут испоганить результат самых лучших преобразователей. Возможно выложу нашу разработку, когда заработает  Цитата(khach @ Jan 24 2008, 14:57)  За ссылки и дескриптор спасибо. Кому оно очевидно, а кое-кто и первый раз видит. К сожалению, как я понял, ваше устройство к аудиоклассу никаким боком не относится. Меня интересовали рабочие примеры дескриптора канала записи для устройств, совместимых с виндой. Доки конечно читал, но как-то криво оно работает. По поводу платы. Я незря спрашивал про то, что дал Rightmark Audioanalyzer. Без него понять что и как шумит - невозможно. Я бы обязательно поставил между Альтерой и АЦП_ЦАП RC цепи по цифровым линиям. А возможно и предусмотрел место под гальваноразвязку. Запаять вместо нее перемычки никогда не поздно, а вот наоборот... Фильтр по питанию преобразователей как организован? Джиттер вы не меряли? А вы умеете мерять джиттер?
Сообщение отредактировал MAXvaLL - Jan 24 2008, 21:13
|
|
|
|
|
Jan 24 2008, 22:28
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
Цитата Вижу, вы все же прислушались к моему совету доработать разводку USB Эти изменения что-то дали? Да,немного разсунул,хотя там далеко нету тех параметров.зазор 0.7мм, расстояние до других макс 7мм. Хз дало,не дало.плату еще не делал новую. пока дрова пишу.как все будет готово,в том числе и ламповая часть(вход,выход), тогда уже буду делать вторую плату, со всеми доработками... Цитата Еще, как я вижу вы убрали X2. Я так понимаю вы через него программировали ЕЕПРОМ. А теперь как? Та не,я его просто так воткнул  EEPROM самим же cypressom и шьется. Гробик бы с удовольствием всунул,только нету таких гробиков. надо именно 24.576мгц
|
|
|
|
|
Jan 24 2008, 22:52
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Цитата(brag @ Jan 25 2008, 01:28)  ...в том числе и ламповая часть(вход,выход)... Та не,я его просто так воткнул  EEPROM самим же cypressom и шьется. Ну, ты зверь!  Круто!!!  Мы вот предвариловку на крутых опер.ах делаем Через USB? Кстати, возник вопрос: а зачем serial<->parallel преобразователь надо было на ПЛИСине делать? Есть ведь готовенькие... PS А за дескрипторы спасибо большое! Темный мы народ...
Сообщение отредактировал MAXvaLL - Jan 24 2008, 22:56
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|