Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Скорость High Speed USB на STM32F2/F4
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Flexz
Кто уже реализовывал, каких скоростей удалось добиться? Зависит ли производительность от микросхемы физического уровня?
kovigor
Цитата(Flexz @ Oct 2 2012, 15:20) *
Кто уже реализовывал, каких скоростей удалось добиться? Зависит ли производительность от микросхемы физического уровня?

На основе модернизированной библиотеки от ST для Mass-Storage лично мне удавалось получать чуть более восьми Мегабайт в секунду (в качестве носителя использовалась SD-карточка; если же организовать "диск" прямо в памяти МК, то можно легко получить 20 Мегабайт, и даже больше). Другой специалист, переписавший код от ST, по его словам, получил порядка 12 Мегабайт, но я лично этого не видел ...
P.S. От PHY это едва ли сильно зависит. В обоих описанных мною случаях речь идет о USB3300 ...
sonycman
Цитата(kovigor @ Oct 2 2012, 16:44) *
На основе модернизированной библиотеки от ST для Mass-Storage лично мне удавалось получать чуть более восьми Мегабайт в секунду...

А это для чтения или записи?
kovigor
Цитата(sonycman @ Oct 2 2012, 17:03) *
А это для чтения или записи?

Скорости весьма близки в обоих направлениях. "Бутылочное горлышко" в данном случае - не USB, а интерфейс SDIO в МК, который не позволяет при обмене с карточкой поднять тактовую частоту этого обмена выше 12 МГц ...
Flexz
Цитата(kovigor @ Oct 2 2012, 16:44) *
На основе модернизированной библиотеки от ST для Mass-Storage...

"модернизированной" - это в смысле просто допиленной/оптимизированной под себя, или косяки какие-то были?
PS а 20+МБ это гуд)
Allregia
Цитата(kovigor @ Oct 2 2012, 16:27) *
Скорости весьма близки в обоих направлениях. "Бутылочное горлышко" в данном случае - не USB, а интерфейс SDIO в МК, который не позволяет при обмене с карточкой поднять тактовую частоту этого обмена выше 12 МГц ...

А у Ф4 разве не 25 ?
kovigor
Цитата(Flexz @ Oct 2 2012, 20:22) *
"модернизированной" - это в смысле просто допиленной/оптимизированной под себя, или косяки какие-то были?
PS а 20+МБ это гуд)

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

Цитата(Allregia @ Oct 2 2012, 23:32) *
А у Ф4 разве не 25 ?

Прошу прощения. Поднял старые записи. Там было на самом деле не 12 МГц тактовой, а 24 ...
sonycman
Цитата(kovigor @ Oct 3 2012, 01:33) *
Прошу прощения. Поднял старые записи. Там было на самом деле не 12 МГц тактовой, а 24 ...

То есть у топовых STM32 получился кастрированный SDIO, который не работает в режиме High Speed - 48 МГц?
kovigor
Цитата(sonycman @ Oct 3 2012, 04:45) *
То есть у топовых STM32 получился кастрированный SDIO, который не работает в режиме High Speed - 48 МГц?

Да, 48 выставить нельзя. 25 максимум, насколько я помню. Отсюда проблема со скоростью. Это для STM32F2xx. Возможно, для STM32F4xx эта проблема уже решена ...
Allregia
Цитата(sonycman @ Oct 3 2012, 03:45) *
То есть у топовых STM32 получился кастрированный SDIO, который не работает в режиме High Speed - 48 МГц?


25МГц "by default", но там есть какая-то хитрая фраза про более высокую частоту. У меня пока руки не дошли разобраться.
Flexz
про сдшки в обоих мануалах (на 2 и 4) написано ровно одно и тоже
Цитата
The clock frequency can vary between 0 MHz and 20 MHz (for a
MultiMediaCard V3.31), between 0 and 48 MHz for a MultiMediaCard V4.0/4.2, or between
0 and 25 MHz (for an SD/SD I/O card).

Чем вызвано ограничение для SD - непонятно.
MBR
У меня получилось USB порядка 20 мб/с при диске в памяти. 10 мб/с при работе с SDIO. Скорость может отличаться в обе стороны при разных картах. pll тактуется на 48 мгц, обмен по шине - 24. Максимум для существующих карт - 25 мгц. В теории есть 50 и 100 мгцовые карты, но я в продаже не видел, да и не уверен, что по вольтажу совместимы. STM32F215

