|
Как добиться скорости в 20 Мб/с по HS USB |
|
|
|
Nov 11 2008, 13:39
|
Группа: Новичок
Сообщений: 9
Регистрация: 11-11-08
Пользователь №: 41 539

|
Исследую вопрос mass storage, и не могу понять как card readerы и прочие читаки и USB диски получают скорость в 20-50 Мб/сек, при том что все устройства у них сконфигурированы в HS режиме с одним! ендпоинтом, который по спецификации USB 2.0 может давать не больше 4,5 Мб/с?
Была идея что читалки используют несколько ендпоинтов параллельно на вывод за счёт чего получается большая скорость, но как то везде в конфигурации устройств вижу лишь 1 EP на вывод.
Изучил несколько исходников firmware LPC2888, Cortex M3, Cypress . Везде BOT режим с двум енпоинтами!!
Вобщем для меня загадка как это работает больше 4 МБ!?
Может кто знает как это делается? Буду очень благодарен за советы и ссылки?
|
|
|
|
|
Nov 11 2008, 17:45
|
Знающий
   
Группа: Участник
Сообщений: 609
Регистрация: 3-03-07
Из: San Jose
Пользователь №: 25 837

|
Цитата(Vitaliy S. @ Nov 11 2008, 16:39)  Исследую вопрос mass storage, и не могу понять как card readerы и прочие читаки и USB диски получают скорость в 20-50 Мб/сек, при том что все устройства у них сконфигурированы в HS режиме с одним! ендпоинтом, который по спецификации USB 2.0 может давать не больше 4,5 Мб/с? 480Мб/сек Цитата Была идея что читалки используют несколько ендпоинтов параллельно на вывод за счёт чего получается большая скорость, но как то везде в конфигурации устройств вижу лишь 1 EP на вывод.
Изучил несколько исходников firmware LPC2888, Cortex M3, Cypress . Везде BOT режим с двум енпоинтами!!
Вобщем для меня загадка как это работает больше 4 МБ!?
Может кто знает как это делается? Буду очень благодарен за советы и ссылки? Посмотрите здесь о скорости
--------------------
|
|
|
|
|
Nov 12 2008, 08:49
|
Группа: Новичок
Сообщений: 9
Регистрация: 11-11-08
Пользователь №: 41 539

|
Цитата(alexkok @ Nov 11 2008, 20:45)  480Мб/сек Это понятно, это макисмальная пропускная способность шины!, а я спрашивал про один ендпоинт!, у которого придел 4,5 Мб, как мне кажется из описания шины. На шине несколько ендпоинтов от разных устройств. Посмотрите здесь о скоростиЗа ссылки спасибо, читаю. Правда там нет ни слова о том как это реализовать в других контроллерах а не Cypress, на да ладно всё равно почитаю.
|
|
|
|
|
Nov 14 2008, 15:02
|
Группа: Новичок
Сообщений: 9
Регистрация: 11-11-08
Пользователь №: 41 539

|
Цитата(sergeeff @ Nov 12 2008, 19:14)  Наличие в контроллере 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?
|
|
|
|
|
Nov 14 2008, 20:13
|

Гуру
     
Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987

|
Цитата(Vitaliy S. @ Nov 14 2008, 18:02)  Суть вопроса на FS HS, это и так понятно, вопрос в том что я читаю в спецификации что один ендпоинт может выдать на гора по шине лишь 4,6 Мб в секунду Где Вы это прочитали? Приведите ссылку, плиз. Цитата(Vitaliy S. @ Nov 14 2008, 18:02)  ...а вся шина имеет пропускную способность 56 Мб и (480МБит)... Вообще-то, теоретически достижимая пропускная способность HS USB составляет не 56, а 49МБайт/с.
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Nov 17 2008, 09:00
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Alex11 @ Nov 15 2008, 00:07)  Что-то я не помню в спецификации, где прописано это ограничение. У меня живьем на филипсовском контроллере 20 МБ/сек на одном эндпойнте работает, причем скорость ограничена моими внешними цепями. Контроллер может больше. Я тоже про ограничение впервые слышу! Одна EP может полностью заполнить весь канал. Зарезервируется только 10% пропускной способности на контрольный канал (передачи через EP 0).
|
|
|
|
|
Nov 17 2008, 10:09
|
Группа: Новичок
Сообщений: 9
Регистрация: 11-11-08
Пользователь №: 41 539

