|
|
|
At32UC3A ASF USBComposite нужна помощь |
|
|
|
Jan 28 2014, 16:22
|
Группа: Участник
Сообщений: 11
Регистрация: 8-12-12
Пользователь №: 74 763
|
Здравствуйте,уважаемые. пытаюсь написать проект композитного ЮСБ устройста HIDGeneric + Vendor , отдельно как сингл интерфейс устройства стартуют(тоесть настройка кварца,инициализация и т.д. проходят корректно поэтому эту часть не выкладываю как заведомо рабочую), при попытке впихнуть их оба в композит девайс устройство не опознается системой, видится как VID 0000 PID 0002 и останавливается системой как выдавшее ошибку, естесственно я задаю совершенно другие VIP & PID. Решил начать с композита хотя бы с одним интерфейсом,та же ситуация VID 0000 PID 0002 мой usb_conf.h: (VID PID заменил на XXXX, MANUFACTURE,DEVICE,SERIAL...тоже, извините) CODE //! 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 подскажите куда копать.Спасибо
Сообщение отредактировал IgorKossak - Jan 28 2014, 18:35
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
Jan 30 2014, 17:35
|
Группа: Участник
Сообщений: 11
Регистрация: 8-12-12
Пользователь №: 74 763
|
Что с одним что с двумя интерфейсами результат одинаков - VID 0000 PID 0002, устройство сообщило об ошибке и было отключено,но насколько я понимаю я могу сделать стоклько интерфейсов сколько взбредет(учитывая конечно количество эндпойнтов в контроллере). Непонятно с чего но вдруг стало хотя бы определять, после того как стал жестко править структуры для Дувайса,Интерфейсов и прочего под свои значения, у меня там почти все нестандартные оказались, итог - определяет VID PID а интерфейсы наглухо не видит, перебросил проект с 1256 на 3256(наконецто допаял тестовую платку),так как в идеале мне нужно ХайСпид а Не Фулл(1256 только на Фулл работает)... итог - опять нагухо виснет в VID 0000. Насчет BusHound спасибо,попробую посмотреть.
|
|
|
|
|
Jan 30 2014, 19:05
|
Группа: Участник
Сообщений: 11
Регистрация: 8-12-12
Пользователь №: 74 763
|
Да я уже атмеловские пробую VID PID, попробовал их пример композитка из мыши и массторэдж... где-то что они видимо правят помимо того что они описывают в аппноутах. плата...разводку уже думал перетравить на всякий случай и развести поплотнее,кабель добротный,не китай за 100 руб,но если я правильно понял ASF, что на мой дилетантский взгляд странно внутри этого ада - там в любом случае добавится конфигурация для FS, по крайней мере судя по Vendor class если я вообще отключу FS то у них макросами тогда закрыты все функции чтения записи в эндпойнты,только репорты остаются. как всегда... хотелось нахрапом сляпать быстренько и переключиться на что-то другое,а получится как с LAN...зато TCP/IP стэк весь перелопатил и даже свою реализацию рабочую накидал ))) дело за малым найти рабочую ссылу на не жадный BusHound или может Wireshark USBCap выручит. Спасибо за подсказки и удачных вам проектов,друзья.
|
|
|
|
|
Jan 30 2014, 19:47
|
Группа: Участник
Сообщений: 11
Регистрация: 8-12-12
Пользователь №: 74 763
|
Цитата(kovigor @ Jan 30 2014, 23:13) Да, USB - штука непростая, с наскоку может и не выйти, придется глубоко вникать ... http://zalil.ru/34942957Огромнейшее спасибо за ссылку,но к сожалению у меня x64,придется покопаться в старых ноутах.
Сообщение отредактировал khorght - Jan 30 2014, 19:49
|
|
|
|
|
Jan 31 2014, 20:12
|
Группа: Участник
Сообщений: 11
Регистрация: 8-12-12
Пользователь №: 74 763
|
Кое-как нашел один косяк - оказывается для 1256 USB CLOCK SRC можно(нужно?) выставить PLL1 которые заранее настроен на частоту 48,может можно и сразу нарпямую голый кварц тыкать,не проверял, а вот на 3256 такое уже не работает, надо выставлять источником просто кварц (если установлен 8, 12, 16 Мгц) и никаких множителей для PLL1 48МГц не надо, нигде в описании этого вроде не встречалось и не отложилось или отложилось не туда))) видимо ASF последней версии как-то сам множит как надо частоту, непонятно правда(чисто из любопытства) почему нельзя для ЮСБ использовать второй кварц, может мне основной приспичит что-то вроде 11.48 от которого USB уже не стартанет... теперь по крайней мере девайс стал опознаваться и слать декриптор устройства нормально,хотя дескрипторы интерфейсов ни в какую не желает слать хосту и остается открытым вопрос почему в оригинальных файлах фрэймворка для вендор класса висят два интерфейса, ну вот не нужен мне там лишний интерфейс и всё тут, который к тому же вообще заглушка какая-то в нем эндпойнтов нет)))
ЗЫ. как же все-таки хорошо и удобно работать с LUFA, на первый тестовый проект с USB при условии что еще искал как и на чем накропать хостовую часть времени потратил около дня...
|
|
|
|
|
Sep 30 2014, 16:03
|
Участник
Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078
|
Народ, у меня composite cdc + MSC заработал из ASF с небольшими танцами с бубном на conf_usb.h, НО по безопасному извлечению устройства отображаемый диск не размонтируется (в Windows)... что очень странно, могут быть проблемы с потерей данных. Так, ну ладно, нашел обработчик команды безопасное извлечение устройства (команда SCSI START STOP UNIT) udi_msc_sbc_start_stop и вписал после него udd_detach() - типа по обработчику все сделали можно демонтировать. Так в этом случае винда говорит на размонтирование устройства что оно с ошибкой произошло, то есть что-то не доработало до логического конца. Кто-нибудь если сталкивался подскажите куда копать. Вторая проблема при удалении файла с этого раздела он не сразу удаляется, поэтому функция сохраняющая данные в него при проверке говорит что файл не могу открыть и пытается создать новый.
Сообщение отредактировал Antokha - Sep 30 2014, 16:03
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|