khorght 0 28 января, 2014 Опубликовано 28 января, 2014 (изменено) · Жалоба Здравствуйте,уважаемые. пытаюсь написать проект композитного ЮСБ устройста HIDGeneric + Vendor , отдельно как сингл интерфейс устройства стартуют(тоесть настройка кварца,инициализация и т.д. проходят корректно поэтому эту часть не выкладываю как заведомо рабочую), при попытке впихнуть их оба в композит девайс устройство не опознается системой, видится как VID 0000 PID 0002 и останавливается системой как выдавшее ошибку, естесственно я задаю совершенно другие VIP & PID. Решил начать с композита хотя бы с одним интерфейсом,та же ситуация VID 0000 PID 0002 мой usb_conf.h: (VID PID заменил на XXXX, MANUFACTURE,DEVICE,SERIAL...тоже, извините) //! Device definition (mandatory) #define USB_DEVICE_VENDOR_ID 0xXXXX #define USB_DEVICE_PRODUCT_ID 0xXXXX #define USB_DEVICE_MAJOR_VERSION 1 #define USB_DEVICE_MINOR_VERSION 1 #define USB_DEVICE_POWER 100 // Consumption on Vbus line (mA) #define USB_DEVICE_ATTR (USB_CONFIG_ATTR_BUS_POWERED) // (USB_CONFIG_ATTR_SELF_POWERED) // (USB_CONFIG_ATTR_BUS_POWERED) // (USB_CONFIG_ATTR_REMOTE_WAKEUP|USB_CONFIG_ATTR_SELF_POWERED) // (USB_CONFIG_ATTR_REMOTE_WAKEUP|USB_CONFIG_ATTR_BUS_POWERED) //! USB Device string definitions (Optional) #define USB_DEVICE_MANUFACTURE_NAME "manufacturer" #define USB_DEVICE_PRODUCT_NAME "prod" #define USB_DEVICE_SERIAL_NAME " ... " //! To define a Low speed device //#define USB_DEVICE_LOW_SPEED //! To authorize the High speed #if (UC3A3||UC3A4) #define USB_DEVICE_HS_SUPPORT #endif #define UDC_VBUS_EVENT(b_vbus_high) main_vbus_action(b_vbus_high) //user_callback_vbus_action(b_vbus_high) #define UDC_SOF_EVENT() main_sof_action() //user_callback_sof_action() #define UDC_SUSPEND_EVENT() main_suspend_action() //user_callback_suspend_action() #define UDC_RESUME_EVENT() main_resume_action() //user_callback_resume_action() //! Mandatory when USB_DEVICE_ATTR authorizes remote wakeup feature #define UDC_REMOTEWAKEUP_ENABLE() main_remotewakeup_enable() //user_callback_remotewakeup_enable() #define UDC_REMOTEWAKEUP_DISABLE() main_remotewakeup_disable() //user_callback_remotewakeup_disable() //! When a extra string descriptor must be supported //! other than manufacturer, product and serial string //#define UDC_GET_EXTRA_STRING() main_extra_string() //! Control endpoint size #define USB_DEVICE_EP_CTRL_SIZE 64 //! Number of interfaces for this device #define USB_DEVICE_NB_INTERFACE 1 // 1 or more #define USB_DEVICE_MAX_EP 2 // 0 to max endpoint requested by interfaces / //! Interface callback definition #define UDI_HID_GENERIC_ENABLE_EXT() main_generic_enable() #define UDI_HID_GENERIC_DISABLE_EXT() main_generic_disable() #define UDI_HID_GENERIC_REPORT_OUT(ptr) main_hid_report(ptr) #define UDI_HID_GENERIC_SET_FEATURE(report) main_hid_set_feature(report) #define UDI_HID_REPORT_IN_SIZE 64 #define UDI_HID_REPORT_OUT_SIZE 64 #define UDI_HID_REPORT_FEATURE_SIZE 4 #define UDI_HID_GENERIC_EP_SIZE 64 //! Endpoint numbers definition #define UDI_HID_GENERIC_EP_OUT (1 | USB_EP_DIR_OUT) #define UDI_HID_GENERIC_EP_IN (2 | USB_EP_DIR_IN) //#define UDI_HID_GENERIC_STRING_ID 4 // JTAGICE3 CMSIS-DAP #define UDI_HID_GENERIC_EP_NB 2 //! Interface number #define UDI_HID_GENERIC_IFACE_NUMBER 0 //! USB Interfaces descriptor structure #define UDI_COMPOSITE_DESC_T \ udi_hid_generic_desc_t udi_hid_generic //! USB Interfaces descriptor value for Full Speed #define UDI_COMPOSITE_DESC_FS \ .udi_hid_generic = UDI_HID_GENERIC_DESC //! USB Interfaces descriptor value for High Speed #define UDI_COMPOSITE_DESC_HS \ .udi_hid_generic = UDI_HID_GENERIC_DESC //! USB Interface APIs #define UDI_COMPOSITE_API \ &udi_api_hid_generic подскажите куда копать.Спасибо Изменено 28 января, 2014 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 30 января, 2014 Опубликовано 30 января, 2014 · Жалоба Решил начать с композита хотя бы с одним интерфейсом Да, но ведь в вашем случае интерфейсов должно быть два, а никак не один. Я бы скачал BusHound не ниже шестого и посмотрел бы, на чем останавливается энумерация ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khorght 0 30 января, 2014 Опубликовано 30 января, 2014 · Жалоба Что с одним что с двумя интерфейсами результат одинаков - VID 0000 PID 0002, устройство сообщило об ошибке и было отключено,но насколько я понимаю я могу сделать стоклько интерфейсов сколько взбредет(учитывая конечно количество эндпойнтов в контроллере). Непонятно с чего но вдруг стало хотя бы определять, после того как стал жестко править структуры для Дувайса,Интерфейсов и прочего под свои значения, у меня там почти все нестандартные оказались, итог - определяет VID PID а интерфейсы наглухо не видит, перебросил проект с 1256 на 3256(наконецто допаял тестовую платку),так как в идеале мне нужно ХайСпид а Не Фулл(1256 только на Фулл работает)... итог - опять нагухо виснет в VID 0000. Насчет BusHound спасибо,попробую посмотреть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 30 января, 2014 Опубликовано 30 января, 2014 · Жалоба опять нагухо виснет в VID 0000. Насчет BusHound спасибо,попробую посмотреть. Поменять VID не пробовали ? И еще, HS требует качественной разводки ПП и хорошего кабеля. На некорректно разведенной ПП проект может и не заработать. Хотя энумерация всегда проводится на FS. В общем, вооружайтесь BusHound'ом ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khorght 0 30 января, 2014 Опубликовано 30 января, 2014 · Жалоба Да я уже атмеловские пробую VID PID, попробовал их пример композитка из мыши и массторэдж... где-то что они видимо правят помимо того что они описывают в аппноутах. плата...разводку уже думал перетравить на всякий случай и развести поплотнее,кабель добротный,не китай за 100 руб,но если я правильно понял ASF, что на мой дилетантский взгляд странно внутри этого ада - там в любом случае добавится конфигурация для FS, по крайней мере судя по Vendor class если я вообще отключу FS то у них макросами тогда закрыты все функции чтения записи в эндпойнты,только репорты остаются. как всегда... хотелось нахрапом сляпать быстренько и переключиться на что-то другое,а получится как с LAN...зато TCP/IP стэк весь перелопатил и даже свою реализацию рабочую накидал ))) дело за малым найти рабочую ссылу на не жадный BusHound или может Wireshark USBCap выручит. Спасибо за подсказки и удачных вам проектов,друзья. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 30 января, 2014 Опубликовано 30 января, 2014 · Жалоба Спасибо за подсказки и удачных вам проектов,друзья. Да, USB - штука непростая, с наскоку может и не выйти, придется глубоко вникать ... http://zalil.ru/34942957 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khorght 0 30 января, 2014 Опубликовано 30 января, 2014 (изменено) · Жалоба Да, USB - штука непростая, с наскоку может и не выйти, придется глубоко вникать ... http://zalil.ru/34942957 Огромнейшее спасибо за ссылку,но к сожалению у меня x64,придется покопаться в старых ноутах. Изменено 30 января, 2014 пользователем khorght Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 30 января, 2014 Опубликовано 30 января, 2014 · Жалоба Огромнейшее спасибо за ссылку. Рад был помочь :) На другой диск поставьте 32-разрядную систему. Например, у вас тогда будет две ОС - на "С" и на "D". Делов-то на полтора часа ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khorght 0 31 января, 2014 Опубликовано 31 января, 2014 · Жалоба Кое-как нашел один косяк - оказывается для 1256 USB CLOCK SRC можно(нужно?) выставить PLL1 которые заранее настроен на частоту 48,может можно и сразу нарпямую голый кварц тыкать,не проверял, а вот на 3256 такое уже не работает, надо выставлять источником просто кварц (если установлен 8, 12, 16 Мгц) и никаких множителей для PLL1 48МГц не надо, нигде в описании этого вроде не встречалось и не отложилось или отложилось не туда))) видимо ASF последней версии как-то сам множит как надо частоту, непонятно правда(чисто из любопытства) почему нельзя для ЮСБ использовать второй кварц, может мне основной приспичит что-то вроде 11.48 от которого USB уже не стартанет... теперь по крайней мере девайс стал опознаваться и слать декриптор устройства нормально,хотя дескрипторы интерфейсов ни в какую не желает слать хосту и остается открытым вопрос почему в оригинальных файлах фрэймворка для вендор класса висят два интерфейса, ну вот не нужен мне там лишний интерфейс и всё тут, который к тому же вообще заглушка какая-то в нем эндпойнтов нет))) ЗЫ. как же все-таки хорошо и удобно работать с LUFA, на первый тестовый проект с USB при условии что еще искал как и на чем накропать хостовую часть времени потратил около дня... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Antokha 0 30 сентября, 2014 Опубликовано 30 сентября, 2014 (изменено) · Жалоба Народ, у меня composite cdc + MSC заработал из ASF с небольшими танцами с бубном на conf_usb.h, НО по безопасному извлечению устройства отображаемый диск не размонтируется (в Windows)... что очень странно, могут быть проблемы с потерей данных. Так, ну ладно, нашел обработчик команды безопасное извлечение устройства (команда SCSI START STOP UNIT) udi_msc_sbc_start_stop и вписал после него udd_detach() - типа по обработчику все сделали можно демонтировать. Так в этом случае винда говорит на размонтирование устройства что оно с ошибкой произошло, то есть что-то не доработало до логического конца. Кто-нибудь если сталкивался подскажите куда копать. Вторая проблема при удалении файла с этого раздела он не сразу удаляется, поэтому функция сохраняющая данные в него при проверке говорит что файл не могу открыть и пытается создать новый. Изменено 30 сентября, 2014 пользователем Antokha Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться