Перейти к содержанию
    

Решил начать работать с USB. Очень много начитался, понял, что наверное это будет освоить самому не просто и решил использовать готовую либу - LUFA.

USB нужно CDC.

Библиотека очень достойная, много примеров, не вижу смысла изобретать свой велосипед.

Но есть одна не понятность. Там в примере VirtualPort тактировка USB идет от внутренних 2 МГц с использованием DFLL на 48 МГц (если правильно описал).

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На сколько я представляю (больше по старым AT90USBxxx) частоту сначала делят прескайлером до 2 МГц, а уж только потом подают на блок USB, у которого есть своя PLL. Причем, это приходится делать даже тогда, когда, казалось бы, основная частота вполне подходящая. Казалось бы, бери 16 МГц да умножай на 3, - вот тебе и 48 МГц. Ан нет - сначала эти 16 МГц поделят на 8, чтобы получить 2 МГц, а уж только потом USB превратит их в нужные ей 48 МГц.

 

Как теперь это сделано на XMega точно не знаю, но судя по тому, что там тоже стоит USBCTRL с делителями 1, 2, 4, 8, 16, 32, то похоже, что тут тоже надо делить до 2 МГц, т.к. иначе зачем стоит делитель, а не умножитель?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на сколько я помню как раз таки встроенный 32МГц генератор с помощью DFLL догоняют до 48 МГц, хотя вероятно возможны варианты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...а уж только потом подают на блок 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? В любом случае буду сейчас пробовать

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На сколько я представляю...
Вы, как обычно, сначала, пишите, потом думаете... Извините за грубость, но соседний топик тому подтверждение.

 

Пока не фига не работает..
Почитайте внимательно даташит на контроллер.

Раздел System Clock and Clock Options->Overview, рисунок The clock system, clock sources, and clock distribution

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оттуда следует, что запустить USB можно и на разогнанном и подстроенном 32МГц RC-генераторе. Т.е. теоретически можно вообще без кварца? Кто-то такое пробовал?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оттуда следует, что запустить 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оттуда следует, что запустить USB можно и на разогнанном и подстроенном 32МГц RC-генераторе. Т.е. теоретически можно вообще без кварца? Кто-то такое пробовал?

DFU bootloader такое пробует и не плюется..

и как уже посоветовали - читайте документацию, товарищи, тем более что у атмела она вполне приятная и читаемая

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожаление, наверное я туповат, я не понимаю как мне получить 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 МГц).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну степень извращенности данного решения под большим вопросом, т.к. по сути

для этого встроенного RC генератора производитель дает таблицу калибровочных значений, для точного выставления целой группы частот, в том числе и 48МГц. И на сколько я понимаю атымелы считают данный вариант не менее чем 100% работоспособным и достаточно точным для корректной работы USB.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сам использую в проекте кварц на 7,3728 МГц, так как использую еще и USART. PLL умножает на 13 и имеет выходную частоту 95,8464 МГц. Дальше для USB делим на 2 (47,9232 МГц) а для ЦПУ на 4 (23,9616 МГц).

Спасибо большое, понял.

Наверное действительно пойду путем как говорит Duhas, ибо сам в даташите вычитал что RC генератора для USB целей за глаза

Да, Duhas Вам тоже спасибо, мне просто иногда нужен "волшебный пинок" в правильном направлении ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока запустить не удалось. Разбираюсь. Кстати контроллер у меня 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 чтото не нравится

Изменено пользователем Дмитрий_Мигачев

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...