|
Бардак с at91sam7s64, Не работает норм ЮСБ |
|
|
|
Sep 9 2008, 12:50
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
Народ не работает ЮСБ. Скачал с сайта Атмела примеры версии 1.4 и попробовал вшить usb mass storage device. После этого плата определяет как просто device которому нужны драйвера и все(пробовал на 2000 и на ХР). Пробовал также версии которые идут с ИАР 5.2(по идеи тот же 1.4) а также версия 1.3. Все точно так же. Уже не знаю че делать. Устройство нормально не определяется и все. (тока один раз я нашел бинарник с GCCшного проекта поидеи который вшился и заработал, тоесть определил платку как масс сторедж с 0 байтов вообще и 0 байтов свободного места. это устройство нельзя отформатировать) Задача Мне надо организовать обмен данными между ПК и МК. Примерно 600 байт туда и обратно раз в милисекунду гдето(лучше чаще). Думал сделать через масс сторедж, дабы с ПК писало в какойто файл, а читало с другого. Выделить под эти файлы допустим по 2 кБ в РАМ(для с64 всего 16кб РАМ) и спокойно себе писать в файл с ПК и читать область памяти в проге на МК. Или как вариант написать драйвера под винду для своего девайса и через них уже както общатся. Хотелось бы услышать какието идеи или замечания как это сделать и если кому не сложно, попробуйте вшить иаровский пример - будет ли он у вас работать. Если будет, то пришлите ссылочку откуда скачали или же сам проект. Буду премного благодарен за инфу
|
|
|
|
|
Sep 9 2008, 13:21
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
Цитата(aaarrr @ Sep 9 2008, 16:10)  Во-первых, действительно ли оно у Вас просит драйверы, или говорит "unknown device"?
Во-вторых, 600 байт/мс туда и обратно через шину элементарно не пройдут. Пишет вот так: USBDevice "Для устройства не установлены драйверы. (Код 28) Нажмите "Переустановить" для переустановки драйверов этого устройства." Я понял вопрос, я вшивал core project он сразу просит установить драйвера,а этот в 2000 у меня не просит, а на ХР говорит что устройство сконфигурировано неправильно или чтото в таком духе. Почему 600 байт/мс не пройдут? Скорость для фулл спид 12Мбит/сек=12кбит/мс вроде правильно считаю, ясно что такой скорости не будет, но 1кбит/мс думаю, что точно должно тянуть. Плюс еще хотел спросить а то с даташита к at91sam7s64 не ясно: у UDP есть свои встроенные буфера FIFO или как в USARTе они работают с контроллером ПДП или их вообще нада назначать с РАМ в проге как какието масивы например
|
|
|
|
|
Sep 9 2008, 13:34
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(SolarA @ Sep 9 2008, 17:21)  Пишет вот так: USBDevice "Для устройства не установлены драйверы. (Код 28) Нажмите "Переустановить" для переустановки драйверов этого устройства." Я понял вопрос, я вшивал core project он сразу просит установить драйвера,а этот в 2000 у меня не просит, а на ХР говорит что устройство сконфигурировано неправильно или чтото в таком духе. Понятно. Видимо нужно сказать спасибо кривым примерам. Цитата(SolarA @ Sep 9 2008, 17:21)  Почему 600 байт/мс не пройдут? Скорость для фулл спид 12Мбит/сек=12кбит/мс вроде правильно считаю, ясно что такой скорости не будет, но 1кбит/мс думаю, что точно должно тянуть. 1кбит/мс будет, а 4.8кбит/мс в обе стороны не будет. Цитата(SolarA @ Sep 9 2008, 17:21)  Плюс еще хотел спросить а то с даташита к at91sam7s64 не ясно: у UDP есть свои встроенные буфера FIFO или как в USARTе они работают с контроллером ПДП или их вообще нада назначать с РАМ в проге как какието масивы например В даташите все предельно ясно: у UDP есть свои FIFO и нет PDC.
|
|
|
|
|
Sep 9 2008, 14:02
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
С UDP понял. Как собсно и с примерами. Может у когото есть правильный пример инициализации для mass storage device?
По поводу скорости: я указал самый худший вариант. На самом деле там большую часть времени будет к ПК 270 байтов, с ПК на МК 300 байтов. Думаю будет успевать.
Сразу такой вопрос: можно ли организовать mass storage device с памятью в РАМ? Я ща копаюсь в исходниках недопримера там вроде выставляются адрес начала памяти и ее количество. Но не совсем понятно как оно все работает.
Плюс забыл сказать что тот бинарник с GCCшного примера пользует одинаковые библиотеки с моим проектом. Отсюда напрашивается такие вопросы: 1. Не из-за компилятора ли у меня не работает пример? 2. Не из-за того ли, что у меня не атмеловский evaluation board, а какойто полусамопальный наш(без кнопок, памяти, дисплея и т.д.), не работает пример? (По типу, он лезет в СДРАМ которой нету и поэтому както бочит)
Кстати толькошо нашел заглушку (если чегото там нету то прога не доходит до инициализации ЮСБ), убал ее. Теперь у меня неизвестное ЮСБ запоминающее устройство для которого в 2000 нада поставить драйвера, а ХР попросту говорит что оно сконфигурировано не правильно. Но зато уже определяет Vendor ID, Product ID и еже с ними. Кстати там есть 2 такие строки
// Configure baud rate AT91C_BASE_DBGU->DBGU_BRGR = BOARD_MCK / (115200 * 16); // Enable receiver and transmitter AT91C_BASE_DBGU->DBGU_CR = AT91C_US_RXEN | AT91C_US_TXEN;
Без которых устройство не определяется. Ума не приложу какое отношение DBGU имеет к UDP
|
|
|
|
|
Sep 9 2008, 14:10
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(SolarA @ Sep 9 2008, 17:56)  Может у когото есть правильный пример инициализации для mass storage device? Едва ли кто-то станет делиться правильным примером бесплатно, увы  Цитата(SolarA @ Sep 9 2008, 17:56)  По поводу скорости: я указал самый худший вариант. На самом деле там большую часть времени будет к ПК 270 байтов, с ПК на МК 300 байтов. Думаю будет успевать. В таком виде должно. Только учтите, что нагрузку на процессор это даст довольно заметную. Цитата(SolarA @ Sep 9 2008, 17:56)  Сразу такой вопрос: можно ли организовать mass storage device с памятью в РАМ? Можно, почему нет? Цитата(SolarA @ Sep 9 2008, 17:56)  1. Не из-за компилятора ли у меня не работает пример? 2. Не из-за того ли, что у меня не атмеловский evaluation board, а какойто полусамопальный наш(без кнопок, памяти, дисплея и т.д.), не работает пример? (По типу, он лезет в СДРАМ которой нету и поэтому както бочит) 1. Это Вам должно быть виднее. 2. Насколько я помню, для атмеловского примера для S64 нужен только исправный процессор с правильным кварцем. Цитата(SolarA @ Sep 9 2008, 18:02)  Ума не приложу какое отношение DBGU имеет к UDP Если выключить DBGU, то процессор просто зависнет при попытке отправить через него диагностику.
|
|
|
|
|
Sep 9 2008, 14:17
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
звучит тупо-но я чтото сделал и у меня нормально определилось устройство. Пока у него 0 байт всего буду копать дальше. Спасибо за поддержку
|
|
|
|
|
Sep 9 2008, 15:33
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
Цитата(SolarA @ Sep 9 2008, 17:17)  звучит тупо-но я чтото сделал и у меня нормально определилось устройство. Пока у него 0 байт всего буду копать дальше. Спасибо за поддержку  Уже продолжая тему, может комуто сгодится, я подправил описание в проекте, поетому он у меня и запустился. Теперь мучаю память, пока не получается ничего выделить, и у меня висит дисковый накопитель размером 0 байт. Решил переписать для СДРАМ начальный адрес как кусок РАМ длинной в ФФФ
|
|
|
|
|
Sep 10 2008, 09:59
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
Не получается выделить память. Пишу такое : MEDSdram_Initialize(&(medias[numMedias]),0x00203000,0x0FFF); LUN_Init(&(luns[numMedias]), &(medias[numMedias]), buffer, 0, 0x0FFF, BLOCK_SIZE); numMedias++; где void MEDSdram_Initialize(Media *media, unsigned int baseAddress, unsigned int size) { trace_LOG(trace_INFO, "I: Sdram init\n\r"); // Initialize media fields media->write = MEDSdram_Write; media->read = MEDSdram_Read; media->handler = 0; media->flush = 0; media->baseAddress = baseAddress; media->size = size; media->state = MED_STATE_READY; media->transfer.data = 0; media->transfer.address = 0; media->transfer.length = 0; media->transfer.callback = 0; media->transfer.argument = 0; } void LUN_Init(MSDLun *lun, Media *media, unsigned char *buffer, unsigned int baseAddress, unsigned int size, unsigned int blockSize) { unsigned int logicalBlockAddress = (size / blockSize) - 1; trace_LOG(trace_INFO, "I: LUN init\n\r"); // Initialize LUN lun->media = media; lun->baseAddress = baseAddress; lun->size = size; lun->blockSize = blockSize; lun->readWriteBuffer = buffer; // Initialize request sense data lun->requestSenseData.bResponseCode = SBC_SENSE_DATA_FIXED_CURRENT; lun->requestSenseData.isValid = 1; lun->requestSenseData.bObsolete1 = 0; lun->requestSenseData.bSenseKey = SBC_SENSE_KEY_NO_SENSE; lun->requestSenseData.bReserved1 = 0; lun->requestSenseData.isILI = 0; lun->requestSenseData.isEOM = 0; lun->requestSenseData.isFilemark = 0; lun->requestSenseData.pInformation[0] = 0; lun->requestSenseData.pInformation[1] = 0; lun->requestSenseData.pInformation[2] = 0; lun->requestSenseData.pInformation[3] = 0; lun->requestSenseData.bAdditionalSenseLength = sizeof(SBCRequestSenseData) - 8; lun->requestSenseData.bAdditionalSenseCode = 0; lun->requestSenseData.bAdditionalSenseCodeQualifier = 0; lun->requestSenseData.bFieldReplaceableUnitCode = 0; lun->requestSenseData.bSenseKeySpecific = 0; lun->requestSenseData.pSenseKeySpecific[0] = 0; lun->requestSenseData.pSenseKeySpecific[0] = 0; lun->requestSenseData.isSKSV = 0; // Initialize inquiry data lun->inquiryData = &inquiryData; // Initialize read capacity data STORE_DWORDB(logicalBlockAddress, lun->readCapacityData.pLogicalBlockAddress); STORE_DWORDB(blockSize, lun->readCapacityData.pLogicalBlockLength); } По идеи после этого у меня в устройстве должно появится 4095 байт места, которое я выдрал с РАМ Но этого нету. Подскажите пожалуйста где не правильно Цитата(uriy @ Sep 9 2008, 19:21)  Тогда зачем было писать в названии ветки что в SAM7S64 не работает USB раз вы не определили точно в чем проблема в железе или в софте? Кстати через какой интерфейс вы прошивали контроллер? На 99,9% уверен что через USB с помощью SAM-BA. Это еще раз подтверждает что USB работает. Где-то у меня была реализация Mass Storage. Там в примере уже был текстовый файл на диске. Размер диска 16 Кбайт кажется был. Если найду выложу. Выложи пожалуйста. С названием ветки протупил  , но ее уже вроде нельзя изменить. Прошиваю через usb с помощью ИАР, или через SEGGER J-FLASH. Отлаживаю Jet link 5
|
|
|
|
|
Sep 10 2008, 10:54
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
Почему мало? Вы имеете ввиду что его винда определит как 0 или что мне его мало для нужд? Мне хватить должно с головой. А насчет винды, я по крайней мере не слышал о какихто ограничениях в размере диска.
|
|
|
|
|
Sep 10 2008, 11:38
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
МДА... я уже сам прогуглил. Получается что действительно может не хватать. Ща под линуксовые ФС попробую найти минимальный размер. Такого я честно говоря не ожидал.
|
|
|
|
|
Sep 10 2008, 12:52
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
Цитата(aaarrr @ Sep 10 2008, 14:44)  По-хорошему Вам нужно сделать программный эмулятор диска, а реальную память отдавать только под область данных. Тоесть программный эмулятор? Со стороны ПК чтобы была видна флешка допустим на 16МБ, а реально использовать только 4 кб? Я пробовал выставлять границы памяти которой нету, тоесть 256 кб. ХР видит устройство с 0 байт и предлагает его отформатировать на 256 кб, ФАТ, стандартный размер кластера. Когда пробую до конца формат не доходит и мне пишет "не удалось закончить форматирование" Такое же происходит если я выделяю 4кб. ХР видит 0, предлагает форматнуть на 4 кб и тоже "не удалось закончить форматирование". Есть еще мысль что у меня както не правельно прописано само общение с девайсом(тоесть функции чтения/записи), но с другой стороны все вплоть до инициализации места доходит, плюс функции чтения/записи написаны вроде нормально. Я уже склоняюсь к написанию драйверов для устройства. И таким образом уже подключать МК к ПК. Конечно не уверен что это проще и быстрее. По идеи это можно будет сделать
|
|
|
|
|
Sep 10 2008, 12:58
|
Знающий
   
Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454

|
ИМХО - Явно какие-то проблемы с дескрипторами. Или Big/Little Endianess. Или pragma pack - некорректен. Тут у меня полный проект для тестирования скорости обмена и программатор на основе АТ90SAM7S http://njnmnp.narod.ru/proj/proj.htmlТут моя статейка о принципах разработки устройств для интерфейса USB и достижения максимальной скорости обмена http://njnmnp.narod.ru/note/note.htmlИМХО - работать через Mass Storage можно, но довольно сложно. На Телесистемах SM описывал как это делать.
|
|
|
|
|
Sep 10 2008, 13:20
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(SolarA @ Sep 10 2008, 16:52)  Тоесть программный эмулятор? Со стороны ПК чтобы была видна флешка допустим на 16МБ, а реально использовать только 4 кб? Примерно так. То есть динамически формировать BPB, FAT, главную запись. Цитата(SolarA @ Sep 10 2008, 16:52)  Я уже склоняюсь к написанию драйверов для устройства. И таким образом уже подключать МК к ПК. Конечно не уверен что это проще и быстрее. По идеи это можно будет сделать Проще и быстрее, если достаточно глубоко знаете интерфейс USB.
|
|
|
|
|
Sep 10 2008, 13:36
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
Цитата(misyachniy @ Sep 10 2008, 15:58)  ИМХО - Явно какие-то проблемы с дескрипторами. Или Big/Little Endianess. Или pragma pack - некорректен. Тут у меня полный проект для тестирования скорости обмена и программатор на основе АТ90SAM7S http://njnmnp.narod.ru/proj/proj.htmlТут моя статейка о принципах разработки устройств для интерфейса USB и достижения максимальной скорости обмена http://njnmnp.narod.ru/note/note.htmlИМХО - работать через Mass Storage можно, но довольно сложно. На Телесистемах SM описывал как это делать. А можно ссылку прямую на тот тред. Где описывали как работать через Mass Storage. А то в этих делах я новичок, хотелось бы посмотреть че и как делали до меня с какими-то пояснениями. А то драйвера писать для меня наверное будет еще сложнее чем сделать Mass Storage. Плюс с этим масс сторедж еще не ясно как с МК читать файлы, что будут в памяти И что такое pragma pack?
Сообщение отредактировал SolarA - Sep 10 2008, 13:58
|
|
|
|
|
Sep 10 2008, 14:31
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(SolarA @ Sep 9 2008, 16:50)  Задача Мне надо организовать обмен данными между ПК и МК. Примерно 600 байт туда и обратно раз в милисекунду гдето(лучше чаще). Думал сделать через масс сторедж, дабы с ПК писало в какойто файл, а читало с другого. Выделить под эти файлы допустим по 2 кБ в РАМ(для с64 всего 16кб РАМ) и спокойно себе писать в файл с ПК и читать область памяти в проге на МК. У меня была такая же мысль (MassStorage я сделал), но избавится от кэширования файлов виндой мне не удалось. Т.е. из устройства только первый раз читаются данные, а второй и последующие разы винда их кэширует (к устройству вообще не обращается) и из файла читается одно и тоже. М.б. кто-то знает как у винды кэширование отключить? Цитата(SolarA @ Sep 9 2008, 16:50)  Или как вариант написать драйвера под винду для своего девайса и через них уже както общатся. Это конечно пройдёт, но у USB 1.1 max 16 пакетов по 64 байта (в обе стороны) за кадр = 1 мс (+ ещё 1 пакет через контрольный канал).
|
|
|
|
|
Sep 10 2008, 14:36
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
Цитата(galjoen @ Sep 10 2008, 17:31)  Это конечно пройдёт, но у USB 1.1 max 16 пакетов по 64 байта (в обе стороны) за кадр = 1 мс (+ ещё 1 пакет через контрольный канал). Мне по скорости нада 660 байт/мс. Так что мне должно хватать. Насчет кэширования это еще мне один подводный камень. Я уже теперь и не знаю что делать. Наверное нада не парится и садится писать-искать драйвера. Подожду может еще кто седня чего посоветует с масс сторедж, а завтра наверное нада будет разбиратся с драйверами. Кстати как вы организовали чтение и запись в файл со стороны МК?
|
|
|
|
|
Sep 10 2008, 15:03
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
Цитата(aaarrr @ Sep 10 2008, 17:42)  Опишите задачу подробнее. Описываю: Есть Верхний уровень - прога (написана пока под линукс, позже под винду) с GUI, которая считает координаты и т.д. Есть Нижний уровень - контроллер на базе at91sam7s64 который, кое че, уже у себя досчитывает и раздает сигналы на двигатели. Нада - идеально: раз в 20 мкс передавать с верхнего уровня вниз 660 байт и снизу на верх 330 байт. Реально: там хватит скорости передачи 660 байт/мс так как не каждые 20мкс есть изменения системы. Передаваемые данные это 2-3 структуры, которые описывают систему. Обмен данными через USB(можно прикинутся COM портом(типа USBtoCOM), но предварительные тесты показали что скорости не хватает), так как нада чтоб контролер подключался к любому компу на котором стои ПО и драйвера без лишних настроек ком порта и т.д. Вот такая задача
|
|
|
|
|
Sep 10 2008, 15:31
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
Цитата(aaarrr @ Sep 10 2008, 18:15)  Дело в том, что bulk-передачи не предназначены для работы в реальном времени, а iso - не гарантируют доставку. Так что тут применение USB вообще не очень удачная идея.
Наиболее правильным вариантом будет передавать bulk'ом с хоста задание на некоторый промежуток времени, чтобы контроллер его потом спокойно выполнил. Я тоже об этом думал. ТЗ пока такое как описал выше. По идеи, на предельных скоростях и без загрузки компа иными задачами, должно работать. Я до этого не работал серьезно с МК, так по мелочам. Это мой первый серьезный проект. В основном с ПК работал. Таких проблем у меня не возникало. Ну наверное пока буду разбираться как писать драйвера(+misyachniy подкинул мануальчик по USB), напишу, а там видно будет. Я еще беспокоюсь хватит ли этого МК для вычислений. Там они не слабые, и не известно будет ли он укладываться в положенное время. Хотя я так понимаю, что как написано в даташите • PLL output ranges between 80 and 220 MHz It provides SLCK, MAINCK and PLLCK. то контроллер может работать на частоте около 200 МГц. Этого вроде как должно хватать
|
|
|
|
|
Sep 10 2008, 15:53
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
Цитата(aaarrr @ Sep 10 2008, 18:37)  Контроллер будет работать на частоте 48MHz, если используется USB. Других вариантов нет. Это плохо. Большое спасибо всем за советы и ответы. Попытаюсь писать драйвера. Если че буду обращаться
|
|
|
|
|
Sep 10 2008, 15:57
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873

|
Цитата(galjoen @ Sep 10 2008, 18:54)  Для вашей задачи хорошо подойдёт HID. Он и доставку и скорость гарантирует. Только скорость 64 байта в мс. Но если сделать составное устройство из нескольких (до 16) HIDов, то скорость пропорционально увеличится. Я пробовал составное устройство из 12 HIDов - работало. Только ему нужно 12 ендпоинтов (не считая 0ю EP). Т. е. что-то типа ISP1181 надо. Но зато драйверов никаких не надо. Хмм... Это идея. Но у меня тока at91sam7s64. Там 4 конечных точки всего
|
|
|
|
|
Sep 11 2008, 09:40
|

Профессионал
    
Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565

|
Цитата(galjoen @ Sep 10 2008, 18:31)  У меня была такая же мысль (MassStorage я сделал), но избавится от кэширования файлов виндой мне не удалось. Т.е. из устройства только первый раз читаются данные, а второй и последующие разы винда их кэширует (к устройству вообще не обращается) и из файла читается одно и тоже. М.б. кто-то знает как у винды кэширование отключить? Не пользоваться файловой системой, а то ещё и с защитой интелектуальной собственности будете боротся. Короче - создайте устройство, объёмом 16 и более мнимых секторов. Читайте средствами ОС сектора напрямую. В винде есть ограничения - может не читать меньше 16 секторов. На стороне ОС читаете или пишете большой блок в сектора подрят. На стороне МК берёте или отдаёте данные не смотря на номер сектора. Скорость потока регулируется временем обработки сектора на стороне мк. Для передачи 2 мегабит в секунду с at91sam7s64 в ПК хватало внутреннего буфера в 4 кб. А более 2 мегабит - вытянуть не удалось. Цитата(aaarrr @ Sep 9 2008, 17:10)  Во-вторых, 600 байт/мс туда и обратно через шину элементарно не пройдут. Максимально вроде удавалось отдавать 10 мбит в ПК, но это прямо на пайпах со своим драйвером. А тах шина конечно медленная надо для таких задач осваивать HS, апример на SAM9RL64
|
|
|
|
|
Sep 12 2008, 09:33
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(_4afc_ @ Sep 11 2008, 13:40)  Не пользоваться файловой системой, а то ещё и с защитой интелектуальной собственности будете боротся. Весь смысл моего девайса в том, что его можно воткнуть в любой комп и сразу работать. Для того на нём и MassStorage стоит (ещё HID есть - устройство составное). Т. е. совершенно неподготовленный пользователь, которые этот девайс впервые видит и никакой документации не имеет: 1. Воткнул его в УСБ, 2. На появившемся диске мышкой на .exe нажал (диск read only), 3. Тут у него уже и документация и помощь появилась, 4. Логи прочитал (хотя м.б. и не знает, что это так называется) и себе на винт скопировал, 5. Через HID девайс перенастроил (если разобрался), 6. Объектом поуправлял (если связь есть). И всё это без установки к. л. драйверов. Тут без файловой системы никак. А вообще я не слышал чтобы файловая система или Mass Storage были к.л. патентом защищены. Цитата(_4afc_ @ Sep 11 2008, 13:40)  Короче - создайте устройство, объёмом 16 и более мнимых секторов. Читайте средствами ОС сектора напрямую. В винде есть ограничения - может не читать меньше 16 секторов. На стороне ОС читаете или пишете большой блок в сектора подрят. На стороне МК берёте или отдаёте данные не смотря на номер сектора. Скорость потока регулируется временем обработки сектора на стороне мк. Об этом я както и не подумал. Спасибо. Цитата(_4afc_ @ Sep 11 2008, 13:40)  Для передачи 2 мегабит в секунду с at91sam7s64 в ПК хватало внутреннего буфера в 4 кб. А более 2 мегабит - вытянуть не удалось.  Только Mass Storage (без HID) у меня строго мегабайт в секунду читается. Т.е. максимально возможная скорость у FS USB - NAKов я вообще не хосту не передаю. А когда в составном устройстве (HID добавляется), то скорость падает т.к. шина под HID резервируется. Цитата(_4afc_ @ Sep 11 2008, 13:40)  Максимально вроде удавалось отдавать 10 мбит в ПК, но это прямо на пайпах со своим драйвером.
А тах шина конечно медленная надо для таких задач осваивать HS, апример на SAM9RL64 У USB FS 8 мбит максимум. 16 пакетов по 64 байта в милисекунду. Если ещё и контрольный канал использовать, то ещё 1 пакет добавляется. Но до 10 мбит всё равно не дотягивает. HS я пробовал, там всего 2 дескриптора добавляются, а так всё тоже самое. Но у меня ошибки CRC начали частенько возникать (хотя м.б. это у меня руки кривые). И я подумал, что если уж у меня на столе подглючивает, то что на объекте то будет! И для себя решил, что если FS по скорости вытягивает, то на нем и нужно делать.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|