Код свой. Используется конвеер и ртос. Сделано в рамках проекта mkernel. В ближайшее время выложу в git.
aaarrr
Цитата(MBR @ Oct 3 2012, 22:48) *
В теории есть 50 и 100 мгцовые карты, но я в продаже не видел, да и не уверен, что по вольтажу совместимы.

Почти все продающиеся сейчас SD-карты - 50MHz и 2.7-3.6V
sonycman
Цитата(MBR @ Oct 3 2012, 22:48) *
Максимум для существующих карт - 25 мгц. В теории есть 50 и 100 мгцовые карты, но я в продаже не видел...

А как вы определили, что в продаже карты только на 25 МГц? rolleyes.gif
У меня все SDHC карты, купленные за последние годы, без проблем работают на 48-50 МГц со скоростями до 15 МБ\сек.
MBR
Господа, я был адски неправ. Ошибка заключалась в том, что я вычитывал CSD регистры до перехода в high speed. Успешно запустил 48 МГц на STM32F2 в режиме divisor bypass. Скорость выросла значительно. Протестирую и отпишусь о результатах.

Итого: 17 МБ/с на Qumo 16GB class 10, против 11 на 24 МГц
kovigor
Цитата(MBR @ Oct 9 2012, 10:53) *
Господа, я был адски неправ. Ошибка заключалась в том, что я вычитывал CSD регистры до перехода в high speed. Успешно запустил 48 МГц на STM32F2 в режиме divisor bypass.

Не понял, у вас на карточку подаются 48 МГц тактового сигнала вместо 24 ?
MBR
Цитата(kovigor @ Oct 9 2012, 13:26) *
Не понял, у вас на карточку подаются 48 МГц тактового сигнала вместо 24 ?

Почему вместо? Сначала 400 КГц 1 бит, потом конфигурирование карты, 24 МГц 4 бит, переход в high speed (если карта поддерживает) и 48 МГц. Теоретически можно 50, но у меня почему-то pll не завелась. Пример либы от стм не умеет в high speed переходить.
kovigor
Цитата(MBR @ Oct 9 2012, 12:40) *
Теоретически можно 50, но у меня почему-то pll не завелась.

Ясно. Но вот как вы выставили 48МГц, если в даташите написано, что 25МГц - это предел ?
MBR
Цитата(kovigor @ Oct 9 2012, 13:59) *
Ясно. Но вот как вы выставили 48МГц, если в даташите написано, что 25МГц - это предел ?


Нет там такого:

Цитата
The USB OTG FS clock (48 MHz), the random analog generator (RNG) clock (≤ 48 MHz) and the SDIO clock (≤ 48 MHz) which are coming from a specific output of PLL (PLL48CLK)


Перечитал внимательно, теперь сам вижу, почему на 50 не завелось.
kovigor
Цитата(MBR @ Oct 9 2012, 13:03) *
Нет там такого:

Ну, не знаю. А как же быть вот с этой фразой из Reference Manual:

"SDIO_CKis the clock to the card: one bit is transferred on both command and data lines
with each clock cycle. The clock frequency can vary between 0 MHz and 20 MHz (for a
MultiMediaCard V3.31), between 0 and 48 MHz for a MultiMediaCard V4.0/4.2, or between
0 and 25 MHz (for an SD/SD I/O card)." ?
MBR
Цитата(kovigor @ Oct 9 2012, 14:11) *
Ну, не знаю. А как же быть вот с этой фразой из Reference Manual:

"SDIO_CKis the clock to the card: one bit is transferred on both command and data lines
with each clock cycle. The clock frequency can vary between 0 MHz and 20 MHz (for a
MultiMediaCard V3.31), between 0 and 48 MHz for a MultiMediaCard V4.0/4.2, or between
0 and 25 MHz (for an SD/SD I/O card)." ?

Я подозреваю, что тут говорится о физических ограничениях карт, а не самом интерфейсе и его просто забыли поправить.
kovigor
Цитата(MBR @ Oct 9 2012, 13:22) *
Я подозреваю, что тут говорится о физических ограничениях карт, а не самом интерфейсе и его просто забыли поправить.

Странно. У меня Manual Doc ID 15403 Rev 4, и там на стр. 705 это написано. А в вашем Manual есть эта фраза ?
MBR
Цитата(kovigor @ Oct 9 2012, 14:37) *
Странно. У меня Manual Doc ID 15403 Rev 4, и там на стр. 705 это написано. А в вашем Manual есть эта фраза ?

