Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Бардак с at91sam7s64
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
SolarA
Народ не работает ЮСБ. help.gif
Скачал с сайта Атмела примеры версии 1.4 и попробовал вшить usb mass storage device. После этого плата определяет как просто device которому нужны драйвера и все(пробовал на 2000 и на ХР). Пробовал также версии которые идут с ИАР 5.2(по идеи тот же 1.4) а также версия 1.3. Все точно так же. Уже не знаю че делать. Устройство нормально не определяется и все. (тока один раз я нашел бинарник с GCCшного проекта поидеи который вшился и заработал, тоесть определил платку как масс сторедж с 0 байтов вообще и 0 байтов свободного места. это устройство нельзя отформатировать)

Задача
Мне надо организовать обмен данными между ПК и МК. Примерно 600 байт туда и обратно раз в милисекунду гдето(лучше чаще). Думал сделать через масс сторедж, дабы с ПК писало в какойто файл, а читало с другого. Выделить под эти файлы допустим по 2 кБ в РАМ(для с64 всего 16кб РАМ) и спокойно себе писать в файл с ПК и читать область памяти в проге на МК.
Или как вариант написать драйвера под винду для своего девайса и через них уже както общатся.

Хотелось бы услышать какието идеи или замечания как это сделать и если кому не сложно, попробуйте вшить иаровский пример - будет ли он у вас работать. Если будет, то пришлите ссылочку откуда скачали или же сам проект.
Буду премного благодарен за инфу
aaarrr
Во-первых, действительно ли оно у Вас просит драйверы, или говорит "unknown device"?

Во-вторых, 600 байт/мс туда и обратно через шину элементарно не пройдут.
SolarA
Цитата(aaarrr @ Sep 9 2008, 16:10) *
Во-первых, действительно ли оно у Вас просит драйверы, или говорит "unknown device"?

Во-вторых, 600 байт/мс туда и обратно через шину элементарно не пройдут.

Пишет вот так:
USBDevice
"Для устройства не установлены драйверы. (Код 28)
Нажмите "Переустановить" для переустановки драйверов этого устройства."
Я понял вопрос, я вшивал core project он сразу просит установить драйвера,а этот в 2000 у меня не просит, а на ХР говорит что устройство сконфигурировано неправильно или чтото в таком духе.

Почему 600 байт/мс не пройдут? Скорость для фулл спид 12Мбит/сек=12кбит/мс вроде правильно считаю, ясно что такой скорости не будет, но 1кбит/мс думаю, что точно должно тянуть.

