Jump to content

    

Как добиться скорости в 20 Мб/с по HS USB

Исследую вопрос mass storage, и не могу понять как card readerы и прочие читаки и USB диски получают скорость в 20-50 Мб/сек, при том что все устройства у них сконфигурированы в HS режиме с одним! ендпоинтом, который по спецификации USB 2.0 может давать не больше 4,5 Мб/с?

 

Была идея что читалки используют несколько ендпоинтов параллельно на вывод за счёт чего получается большая скорость, но как то везде в конфигурации устройств вижу лишь 1 EP на вывод.

 

Изучил несколько исходников firmware LPC2888, Cortex M3, Cypress . Везде BOT режим с двум енпоинтами!!

 

Вобщем для меня загадка как это работает больше 4 МБ!?

 

Может кто знает как это делается? Буду очень благодарен за советы и ссылки?

Share this post


Link to post
Share on other sites
Исследую вопрос mass storage, и не могу понять как card readerы и прочие читаки и USB диски получают скорость в 20-50 Мб/сек, при том что все устройства у них сконфигурированы в HS режиме с одним! ендпоинтом, который по спецификации USB 2.0 может давать не больше 4,5 Мб/с?

480Мб/сек

Была идея что читалки используют несколько ендпоинтов параллельно на вывод за счёт чего получается большая скорость, но как то везде в конфигурации устройств вижу лишь 1 EP на вывод.

 

Изучил несколько исходников firmware LPC2888, Cortex M3, Cypress . Везде BOT режим с двум енпоинтами!!

 

Вобщем для меня загадка как это работает больше 4 МБ!?

 

Может кто знает как это делается? Буду очень благодарен за советы и ссылки?

Посмотрите здесь о скорости

Share this post


Link to post
Share on other sites
480Мб/сек

 

Это понятно, это макисмальная пропускная способность шины!, а я спрашивал про один ендпоинт!, у которого придел 4,5 Мб, как мне кажется из описания шины. На шине несколько ендпоинтов от разных устройств.

 

 

Посмотрите здесь о скорости

 

 

За ссылки спасибо, читаю. Правда там нет ни слова о том как это реализовать в других контроллерах а не Cypress, на да ладно всё равно почитаю.

Share this post


Link to post
Share on other sites

Наличие в контроллере USB 2.0 вовсе не означает, что там реализован режим high speed 480 Mbit/s (60 MB/s), как правило только full speed 12 Mbit/s (1.5 MB/s) и low speed 1.5 Mbit/s (187.5 kB/s).

 

Соответственно если надо заполучить васокую скорость надо выбирать контроллер, который поддерживает именно режим high speed.

Share this post


Link to post
Share on other sites
Наличие в контроллере USB 2.0 вовсе не означает, что там реализован режим high speed 480 Mbit/s (60 MB/s), как правило только full speed 12 Mbit/s (1.5 MB/s) и low speed 1.5 Mbit/s (187.5 kB/s).

 

Соответственно если надо заполучить васокую скорость надо выбирать контроллер, который поддерживает именно режим high speed.

 

 

Суть вопроса на FS HS, это и так понятно, вопрос в том что я читаю в спецификации что один ендпоинт может выдать на гора по шине лишь 4,6 Мб в секунду, а вся шина имеет пропускную способность 56 Мб и (480МБит), так вот чтобы заполнить в всю шину устройство должно параллельно фигачить минимум по 10 ендпоинтов, а в конфигурации всех флешек, кардридеров тольео один! HS ендпоинт, т.е они могут выдавать только 4,6 Мб, а они как-то выдают 20-30 Мб.

 

Вот в чём вопрос. Как они это делают имея один EP?

Share this post


Link to post
Share on other sites
Vitaliy S.Я уже запутался где у вас мегабит а где мегабайт. Вроде принято писать так МБ - мегабайт (большая буква Б), Мб а лучше Мбит (соответственно маленькая буква).

Share this post


Link to post
Share on other sites
Суть вопроса на FS HS, это и так понятно, вопрос в том что я читаю в спецификации что один ендпоинт может выдать на гора по шине лишь 4,6 Мб в секунду
Где Вы это прочитали? :07:

Приведите ссылку, плиз.

 

...а вся шина имеет пропускную способность 56 Мб и (480МБит)...
Вообще-то, теоретически достижимая пропускная способность HS USB составляет не 56, а 49МБайт/с.

Share this post


Link to post
Share on other sites

Что-то я не помню в спецификации, где прописано это ограничение. У меня живьем на филипсовском контроллере 20 МБ/сек на одном эндпойнте работает, причем скорость ограничена моими внешними цепями. Контроллер может больше.

Share this post


Link to post
Share on other sites
Что-то я не помню в спецификации, где прописано это ограничение. У меня живьем на филипсовском контроллере 20 МБ/сек на одном эндпойнте работает, причем скорость ограничена моими внешними цепями. Контроллер может больше.

Я тоже про ограничение впервые слышу!

Одна EP может полностью заполнить весь канал. Зарезервируется только 10% пропускной способности на контрольный канал (передачи через EP 0).

Share this post