У меня тот же самый мануал. Но подумайте сами - на уровне передачи физических сигналов разница между SD и MMC это только 4 или 8 бит данных. Так почему должно быть такое нелепое ограничение на SD?
kovigor
Цитата(MBR @ Oct 9 2012, 13:44) *
У меня тот же самый мануал. Но подумайте сами - на уровне передачи физических сигналов разница между SD и MMC это только 4 или 8 бит данных. Так почему должно быть такое нелепое ограничение на SD?

Я им в техподдержку напишу. Гадать можно до бесконечности. Похоже, вы правы, но интересно, что скажет производитель ...
Flexz
Ну вот и я добрался до железа с HS USB sm.gif Результаты очень даже радуют. На рам-диске (в озу контроллера) в режиме Mass-Storage сходу получилось 30МБ/с, с zero copy - уже 35, это без файловой системы, прямой доступ к диску. После устранения оверхеда в лице mass-storage, удалось раскачать до 42МБ/с, правда этот вариант несколько искусственный, т.к. проц просто непрерывно передает большие блоки, но для оценки максимальной достижимой производительности - сойдет.
Еще что интересно - на таких скоростях похоже уже начинает оказывать влияние контроллер хоста. Указанные выше цифры были получены при подключении к USB 3.0 порту компа, в 2.0 портах скорость на 3-6 МБ/с ниже. Понятное дело, что HS/SS ни при чем, дело либо в организации самого контроллера, либо производительности шины на которой он сидит.
dubb
Как я понял, Вы все используете USB в режиме Device?
А кто-нибудь тестил USB HS в режиме, когда контроллер - хост? Если да, то какие скорости удалось получить? Сильно-ли пришлось пилить существующие экзамплы?
Спасибо
Flexz
Да, пока только девайс. Хост еще вообще не смотрел, но в ближайшей перспективе буду, как нарисуется вторая плата. Планируется соединить две STM32F4 одну хостом, другую девайсом.
Flexz
Добрался наконец-то до хоста. F4 с флешкой, судя по первым экспериментам скорость упирается в производительность флешки. Пробовал три штуки:
1. Довольно тормозная флешка Emtec. Комп ее пишет на скорости где-то 2.7-2.9МБ/с, процессор - 2.5
2. СДшка через ридер, компе 8МБ/с, проц - 7.5
3. Большая и шустрая флешка 32гига, на компе пишется со скоростью 20-22МБ/с в HS режиме почему-то не пошла. Проц ее видит, можно посмотреть каталоги, но при попытке создать файл - он создается, но в него ничего не пишется, функция записи тупо повисает. Где именно пока не разбирался.

В FS режиме все три показывают скорость в районе 0.7-0.9 МБ/с.
MBR
Цитата(Flexz @ Dec 2 2012, 18:57) *
Проц ее видит, можно посмотреть каталоги, но при попытке создать файл - он создается, но в него ничего не пишется, функция записи тупо повисает. Где именно пока не разбирался.

У меня такое было, когда не было включено увеличенное энергопотребление по CMD6.

По usb-hs скорости впечатляют. Это c какой частотой микроконтроллера получено? Какая обвязка?
Flexz
Так у меня обычная USB-Flash, только во втором тесте подрубал СД-шку через ридер.
Частота полная - 168МГц, физика - USB3300.

У меня есть подозрения, что где-то в HS-библиотеке бага-таки есть, т.к. еще когда я гонял эмулятор ком-порта - передача рандомно висла. Так же прога, но в FS режиме работала нормально часами. Надо копаться в этом деле с отладчиком, а времени нету пока.
MBR
Еще один момент. Может и не в либе дело. Все буферы должны быть по doubleword align. Самый простой способ проверить - отрубить дма и посмотреть.
GeorgeVo
Люди, нужен драйвер под STM32F4xx в режиме BULK. На контроллере нужно иметь несколько endpoint'ов, часть которых обрабатывается программно, часть посредством DMA вводит/выводит данные во внешнюю память. По этому каналу нужно обеспечить скорость не ниже 15Mbyte/sec. Кто-то сделать сможет? Готовы отблагодарить... vgeorge@yandex.ru

Allregia
Цитата(MBR @ Dec 4 2012, 07:42) *
Еще один момент. Может и не в либе дело. Все буферы должны быть по doubleword align. Самый простой способ проверить - отрубить дма и посмотреть.


Дело похоже и в либе, и в проце самом, потом как с процом ревизии "Z" оно виснет реже чем с "А". Но все равно виснет чере какое-то время sad.gif
AndreyKar
Без микросхемы физического уровня т.н. работал? Какие результаты, устойчивость работы?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.