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

 
 
> 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
 
Start new topic
Ответов
IEC
сообщение Jan 31 2008, 09:23
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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

Сообщений в этой теме


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

 


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


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