ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
363871 Топик полностью
Саня (23.10.2012 23:48, просмотров: 66) ответил _basile на Можно
Пытаюсь сделать mass storage. Плата отладочная от Starter Kit.  Начальная инициализация USB проходит нормально (использовал свой старый проект, правда там был AT91SAM7 и виртуальный Com-порт), USBViev видит мое устройство и все дескрипторы. При получении первого запроса "Get max LUN" отвечаю "1" (предполагается два логических диска) и сразу после этого следует сброс USB, хотя должен быть первый SCSI пакет. Проверял на XP и семерке. Использую для передачи данных Endpoint 2, предназначена для bulk передач. Но до прерывания для этой точки не доходит. USB порт второй, так разведено на плате. Нашел похожую тему на микрочиповском форуме, но там была проблема в том, что не было ответа на пакет нулевой длины от хоста (после команды Get max LUN). Вот дескрипторы на всякий случай:
/* USB Standard Device Descriptor */
const unsigned char DevDescriptor[] = {
  18,                                /* bLength */
  0x01,                              /* bDescriptorType */
  0x10,0x01,                         /* bcdUSB */
  0x00,                              /* bDeviceClass */
  0x00,                              /* bDeviceSubClass */
  0x00,                              /* bDeviceProtocol */
  64,                                /* bMaxPacketSize0 */
  0x51,0xC2,                          // VID
  0x03,0x17,                         // PID
  0x00,0x01,                          // Version
  0x01,                              /* iManufacturer */
  0x02,                              /* iProduct */
  0x03,                              /* iSerialNumber */
  0x01                               /* bNumConfigurations */
};

/* USB Configuration Descriptor */
/*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
const unsigned char ConfigDescriptor[] = {
/* Configuration 1 */
  0x09,                              /* bLength */
  0x02,                              /* bDescriptorType */
  32,0,                              // wTotalLength =  Configuration + Interface + 2 endpoint
  0x01,                              /* bNumInterfaces */
  0x01,                              /* bConfigurationValue */
  0x00,                              /* iConfiguration */
  0xC0,                              // Self powered
  0x01,                              // bMaxPower 
/* Interface 0, Alternate Setting 0, MSC Class */
  0x09,                              /* bLength */
  0x04,                              /* bDescriptorType */
  0x00,                              /* bInterfaceNumber */
  0x00,                              /* bAlternateSetting */
  0x02,                              /* bNumEndpoints */
  0x08,                              /* bInterfaceClass - Storage*/
  0x06,                              /* bInterfaceSubClass - SCSI*/
  0x50,                              /* bInterfaceProtocol */
  0x00,                              /* iInterface */
/* Bulk In Endpoint */
  0x07,                              /* bLength */
  0x05,                              /* bDescriptorType */
  0x82,                              /* bEndpointAddress */
  0x02,                              /* bmAttributes */
  0x40,0x00,                         /* wMaxPacketSize */
  0,                                 /* bInterval */
/* Bulk Out Endpoint */
  0x07,                              /* bLength */
  0x05,                              /* bDescriptorType */
  0x02,                              /* bEndpointAddress */
  0x02,                              /* bmAttributes */
  0x40,0x00,                         /* wMaxPacketSize */
  0,                                 /* bInterval */
};
Серийный номер - 12 символов, цифровые.