реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> At32UC3A ASF USBComposite нужна помощь
khorght
сообщение Jan 28 2014, 16:22
Сообщение #1





Группа: Участник
Сообщений: 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] - для короткого!!!
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jan 30 2014, 12:58
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(khorght @ Jan 28 2014, 20:22) *
Решил начать с композита хотя бы с одним интерфейсом

Да, но ведь в вашем случае интерфейсов должно быть два, а никак не один.
Я бы скачал BusHound не ниже шестого и посмотрел бы, на чем останавливается энумерация ...
Go to the top of the page
 
+Quote Post
khorght
сообщение Jan 30 2014, 17:35
Сообщение #3





Группа: Участник
Сообщений: 11
Регистрация: 8-12-12
Пользователь №: 74 763



Что с одним что с двумя интерфейсами результат одинаков - VID 0000 PID 0002, устройство сообщило об ошибке и было отключено,но насколько я понимаю я могу сделать стоклько интерфейсов сколько взбредет(учитывая конечно количество эндпойнтов в контроллере). Непонятно с чего но вдруг стало хотя бы определять, после того как стал жестко править структуры для Дувайса,Интерфейсов и прочего под свои значения, у меня там почти все нестандартные оказались, итог - определяет VID PID а интерфейсы наглухо не видит, перебросил проект с 1256 на 3256(наконецто допаял тестовую платку),так как в идеале мне нужно ХайСпид а Не Фулл(1256 только на Фулл работает)... итог - опять нагухо виснет в VID 0000. Насчет BusHound спасибо,попробую посмотреть.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jan 30 2014, 18:19
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(khorght @ Jan 30 2014, 21:35) *
опять нагухо виснет в VID 0000. Насчет BusHound спасибо,попробую посмотреть.

Поменять VID не пробовали ? И еще, HS требует качественной разводки ПП и хорошего кабеля. На некорректно разведенной ПП проект может и не заработать. Хотя энумерация всегда проводится на FS. В общем, вооружайтесь BusHound'ом ...
Go to the top of the page
 
+Quote Post
khorght
сообщение Jan 30 2014, 19:05
Сообщение #5





Группа: Участник
Сообщений: 11
Регистрация: 8-12-12
Пользователь №: 74 763



Да я уже атмеловские пробую VID PID, попробовал их пример композитка из мыши и массторэдж... где-то что они видимо правят помимо того что они описывают в аппноутах. плата...разводку уже думал перетравить на всякий случай и развести поплотнее,кабель добротный,не китай за 100 руб,но если я правильно понял ASF, что на мой дилетантский взгляд странно внутри этого ада - там в любом случае добавится конфигурация для FS, по крайней мере судя по Vendor class если я вообще отключу FS то у них макросами тогда закрыты все функции чтения записи в эндпойнты,только репорты остаются. как всегда... хотелось нахрапом сляпать быстренько и переключиться на что-то другое,а получится как с LAN...зато TCP/IP стэк весь перелопатил и даже свою реализацию рабочую накидал ))) дело за малым найти рабочую ссылу на не жадный BusHound или может Wireshark USBCap выручит. Спасибо за подсказки и удачных вам проектов,друзья.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jan 30 2014, 19:13
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(khorght @ Jan 30 2014, 23:05) *
Спасибо за подсказки и удачных вам проектов,друзья.

Да, USB - штука непростая, с наскоку может и не выйти, придется глубоко вникать ...
http://zalil.ru/34942957
Go to the top of the page
 
+Quote Post
khorght
сообщение Jan 30 2014, 19:47
Сообщение #7





Группа: Участник
Сообщений: 11
Регистрация: 8-12-12
Пользователь №: 74 763



Цитата(kovigor @ Jan 30 2014, 23:13) *
Да, USB - штука непростая, с наскоку может и не выйти, придется глубоко вникать ...
http://zalil.ru/34942957


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

Сообщение отредактировал khorght - Jan 30 2014, 19:49
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jan 30 2014, 19:49
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(khorght @ Jan 30 2014, 23:47) *
Огромнейшее спасибо за ссылку.

Рад был помочь sm.gif
На другой диск поставьте 32-разрядную систему. Например, у вас тогда будет две ОС - на "С" и на "D". Делов-то на полтора часа ...
Go to the top of the page
 
+Quote Post
khorght
сообщение Jan 31 2014, 20:12
Сообщение #9





Группа: Участник
Сообщений: 11
Регистрация: 8-12-12
Пользователь №: 74 763



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

ЗЫ. как же все-таки хорошо и удобно работать с LUFA, на первый тестовый проект с USB при условии что еще искал как и на чем накропать хостовую часть времени потратил около дня...
Go to the top of the page
 
+Quote Post
Antokha
сообщение Sep 30 2014, 16:03
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th April 2024 - 14:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01528 секунд с 7
ELECTRONIX ©2004-2016