Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по возможной скорости передачи через USB
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Aldaris
Здравствуйте!
Хочу поэкспереметировать со скоростной передачей через USB-устройство(пусть это будет Mass Storage Device). Решил, что возьму контроллер с модулем High-Speed USB. Только одну вещь не могу понять. Скорость передачи данных по USB максимум(пусть и теоретический) 480 Мбит/с, и действительно модуль тактируется от PLL 480 MHz. Однако сам процессор имеет тактовую частоту 60 МГц. Предположим, что в эксперименте МК выступает в роли моста - получает данные по USB и выдает их в последовательный порт. Получается, что узким местом становится последовательный порт контроллера и скорость будет только максимум 60 Мбит/с?
Если это действительно так, то может стоит для таких целей брать ПЛИС? Будет ли с ней результат лучше?
kovigor
Ну, объем трафика от High-Speed мышки или клавиатуры вполне по COM-порту (как я понял, о нем и речь) пропихнуть можно. А вот для какого-нибудь принтера или видеоадаптера такой номер уже не пройдет. Я одного не пойму. Зачем данные с USB в COM - порт (там 115200 бит, а не 60 МБит, кстати говоря) транслировать ? Или я не понял задачу ?
Aldaris
Цитата
Зачем данные с USB в COM - порт (там 115200 бит, а не 60 МБит, кстати говоря) транслировать ?

Задача не в COM-порт вывести, а из поля данных пакета USB перегнать данные побитово последовательно на один из GPIO контроллера. И выжать при этом скорость побольше.
rezident
Цитата(Aldaris @ Oct 26 2010, 23:54) *
Получается, что узким местом становится последовательный порт контроллера и скорость будет только максимум 60 Мбит/с?
Разница между каналом USB и внутренней шиной МК в том, что в канале данные последовательные, а в МК они уже параллельные. Соответственно, если сравнивать втупую, то МК производительнее скорости последовательной шины на разрядность своей внутренней шины данных. Только ваша задумка с 480Мбит/с "тухлая" изначально. Это теоретическая скорость передачи. Не добьетесь вы такой скорости. Тем более для класса Mass Storage. Лучше USB FlashDrive имеют скорость чтения порядка 30МБ/с.
Aldaris
Цитата
МК производительнее скорости последовательной шины на разрядность своей внутренней шины данных.

Это-то понятно. Вопрос в том, может ли МК выдать на свои пины поток данных, сравнимый со скоростью потока данных через USB.
Цитата
Только ваша задумка с 480Мбит/с "тухлая" изначально.

А я и написал, что эта скорость недостижима.
Что вообще можно сказать про контроллер LPC3143? В нем, например, есть контроллер NAND памяти, который вроде как параллельный. Может его можно использовать?
SergeyDDD
Цитата(Aldaris @ Oct 26 2010, 21:50) *
Задача не в COM-порт вывести, а из поля данных пакета USB перегнать данные побитово последовательно на один из GPIO контроллера. И выжать при этом скорость побольше.


Как правило в контроллерах где присутствует High-Speed USB должен быть еще и DMA.
И передачей данных из USB в другую периферию должен заниматься именно он.
А перегонять данные на GPIO не получится, та как низкоскоростная периферийная шина не даст.
Тут или шина внешней памяти + ПЛИС или другая скоростная периферия передачи данных. Например SDIO
kovigor
Цитата(Aldaris @ Oct 26 2010, 21:50) *
Задача не в COM-порт вывести, а из поля данных пакета USB перегнать данные побитово последовательно на один из GPIO контроллера. И выжать при этом скорость побольше.


Задача абсолютно надуманная. Интересно, для чего это нужно ? Просто для самообучения ? Нереализуемо это, присоединяюсь к ответившим ранее. На Full Speed еще можно попробовать, и то почти наверняка ничего не выйдет, а на High Speed - никак ...
Aldaris
Ну необязательно на GPIO. Просто нужно получить поток данных на выходе контроллера, пусть даже на параллельной шине.
Спасибо SergeyDDD за способ с DMA и параллельной периферией. Думаю, он позволит повысить скорость.
И все же...Интересно, будет ли реализация на ПЛИСе лучше, чем на контроллере?
kovigor
Цитата(Aldaris @ Oct 27 2010, 11:21) *
Спасибо SergeyDDD за способ с DMA и параллельной периферией. Думаю, он позволит повысить скорость.
И все же...Интересно, будет ли реализация на ПЛИСе лучше, чем на контроллере?


