Перейти к содержанию
    

Народ не работает ЮСБ. :help:

Скачал с сайта Атмела примеры версии 1.4 и попробовал вшить usb mass storage device. После этого плата определяет как просто device которому нужны драйвера и все(пробовал на 2000 и на ХР). Пробовал также версии которые идут с ИАР 5.2(по идеи тот же 1.4) а также версия 1.3. Все точно так же. Уже не знаю че делать. Устройство нормально не определяется и все. (тока один раз я нашел бинарник с GCCшного проекта поидеи который вшился и заработал, тоесть определил платку как масс сторедж с 0 байтов вообще и 0 байтов свободного места. это устройство нельзя отформатировать)

 

Задача

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

Или как вариант написать драйвера под винду для своего девайса и через них уже както общатся.

 

Хотелось бы услышать какието идеи или замечания как это сделать и если кому не сложно, попробуйте вшить иаровский пример - будет ли он у вас работать. Если будет, то пришлите ссылочку откуда скачали или же сам проект.

Буду премного благодарен за инфу

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во-первых, действительно ли оно у Вас просит драйверы, или говорит "unknown device"?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во-первых, действительно ли оно у Вас просит драйверы, или говорит "unknown device"?

 

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

Пишет вот так:

USBDevice

"Для устройства не установлены драйверы. (Код 28)

Нажмите "Переустановить" для переустановки драйверов этого устройства."

Я понял вопрос, я вшивал core project он сразу просит установить драйвера,а этот в 2000 у меня не просит, а на ХР говорит что устройство сконфигурировано неправильно или чтото в таком духе.

 

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

 

Плюс еще хотел спросить а то с даташита к at91sam7s64 не ясно: у UDP есть свои встроенные буфера FIFO или как в USARTе они работают с контроллером ПДП или их вообще нада назначать с РАМ в проге как какието масивы например

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пишет вот так:

USBDevice

"Для устройства не установлены драйверы. (Код 28)

Нажмите "Переустановить" для переустановки драйверов этого устройства."

Я понял вопрос, я вшивал core project он сразу просит установить драйвера,а этот в 2000 у меня не просит, а на ХР говорит что устройство сконфигурировано неправильно или чтото в таком духе.

Понятно. Видимо нужно сказать спасибо кривым примерам.

 

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

1кбит/мс будет, а 4.8кбит/мс в обе стороны не будет.

 

Плюс еще хотел спросить а то с даташита к at91sam7s64 не ясно: у UDP есть свои встроенные буфера FIFO или как в USARTе они работают с контроллером ПДП или их вообще нада назначать с РАМ в проге как какието масивы например

В даташите все предельно ясно: у UDP есть свои FIFO и нет PDC.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может у когото есть правильный пример инициализации для mass storage device?

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

 

По поводу скорости: я указал самый худший вариант. На самом деле там большую часть времени будет к ПК 270 байтов, с ПК на МК 300 байтов. Думаю будет успевать.

В таком виде должно. Только учтите, что нагрузку на процессор это даст довольно заметную.

 

Сразу такой вопрос: можно ли организовать mass storage device с памятью в РАМ?

Можно, почему нет?

 

1. Не из-за компилятора ли у меня не работает пример?

2. Не из-за того ли, что у меня не атмеловский evaluation board, а какойто полусамопальный наш(без кнопок, памяти, дисплея и т.д.), не работает пример? (По типу, он лезет в СДРАМ которой нету и поэтому както бочит)

1. Это Вам должно быть виднее.

2. Насколько я помню, для атмеловского примера для S64 нужен только исправный процессор с правильным кварцем.

 

Ума не приложу какое отношение DBGU имеет к UDP

Если выключить DBGU, то процессор просто зависнет при попытке отправить через него диагностику.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

звучит тупо-но я чтото сделал и у меня нормально определилось устройство.

Пока у него 0 байт всего

буду копать дальше. Спасибо за поддержку :beer:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

звучит тупо-но я чтото сделал и у меня нормально определилось устройство.

Пока у него 0 байт всего

буду копать дальше. Спасибо за поддержку :beer:

 

 

Уже продолжая тему, может комуто сгодится, я подправил описание в проекте, поетому он у меня и запустился.

Теперь мучаю память, пока не получается ничего выделить, и у меня висит дисковый накопитель размером 0 байт.

Решил переписать для СДРАМ начальный адрес как кусок РАМ длинной в ФФФ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не получается выделить память.

Пишу такое :

 

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 байт места, которое я выдрал с РАМ

Но этого нету.

Подскажите пожалуйста где не правильно

 

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

 

Выложи пожалуйста.

С названием ветки протупил :05: , но ее уже вроде нельзя изменить.

Прошиваю через usb с помощью ИАР, или через SEGGER J-FLASH.

Отлаживаю Jet link 5

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По идеи после этого у меня в устройстве должно появится 4095 байт места, которое я выдрал с РАМ

Но этого нету.

Что же Вы один байт-то зажали? Дайте хотя бы 4096.

Но боюсь, что даже для самого маленького диска это слишком мало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему мало?

Вы имеете ввиду что его винда определит как 0 или что мне его мало для нужд?

Мне хватить должно с головой. А насчет винды, я по крайней мере не слышал о какихто ограничениях в размере диска.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4096 байт - это 8 секторов. Для FAT на них нужно разместить BPB, одну или две копии FAT и основную директорию - это минимум 3-4 сектора.

Не уверен, что винда может работать со столь маленьким диском.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

МДА... я уже сам прогуглил. Получается что действительно может не хватать. Ща под линуксовые ФС попробую найти минимальный размер. Такого я честно говоря не ожидал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По-хорошему Вам нужно сделать программный эмулятор диска, а реальную память отдавать только под область данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...