jhoo
Участник-
Постов
22 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о jhoo
-
Звание
Участник
Контакты
-
ICQ
Array
-
AP-686 Intel® FlashFile System Selection Guide Правда документ староват - '98 года AP-686
-
Mass Storage Usb Flash Disk
jhoo ответил kernel32ddl тема в RS232/LPT/USB/PCMCIA/FireWire
Может быть поздно. Но, http://www.thesycon.de/ -
Mass Storage Usb Flash Disk
jhoo ответил kernel32ddl тема в RS232/LPT/USB/PCMCIA/FireWire
Что такое пустые пакеты SEND_ACK и GET_ACK? Просто usb пакеты нулевой длины (ZLP)? Какая стоит win? Для первых экспериментов лучше отключить кеширование. Правильно ли контролируешь отработку этапов CBW-DATAIN-CSW? Даже если предположить что размер данных совпадает с размером bulkin, то это не согласуется с командой RBC_READ_CAPACITY_10=0x25, для которой формат данных READ_CAPACITY_DATA равен 8 байт, а размер CSW 13 байт. Лучше отлаживать все команды по отдельности, например через usbio. Я делал так: подключал обычную usb флешку и с помощью сниффера записывал все команды, котрые использует винда. А уж потом из программы usbio отправлял бинарные файлы с командами и данными. Тогда сразу видно будет кто виноват. -
Выбор разъема для USB
jhoo ответил jhoo тема в Форумы по интерфейсам
Чип - AT91SAM7S256, mass storage class. Означает, что прибор не всегда готов для связи с пк, а загоняется в него вручную пользователем -
Вышли пожалуйста сюда [email protected]
-
Выбор разъема для USB
jhoo ответил jhoo тема в Форумы по интерфейсам
Решили проблему так: Режим связи прибора с ПК по usb происходит "по кнопке", а не в любой момент времени. Прибор перед тем как включить pulup на D+ проверяет линию VBUS, если есть +5В то включает, иначе находится в ожидании. А разъем поставили 2РМххх. -
Вот именно к этому варианту я больше и склоняюсь. От примера не отказался бы. Сканирование устройств можно делать через функции SetupDiXXX по известному GUID устройства (его я знаю), их можно открывать функциями CreateFile(), значит можно использовать DeviceIoControl() и запихивать в буфер scsi-запрос. Вопрос: какой IOCTL code нужно указывать? В исходнике программы diskid32.exe diskid32 при сканировании шины использовался код IOCTL_SCSI_MINIPORT. Может ч/з него? Пока проверить не могу. И вообще будет ли работать такая схема если кто-то уже делал.
-
Такой способ рассматривался и он плохо подходит для установки времени по ряду причин. К сожалению у меня нет этого исходники. А в чем там суть?
-
Каким способом можно общаться с usb flash диском?
jhoo опубликовал тема в RS232/LPT/USB/PCMCIA/FireWire
Использую исходники atmel mass storage, прибор представляется как дисковый накопитель. Нужно иметь возможность считывать и записывать в прибор специфическую информацию (например установка даты/времени). Поскольку весь обмен идет через команды scsi, то можно ли для моей задачи применить зарезервированные номера команд? Или это надо делать через WRITE BUFFER(3Bh) и READ BUFFER(3Ch) и через них использовать свой протокол обмена? Какие способы отправки scsi команд в устройство можно использовать вообще? Кто-то работал через интерфейс aspi, или же не стоит с ним связываться. -
Действительно, проблема была в overrun error. Нужно было отлавливать это событие.
-
Использую TWI для работы с еепром и ртц. Все работает как положено. Параллельно работает тамер 0, в обработчике прерывания которого выполняю некоторую работу. Вот что заметил - если прерывание таймера длится относительно долго (точный предел не знаю, у меня около 80мкс), то после выхода из него и возврата к продолжению работы с еепром TWI зависает на проверке статуса готовности принятых данных. Если длительность прерывания таймера маленькая, то все нормально. Программа выглядит примерно так: main() { //....... while (1) { EEPR_ReadData(...); } } void Timer0IRQ(void) { // что-то делаю (~80 мкс) } int AT91F_TWI_ReadData(LPVOID Data, int Size) { int Error=0; int Status,Count=0; AT91PS_TWI pTwi = AT91C_BASE_TWI; BYTE *pData = (BYTE*)Data; pTwi->TWI_MMR |= AT91C_TWI_MREAD; { pTwi->TWI_CR = AT91C_TWI_START; for(Count=0; Count<Size; Count++) { if (Count == (Size - 1)) pTwi->TWI_CR = AT91C_TWI_STOP; Status = pTwi->TWI_SR; while (!(Status & AT91C_TWI_RXRDY)) { Status = pTwi->TWI_SR; // <---------- В этом цикле происходит зависание } *pData++ = pTwi->TWI_RHR; } } return 0; } Т.е. получается что TWI не любит когда его прерывают на длительное время? Как с этим бороться, ведь теоретически прерывания могут длиться любое время.
-
Собственно проблема заключалась в отправке "повторного старта" после фазы записи адреса данных в микросхеме. Здесь я имел в виду адрес микросхемы, а не адрес данных. В итоге понял что можно обойтись без повторного старта, а с помощью обычного. Т.е. с помощью двух независимых пакетов - "запись адреса данных" и "чтение данных".
-
Проблема с портом UCOS под WIN32
jhoo опубликовал тема в Операционные системы
Проблема заключается в следующем. Программа виснет при попытке удалить задачу ч/з OSTaskDel(OS_PRIO_SELF). То есть когда задача пытается удалить саму себя. Причем зависает именно на функциях WIN32 порта. Знает кто-нибудь, в чем может быть причина и есть ли рабочий порт по win32? -
Не получается организовать random read из внешней еепром. После отправки фрейма на запись адреса памяти еепром и получения ACK не могу добиться отправки стартового условия+адрес микросхемы и далее последовательного чтения. Стартовое условие+адрес микросхемы отправляется только после стопового условия, но это условие не должно быть по протоколу Кто уже работал с i2c подскажите что еще нужно сделать.
-
AT91SAM7S64 + uC/OSv2.80
jhoo ответил jhoo тема в Операционные системы
Все,разобрался. Посмотрел атмеловский стартап (для ос использовал другой), они после обработки любых прерываний выполняли запись в EOICR. У меня же эта операция была только в обработчике PIT. Сделал так же и всё заработало. Вообщем сам виноват.