Да, так должно получиться. Только это будет связка МК + ПЛИС. Пихать USB в ПЛИС, наверное, нет смысла. Кстати, а почему бы не взять МК с USB High Speed + Gigabit Ethernet, если несущественно, на какой именно интерфейс транслировать USB - трафик ?
Aldaris
Цитата
Только это будет связка МК + ПЛИС.

Только ПЛИС вы имеете в виду поставить для сериализации данных с параллельного порта? Тогда это наверно лучшее решение, т.к. все равно данные на выходе буду на ПЛИСе обрабатывать.
kovigor
Цитата(Aldaris @ Oct 27 2010, 11:46) *
Только ПЛИС вы имеете в виду поставить для сериализации данных с параллельного порта? Тогда это наверно лучшее решение, т.к. все равно данные на выходе буду на ПЛИСе обрабатывать.


Например. Подключить ПЛИС к МК, например, на правах внешнего 32-разрядного статического ОЗУ (или другим подходящим способом), например, к тому же ARM9, и писать в ПЛИС данные, точно так же, как вы бы писали их в ОЗУ. Но я не представляю себе, чем вы будете перерабатывать такой интенсивный последовательный поток с выхода ПЛИС ?
Aldaris
Цитата
...чем вы будете перерабатывать такой интенсивный последовательный поток с выхода ПЛИС ?

На самом деле выход в итоге не будет именно последовательным. Планируется просто писать данные на скоростную флэш память.
kovigor
Цитата(Aldaris @ Oct 27 2010, 12:13) *
На самом деле выход в итоге не будет именно последовательным. Планируется просто писать данные на скоростную флэш память.

Тогда ПЛИС не нужна. Нужен только МК с USB - дивайсом и хостом, оба HS. К хосту подключаете обычную флешку. Дивайсом подключаетесь к источнику данных, принимаете данные, перерабатываете внутри МК, например, шифруете или делаете что-то еще, и сбрасываете на флэшку. Только рекомендую все это отладить на FS, там отладка сильно упрощается и захватывать поток на шине гораздо проще и дешевле. Полезным может оказаться даже обычный осциллограф. Ладно, я все равно вашей задачи не знаю, посему могу вам только подсказать возможные варианты ...
rezident
Цитата(SergeyDDD @ Oct 27 2010, 13:11) *
Как правило в контроллерах где присутствует High-Speed USB должен быть еще и DMA.
И передачей данных из USB в другую периферию должен заниматься именно он.
DMA имеет смысл, когда для него в МК имеется отдельная шина.
Цитата(Aldaris @ Oct 27 2010, 15:13) *
На самом деле выход в итоге не будет именно последовательным. Планируется просто писать данные на скоростную флэш память.
Поймите, что USB это всего лишь интерфейс, способ связи. Причем не из самых простых. Есть и другие способы передачи информации. Следует рассмотреть задачу на другом уровне абстракий. Более высоком. И лишь потом спускаться на уровень интерфейса передачи данных.
SergeyDDD
Цитата(rezident @ Oct 27 2010, 14:58) *
DMA имеет смысл, когда для него в МК имеется отдельная шина.


Что значит отдельная шина?
Как правило DMA мастером висит на "Multi-Layer AHB" шине, так же как и процессорное ядро, только на своем уровне
Aldaris
Цитата(rezident @ Oct 27 2010, 15:58) *
Есть и другие способы передачи информации. Следует рассмотреть задачу на другом уровне абстракий.

Но у меня-то задача передать по USB. Если бы мне надо было с компа передавать что-то именно быстро, то я бы использовал PCIe или что-то в этом духе.
dinam
Цитата(kovigor @ Oct 27 2010, 15:34) *
Кстати, а почему бы не взять МК с USB High Speed + Gigabit Ethernet...
Кстати, а не подскажете не многоножечного монстра в БГА имеющего Gigabit Ethernet?
На самом популярном USB-контроллере cy7c68013a нам удавалось передавать со скоростью около 40МБ/с(зависит от материнки). Вроде кто-то говорил, что получал 45 МБ/с. Если рассуждать, то любой МК имеющий на борту USB HS должен обладать быстрой шиной для ввода-вывода такого потока наружу.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.