Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Bulk-Only в MassStorage USB, 64b/1ms
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам
Alex2172
Господа, прошу направить на путь истинный...
Возможно для кого-то эта тема уже избита, но все же... ткните носом в документацию, примеры, Ваш личный опыт...

Есть пример USB-MEM для LPC214x эмулирующий диск 16кБ в RAM, видоизменил SCSI для работы с реальной MMC/SD - все ок. Но за один фрейм передается 64 байта, что и следует ожидать. А это всего лишь 30кБ/сек, представляете сколько будет читаться MMC карточка объемом 512Мб.

Вопросы:
1. Как передавать несколько пакетов за один фрейм в BulkOnly режиме чтобы увеличить скорость хотя бы до 1Mb/сек?
2. Встречал ли кто в сети исходники для реализации Control/Bulk/Interrupt (кажется uC/MSD реализует CBI, но х.з. где он, на фтп нет, в будках нет)?
nikkov
См. здесь http://electronix.ru/forum/index.php?showtopic=11785
Я тоже пробовал, пока шина свободна, скорость передачи в режиме BULK приближается к максимальной скорости USB шины. Для Interrupt и Isochron-го режимов макс. скорость равна размеру буфера конечной точки*1000 байт/сек.
Alex2172
Цитата(nikkov @ Feb 7 2006, 05:12) *
См. здесь http://electronix.ru/forum/index.php?showtopic=11785
Я тоже пробовал, пока шина свободна, скорость передачи в режиме BULK приближается к максимальной скорости USB шины. Для Interrupt и Isochron-го режимов макс. скорость равна размеру буфера конечной точки*1000 байт/сек.

Спасибо за Ваш ответ, но чтение спецификации и использование осциллографа не удалось избежать smile.gif. Дело в том что скорость чтения данных 30кБ/сек (MMC->LPC2148->USB) вызвана чем то другим. Сейчас разбираюсь.
khach
Keil обновил аппноту по массторадж. Утверждают, что поисправляли много багов. Может имеет смысл посмотреть? http://www.keil.com/download/docs/307.asp
nikkov
Цитата(Alex2172 @ Feb 7 2006, 13:39) *
Спасибо за Ваш ответ, но чтение спецификации и использование осциллографа не удалось избежать smile.gif. Дело в том что скорость чтения данных 30кБ/сек (MMC->LPC2148->USB) вызвана чем то другим. Сейчас разбираюсь.

Может быть дело в драйвере? Работаете под Windows?
Я для тестирования использовал LibUsb-Win32 очень удобно для проверки разных вариантов
я, правда для AT43USB355, использовал для проверки работы конечных точек разных типов,
определения скоростей и т.д.
Charley
Цитата(Alex2172 @ Feb 6 2006, 15:19) *
...
Есть пример USB-MEM для LPC214x эмулирующий диск 16кБ в RAM, видоизменил SCSI для работы с реальной MMC/SD - все ок. Но за один фрейм передается 64 байта, что и следует ожидать. А это всего лишь 30кБ/сек, представляете сколько будет читаться MMC карточка объемом 512Мб.
...


Привет!
А не поделитесь ли исходником или ссылкой???
А то проблема та же PC+MCU+MMC! Только MCU от SiLabs и пока совсем не понимаю, как РС дожен с ним общаться!!!
KolyanV
Цитата(nikkov @ Feb 7 2006, 04:12) *
См. здесь http://electronix.ru/forum/index.php?showtopic=11785
Я тоже пробовал, пока шина свободна, скорость передачи в режиме BULK приближается к максимальной скорости USB шины. Для Interrupt и Isochron-го режимов макс. скорость равна размеру буфера конечной точки*1000 байт/сек.

Если я не ошибаюсь, пакет от конечной точки в FullSpeed BULK режиме по определению не может быть больше 64 байт (в спецификации USB 2.0). Т.е согласно этой формулы физический предел для BULK в FullSpeed (12 Мбит/сек) режиме должен быть 64 кБ/Сек. На практике, за один фрейм может отсылаться множество пакетов.
nikkov
Цитата(KolyanV @ Feb 27 2006, 18:46) *
Если я не ошибаюсь, пакет от конечной точки в FullSpeed BULK режиме по определению не может быть больше 64 байт (в спецификации USB 2.0). Т.е согласно этой формулы физический предел для BULK в FullSpeed (12 Мбит/сек) режиме должен быть 64 кБ/Сек. На практике, за один фрейм может отсылаться множество пакетов.

См. внимательнее, формула справедлива для "Для Interrupt и Isochron-го режимов макс. скорость равна размеру буфера конечной точки*1000 байт/сек", для BULK все зависит от наличия данных для передачи и свободности шины
Alex2172
Цитата(nikkov @ Mar 3 2006, 06:48) *
Cм. внимательнее, формула справедлива для "Для Interrupt и Isochron-го режимов макс. скорость равна размеру буфера конечной точки*1000 байт/сек", для BULK все зависит от наличия данных для передачи и свободности шины


Все верно,
но как сделать чтобы LPC21xx формировал прерывание по приему пакета, а не по окончанию фрейма?
Из Кейловского примера получается так, что при передаче данных скажем из PC в EndPoint (сконфигурированного как Bulk-Only 64B) процессора, прерывание формируется с периодом 1 мс, хотя уверен что шина свободна на 90%.
Alex2172
Цитата(Alex2172 @ Apr 6 2006, 17:29) *
Цитата(nikkov @ Mar 3 2006, 06:48) *

Cм. внимательнее, формула справедлива для "Для Interrupt и Isochron-го режимов макс. скорость равна размеру буфера конечной точки*1000 байт/сек", для BULK все зависит от наличия данных для передачи и свободности шины


Все верно,
но как сделать чтобы LPC21xx формировал прерывание по приему пакета, а не по окончанию фрейма?
Из Кейловского примера получается так, что при передаче данных скажем из PC в EndPoint (сконфигурированного как Bulk-Only 64B) процессора, прерывание формируется с периодом 1 мс, хотя уверен что шина свободна на 90%.

Очень интересно...
Перенес код из Keil на GCC - заработало на нормальной скорости >250кБ/сек (и то ограничение связано со скоростью работы с MMC по SPI).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.