Кто уже реализовывал, каких скоростей удалось добиться? Зависит ли производительность от микросхемы физического уровня?
kovigor
Oct 2 2012, 12:44
Цитата(Flexz @ Oct 2 2012, 15:20)

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

На основе модернизированной библиотеки от ST для Mass-Storage лично мне удавалось получать чуть более восьми Мегабайт в секунду...
А это для чтения или записи?
kovigor
Oct 2 2012, 14:27
Цитата(sonycman @ Oct 2 2012, 17:03)

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

На основе модернизированной библиотеки от ST для Mass-Storage...
"модернизированной" - это в смысле просто допиленной/оптимизированной под себя, или косяки какие-то были?
PS а 20+МБ это гуд)
Allregia
Oct 2 2012, 20:32
Цитата(kovigor @ Oct 2 2012, 16:27)

Скорости весьма близки в обоих направлениях. "Бутылочное горлышко" в данном случае - не USB, а интерфейс SDIO в МК, который не позволяет при обмене с карточкой поднять тактовую частоту этого обмена выше 12 МГц ...
А у Ф4 разве не 25 ?
kovigor
Oct 2 2012, 21:33
Цитата(Flexz @ Oct 2 2012, 20:22)

"модернизированной" - это в смысле просто допиленной/оптимизированной под себя, или косяки какие-то были?
PS а 20+МБ это гуд)
Ошибок не было. Но я, например, доработал механизм обмена, в результате проект стал давать указанную мной скорость против изначально наблюдавшихся пяти с чем-то Мегабайт ...
Цитата(Allregia @ Oct 2 2012, 23:32)

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

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

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

То есть у топовых STM32 получился кастрированный SDIO, который не работает в режиме High Speed - 48 МГц?
25МГц "by default", но там есть какая-то хитрая фраза про более высокую частоту. У меня пока руки не дошли разобраться.
про сдшки в обоих мануалах (на 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 - непонятно.
У меня получилось USB порядка 20 мб/с при диске в памяти. 10 мб/с при работе с SDIO. Скорость может отличаться в обе стороны при разных картах. pll тактуется на 48 мгц, обмен по шине - 24. Максимум для существующих карт - 25 мгц. В теории есть 50 и 100 мгцовые карты, но я в продаже не видел, да и не уверен, что по вольтажу совместимы. STM32F215
Код свой. Используется конвеер и ртос. Сделано в рамках проекта mkernel. В ближайшее время выложу в git.
Цитата(MBR @ Oct 3 2012, 22:48)

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

Максимум для существующих карт - 25 мгц. В теории есть 50 и 100 мгцовые карты, но я в продаже не видел...
А как вы определили, что в продаже карты только на 25 МГц?
У меня все SDHC карты, купленные за последние годы, без проблем работают на 48-50 МГц со скоростями до 15 МБ\сек.
Господа, я был адски неправ. Ошибка заключалась в том, что я вычитывал CSD регистры до перехода в high speed. Успешно запустил 48 МГц на STM32F2 в режиме divisor bypass. Скорость выросла значительно. Протестирую и отпишусь о результатах.
Итого: 17 МБ/с на Qumo 16GB class 10, против 11 на 24 МГц
kovigor
Oct 9 2012, 09:26
Цитата(MBR @ Oct 9 2012, 10:53)

Господа, я был адски неправ. Ошибка заключалась в том, что я вычитывал CSD регистры до перехода в high speed. Успешно запустил 48 МГц на STM32F2 в режиме divisor bypass.
Не понял, у вас на карточку подаются 48 МГц тактового сигнала вместо 24 ?
Цитата(kovigor @ Oct 9 2012, 13:26)

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

Теоретически можно 50, но у меня почему-то pll не завелась.
Ясно. Но вот как вы выставили 48МГц, если в даташите написано, что 25МГц - это предел ?
Цитата(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
Oct 9 2012, 10:11
Цитата(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)." ?
Цитата(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
Oct 9 2012, 10:37
Цитата(MBR @ Oct 9 2012, 13:22)

Я подозреваю, что тут говорится о физических ограничениях карт, а не самом интерфейсе и его просто забыли поправить.
Странно. У меня Manual Doc ID 15403 Rev 4, и там на стр. 705 это написано. А в вашем Manual есть эта фраза ?
Цитата(kovigor @ Oct 9 2012, 14:37)

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

У меня тот же самый мануал. Но подумайте сами - на уровне передачи физических сигналов разница между SD и MMC это только 4 или 8 бит данных. Так почему должно быть такое нелепое ограничение на SD?
Я им в техподдержку напишу. Гадать можно до бесконечности. Похоже, вы правы, но интересно, что скажет производитель ...
Ну вот и я добрался до железа с HS USB

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

Проц ее видит, можно посмотреть каталоги, но при попытке создать файл - он создается, но в него ничего не пишется, функция записи тупо повисает. Где именно пока не разбирался.
У меня такое было, когда не было включено увеличенное энергопотребление по CMD6.
По usb-hs скорости впечатляют. Это c какой частотой микроконтроллера получено? Какая обвязка?
Так у меня обычная USB-Flash, только во втором тесте подрубал СД-шку через ридер.
Частота полная - 168МГц, физика - USB3300.
У меня есть подозрения, что где-то в HS-библиотеке бага-таки есть, т.к. еще когда я гонял эмулятор ком-порта - передача рандомно висла. Так же прога, но в FS режиме работала нормально часами. Надо копаться в этом деле с отладчиком, а времени нету пока.
Еще один момент. Может и не в либе дело. Все буферы должны быть по doubleword align. Самый простой способ проверить - отрубить дма и посмотреть.
GeorgeVo
Dec 28 2012, 08:42
Люди, нужен драйвер под STM32F4xx в режиме BULK. На контроллере нужно иметь несколько endpoint'ов, часть которых обрабатывается программно, часть посредством DMA вводит/выводит данные во внешнюю память. По этому каналу нужно обеспечить скорость не ниже 15Mbyte/sec. Кто-то сделать сможет? Готовы отблагодарить... vgeorge@yandex.ru
Allregia
Dec 28 2012, 13:09
Цитата(MBR @ Dec 4 2012, 07:42)

Еще один момент. Может и не в либе дело. Все буферы должны быть по doubleword align. Самый простой способ проверить - отрубить дма и посмотреть.
Дело похоже
и в либе,
и в проце самом, потом как с процом ревизии "Z" оно виснет реже чем с "А". Но все равно виснет чере какое-то время
AndreyKar
Jan 23 2013, 06:42
Без микросхемы физического уровня т.н. работал? Какие результаты, устойчивость работы?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.