Jump to content

    

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

 

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

Edited by IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

Share this post


Link to post
Share on other sites
Решил начать с композита хотя бы с одним интерфейсом

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
опять нагухо виснет в VID 0000. Насчет BusHound спасибо,попробую посмотреть.

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Спасибо за подсказки и удачных вам проектов,друзья.

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

http://zalil.ru/34942957

 

Share this post


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

http://zalil.ru/34942957

 

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

Edited by khorght

Share this post


Link to post
Share on other sites
Огромнейшее спасибо за ссылку.

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

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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

Edited by Antokha

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this