Link to post
Share on other sites
Я тоже про ограничение впервые слышу!

Одна EP может полностью заполнить весь канал. Зарезервируется только 10% пропускной способности на контрольный канал (передачи через EP 0).

 

Не, ну если может то я только рад. :) Я прочитал про это в книжке Шины PCI, USB, FirwWire от Михаила Гука. ....

 

Парни! Всё понял!

 

Выпускная способность ендпоинта зависит от размера буфера ендпоинта! И размера поля данных в кадре! Я тупо не дочитал.

 

При размере буфера ендпоинта в 3072 байта, ендпоинта может давать 24 Мегабайта в секунду.

При размере буфера ендпоинта в 2048 байт, ендпоинт может давать 16 Мегабайт.

 

56 не может давать один EP, максимум 24.

 

Всё, казус в моём сознании разрешился, всем спасибо! Просто в кардиридерах и прочих устройствах

мощная аппаратура с большими буферами, а в простых универсальных контроллерах типа LPC2888 EP имеют 512 байтовый буфер, посему они дают тока 3,5 Мб, что я и видел на своём макете.

Share this post


Link to post
Share on other sites
Не, ну если может то я только рад. :) Я прочитал про это в книжке Шины PCI, USB, FirwWire от Михаила Гука. ....

 

Парни! Всё понял!

 

Выпускная способность ендпоинта зависит от размера буфера ендпоинта! И размера поля данных в кадре! Я тупо не дочитал.

 

При размере буфера ендпоинта в 3072 байта, ендпоинта может давать 24 Мегабайта в секунду.

При размере буфера ендпоинта в 2048 байт, ендпоинт может давать 16 Мегабайт.

 

56 не может давать один EP, максимум 24.

 

Всё, казус в моём сознании разрешился, всем спасибо! Просто в кардиридерах и прочих устройствах

мощная аппаратура с большими буферами, а в простых универсальных контроллерах типа LPC2888 EP имеют 512 байтовый буфер, посему они дают тока 3,5 Мб, что я и видел на своём макете.

Фигня какая-то... Cypress CY7C68013A дает до 40МБайт/сек на 1 Bulk Endpoint с 2мя буферами по 512байт и стандартным драйвером.

Share this post


Link to post
Share on other sites
Фигня какая-то... Cypress CY7C68013A дает до 40МБайт/сек на 1 Bulk Endpoint с 2мя буферами по 512байт и стандартным драйвером.

 

Вероятно имеется ввиду поле данных, в передаваемом за раз блоке, как-то так. Возможно тут и не нужен

большой EP буфер контроллера. Просто чем больше буфер EP тем больше может само ядро контроллера отправить данных на шину, как я понимаю.

Share this post


Link to post
Share on other sites
Исследую вопрос mass storage, и не могу понять как card readerы и прочие читаки и USB диски получают скорость в 20-50 Мб/сек, при том что все устройства у них сконфигурированы в HS режиме с одним! ендпоинтом, который по спецификации USB 2.0 может давать не больше 4,5 Мб/с?

 

В таких устройствах используется bulk-передача - пока канал не занят (например контрольными передачами) устройство может посылать буффер bulk-EP один за одним. Для сравнения в interrupt-EP передача возможна только раз в период опроса (например 1мс в USB1.1 при максимальном размере EP в 64 байта и скорость передачи в таком случае ограничивается 64kB/S). В bulk-EP таких ограничений нет (да и буффер конечной точки побольше) вот и получается нормальная скорость :)

Share this post


Link to post
Share on other sites

Нигде почему-то не упомянуто о том что endpoit-ы могут иметь один или два буфера.

Если буфер один, то перерывы в передаче обеспечены.

Кроме того со стороны компьютера нужно запрашивать передачу не по 64 или 512 байт а бОльшими блоками.

 

Я исследовал возможности ОС для предачи данных для режима FS(на последней странице).

В зависимости от ОС размер запрошенного блока может быть от 4 до 64 килобайт.

http://njnmnp.narod.ru/note/USB_for_programmer.pdf

Share this post


Link to post
Share on other sites
Нигде почему-то не упомянуто о том что endpoit-ы могут иметь один или два буфера.

Если буфер один, то перерывы в передаче обеспечены.

В документации на микросхемы USB обычно указывается возможность буферизации конечной точки.

В isp1181a например двукратная буферизация. В HS-USB-микроконтроллерах Cypress четырёхкратная (может быть и более, без документации точно не скажу). Размер конечной точки для bulk-передачи ограничен стандартом USB2.0:

An endpoint for bulk transfers specifies the maximum data payload size that the endpoint can accept from or transmit to the bus. The USB defines the allowable maximum bulk data payload sizes to be only 8, 16, 32, or 64 bytes for full-speed endpoints and 512 bytes for high-speed endpoints.

 

Кроме того со стороны компьютера нужно запрашивать передачу не по 64 или 512 байт а бОльшими блоками.

Имеется ввиду запрос к драйверу на получение блока данных от 4кБ.

Драйвер заполняет буффер получая от usb-функции (вашего устройства) пакеты по 8-512байт и после заполнения возвращает его.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this