Плюс еще хотел спросить а то с даташита к at91sam7s64 не ясно: у UDP есть свои встроенные буфера FIFO или как в USARTе они работают с контроллером ПДП или их вообще нада назначать с РАМ в проге как какието масивы например
aaarrr
Цитата(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.
SolarA
С 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
aaarrr
Цитата(SolarA @ Sep 9 2008, 17:56) *
Может у когото есть правильный пример инициализации для mass storage device?

Едва ли кто-то станет делиться правильным примером бесплатно, увы sad.gif

Цитата(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, то процессор просто зависнет при попытке отправить через него диагностику.
SolarA
звучит тупо-но я чтото сделал и у меня нормально определилось устройство.
Пока у него 0 байт всего
буду копать дальше. Спасибо за поддержку beer.gif
SolarA
Цитата(SolarA @ Sep 9 2008, 17:17) *
звучит тупо-но я чтото сделал и у меня нормально определилось устройство.
Пока у него 0 байт всего
буду копать дальше. Спасибо за поддержку beer.gif



Уже продолжая тему, может комуто сгодится, я подправил описание в проекте, поетому он у меня и запустился.
Теперь мучаю память, пока не получается ничего выделить, и у меня висит дисковый накопитель размером 0 байт.
Решил переписать для СДРАМ начальный адрес как кусок РАМ длинной в ФФФ
uriy
Цитата
Уже продолжая тему, может комуто сгодится, я подправил описание в проекте, поетому он у меня и запустился.
Тогда зачем было писать в названии ветки что в SAM7S64 не работает USB раз вы не определили точно в чем проблема в железе или в софте? Кстати через какой интерфейс вы прошивали контроллер? На 99,9% уверен что через USB с помощью SAM-BA. Это еще раз подтверждает что USB работает. Где-то у меня была реализация Mass Storage. Там в примере уже был текстовый файл на диске. Размер диска 16 Кбайт кажется был. Если найду выложу.
SolarA
Не получается выделить память.
Пишу такое :

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 Кбайт кажется был. Если найду выложу.


Выложи пожалуйста.
С названием ветки протупил 05.gif , но ее уже вроде нельзя изменить.
Прошиваю через usb с помощью ИАР, или через SEGGER J-FLASH.
Отлаживаю Jet link 5
aaarrr
Цитата(SolarA @ Sep 10 2008, 13:59) *
По идеи после этого у меня в устройстве должно появится 4095 байт места, которое я выдрал с РАМ
Но этого нету.

Что же Вы один байт-то зажали? Дайте хотя бы 4096.
Но боюсь, что даже для самого маленького диска это слишком мало.
SolarA
Почему мало?
Вы имеете ввиду что его винда определит как 0 или что мне его мало для нужд?
Мне хватить должно с головой. А насчет винды, я по крайней мере не слышал о какихто ограничениях в размере диска.
aaarrr
4096 байт - это 8 секторов. Для FAT на них нужно разместить BPB, одну или две копии FAT и основную директорию - это минимум 3-4 сектора.
Не уверен, что винда может работать со столь маленьким диском.
SolarA
МДА... я уже сам прогуглил. Получается что действительно может не хватать. Ща под линуксовые ФС попробую найти минимальный размер. Такого я честно говоря не ожидал.
aaarrr
По-хорошему Вам нужно сделать программный эмулятор диска, а реальную память отдавать только под область данных.
SolarA
Цитата(aaarrr @ Sep 10 2008, 14:44) *
По-хорошему Вам нужно сделать программный эмулятор диска, а реальную память отдавать только под область данных.

Тоесть программный эмулятор? Со стороны ПК чтобы была видна флешка допустим на 16МБ, а реально использовать только 4 кб?

Я пробовал выставлять границы памяти которой нету, тоесть 256 кб. ХР видит устройство с 0 байт и предлагает его отформатировать на 256 кб, ФАТ, стандартный размер кластера. Когда пробую до конца формат не доходит и мне пишет "не удалось закончить форматирование"
Такое же происходит если я выделяю 4кб. ХР видит 0, предлагает форматнуть на 4 кб и тоже "не удалось закончить форматирование". Есть еще мысль что у меня както не правельно прописано само общение с девайсом(тоесть функции чтения/записи), но с другой стороны все вплоть до инициализации места доходит, плюс функции чтения/записи написаны вроде нормально.

Я уже склоняюсь к написанию драйверов для устройства. И таким образом уже подключать МК к ПК. Конечно не уверен что это проще и быстрее.
По идеи это можно будет сделать
misyachniy
ИМХО - Явно какие-то проблемы с дескрипторами.
Или Big/Little Endianess.
Или pragma pack - некорректен.

Тут у меня полный проект для тестирования скорости обмена и программатор на основе АТ90SAM7S
http://njnmnp.narod.ru/proj/proj.html

Тут моя статейка о принципах разработки устройств для интерфейса USB и достижения максимальной скорости обмена
http://njnmnp.narod.ru/note/note.html

ИМХО - работать через Mass Storage можно, но довольно сложно.
На Телесистемах SM описывал как это делать.
aaarrr
Цитата(SolarA @ Sep 10 2008, 16:52) *
Тоесть программный эмулятор? Со стороны ПК чтобы была видна флешка допустим на 16МБ, а реально использовать только 4 кб?

Примерно так. То есть динамически формировать BPB, FAT, главную запись.

Цитата(SolarA @ Sep 10 2008, 16:52) *
Я уже склоняюсь к написанию драйверов для устройства. И таким образом уже подключать МК к ПК. Конечно не уверен что это проще и быстрее.
По идеи это можно будет сделать

Проще и быстрее, если достаточно глубоко знаете интерфейс USB.
SolarA
Цитата(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?
aaarrr
Драйвер можно взять и готовый.

pragma pack управляет упаковкой данных в структурах, посмотрите в букваре.
galjoen
Цитата(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 пакет через контрольный канал).
SolarA
Цитата(galjoen @ Sep 10 2008, 17:31) *
Это конечно пройдёт, но у USB 1.1 max 16 пакетов по 64 байта (в обе стороны) за кадр = 1 мс (+ ещё 1 пакет через контрольный канал).

Мне по скорости нада 660 байт/мс. Так что мне должно хватать. Насчет кэширования это еще мне один подводный камень.
Я уже теперь и не знаю что делать. Наверное нада не парится и садится писать-искать драйвера.
Подожду может еще кто седня чего посоветует с масс сторедж, а завтра наверное нада будет разбиратся с драйверами.

Кстати как вы организовали чтение и запись в файл со стороны МК?
aaarrr
Цитата(SolarA @ Sep 10 2008, 18:36) *
Мне по скорости нада 660 байт/мс.

Только учтите, что эти 660 байт Вы далеко не всегда получите - отвлечется винда на что-нибудь, и скорость резко упадет.

Опишите задачу подробнее.
SolarA
Цитата(aaarrr @ Sep 10 2008, 17:42) *
Опишите задачу подробнее.

Описываю:
Есть Верхний уровень - прога (написана пока под линукс, позже под винду) с GUI, которая считает координаты и т.д.
Есть Нижний уровень - контроллер на базе at91sam7s64 который, кое че, уже у себя досчитывает и раздает сигналы на двигатели.
Нада - идеально: раз в 20 мкс передавать с верхнего уровня вниз 660 байт и снизу на верх 330 байт. Реально: там хватит скорости передачи 660 байт/мс так как не каждые 20мкс есть изменения системы. Передаваемые данные это 2-3 структуры, которые описывают систему.
Обмен данными через USB(можно прикинутся COM портом(типа USBtoCOM), но предварительные тесты показали что скорости не хватает), так как нада чтоб контролер подключался к любому компу на котором стои ПО и драйвера без лишних настроек ком порта и т.д.
Вот такая задача
aaarrr
Дело в том, что bulk-передачи не предназначены для работы в реальном времени, а iso - не гарантируют доставку. Так что тут применение USB вообще не очень удачная идея.

Наиболее правильным вариантом будет передавать bulk'ом с хоста задание на некоторый промежуток времени, чтобы контроллер его потом спокойно выполнил.
SolarA
Цитата(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 МГц. Этого вроде как должно хватать
aaarrr
Контроллер будет работать на частоте 48MHz, если используется USB. Других вариантов нет.
SolarA
Цитата(aaarrr @ Sep 10 2008, 18:37) *
Контроллер будет работать на частоте 48MHz, если используется USB. Других вариантов нет.

Это плохо.

Большое спасибо всем за советы и ответы. Попытаюсь писать драйвера.
Если че буду обращаться smile.gif
galjoen
Цитата(SolarA @ Sep 10 2008, 19:03) *
Описываю:

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


Хмм... Это идея. Но у меня тока at91sam7s64. Там 4 конечных точки всего
_4afc_
Цитата(galjoen @ Sep 10 2008, 18:31) *
У меня была такая же мысль (MassStorage я сделал), но избавится от кэширования файлов виндой мне не удалось. Т.е. из устройства только первый раз читаются данные, а второй и последующие разы винда их кэширует (к устройству вообще не обращается) и из файла читается одно и тоже. М.б. кто-то знает как у винды кэширование отключить?


Не пользоваться файловой системой, а то ещё и с защитой интелектуальной собственности будете боротся.

Короче - создайте устройство, объёмом 16 и более мнимых секторов.
Читайте средствами ОС сектора напрямую. В винде есть ограничения - может не читать меньше 16 секторов.
На стороне ОС читаете или пишете большой блок в сектора подрят.
На стороне МК берёте или отдаёте данные не смотря на номер сектора.
Скорость потока регулируется временем обработки сектора на стороне мк.

Для передачи 2 мегабит в секунду с at91sam7s64 в ПК хватало внутреннего буфера в 4 кб. А более 2 мегабит - вытянуть не удалось. sad.gif



Цитата(aaarrr @ Sep 9 2008, 17:10) *
Во-вторых, 600 байт/мс туда и обратно через шину элементарно не пройдут.


Максимально вроде удавалось отдавать 10 мбит в ПК, но это прямо на пайпах со своим драйвером.

А тах шина конечно медленная надо для таких задач осваивать HS, апример на SAM9RL64
galjoen
Цитата(_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 мегабит - вытянуть не удалось. sad.gif

Только 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 по скорости вытягивает, то на нем и нужно делать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.