|
|
  |
Скорость по USB (MassStorage). |
|
|
|
Dec 23 2010, 02:12
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(Oleg_IT @ Dec 22 2010, 20:10)  LPC2478. Разобрался с MassStorage с SD картой, но скорость, мягко говоря, низкая, на LPC 33-35 ед., та же карта с кардридером ~5000 ед. Как заставить эту парочку быстрее работать? Для этого надо быстро закидывать в трубу чанки, а не щелкать клювом. Если упрощенно, то когда хост забирает у вас первый чанк 64 байта, он тут же требует следующий чанк. Если вы его не предоставите в течении 43 мкс (для FS), то планировщик хоста решит, что ваш девайс тормозит безмерно и в следующий раз запросит у него чанк только в следующем фрейме, т.е. через 1 мс, или даже через фрейм. Так что для тормозных девайсов предел скорости обмена - 64 кбайт/сек, а в действительности еще меньше. А если будете подсовывать чанки оперативно, без жевания соплей, то хост может забрать у вас до 19 чанков за один фрейм, это дает в пределе 1216 кбайт/сек для FS. На практике используется два буфера. Пока хост выкачивает чанк из одного буфера, вы заполняете второй, а потом ваша USB железяка мгновенно и автоматически меняет их местам, как только хост выкачал чанк и потребовал следующий. При скорости 12 Мбит/сек хост выкачивает чанк в 64 байта примерно за 43 мкс . Вот за это время вам надо успеть заполнить второй буфер. Не успели - кирдык, будете загорать как минимум до следующего фрейма.
|
|
|
|
|
Dec 23 2010, 06:26
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(Oleg_IT @ Dec 23 2010, 17:07)  что есть чанк. "Чанками" (от английского chunk - "кусок") я называю USB-пакеты. В USB длинное сообщение не передается целиком, а разбивается на куски и передается пакетами. Для балк-трубы (а масс-сторадж качает данные через балк) размер пакета может быть 8, 16, 32 или 64 байта, он декларируется в дескрипторе устройства. Как правило для балка все используют пакеты в 64 байта. К секторам это не имеет отношения. Когда вы перекачиваете файл или массив через USB, низкоуровневый софт и железо (или даже вообще одно только железо, надо смотреть, кто это делает в вашем случае) разбивает его на чанки и закидывает в USB. Если размер очередного чанка равен 64 байта, значит, файл еще не закончился, хост будет требовать еще. Если чанк меньше 64 байт (вплоть до нуля), то хост знает, что это последний чанк файла.
|
|
|
|
|
Dec 23 2010, 10:39
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(=AK= @ Dec 23 2010, 13:26)  Если размер очередного чанка равен 64 байта, значит, файл еще не закончился, хост будет требовать еще. Если чанк меньше 64 байт (вплоть до нуля), то хост знает, что это последний чанк файла. Хм, вообще-то, в случае mass storage, хост всегда знает, каков размер запрашиваемого пакета, так как сам выставляет девайсу эту информацию в виде: логический номер первого нужного сектора + количество байт. Поэтому никакого смысла в лишней транзакции с нулевой длиной нет.
|
|
|
|
|
Dec 23 2010, 10:50
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(sonycman @ Dec 23 2010, 16:39)  Хм, вообще-то, в случае mass storage, хост всегда знает, каков размер запрашиваемого пакета, так как сам выставляет девайсу эту информацию в виде: логический номер первого нужного сектора + количество байт. Да, номер сектора и количество байт, больше ни какой информации в запросе я не вижу. И, как я уже говорил, номера секторов не всегда последовательные, так что читать на опережение не понятно что.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|