Дмитрий_Мигачев 0 16 сентября, 2013 Опубликовано 16 сентября, 2013 · Жалоба Решил начать работать с USB. Очень много начитался, понял, что наверное это будет освоить самому не просто и решил использовать готовую либу - LUFA. USB нужно CDC. Библиотека очень достойная, много примеров, не вижу смысла изобретать свой велосипед. Но есть одна не понятность. Там в примере VirtualPort тактировка USB идет от внутренних 2 МГц с использованием DFLL на 48 МГц (если правильно описал). У меня внешний кварц на 16 МГц, PLL блок выдает на процессор 32 МГц. Вот тут я не понимаю, этот же PLL может выдать 48 МГц для USB или мне нужно идти таким же путем как LUFA. Нашел информацию, что в XMEGA все источники тактирования (все доступные) могут работать одновременно. Но вроде как внешний кварц должен быть самым точным, но нигде не нашел как его использовать для USB fullspeed. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 16 сентября, 2013 Опубликовано 16 сентября, 2013 · Жалоба На сколько я представляю (больше по старым AT90USBxxx) частоту сначала делят прескайлером до 2 МГц, а уж только потом подают на блок USB, у которого есть своя PLL. Причем, это приходится делать даже тогда, когда, казалось бы, основная частота вполне подходящая. Казалось бы, бери 16 МГц да умножай на 3, - вот тебе и 48 МГц. Ан нет - сначала эти 16 МГц поделят на 8, чтобы получить 2 МГц, а уж только потом USB превратит их в нужные ей 48 МГц. Как теперь это сделано на XMega точно не знаю, но судя по тому, что там тоже стоит USBCTRL с делителями 1, 2, 4, 8, 16, 32, то похоже, что тут тоже надо делить до 2 МГц, т.к. иначе зачем стоит делитель, а не умножитель? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Duhas 0 16 сентября, 2013 Опубликовано 16 сентября, 2013 · Жалоба на сколько я помню как раз таки встроенный 32МГц генератор с помощью DFLL догоняют до 48 МГц, хотя вероятно возможны варианты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Дмитрий_Мигачев 0 16 сентября, 2013 Опубликовано 16 сентября, 2013 · Жалоба ...а уж только потом подают на блок USB, у которого есть своя PLL Спасибо за ответ. Была такая мысль, а именно мысль - а зачем же там делитель... Не могу только найти в даташите регистр PLL для USB. Может плохо смотрю? на сколько я помню как раз таки встроенный 32МГц генератор с помощью DFLL догоняют до 48 МГц, хотя вероятно возможны варианты. Ну не только 32 МГц встроенный, также 2 МГц'вый Или быть может достаточно 1) Поделить частоту прескайлером 2) В CLK.USBCTRL выбрать USB clock source -> PLL 3) В USB.CTRLA выбрать Speed Select (Bit 6) Ну и включить USB? В любом случае буду сейчас пробовать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Дмитрий_Мигачев 0 16 сентября, 2013 Опубликовано 16 сентября, 2013 · Жалоба Пока не фига не работает..Но при инициализации USB вижу какие-то импульсы очень короткие на осциллографе. Чтото не так делаю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 16 сентября, 2013 Опубликовано 16 сентября, 2013 · Жалоба На сколько я представляю...Вы, как обычно, сначала, пишите, потом думаете... Извините за грубость, но соседний топик тому подтверждение. Пока не фига не работает..Почитайте внимательно даташит на контроллер. Раздел System Clock and Clock Options->Overview, рисунок The clock system, clock sources, and clock distribution Там все наглядно показано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 88 16 сентября, 2013 Опубликовано 16 сентября, 2013 · Жалоба Оттуда следует, что запустить USB можно и на разогнанном и подстроенном 32МГц RC-генераторе. Т.е. теоретически можно вообще без кварца? Кто-то такое пробовал? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Дмитрий_Мигачев 0 17 сентября, 2013 Опубликовано 17 сентября, 2013 · Жалоба [/b]Там все наглядно показано. К сожаление, наверное я туповат, я не понимаю как мне получить 48 МГц из PLL, если из того же PLL идет 32 МГц для ЦПУ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryM 0 17 сентября, 2013 Опубликовано 17 сентября, 2013 · Жалоба Оттуда следует, что запустить USB можно и на разогнанном и подстроенном 32МГц RC-генераторе. Т.е. теоретически можно вообще без кварца? Кто-то такое пробовал? Atmel AVR1017: XMEGA - USB Hardware Design Recommendations The 12Mbit/s USB FS signal rate specification requires 0.25% accuracy. In addition, the data recovery mechanism requires an internal Ч4 oversampling mechanism. Thus, the device should be able to generate an accurate, 48MHz signal clock to the USB module. To ensure proper signal quality, the Atmel AVR XMEGA provides different ways to generate the 48MHz oversampling frequency: • External crystal and the on-chip PLL • Internal RC oscillator The most convenient method is to use the on-chip, 32MHz RC oscillator calibrated at 48MHz. To ensure 0.25% signal rate accuracy, the internal RC oscillator should be auto-calibrated using an internal DFLL. This solution allows the external BOM cost to be reduced (no need for an external crystal). NOTE The USB module for XMEGA requires a minimum 12MHz CPU clock to send and receive data. Be sure to configure the XMEGA system clock with a minimum 12MHz clock when using the USB module. This clock can be stopped when USB is in suspend mode. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Duhas 0 17 сентября, 2013 Опубликовано 17 сентября, 2013 · Жалоба Оттуда следует, что запустить USB можно и на разогнанном и подстроенном 32МГц RC-генераторе. Т.е. теоретически можно вообще без кварца? Кто-то такое пробовал? DFU bootloader такое пробует и не плюется.. и как уже посоветовали - читайте документацию, товарищи, тем более что у атмела она вполне приятная и читаемая Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 17 сентября, 2013 Опубликовано 17 сентября, 2013 · Жалоба К сожаление, наверное я туповат, я не понимаю как мне получить 48 МГц из PLL, если из того же PLL идет 32 МГц для ЦПУ.Нет не туповат. На самом деле не это не возможно. Дело все в том, что делители в XMEGA могут делить только на степень двойки, в то время как отношение 16 МГц и 48 МГц равно 1 к 3. Есть два пути: 1. Использовать для тактирования USB кварц а для тактирования ЦПУ - встроенный генератор 32 МГц. 2. Использовать для тактирования USB кварц и тактировать ЦПУ от 24 МГц. Я не рассматриваю пути с разными извратами типа разгона встроенного генератора. Сам использую в проекте кварц на 7,3728 МГц, так как использую еще и USART. PLL умножает на 13 и имеет выходную частоту 95,8464 МГц. Дальше для USB делим на 2 (47,9232 МГц) а для ЦПУ на 4 (23,9616 МГц). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Duhas 0 17 сентября, 2013 Опубликовано 17 сентября, 2013 · Жалоба ну степень извращенности данного решения под большим вопросом, т.к. по сути для этого встроенного RC генератора производитель дает таблицу калибровочных значений, для точного выставления целой группы частот, в том числе и 48МГц. И на сколько я понимаю атымелы считают данный вариант не менее чем 100% работоспособным и достаточно точным для корректной работы USB. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Дмитрий_Мигачев 0 18 сентября, 2013 Опубликовано 18 сентября, 2013 · Жалоба Сам использую в проекте кварц на 7,3728 МГц, так как использую еще и USART. PLL умножает на 13 и имеет выходную частоту 95,8464 МГц. Дальше для USB делим на 2 (47,9232 МГц) а для ЦПУ на 4 (23,9616 МГц). Спасибо большое, понял. Наверное действительно пойду путем как говорит Duhas, ибо сам в даташите вычитал что RC генератора для USB целей за глаза Да, Duhas Вам тоже спасибо, мне просто иногда нужен "волшебный пинок" в правильном направлении )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Дмитрий_Мигачев 0 18 сентября, 2013 Опубликовано 18 сентября, 2013 (изменено) · Жалоба Пока запустить не удалось. Разбираюсь. Кстати контроллер у меня ATXMEGA128A1U. В документации LUFA версии 130901 написано: Early silicon revisions of the ATXMEGA128A1U are incompatible with LUFA, due to their various errata relating to the USB controller Как узнать какая у меня ревизия ( после названия контроллера на микросхеме есть только цифры 1311 ), и с какими ревизиями не совместима LUFA, в документации этого не нашел. Микроконтроллеры куплены пол года назад, думаю что ревизия не должна быть старой. Кстати, пришла мысль в голову, что возможно нет поддержки в ядре (gentoo linux) Выхлоп dmesg: [24379.985684] hub 1-1.4.1:1.0: state 7 ports 4 chg 0000 evt 0004 [24379.986251] hub 1-1.4.1:1.0: port 2, status 0101, change 0001, 12 Mb/s [24380.090367] hub 1-1.4.1:1.0: debounce: port 2: total 100ms stable 100ms status 0x101 [24380.101357] hub 1-1.4.1:1.0: port 2 not reset yet, waiting 10ms [24380.163288] usb 1-1.4.1.2: new full-speed USB device number 119 using ehci-pci [24380.175245] hub 1-1.4.1:1.0: port 2 not reset yet, waiting 10ms [24380.237154] usb 1-1.4.1.2: device descriptor read/64, error -32 Т.е вроде как какое-то новое full-speed устройство обнаруживается, но вот последний error чтото не нравится Изменено 18 сентября, 2013 пользователем Дмитрий_Мигачев Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Duhas 0 18 сентября, 2013 Опубликовано 18 сентября, 2013 · Жалоба а зачем вам собственно LUFA? разве нет в ASF примера CDC устройства ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться