Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Максимальный размер блока для чтения с usb


Автор: nullpoint 17.2.2015, 21:12
Собственно сабж. Какой максимальный размер блока данных, которые можно считать/записать за раз с/на usb флешки по протоколу Bulk-only Mass Storage Device?

Автор: tzirechnoy 18.2.2015, 11:11
А что Вы понимаете под "одним разом".

Автор: borisbn 18.2.2015, 12:43
ЕМНИП, по спецификации USB 2.0 размер пакета равен 512 байт, а в USB 3.0 - 1024 байта, но все драйвера контроллера USB на материнке умеют буферизировать пакеты и вы можете заказывать у устройства достаточно большой размер данных. Насколько большой - зависит от реализации драйверов

Автор: nullpoint 18.2.2015, 12:46
tzirechnoy, за один запрос

Например, где-то видел для usb дисковода, там в режиме OHCI за один запрос передавалось 4Кб, а в EHCI 16Кб, т.е. размер сектора диска помноженный соответственно на 2 и на 8.

borisbn, как раз таки и пишу драйвер для микроконтроллера.

Автор: tzirechnoy 18.2.2015, 13:12
Цитата
tzirechnoy, за один запрос


За один, простите, запрос кого к кому?

У меня вот один запрос к команде dd вполне можэт прочитать 4 тэрабайта по USB mass storage bulk transfer с жёсткого диска соответствующего размера.

Автор: nullpoint 18.2.2015, 14:43
tzirechnoy, я только начинаю разбираться с написанием драйверов и поэтому могу неправильно называть вещи. За одну транзакцию передачи или приема.

Автор: tzirechnoy 18.2.2015, 15:55
Цитата
За одну транзакцию передачи или приема.


Совершэнно на каждом уровне есть что-нибудь, что можно назвать одной транзакцыей. Собственно, ничто не мешает мне назвать транзакцыей вот тот вызов dd, с 4 тэрабайтами данных.

Я, честно говоря, не знаю точно, чем тебе можно помочь. У этого протокола есть несекретная часть -- та, что описана в USB Mass Storage Bulk-only transport. Если бы ты её прочитал и понял -- ты бы говорил сейчас не про "одну транзакцыю", а про что-нибудь более конкретное, и у нас был бы предмет для обсуждения.

В общем, для планов программирования USB Mass storage со стороны микроконтроллера, тебе надо что-то сделать, чтобы понять хотя бы эту спецыфикацыю.

Что -- не знаю, поскольку понятия не имею, почему ты её не прочитал или непонял -- я не знаю, но, думаю, здесь какой-то вопрос с пониманием USB-стэка как такового или дажэ программирования (а, возможно, и проблемы с чтением). Возможно, впрочем, что проблемы с поиском.

До того, как ты избавишься от этой проблемы, которая не позволяет тебе её понять -- я как-то не вижу никакой для тебя возможности извлечь пользу из любого конкретного числа про любой конкретный уровень, которое мы тебе могли бы назвать.


Возможно, впрочем, что ты не планируешь программировать микроконтроллер, тогда, возможно, тебе и не надо понимать никаких спецыфикацый -- но, опять жэ, любое конкретное число будет безсмысленным. Впрочем, в таком случае, возможно, если ты скажэшь задачу, для которой тебе захотелось узнать это число -- то мы сможэм как-нибудь помочь с этой задачей.

Автор: nullpoint 18.2.2015, 21:37
tzirechnoy, не отрицаю что в дебрях usb стека я не ориентируюсь, но как мне кажется вы тоже не совсем (а может и совсем) не понимаете (или объясняете так, что я вас не понимаю) то о чем говорите. Вот так вам будет понятней что за транзакцию я имею ввиду?
user posted image

Автор: tzirechnoy 19.2.2015, 00:35
Да, так понятнее (хотя видеть этот рисунок по-русски, конечно, несколько странно).

Максимальный размер этого пакета ("транзакцыи") устанавливается самим девайсом (в дескрипторе конфигурацыи endpoint), для USB1 (low speed или full speed) стандарт вводит ограничение этого максимума в 64 байта, для USB2 (high speed) -- 512 байт.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)