2015-06-20 116 views
0

对于我正在制作USB键盘的项目,它有几个按钮,按键应该是可编程的。我选择了ATXMega32C4,因为它具有USB支持以及Atmel Studio 6中方便的ASF库。XMega:USB复合控制器上的CDC无法正常工作

我已经创建了一些Atmel Studio项目,让它可以作为键盘以及CDC控制器使用他们成功地工作。为了结合这两个功能,我必须将我的项目USB更改为复合设备。

但是,这里是问题:在复合设备和键盘控制器中,CDC控制器在Windows中检测不到。

我已经弄清了端点地址来尝试解决问题,但是这并不奏效,我不知道问题的症结所在。(当然,我在每次测试时都会更改PID )

我试图做的来解决这个问题

变化最大端点/接口地址,CDC配置的变化端点/接口地址,设置不同的波特率为CDC,试图复制USB Xplained的例子。

conf_usb.h

//! Control endpoint size 
#define USB_DEVICE_EP_CTRL_SIZE  64 
//! Number of interfaces for this device 
// 1 or more 
#define USB_DEVICE_NB_INTERFACE  3 
//! Total endpoint used by all interfaces 
// 0 to max endpoint requested by interfaces 
#define USB_DEVICE_MAX_EP    4 
//! Endpoint numbers definition 
#define UDI_HID_KBD_EP_IN   (1 | USB_EP_DIR_IN) 

//! Interface number 
#define UDI_HID_KBD_IFACE_NUMBER 0 

//! Endpoints' numbers used by single or first CDC port 
#define UDI_CDC_DATA_EP_IN_0   (2 | USB_EP_DIR_IN) // TX 
#define UDI_CDC_DATA_EP_OUT_0   (3 | USB_EP_DIR_OUT) // RX 
#define UDI_CDC_COMM_EP_0    (4 | USB_EP_DIR_IN) // Notify endpoint 

//! Interface numbers used by single or first CDC port 
#define UDI_CDC_COMM_IFACE_NUMBER_0 1 
#define UDI_CDC_DATA_IFACE_NUMBER_0 2 

//! USB Interfaces descriptor structure 
#define UDI_COMPOSITE_DESC_T \ 
udi_hid_kbd_desc_t udi_hid_kbd; \ 
usb_iad_desc_t udi_cdc_iad; \ 
udi_cdc_comm_desc_t udi_cdc_comm; \ 
udi_cdc_data_desc_t udi_cdc_data 
//! USB Interfaces descriptor value for Full Speed 
#define UDI_COMPOSITE_DESC_FS \ 
.udi_hid_kbd = UDI_HID_KBD_DESC, \ 
.udi_cdc_iad = UDI_CDC_IAD_DESC_0, \ 
.udi_cdc_comm = UDI_CDC_COMM_DESC_0, \ 
.udi_cdc_data = UDI_CDC_DATA_DESC_0_FS 

//! USB Interfaces descriptor value for High Speed 
#define UDI_COMPOSITE_DESC_HS \ 
.udi_cdc_iad    = UDI_CDC_IAD_DESC_0, \ 
.udi_cdc_comm    = UDI_CDC_COMM_DESC_0, \ 
.udi_cdc_data    = UDI_CDC_DATA_DESC_0_HS 
//! USB Interface APIs 
#define UDI_COMPOSITE_API \ 
&udi_api_hid_kbd, \ 
&udi_api_cdc_comm, \ 
&udi_api_cdc_data 

作进一步检查,我上传了一些文件,可以帮助:

conf_usb.h:http://puu.sh/iwdQi/1551aa928a.h

的main.c:http://puu.sh/iwdQ7/df8fc8728a.c

任何帮助将不胜感激!

回答

0

解决方案是手动安装CDC驱动程序。我认为它应该像其他示例一样自动检测CDC端口,但它不会。

0

我不认为你可以在不删除解析文件(与inf相同的名称,但扩展名不同(.pnf))的情况下更改.inf文件。在更改.inf之前,我一直有幸删除此文件,然后插入USB,并创建一个新的.pnf文件。