Понимание требований к высокоскоростному интерфейсу USB 2.0

Я немного запутался в требованиях к высокоскоростному USB 2.0.

USB 2.0. максимальная скорость высокоскоростной передачи данных составляет 480 Мбит/с. Итак, насколько я понимаю, чтобы полностью использовать эту скорость передачи данных, следует использовать IC (uC или FPGA) с частотой не менее 480 МГц.

Но, например, микроконтроллеры серии STM32 F4 обеспечивают высокоскоростную поддержку USB 2.0, хотя максимальная частота, на которой они работают, составляет 180 МГц.
Также Atmel SAM3U поддерживает высокоскоростной USB, несмотря на абсолютную максимальную частоту 192 МГц.
Как так?

Для Atmel я заметил, что у них есть дополнительные часы 480 МГц только для USB. Это еще больше сбивает с толку, поскольку, если микроконтроллер поддерживает только 192 МГц, как он должен взаимодействовать с внутренним периферийным устройством USB, работающим на частоте 480 МГц?

Для STM32 это тоже странно, в их программном обеспечении CubeMX кажется, что они запускают USB с тактовой частотой 48 МГц. Поискал в даташите, нашел только упоминание

Бит 15 PHYLPCS:
Выбор маломощных часов PHY. Этот бит выбирает режим PHY 480 МГц или 48 МГц (с низким энергопотреблением). В режимах FS и LS PHY обычно может работать на тактовой частоте 48 МГц для экономии энергии.
0: внутренняя тактовая частота 480 МГц
1: внешняя тактовая частота 48 МГц
В режиме 480 МГц интерфейс UTMI работает на частоте 60 или 30 МГц, в зависимости от того, выбрана ли разрядность данных 8 или 16 бит. В режиме 48 МГц интерфейс UTMI работает на частоте 48 МГц в режимах FS и LS.

Поэтому я предполагаю, что он использует тактовую частоту 48 МГц для генерации 480 МГц через PLL. Но опять же - если сам микроконтроллер может работать только до 180 МГц - какой смысл в 480 МГц USB?

FPGA еще более запутанны (многие работают на частотах ниже 480 МГц), но я еще не проводил много исследований по FPGA, поэтому я не буду ничего спрашивать (но если вы можете дать несколько советов / просветить о FPGA - пожалуйста, я интересует).

Вопрос в том, если мы используем микроконтроллер 180 МГц и хотим передавать данные с периферийным устройством USB 480 МГц - как он соответствует частоте? Что это за процесс?

Процессоры имеют дело с более чем одним битом за раз.
Не путайте часы процессора и часы трансивера.
Хорошо, ответ Али Чена проясняет ситуацию.
Также имейте в виду, что обработка данных не всегда выполняется процессором, есть DMA и другие сотрудники. Например, контроллер флэш-накопителя USB 3.0 содержит только ЦП 8051 и по-прежнему может работать со скоростью 5 Гбит/с.

Ответы (1)

Обратите внимание, что скорость передачи данных USB составляет 480 Мбит / с, в то время как данные ИБП обычно имеют разрядность 8 или 32 бита. Таким образом, скорость передачи системных данных снижается только до 60 или 15 МГц. Контроллеры USB используют аппаратный доступ к памяти UP (также известный как прямой доступ к памяти или «управление шиной») для передачи блоков данных между системной памятью и USB PHY (приемопередатчиком физического уровня). Передачи выполняются в 8- или 16-битном параллельном формате, а PHY выполняет преобразование из параллельного в последовательный. В системе обычно имеется множество буферов «эластичности» (FIFO) для предоставления когерентных пакетов USB в полном соответствии с заданными скоростями передачи данных.

Скорость подготовки системой буферов памяти для чтения/записи зависит от общей пропускной способности процессора, поэтому низкопроизводительные процессоры могут не достичь максимальной пропускной способности USB.

Я правильно понимаю: мы помещаем 32 бита в какой-то регистр USB, а USB PHY затем отправляет их по одному? Но тогда нам также нужно сопоставить циклы, поэтому, когда отправляется 32-й бит, uC должен поместить следующие 32 бита в регистр. Поэтому нам нужно записывать в этот регистр с тактовой частотой 15 МГц для поддержания стабильности. Я понял?
Нет, это сложнее. Система подготавливает связанный список блоков с данными, которые она хочет передать, и запускает операцию на USB-контроллере. Контроллер USB автоматически считывает список и передает целые блоки данных на PHY, а также выполняет все необходимые протоколы USB (формирование токенов запросов и ответ на/с ACks и т. д.).
Думаю, теперь я лучше разбираюсь в этом, спасибо. Я принял ответ, я буду исследовать дальше самостоятельно. Если кто-то хочет что-то добавить - не стесняйтесь, я проголосую.
Насколько мне известно, каждый современный ИБп с функцией USB-хоста соответствует спецификациям Intel EHCI, intel.com/content/dam/www/public/us/en/documents/… . Реализации устройств могут отличаться.
Чтобы добавить несколько замечаний, 480 Мбит/с следует разделить на 10 (поскольку данные проходят через блок 8 бит/10 бит на стороне TX и 10 бит/8 бит на стороне приема), что дает максимальную пропускную способность данных 48 МБ/с, что составляет около 11M обращений в секунду для 32-битного процессора.
@FarhadA, если быть точным, физический уровень USB 2.0 не использует кодировку 8b/10b, он использует NRZI с битовым заполнением. Это означает, что в худшем случае ко всем данным "11111..." шаблон будет добавлять один бит к каждой шести "1", поэтому битовая строка может стать длиннее на 7/6=17%, а в среднем намного меньше. Что касается реальной пропускной способности данных на USB 2.0, см. этот пост: electronics.stackexchange.com/a/363560/117785 .