|
|
  |
ATXMEGA и USB |
|
|
|
Sep 16 2013, 06:23
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
На сколько я представляю (больше по старым AT90USBxxx) частоту сначала делят прескайлером до 2 МГц, а уж только потом подают на блок USB, у которого есть своя PLL. Причем, это приходится делать даже тогда, когда, казалось бы, основная частота вполне подходящая. Казалось бы, бери 16 МГц да умножай на 3, - вот тебе и 48 МГц. Ан нет - сначала эти 16 МГц поделят на 8, чтобы получить 2 МГц, а уж только потом USB превратит их в нужные ей 48 МГц.
Как теперь это сделано на XMega точно не знаю, но судя по тому, что там тоже стоит USBCTRL с делителями 1, 2, 4, 8, 16, 32, то похоже, что тут тоже надо делить до 2 МГц, т.к. иначе зачем стоит делитель, а не умножитель?
|
|
|
|
|
Sep 16 2013, 09:31
|
Частый гость
 
Группа: Участник
Сообщений: 110
Регистрация: 28-02-06
Из: Россия г. Омск
Пользователь №: 14 784

|
Цитата(Xenia @ Sep 16 2013, 13:23)  ...а уж только потом подают на блок USB, у которого есть своя PLL Спасибо за ответ. Была такая мысль, а именно мысль - а зачем же там делитель... Не могу только найти в даташите регистр PLL для USB. Может плохо смотрю? Цитата(Duhas @ Sep 16 2013, 14:25)  на сколько я помню как раз таки встроенный 32МГц генератор с помощью DFLL догоняют до 48 МГц, хотя вероятно возможны варианты. Ну не только 32 МГц встроенный, также 2 МГц'вый Или быть может достаточно 1) Поделить частоту прескайлером 2) В CLK.USBCTRL выбрать USB clock source -> PLL 3) В USB.CTRLA выбрать Speed Select (Bit 6) Ну и включить USB? В любом случае буду сейчас пробовать
--------------------
|
|
|
|
|
Sep 16 2013, 13:47
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Xenia @ Sep 16 2013, 12:23)  На сколько я представляю... Вы, как обычно, сначала, пишите, потом думаете... Извините за грубость, но соседний топик тому подтверждение. Цитата(Дмитрий_Мигачев @ Sep 16 2013, 17:49)  Пока не фига не работает.. Почитайте внимательно даташит на контроллер. Раздел System Clock and Clock Options->Overview, рисунок The clock system, clock sources, and clock distribution
Там все наглядно показано.
--------------------
|
|
|
|
|
Sep 17 2013, 04:26
|
Частый гость
 
Группа: Участник
Сообщений: 110
Регистрация: 28-02-06
Из: Россия г. Омск
Пользователь №: 14 784

|
Цитата(prottoss @ Sep 16 2013, 20:47)  [/b]Там все наглядно показано. К сожаление, наверное я туповат, я не понимаю как мне получить 48 МГц из PLL, если из того же PLL идет 32 МГц для ЦПУ.
--------------------
|
|
|
|
|
Sep 17 2013, 05:08
|
Знающий
   
Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840

|
Цитата(ArtemKAD @ Sep 16 2013, 21:38)  Оттуда следует, что запустить 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.
|
|
|
|
|
Sep 17 2013, 05:56
|
Местный
  
Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018

|
Цитата(ArtemKAD @ Sep 17 2013, 01:38)  Оттуда следует, что запустить USB можно и на разогнанном и подстроенном 32МГц RC-генераторе. Т.е. теоретически можно вообще без кварца? Кто-то такое пробовал? DFU bootloader такое пробует и не плюется.. и как уже посоветовали - читайте документацию, товарищи, тем более что у атмела она вполне приятная и читаемая
|
|
|
|
|
Sep 17 2013, 13:39
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Дмитрий_Мигачев @ Sep 17 2013, 10:26)  К сожаление, наверное я туповат, я не понимаю как мне получить 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 МГц).
--------------------
|
|
|
|
|
Sep 18 2013, 03:49
|
Частый гость
 
Группа: Участник
Сообщений: 110
Регистрация: 28-02-06
Из: Россия г. Омск
Пользователь №: 14 784

|
Цитата(prottoss @ Sep 17 2013, 20:39)  Сам использую в проекте кварц на 7,3728 МГц, так как использую еще и USART. PLL умножает на 13 и имеет выходную частоту 95,8464 МГц. Дальше для USB делим на 2 (47,9232 МГц) а для ЦПУ на 4 (23,9616 МГц). Спасибо большое, понял. Наверное действительно пойду путем как говорит Duhas, ибо сам в даташите вычитал что RC генератора для USB целей за глаза Да, Duhas Вам тоже спасибо, мне просто иногда нужен "волшебный пинок" в правильном направлении ))
--------------------
|
|
|
|
|
Sep 18 2013, 10:19
|
Частый гость
 
Группа: Участник
Сообщений: 110
Регистрация: 28-02-06
Из: Россия г. Омск
Пользователь №: 14 784

|
Пока запустить не удалось. Разбираюсь. Кстати контроллер у меня 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 чтото не нравится
Сообщение отредактировал Дмитрий_Мигачев - Sep 18 2013, 10:28
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|