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

 
 
 
Reply to this topicStart new topic
> Mass Storage Device (MSD) на AT91Arm7, Конфигурация USB
IEC
сообщение Jan 31 2008, 08:23
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Прошу прощения, но есть вопрос - может быть кто-нибудь подскажет?
Суть: надо сделать MSD.
USB сконфигурировали как в примере от Atmel с двумя конечными точками (не считая нулевой): 1 на выход, 2 на вход. Результат - комп (WinXP) не определяет устройство!?
Пошли дальше: через монитор USB просмотрели конфигурацию нескольких Flash накопителей - у всех сконфигурирована еще одна точка на дополнительное прерывание. При подключении к своему MSD дополнительной (3-ей) точки комп начал видеть устройство как MSD.
При изучении примера от Keil для LPC2148 обнаружилось следующее: сконфигурированы 2-е конечные точки, но, в чем парадокс, одна и таже точка (№2) сконфигурирована на вход и на выход?! smile3046.gif

Так вот вопрос:
1. Какое минимальное количество точек необходимо для реализации MSD?
2. Если по доке нельзя использовать одну точку на прием и передачу (Bulk), то что же тогда сделано в проэкте Keil?
3. Примеры от Atmel и Keil вообще работают?
Go to the top of the page
 
+Quote Post
vmp
сообщение Jan 31 2008, 08:48
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Interrupt endpoint не нужен.
Рекомендую посмотреть примеры от Cypress, особенно на кит CY4611.
Go to the top of the page
 
