|
|
  |
LPC2478 mass storage |
|
|
|
Oct 23 2012, 15:53
|
Участник

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

|
Пытаюсь запустить mass storage на отладочной плате StarterKit c LPC2478 Начальная стандартная инициализация проходит успешно. При получении запроса Get max LUN отвечаю 1 (устройство с двумя дисками), но после этого происходит сброс USB, хотя вроде должен быть первый SCSI запрос (так происходит в рабочем кардридере). До запроса Get max LUN в регистре REALIZED_EP биты для Endpoint 2 установлены, сразу после него - сброшены. Для передачи данных используется Endpoint 2, на прием и на передачу. Используется второй USB порт. Вот дескрипторы: CODE /* 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 */ 0x02, /* bEndpointAddress */ 0x02, /* bmAttributes */ 0x40,0x00, /* wMaxPacketSize */ 0, /* bInterval */ /* Bulk Out Endpoint */ 0x07, /* bLength */ 0x05, /* bDescriptorType */ 0x82, /* bEndpointAddress */ 0x02, /* bmAttributes */ 0x40,0x00, /* wMaxPacketSize */ 0, /* bInterval */ };
Сообщение отредактировал Chameleon - Oct 23 2012, 15:54
|
|
|
|
|
Oct 23 2012, 20:04
|
Участник

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

|
Да, Device
|
|
|
|
|
Oct 28 2012, 16:50
|
Участник

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

|
Нашел пример от кейла, не работает точно также. Инициализация проходит, а после запроса Get Max LUN происходит сброс. По снифферу USB вижу, что компьютер пытается отправить превый SCSI запрос, но мое устройство его не получает.
Кто-нибудь запускал пример Usb memory от Кейла?
Сообщение отредактировал Chameleon - Oct 28 2012, 16:52
|
|
|
|
|
Oct 29 2012, 16:25
|
Местный
  
Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197

|
Цитата(Chameleon @ Oct 28 2012, 20:50)  Кто-нибудь запускал пример Usb memory от Кейла? Пробывал запускать пока только на LPC1768 -> работает если питание платы не от USB. Даже пока не знаю с чем это связано!
--------------------
|
|
|
|
|
Oct 30 2012, 22:32
|
Участник

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

|
Вроде заработало, сделал два диска - один остался образ в ОЗУ, второй - DataFlash AT45BD32. Теперь Виндовс не хочет форматировать диск, пишет "Не удается завершить форматирование." Датафлеш чистая, все FF. В отладчике смотрю, что пытается писать в нулевой сектор - совсем не образ нулевого сектора. Причем данные меняются от попытки к попытке. Может влиять, что объем датафлеши 4Мб?
Запись в датафлеш вручную проверял, все правильно.
Кто-нибудь с таким сталкивался?
|
|
|
|
|
Nov 1 2012, 09:19
|
Участник

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

|
В общем победил. Скорость чтения ~350Кб/сек. Скорость записи ~40Кб/сек. Для DATAFLASH и должно так мало быть?
|
|
|
|
|
Nov 1 2012, 11:55
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Chameleon @ Nov 1 2012, 11:19)  Скорость чтения ~350Кб/сек. Как-то медленно, такую скорость и АВР выдаст. Цитата(Chameleon @ Nov 1 2012, 11:19)  Скорость записи ~40Кб/сек. Для DATAFLASH и должно так мало быть? Да, где-то так и получается: запись страницы - 20-50 миллисекунд, размер страницы 0,5 кБ. Так и выходит.
|
|
|
|
|
Nov 1 2012, 12:47
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Сергей Борщ @ Nov 1 2012, 14:28)  А у нее же два входных буфера. Если использовать их по очереди и заполнять следующий пока пишется предыдущий, нельзя ли удвоить скорость записи? Удвоить за счёт буфера - вряд ли. Допустим скорость записи в буфер по spi - 500 кБ/сек. Тогда запись в буфер - 1 мс. Всё равно ждать придётся... Может скорость можно повысить за счёт предварительного стирания блоков-секторов и записывать без стирания. Но стирает она тоже не быстро.
|
|
|
|
|
Nov 1 2012, 13:38
|
Участник

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

|
QUOTE (_Артём_ @ Nov 1 2012, 14:55)  Как-то медленно, такую скорость и АВР выдаст. Это наверно потому что без DMA и двойного буферирования по USB. Посмотрел по интернету, на Full speed вроде 600-700Кб максимально достижимая скорость чтения. У меня это все равно будет вроде как хранилище настроек, Mass storage только для удобства доступа.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|