|
Цитата(galjoen @ Nov 17 2008, 12:00)  Я тоже про ограничение впервые слышу! Одна EP может полностью заполнить весь канал. Зарезервируется только 10% пропускной способности на контрольный канал (передачи через EP 0). Не, ну если может то я только рад.  Я прочитал про это в книжке Шины PCI, USB, FirwWire от Михаила Гука. .... Парни! Всё понял! Выпускная способность ендпоинта зависит от размера буфера ендпоинта! И размера поля данных в кадре! Я тупо не дочитал. При размере буфера ендпоинта в 3072 байта, ендпоинта может давать 24 Мегабайта в секунду. При размере буфера ендпоинта в 2048 байт, ендпоинт может давать 16 Мегабайт. 56 не может давать один EP, максимум 24. Всё, казус в моём сознании разрешился, всем спасибо! Просто в кардиридерах и прочих устройствах мощная аппаратура с большими буферами, а в простых универсальных контроллерах типа LPC2888 EP имеют 512 байтовый буфер, посему они дают тока 3,5 Мб, что я и видел на своём макете.
|
|
|
|
|
Nov 17 2008, 11:30
|

Местный
  
Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894

|
Цитата(Vitaliy S. @ Nov 17 2008, 13:09)  Не, ну если может то я только рад.  Я прочитал про это в книжке Шины PCI, USB, FirwWire от Михаила Гука. .... Парни! Всё понял! Выпускная способность ендпоинта зависит от размера буфера ендпоинта! И размера поля данных в кадре! Я тупо не дочитал. При размере буфера ендпоинта в 3072 байта, ендпоинта может давать 24 Мегабайта в секунду. При размере буфера ендпоинта в 2048 байт, ендпоинт может давать 16 Мегабайт. 56 не может давать один EP, максимум 24. Всё, казус в моём сознании разрешился, всем спасибо! Просто в кардиридерах и прочих устройствах мощная аппаратура с большими буферами, а в простых универсальных контроллерах типа LPC2888 EP имеют 512 байтовый буфер, посему они дают тока 3,5 Мб, что я и видел на своём макете. Фигня какая-то... Cypress CY7C68013A дает до 40МБайт/сек на 1 Bulk Endpoint с 2мя буферами по 512байт и стандартным драйвером.
|
|
|
|
|
Nov 17 2008, 11:34
|
Группа: Новичок
Сообщений: 9
Регистрация: 11-11-08
Пользователь №: 41 539

|
Цитата(-Al- @ Nov 17 2008, 14:30)  Фигня какая-то... Cypress CY7C68013A дает до 40МБайт/сек на 1 Bulk Endpoint с 2мя буферами по 512байт и стандартным драйвером. Вероятно имеется ввиду поле данных, в передаваемом за раз блоке, как-то так. Возможно тут и не нужен большой EP буфер контроллера. Просто чем больше буфер EP тем больше может само ядро контроллера отправить данных на шину, как я понимаю.
|
|
|
|
|
Dec 3 2008, 09:14
|
Знающий
   
Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454

|
Нигде почему-то не упомянуто о том что endpoit-ы могут иметь один или два буфера. Если буфер один, то перерывы в передаче обеспечены. Кроме того со стороны компьютера нужно запрашивать передачу не по 64 или 512 байт а бОльшими блоками. Я исследовал возможности ОС для предачи данных для режима FS(на последней странице). В зависимости от ОС размер запрошенного блока может быть от 4 до 64 килобайт. http://njnmnp.narod.ru/note/USB_for_programmer.pdf
|
|
|
|
|
Dec 8 2008, 09:01
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата Нигде почему-то не упомянуто о том что 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байт и после заполнения возвращает его.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|