+Quote Post
IEC
сообщение Jan 31 2008, 09:23
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Примеры - это хорошо :-)
Вот посмотрел пример от микрчипа для PIC18 - те же самые две точки.
А почему же тогда WinXp не видет?
Конфигурация один в один с примерами. При инициализации доходит до Set_Configure (эту команду хост уже не отправляет) и замолкает на 20 секунд (за этот период он опять пытается прочитать дескриптор конфигурации). После этого говорит, что девайс не определен :-(



Чтобы не быть голословным - приветду пример заполнения структуры конфигурации:

const char cfgDescriptor[] = {
0x09, // CbLength
0x02, // CbDescriptorType
32, // CwTotalLength 2 EP + Control
0x00,
0x01, // CbNumInterfaces
0x01, // CbConfigurationValue
0x00, // CiConfiguration
0x80, // CbmAttributes
100, // CMaxPower

/* Bult-Only data interface discriptor */
0x09, // bLength
0x04, // bDescriptorType
0x00, // bInterfaceNumber
0x00, // bAlternateSetting
0x02, // bNumEndpoints
8, // bInterfaceClass
6, // bInterfaceSubclass - SCSI
0x50, // bInterfaceProtocol - BULK-only transport
0x00, // iInterface

/* Endpoint 1 descriptor */
0x07, // bLength
0x05, // bDescriptorType
0x81, // bEndpointAddress, Endpoint 01 - in
0x02, // bmAttributes BULK
0x40, // wMaxPacketSize
0x00,
0x00, // bInterval

/* Endpoint 2 descriptor */
0x07, // bLength
0x05, // bDescriptorType
0x02, // bEndpointAddress, Endpoint 02 - out
0x02, // bmAttributes BULK
0x40, // wMaxPacketSize
0x00,
0x00, // bInterval
};

Может это поможет разобраться.
Go to the top of the page
 
+Quote Post
IEC
сообщение Feb 1 2008, 08:14
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Неужели никто из участников форума не делал MSD?
Господа, поделитесь опытом!
Go to the top of the page
 
+Quote Post
KAlex
сообщение Feb 1 2008, 10:59
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Цитата(IEC @ Feb 1 2008, 11:14) *
Господа, поделитесь опытом!

Я поставил VNC1L и никаких заморочек. Правда скорость маловата, даже через параллельняй порт.
Go to the top of the page
 
+Quote Post
nameless
сообщение Feb 3 2008, 08:55
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 9-07-04
Пользователь №: 305



2 Kalex: не понятно - причем тут указанный "бездушный" USB-хост? человек на SAM7 делает типа систему сбора, которая сливается как флешка (думаю это именно так и используется).
2 IEC: Пример от атмела, который "USB Framework Core 1.02 + MSD 1.0" ТОЧНО работает, но требует небольших шлифовальных работ.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Feb 3 2008, 20:43
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(IEC @ Jan 31 2008, 12:23) *
Примеры - это хорошо :-)
Вот посмотрел пример от микрчипа для PIC18 - те же самые две точки.
А почему же тогда WinXp не видет?
Конфигурация один в один с примерами. При инициализации доходит до Set_Configure (эту команду хост уже не отправляет) и замолкает на 20 секунд (за этот период он опять пытается прочитать дескриптор конфигурации). После этого говорит, что девайс не определен :-(

У меня 2 EP и всё работает. Мегабайт в секунду качает. Больше USB 1.1 не позволяет. Сам делал. Давно. Тогда ещё примеров не было.
А дескриптор конф-ции у вас похоже правильный. Думаю не в нём дело. Хотя вот интересно. XP обычно конфигурацию за 2 приёма читает (м.б. с SP1 и начиная), а W98 за раз - более килобайта длину запрашивает. А XP 1й раз 9 байт читает - чтоб wTotalLength получить. 2й раз, зная длину, всю читает. Вы оба эти запроса видите? И с помощью чего смотрите? Киньте сюда лог - может там, что видно будет.
Go to the top of the page
 
+Quote Post
Vitaly_N
сообщение Feb 4 2008, 03:41
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 30-11-07
Пользователь №: 32 839



У меня сейчас похожая проблема. Процессор AT91SAM7A3. Заливаю в него экзампл MSD от кайла. Втыкаю во все компы в конторе - работает на всех, кроме нескольких самых новых из последней партии. "Устройство не опознано" - не прошла энумерация. Начнаю грешить на железо - провода, разъёмы, разводку... Беру экзамплы от атмела (SAM-BA, чисто энумерация, HID и CDC) - если заливаю готовые бинарники, то всё работает на всех компах! Если же пытаюсь сам скомпилировать из сорцов, то нихрена не работает. Играюсь с опциями компилятора - нифига не меняется. Хоть в арм-моде, хоть в тумбе, с частотами (коэффициентами PLL) игрался - нихрена не помогает. Не могу добиться того же результата, что и с готовым бинарником!
Go to the top of the page
 
+Quote Post
IEC
сообщение Feb 4 2008, 07:30
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Цитата(galjoen @ Feb 3 2008, 23:43) *
У меня 2 EP и всё работает. Мегабайт в секунду качает. Больше USB 1.1 не позволяет. Сам делал. Давно. Тогда ещё примеров не было.
А дескриптор конф-ции у вас похоже правильный. Думаю не в нём дело. Хотя вот интересно. XP обычно конфигурацию за 2 приёма читает (м.б. с SP1 и начиная), а W98 за раз - более килобайта длину запрашивает. А XP 1й раз 9 байт читает - чтоб wTotalLength получить. 2й раз, зная длину, всю читает. Вы оба эти запроса видите? И с помощью чего смотрите? Киньте сюда лог - может там, что видно будет.


Действительно по протоколу и в реальности все так и работает, Хост отвисает после второго запроса.
Где то на форуме встречал, что человек жаловался на параметр CbmAttributes (описание режима питания). Жаловался, что со значением 0хС0 не определялся, а с 0х60 - легко. Но это не соответствует доке, т.к. 7 бит должен быть всегда установлен. Но и это предположение проверил - не работает.
Сейчас пока перешли на три end point. Когда запустим девайс, тогда будем пытаться разобраться с реалиями.
Интересно, что запросы на третью точку не идут. Даже у Flash-памяти.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Feb 4 2008, 12:02
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(IEC @ Feb 4 2008, 10:30) *
Действительно по протоколу и в реальности все так и работает, Хост отвисает после второго запроса.

Ну это у вас скорее всего SetAddress не проходит. Щас новые южные мосты пошли. Особенно те, которые с процессором AMD. В частности чипсет VIA (у меня такой есть). Так там эти китайцы на все стандарты наплевали. Мой full speed HID через него 500 кбайт/сек качает, а по стандарту должен токо 64. И другие глюки замечены. И SetAddress мне из-за него изменить пришлось - подглючивал с ним. Я иногда перестал успевать SETUP из EP0 прочесть, а туда уже IN1 приходил (упр-ее чтение). 2 события одновременно получатся стало - не рассчитывал я на это т.к. раньше такого не было.
Цитата(IEC @ Feb 4 2008, 10:30) *
Где то на форуме встречал, что человек жаловался на параметр CbmAttributes (описание режима питания). Жаловался, что со значением 0хС0 не определялся, а с 0х60 - легко. Но это не соответствует доке, т.к. 7 бит должен быть всегда установлен. Но и это предположение проверил - не работает.

Полно китайских флешек встречал, которые пишут, что они с независимым питанием (bmAttributes=0x40), а от USB 0 мА потребляют. А вообще-то я рекомендую MaxPower=98мА ставить (<100 мА).
Цитата(IEC @ Feb 4 2008, 10:30) *
Сейчас пока перешли на три end point. Когда запустим девайс, тогда будем пытаться разобраться с реалиями.
Интересно, что запросы на третью точку не идут. Даже у Flash-памяти.

Так 3-я - это Interrupt In. Она только для готовностей - типа дискету вытащили-вставили.
Go to the top of the page
 
+Quote Post
IEC
сообщение Feb 4 2008, 13:34
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Ну наконец-то, хоть кто-то рассказал, зачем нужна третья точка :-)
СПАСИБО! ОГРОМНОЕ!
А по поводу MaxPower - это критично? Если я ему вообще поставил 200 мА, это может повлиять на определяемость девайса?
Go to the top of the page
 
+Quote Post
IEC
сообщение Feb 4 2008, 15:08
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Отклонение от темы: в процессе поиска ответа на вопрос нашел книгу в эл. виде
"USB Mass Storage. Designing and Programming Devices and Embedded Hosts" Jan Axelson
Выложить на FTP не получилось, поэтому для жилающих даю ссылку: http://www.pcports.ru/Library.php
Go to the top of the page
 
+Quote Post
galjoen
сообщение Feb 4 2008, 16:17
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(IEC @ Feb 4 2008, 16:34) *
А по поводу MaxPower - это критично? Если я ему вообще поставил 200 мА, это может повлиять на определяемость девайса?

Если USB порт имеет 100 мА нагрузочной способности, то не подключат. Только 2 варианта бывает: 100 и 500 мА. 100 мА имеют КПК, некоторые ноутбуки, и все хабы без внешнего питания.
Go to the top of the page
 
+Quote Post
IEC
сообщение Feb 6 2008, 07:57
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Всем спасибо за ответы.
Интересно, что когда в одном устройстве скрестили два интерфейса (HID Keyboard и MSD) в MSD пришлось отключить третью точку, иначе девайс не определялся.
А с одним интерфейсом MSD девайс определяется только на трех точках.
ПАРАДОКС!
Где-то недоразобрались.
Go to the top of the page
 
+Quote Post

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

 


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


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