реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Както задать ограничение на количество блоков в SCSI командах READ10/WRITE10?, LPC 4357 USB карт реадер SCSI USB High Speed
Neumeyka
сообщение Aug 22 2014, 19:21
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 21-07-08
Пользователь №: 39 115



Здравствуйте!
Есть устройтсво на контроллере LPC 4357, которое выполняет функции microSD карт ридера.

Тоесть вставляем microSD карту в устройство, затем подключаем его через USB к компьютеру.
И в компе появляется Removable Disk (USB High Speed).

Проблема в следующем, при общении с устройством через SCSI команды, ОС Windows иногда присылает комаду READ10/WRITE10 с количеством блоков более 20,
но мое устройство может оперировать буфером максимум в 20 блоков (не хватает памяти в контроллере, 1 блок = 512 байт).

Вопрос:
Както можно задать ограничение на количество блоков в SCSI командах READ10/WRITE10?

Может в конфигурационных USB дескрипторах есть поле где указано максимальное колическто Bulk или байт в одной транзакции), либо при ответах на SCSI комадны IQUERY, CAPACITY, MODE_SENCE, есть поле где это ограничение можно задать..... но чет я там ниче такого не увидел sad.gif

Спасибо!!!

Сообщение отредактировал Neumeyka - Aug 22 2014, 19:24
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 23 2014, 01:05
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Neumeyka @ Aug 23 2014, 01:21) *
Проблема в следующем, при общении с устройством через SCSI команды, ОС Windows иногда присылает комаду READ10/WRITE10 с количеством блоков более 20,
но мое устройство может оперировать буфером максимум в 20 блоков (не хватает памяти в контроллере, 1 блок = 512 байт).
Как только буфер заполнился, отправляйте его по USB. После отправки буфера, снова заполняйте его данными из носителя и так пока не прочтете все, что требует хост. После отправляете статус. Простой и надежный алгоритм. Я на МК с 4К оперативки такое проделывал. Все работало.

Алгоритм можно ускорить. Сделать два (три, четыре, пять...) буфера. Пока один отправляется по USB, другой заполняется данными носителя.


--------------------
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 23 2014, 06:15
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



вот что говорит стандарт:
что за один микрофрайм может быть не более 14 успешных балк трансферов.

с другой стороны балк не является синхронным протоколом обмена, и вы имеете права выдавать блоки как можете. Поэтому чтобы разогнаться на максимум вам больше 14 блоков не надо, тогда их можно обновлять раз в микрофрайм, а реально проц гораздо быстрее USB, так что можно обойтись гораздо меньшим числом блоков, заполняя как предложили их по очереди
Go to the top of the page
 
+Quote Post
Neumeyka
сообщение Aug 23 2014, 08:42
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 21-07-08
Пользователь №: 39 115



Цитата(prottoss @ Aug 23 2014, 07:05) *
Как только буфер заполнился, отправляйте его по USB. После отправки буфера, снова заполняйте его данными из носителя и так пока не прочтете все, что требует хост. После отправляете статус. Простой и надежный алгоритм. Я на МК с 4К оперативки такое проделывал. Все работало.

Алгоритм можно ускорить. Сделать два (три, четыре, пять...) буфера. Пока один отправляется по USB, другой заполняется данными носителя.

А если от хоста будет команда WRITE10 с большим количеством блоков. Возможно я не буду успевать скидывать буфер на SD.

Спасибо.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 23 2014, 10:35
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Neumeyka @ Aug 23 2014, 14:42) *
Возможно я не буду успевать скидывать буфер на SD.
Будете. У всех ОС достаточно большой таймаут на ожидание - порядка нескольких секунд.


--------------------
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 23 2014, 18:29
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а разве нельзя отвечать что вы заняты на балк посылки? это же не изохрон...
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 24 2014, 00:43
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Golikov A. @ Aug 24 2014, 00:29) *
а разве нельзя отвечать что вы заняты на балк посылки? это же не изохрон...
Конечно можно и даже нужно. Но это для драйвера USB на хосте, а у файловой ОС полюбому таймауты.


--------------------
Go to the top of the page
 
+Quote Post
controller_m30
сообщение Aug 24 2014, 07:54
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



Такое мнение.

Есть проект картридера на MSP430. Правда скорость FullSpeed. Буфер EndPoint_1 - всего 64 байта.
Когда Хост запрашивает блок данных SCSI_READ10 в количестве 8 блоков (больше почему-то не запрашивал за раз), то контроллер считывает с карты только один сектор (512 байт) и кусочками по 64 байта "скармливает" в EP1. Когда один сектор "скормлен" - скачивает с карты следующий сектор, и потихоньку отправляет. Никаких параллельных процессов с применением DMA не использовалось (хотя DMA есть) - всё последовательно. И Хост ждёт порций по 64 байта и по 512 байт без проблем.
Т.е. картридер даже при таких мизерных ресурсах работает. Вопрос только в скорости обмена - песенка 3 Мб вычитывалась с карты памяти секунд 30 biggrin.gif Но запускалась на проигрывание в плеере нормально.

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

Сообщение отредактировал controller_m30 - Aug 24 2014, 09:20
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 24 2014, 14:00
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(controller_m30 @ Aug 24 2014, 13:54) *
Такое мнение.
+1. Вполне имеющий право на жизнь алгоритм. Тоже такое делал.


--------------------
Go to the top of the page
 
+Quote Post
meloden2
сообщение Aug 29 2014, 18:04
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 343
Регистрация: 1-07-12
Из: СПб - Китай - Гонг Конг
Пользователь №: 72 579



Dimension
75.2(L)*31.7(W)*16.4(H)mm

Weight
22g

Operation Mode Switch
●USB mode
●Wi-Fi mode

System Power Source
USB mode:
●Powered USB port
Self-Power mode:
●Internal Li-Polymer Battery

Storage Capacity
Up to 32GB MicroSD memory card

Support Device Connections
Up to 10 device connections, or stream videos 5 devices

Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Поиск по складам: http://search.venicegrp.ru/ru/search.html
Производство печатных плат и контрактное производство: http://www.venicegrp.ru/menu/production.html
info@venicegrp.ru
Санкт-Петербург / Гонг Конг / Китай
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 07:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01438 секунд с 7
ELECTRONIX ©2004-2016