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

jhoo

Участник
  • Постов

    22
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о jhoo

  • Звание
    Участник
    Участник

Контакты

  • ICQ
    Array
  1. AP-686 Intel® FlashFile System Selection Guide Правда документ староват - '98 года AP-686
  2. Может быть поздно. Но, http://www.thesycon.de/
  3. Что такое пустые пакеты 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 отправлял бинарные файлы с командами и данными. Тогда сразу видно будет кто виноват.
  4. Чип - AT91SAM7S256, mass storage class. Означает, что прибор не всегда готов для связи с пк, а загоняется в него вручную пользователем
  5. Решили проблему так: Режим связи прибора с ПК по usb происходит "по кнопке", а не в любой момент времени. Прибор перед тем как включить pulup на D+ проверяет линию VBUS, если есть +5В то включает, иначе находится в ожидании. А разъем поставили 2РМххх.
  6. Вот именно к этому варианту я больше и склоняюсь. От примера не отказался бы. Сканирование устройств можно делать через функции SetupDiXXX по известному GUID устройства (его я знаю), их можно открывать функциями CreateFile(), значит можно использовать DeviceIoControl() и запихивать в буфер scsi-запрос. Вопрос: какой IOCTL code нужно указывать? В исходнике программы diskid32.exe diskid32 при сканировании шины использовался код IOCTL_SCSI_MINIPORT. Может ч/з него? Пока проверить не могу. И вообще будет ли работать такая схема если кто-то уже делал.
  7. Такой способ рассматривался и он плохо подходит для установки времени по ряду причин. К сожалению у меня нет этого исходники. А в чем там суть?
  8. Использую исходники atmel mass storage, прибор представляется как дисковый накопитель. Нужно иметь возможность считывать и записывать в прибор специфическую информацию (например установка даты/времени). Поскольку весь обмен идет через команды scsi, то можно ли для моей задачи применить зарезервированные номера команд? Или это надо делать через WRITE BUFFER(3Bh) и READ BUFFER(3Ch) и через них использовать свой протокол обмена? Какие способы отправки scsi команд в устройство можно использовать вообще? Кто-то работал через интерфейс aspi, или же не стоит с ним связываться.
  9. Зависает TWI в SAM7

    Действительно, проблема была в overrun error. Нужно было отлавливать это событие.
  10. Зависает TWI в SAM7

    Использую 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 не любит когда его прерывают на длительное время? Как с этим бороться, ведь теоретически прерывания могут длиться любое время.
  11. Собственно проблема заключалась в отправке "повторного старта" после фазы записи адреса данных в микросхеме. Здесь я имел в виду адрес микросхемы, а не адрес данных. В итоге понял что можно обойтись без повторного старта, а с помощью обычного. Т.е. с помощью двух независимых пакетов - "запись адреса данных" и "чтение данных".
  12. Проблема заключается в следующем. Программа виснет при попытке удалить задачу ч/з OSTaskDel(OS_PRIO_SELF). То есть когда задача пытается удалить саму себя. Причем зависает именно на функциях WIN32 порта. Знает кто-нибудь, в чем может быть причина и есть ли рабочий порт по win32?
  13. Нужна помощь с I2C SAM7S256

    Не получается организовать random read из внешней еепром. После отправки фрейма на запись адреса памяти еепром и получения ACK не могу добиться отправки стартового условия+адрес микросхемы и далее последовательного чтения. Стартовое условие+адрес микросхемы отправляется только после стопового условия, но это условие не должно быть по протоколу Кто уже работал с i2c подскажите что еще нужно сделать.
  14. Все,разобрался. Посмотрел атмеловский стартап (для ос использовал другой), они после обработки любых прерываний выполняли запись в EOICR. У меня же эта операция была только в обработчике PIT. Сделал так же и всё заработало. Вообщем сам виноват.
×
×
  • Создать...