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

DiMonstr

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Частый гость
    Частый гость
  • День рождения 21.02.1986

Старые поля

  • skype
    Array
  • Vkontakte
    Array

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Посетители профиля

2 056 просмотров профиля
  1. А возможно соеденить два контроллера по кан шине без применения трасиверов? Т.е. аналогично USART?
  2. Держите ссылочку: /upload/MCs/AVR/EVK525-series6-ms_nf_df_sd-2_0_4-doc.zip А у вас есть девайс, на котором можно протестировать прошивку?
  3. Да ладно Вам придираться к архиватору))) Перепутал, извиняйте! Ссылка которую вы указали верная. Эти исходники я использую. Версию 2.0.4 качал с официального сайта Atmel. Отличия в версиях исходников не касаются драйвера управления Nand Flash памятью. За основу проекта я взял версию 2.0.3, в дальнейшем внёс изменения из версии 2.0.4. Изменения таковы: //! @section Revision Revision //! //! @par V2.0.4 //! //! USB Device: //! - Fix bug about back drive voltage on D+ after VBus disconnect (USB Certification) //! - Remove VBus interrupt and manage VBus state by pooling //! - Fix bug during attach (the interrupt must be disable during attach to don't freeze clock) Вот.
  4. Всем привет! Взял за основу своего проекта исходники встроенного программного обеспечения EVK525 AT90USBxxx USB Mass storage с сайта Atmel. Версия используемых исходников 2.0.4 (EVK525-series6-ms_nf_df_sd-2_0_4.rar). В изделии использую контроллер AT90USB1286 и микросхему NAND памяти HY27UF084G2B (Capacity (MB) = 512, page size = 2048, F3). Есть такая проблема, область FAT таблицы флэш памяти затирается значениями 0xFF, после подключения устройства к USB. Либо затирается несколько секторов в области размещения данных. Это проявляется не постоянно. Правда только после записи каких-нибудь данных. Таким образом флэшка может работать неделю, а может и после первой записи данных, после извлечения и подключения оказаться неформатированной. Изделие извлекается из USB безопасно. Ясно, что происходит это на этапе выполнения функций теста памяти: nf_test_unit_ready(), nf_verify_resume(), is_nf_invalid(), nf_scan(), nf_cleanup_memory(), nf_scan(), nf_rebuild(). Эти функции выполняют поиск bad-блоков, чтение резервной области (spare-area), выполнение ремаппинга логических секторов на физические адреса блоков памяти, поиск свободных блоков и ещё ряд действий. Не могу понять причину затирания блоков. Кто-нибудь использовал эти исходники???
  5. Опыты закончились успешно:) Создание составного устройства не проблема! На контроллере AT90USB1286 реализовал Mass Storage Device и CDC виртуальный com-порт. Сейчас делаю на CY7C68013A мега составной девайс. Упаковываю в один девайс 3 логических. - USB Remote NDIS: 3 endpoints. Эта удаленная сетка через USB. Своего рода адаптер USB<->Ethernet; - Mass Storage Device: 2 endpoints. Поддержка трех LUN - винт Serial ATA и две Flash USB Drive; - Служебный канал: 2 endpoints. Сейчас пока реализовал каждое из этих логических устройств на отдельном контроллере. Контроллер, хочу сказать, просто супер! Можно реализовать всё, что хочешь. Очень гибкий по настройкам функционирования в различных режимах. Правда он мне мозг реально вынес :smile3046: в режиме работы Slave FIFO Manual IN/OUT.
  6. Понедельник день тяжелый, я понимаю... Наверно трудно будет с лёту вкурить, что я изложил, поэтому сформулирю вопрос так: 1. В EP8IN приходит первый пакет данных. 2. Перед передачей его хосту необходимо в начало пакета добавить заголовок. 3. Затем в хост передать заголовок+данные. Как реализовать такой алгоритм в режиме ручного управления fifo?
  7. Всем привет! Весь мозг вынес мне этот контроллер!!! :smile3046: У меня следующая проблема. Мастером является FPGA. Делаю девайс USB to SATA HDD. Драйвер хоста стандартный для Mass Storage Device. Cypress преобразует SCSI команды в команды SATA и отправляет их в FPGA. Из FPGA необходимо принимать пакеты с данными (сектора) по 512 байт и по завершению чтения всех секторов принимать 20 байт ответа, но на хост ответ уходить не должен. Никак не могу сделать корректный прием данных из FPGA и передать их драйверу на хост. Хоть убейся!!! Если EP8 настроена на AUTOIN, то на хост приползают все пакеты из FPGA. Реакции на INPKTEND = 0x88 - нет. В общем так не канает. Тогда настраиваю на прием пакетов из FPGA по EP8 в режиме MANUAL. WRITEDELAY(); EP8CFG = 0xE2; // ep8 is valid BULK IN 512 double buffered WRITEDELAY(); EP8FIFOCFG = 0x01; // set EP8: 0x05=MANUAL, 0x09=AUTOIN WRITEDELAY(); EP8AUTOINLENH = 0x02; // Auto-commit 512-byte packets WRITEDELAY(); EP8AUTOINLENL = 0x00; Прием реализовал так: // для отладки читаем один сектор не зависимо от команды SCSI sectorcount = 1; while (sectorcount--) { // ждем, когда EP8 будет FULL while( !( EP68FIFOFLGS & 0x10 ) ); // firmware commits EP8 packet INPKTEND = 0x08; while( !( EP68FIFOFLGS & 0x10 ) ); // skip пакет, т.к. это 20 байт ответа INPKTEND = 0x88; } } Работает не корректно. Да вообще творится черт знает что!!! - сектор засасывается на хост несколькими частями - когда приходит новая SCSI команда, то продолжаю передаваться куски предыдущего сектора - а также передаются 20 байт, которым я сделал SKIP! Могу выложить логи USB сниффера. Я так подозреваю, что ожидание заполнения FIFO while( !( EP68FIFOFLGS & 0x10 ) ); не так работает. По докам, этот флаг валидный, когда FPGA установила FIFOADR = "11". А у меня выходит, когда FPGA отправила сектор в EP8, происходит переключение снова на EP4, т.е. чтение с хоста. Как сделать правильно?
  8. Всем привет! Интересует такой вопрос. Есть ли возможность изменять прошивку контроллера памяти USB Flash Drive? В инете конкретно такой информации нет. Есть варианты, что прошивка может лежать либо во флэш-памяти и грузиться в ОЗУ контроллера привключении, либо контроллер имеет собственную flash-память. Хотелось бы знать, можно ли туда запихать свою программу? Я просмотрел несколько datasheet'ов на различные контроллеры. Ни в одном из них нет описания периферии, регистров, организации памяти и т.д. Но в то же время есть возможность обновлять firmware!!! С документацией пока ладно... Вероятнее всего вход в режим программирования осуществляется передачей какого-то запроса через Control Endpoint, после чего флэшах ресетится и после енумерации, всплывает на хосте, например, с другой конфигурацией;) Ну что, есть у кого какие мысли по этой теме?
  9. Вопрос. FX2LP настроен на режим Slave FIFO. Внешний master - FPGA. В EP8IN приходит первый пакет данных. Перед передачей его хосту необходимо в начало пакета добавить заголовок. Затем в хост передать заголовок+данные. Как реализовать такой алгоритм в режиме ручного управления fifo? Или лучше данный заголовок формировать в FPGA и передавать хосту в автоматическом режиме?
  10. Теперь понятно. Почитаю документацию на компилятор... Я сейчас как раз и юзаю USBlyzer. Удобная весчица:) Спасибо за ответы и советы. Буду ковырять дальше.
  11. Точно! Здесь и порылась собака. Получается, я отправляю каждый DWORD в прямом порядке, а нужно в обратном. Объясню на примере. Короче получается, что значение всех полей по документации #define REMOTE_NDIS_INITIALIZE_CMPLT 0X80000002 на самом деле нужно переворачивать вот так #define REMOTE_NDIS_INITIALIZE_CMPLT 0X02000080 и передавать. Получаю также в перевернутом виде. Не могу понять почему так? И нужно ли менять последовательность байт в DWORD в остальных полях??? Пример. 1) Хост передает: REMOTE_NDIS_INITIALIZE_MSG (Size 24 bytes): 00000000 02 00 00 00 .... 00000004 18 00 00 00 .... 00000008 02 00 00 00 .... 0000000C 01 00 00 00 .... 00000010 00 00 00 00 .... 00000014 00 40 00 00 .@.. 2) Хост принимает: REMOTE_NDIS_INITIALIZE_CMPLT(Size 52 bytes): а) так не верно 00000000 80 00 00 02 €... 00000004 00 00 00 34 ...4 00000008 02 00 00 00 .... 0000000C 00 00 00 00 .... 00000010 00 00 00 01 .... 00000014 00 00 00 01 .... 00000018 00 00 00 01 .... 0000001C 00 00 00 00 .... 00000020 00 00 00 01 .... 00000024 00 00 05 3A ...: 00000028 00 00 00 03 .... 0000002C 00 00 00 00 .... 00000030 00 00 00 00 .... б) так операция success 00000000 02 00 00 80 ...€ 00000004 00 00 00 34 ...4 00000008 02 00 00 00 .... 0000000C 00 00 00 00 .... 00000010 00 00 00 01 .... 00000014 00 00 00 01 .... 00000018 01 00 00 00 .... 0000001C 00 00 00 00 .... 00000020 00 00 00 01 .... 00000024 00 00 05 3A ...: 00000028 00 00 00 03 .... 0000002C 00 00 00 00 .... 00000030 00 00 00 00 .... Но как будет верно? Также хост передал REMOTE_NDIS_QUERY_MSG. Таким образом дело дошло до сообщения REMOTE_NDIS_HALT_MSG. И на это всё. На REMOTE_NDIS_HALT_MSG я никак не реагирую и ничего не делаю.
  12. У меня вопрос конкретно по Remote NDIS. Ваяю обработку запросов по спецификации Remote NDIS. Чип юзаю от кипариса FX2LP. По ходу дела столкнулся с таким траблом. В спецификации изложено, что 1)хост передает в запросе Send Encapsulated Command сообщение REMOTE_NDIS_INITIALIZE_MSG (Size 24 bytes): 02 00 00 00 18 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 00 40 00 00 2)девайс подтверждает его получение передачей RESPONSE_AVAILABLE по Endpoint INTERRUPT 3)на что хост, выставив запрос GET_ENCAPSULATED_COMMAND, забирает данные от девайса в сообщении REMOTE_NDIS_INITIALIZE_CMPLT(Size 52 bytes): 80 00 00 02 00 00 00 34 02 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 01 00 00 05 3A 00 00 00 03 00 00 00 00 00 00 00 00 А дальше одни непонятки... Вопрос №1. После GET_ENCAPSULATED_COMMAND нужно ли передавать RESPONSE_AVAILABLE? Вопрос №2. Если я отвечаю RESPONSE_AVAILABLE на запрос GET_ENCAPSULATED_COMMAND, то хост снова выставляет запрос GET_ENCAPSULATED_COMMAND. А т.к. данные я уже передал, и передавать нечего, хост на этом прекращает инициализацию. Потом решил ему постоянно передавать REMOTE_NDIS_INITIALIZE_CMPLT. И тут хост как начал метелить GET_ENCAPSULATED_COMMAND в цикле, что я испугался и впал в ступор:) Вопрос №3. Что я делаю неправильно? По документу вроде хост должен вычитать пакет данных из Bulk IN. Но таких запросов что-то не наблюдается... :(((
  13. На этом всё и закончилось:) Сейчас другим делом занят. Разбираюсь со спецификацией Remote NDIS. Хочу забацать типа адаптера USB-Ethernet
  14. Для класса устройства Mass Storage Device описанного в дескрипторе интерфейса №0 драйвера у меня встали автоматически. Для класса устройства Communication Device Descriptor описанного в дескрипторе интерфейса №1 драйвера автоматически ось не поставила. Чтобы установить стандартный драйвер usbser.sys для интерфейса №1, необходимо создать INF-файл. Образец я выложил. Основная его фишка в этой строке: %USBtoSerialConverter%=USBtoSer.Install,USB\VID_DC99&PID_C906&MI_01 Здесь идентификатор устройства включает Vendor ID, Product ID и "MI_01" означает номер интерфейса USB устройства для которого нужно поставить драйвер. Как вы заметили, я не применял дескриптор Interface Association Descriptor (IAD). Я описал интерфейс CDC с тремя конечными точками. Я не стал отдельно создавать интерфейс данных и коммуникационный интерфейс. Кроме того, я не описал следующие дескрипторы: - заголовочный (Header Functional Descriptor); - режима команд (Call Management Functional Descriptor); - абстракции устройства (Abstract Control Management Functional Descriptor); - группирования (Union Functional Descriptor). Работу девайса по второму интерфейсу я пока не проверял. На днях протестирую. :smile3009: csmmc_inf.txt Composite_USB_device_MSD_CDC.html
  15. Извиняюсь за невеное название софта. Вот список программ для анализа USB трафика: USBlyzer.1.5.97 SysNucleus USBTrace Advanced USB Port Monitor 2.3.0.14.
×
×
  • Создать...