реклама на сайте
подробности

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> ATXMEGA и USB
Дмитрий_Мигачев
сообщение Sep 16 2013, 05:05
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 110
Регистрация: 28-02-06
Из: Россия г. Омск
Пользователь №: 14 784



Решил начать работать с USB. Очень много начитался, понял, что наверное это будет освоить самому не просто и решил использовать готовую либу - LUFA.
USB нужно CDC.
Библиотека очень достойная, много примеров, не вижу смысла изобретать свой велосипед.
Но есть одна не понятность. Там в примере VirtualPort тактировка USB идет от внутренних 2 МГц с использованием DFLL на 48 МГц (если правильно описал).
У меня внешний кварц на 16 МГц, PLL блок выдает на процессор 32 МГц. Вот тут я не понимаю, этот же PLL может выдать 48 МГц для USB или мне нужно идти таким же путем как LUFA. Нашел информацию, что в XMEGA все источники тактирования (все доступные) могут работать одновременно. Но вроде как внешний кварц должен быть самым точным, но нигде не нашел как его использовать для USB fullspeed.


--------------------
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 16 2013, 06:23
Сообщение #2


Гуру
******

Группа: Модератор 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 МГц, т.к. иначе зачем стоит делитель, а не умножитель?
Go to the top of the page
 
+Quote Post
Duhas
сообщение Sep 16 2013, 07:25
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



на сколько я помню как раз таки встроенный 32МГц генератор с помощью DFLL догоняют до 48 МГц, хотя вероятно возможны варианты.
Go to the top of the page
 
+Quote Post
Дмитрий_Мигачев
сообщение Sep 16 2013, 09:31
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 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? В любом случае буду сейчас пробовать


--------------------
Go to the top of the page
 
+Quote Post
Дмитрий_Мигачев
сообщение Sep 16 2013, 11:49
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 110
Регистрация: 28-02-06
Из: Россия г. Омск
Пользователь №: 14 784



Пока не фига не работает..Но при инициализации USB вижу какие-то импульсы очень короткие на осциллографе. Чтото не так делаю


--------------------
Go to the top of the page
 
+Quote Post
prottoss
сообщение Sep 16 2013, 13:47
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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

Там все наглядно показано.


--------------------
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 16 2013, 17:38
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Оттуда следует, что запустить USB можно и на разогнанном и подстроенном 32МГц RC-генераторе. Т.е. теоретически можно вообще без кварца? Кто-то такое пробовал?
Go to the top of the page
 
+Quote Post
Дмитрий_Мигачев
сообщение Sep 17 2013, 04:26
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 110
Регистрация: 28-02-06
Из: Россия г. Омск
Пользователь №: 14 784



Цитата(prottoss @ Sep 16 2013, 20:47) *
[/b]Там все наглядно показано.

К сожаление, наверное я туповат, я не понимаю как мне получить 48 МГц из PLL, если из того же PLL идет 32 МГц для ЦПУ.


--------------------
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Sep 17 2013, 05:08
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 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
.
Go to the top of the page
 
+Quote Post
Duhas
сообщение Sep 17 2013, 05:56
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



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

DFU bootloader такое пробует и не плюется..
и как уже посоветовали - читайте документацию, товарищи, тем более что у атмела она вполне приятная и читаемая
Go to the top of the page
 
+Quote Post
prottoss
сообщение Sep 17 2013, 13:39
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 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 МГц).


--------------------
Go to the top of the page
 
+Quote Post
Duhas
сообщение Sep 17 2013, 16:21
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



ну степень извращенности данного решения под большим вопросом, т.к. по сути
для этого встроенного RC генератора производитель дает таблицу калибровочных значений, для точного выставления целой группы частот, в том числе и 48МГц. И на сколько я понимаю атымелы считают данный вариант не менее чем 100% работоспособным и достаточно точным для корректной работы USB.
Go to the top of the page
 
+Quote Post
Дмитрий_Мигачев
сообщение Sep 18 2013, 03:49
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 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 Вам тоже спасибо, мне просто иногда нужен "волшебный пинок" в правильном направлении ))


--------------------
Go to the top of the page
 
+Quote Post
Дмитрий_Мигачев
сообщение Sep 18 2013, 10:19
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 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


--------------------
Go to the top of the page
 
+Quote Post
Duhas
сообщение Sep 18 2013, 15:57
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



а зачем вам собственно LUFA? разве нет в ASF примера CDC устройства ?
Go to the top of the page
 
+Quote Post

5 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01503 секунд с 7
ELECTRONIX ©2004-2016