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

    

At32UC3A ASF USBComposite нужна помощь

Здравствуйте,уважаемые. пытаюсь написать проект композитного ЮСБ устройста 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

 

подскажите куда копать.Спасибо

Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Решил начать с композита хотя бы с одним интерфейсом

Да, но ведь в вашем случае интерфейсов должно быть два, а никак не один.

Я бы скачал BusHound не ниже шестого и посмотрел бы, на чем останавливается энумерация ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что с одним что с двумя интерфейсами результат одинаков - VID 0000 PID 0002, устройство сообщило об ошибке и было отключено,но насколько я понимаю я могу сделать стоклько интерфейсов сколько взбредет(учитывая конечно количество эндпойнтов в контроллере). Непонятно с чего но вдруг стало хотя бы определять, после того как стал жестко править структуры для Дувайса,Интерфейсов и прочего под свои значения, у меня там почти все нестандартные оказались, итог - определяет VID PID а интерфейсы наглухо не видит, перебросил проект с 1256 на 3256(наконецто допаял тестовую платку),так как в идеале мне нужно ХайСпид а Не Фулл(1256 только на Фулл работает)... итог - опять нагухо виснет в VID 0000. Насчет BusHound спасибо,попробую посмотреть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
опять нагухо виснет в VID 0000. Насчет BusHound спасибо,попробую посмотреть.

Поменять VID не пробовали ? И еще, HS требует качественной разводки ПП и хорошего кабеля. На некорректно разведенной ПП проект может и не заработать. Хотя энумерация всегда проводится на FS. В общем, вооружайтесь BusHound'ом ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да я уже атмеловские пробую VID PID, попробовал их пример композитка из мыши и массторэдж... где-то что они видимо правят помимо того что они описывают в аппноутах. плата...разводку уже думал перетравить на всякий случай и развести поплотнее,кабель добротный,не китай за 100 руб,но если я правильно понял ASF, что на мой дилетантский взгляд странно внутри этого ада - там в любом случае добавится конфигурация для FS, по крайней мере судя по Vendor class если я вообще отключу FS то у них макросами тогда закрыты все функции чтения записи в эндпойнты,только репорты остаются. как всегда... хотелось нахрапом сляпать быстренько и переключиться на что-то другое,а получится как с LAN...зато TCP/IP стэк весь перелопатил и даже свою реализацию рабочую накидал ))) дело за малым найти рабочую ссылу на не жадный BusHound или может Wireshark USBCap выручит. Спасибо за подсказки и удачных вам проектов,друзья.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спасибо за подсказки и удачных вам проектов,друзья.

Да, USB - штука непростая, с наскоку может и не выйти, придется глубоко вникать ...

http://zalil.ru/34942957

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Да, USB - штука непростая, с наскоку может и не выйти, придется глубоко вникать ...

http://zalil.ru/34942957

 

Огромнейшее спасибо за ссылку,но к сожалению у меня x64,придется покопаться в старых ноутах.

Изменено пользователем khorght

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Огромнейшее спасибо за ссылку.

Рад был помочь :)

На другой диск поставьте 32-разрядную систему. Например, у вас тогда будет две ОС - на "С" и на "D". Делов-то на полтора часа ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кое-как нашел один косяк - оказывается для 1256 USB CLOCK SRC можно(нужно?) выставить PLL1 которые заранее настроен на частоту 48,может можно и сразу нарпямую голый кварц тыкать,не проверял, а вот на 3256 такое уже не работает, надо выставлять источником просто кварц (если установлен 8, 12, 16 Мгц) и никаких множителей для PLL1 48МГц не надо, нигде в описании этого вроде не встречалось и не отложилось или отложилось не туда))) видимо ASF последней версии как-то сам множит как надо частоту, непонятно правда(чисто из любопытства) почему нельзя для ЮСБ использовать второй кварц, может мне основной приспичит что-то вроде 11.48 от которого USB уже не стартанет... теперь по крайней мере девайс стал опознаваться и слать декриптор устройства нормально,хотя дескрипторы интерфейсов ни в какую не желает слать хосту и остается открытым вопрос почему в оригинальных файлах фрэймворка для вендор класса висят два интерфейса, ну вот не нужен мне там лишний интерфейс и всё тут, который к тому же вообще заглушка какая-то в нем эндпойнтов нет)))

 

ЗЫ. как же все-таки хорошо и удобно работать с LUFA, на первый тестовый проект с USB при условии что еще искал как и на чем накропать хостовую часть времени потратил около дня...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Народ, у меня composite cdc + MSC заработал из ASF с небольшими танцами с бубном на conf_usb.h, НО по безопасному извлечению устройства отображаемый диск не размонтируется (в Windows)... что очень странно, могут быть проблемы с потерей данных. Так, ну ладно, нашел обработчик команды безопасное извлечение устройства (команда SCSI START STOP UNIT) udi_msc_sbc_start_stop и вписал после него udd_detach() - типа по обработчику все сделали можно демонтировать. Так в этом случае винда говорит на размонтирование устройства что оно с ошибкой произошло, то есть что-то не доработало до логического конца. Кто-нибудь если сталкивался подскажите куда копать.

Вторая проблема при удалении файла с этого раздела он не сразу удаляется, поэтому функция сохраняющая данные в него при проверке говорит что файл не могу открыть и пытается создать новый.

Изменено пользователем Antokha

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация