首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMega: USB复合控制器上的CDC不能正常工作。

XMega: USB复合控制器上的CDC不能正常工作。
EN

Stack Overflow用户
提问于 2015-06-20 18:05:32
回答 2查看 994关注 0票数 0

对于一个项目,我正在制作一个USB键盘,它有几个按钮和键应该是可编程的。我选择了ATXMega32C4,因为它有USB支持,并且在Atmel Studio 6中有一个方便的ASF库。

我创建了一些Atmel Studio项目,让它充当键盘和CDC控制器,它们分别成功地工作。要将这两个功能结合起来,我必须将我的项目USB更改为一个复合设备。

,但问题是:在中,CDC控制器不能正确检测,而组合设备和键盘控制器是这样的。

我已经摆弄了端点地址来尝试解决这个问题,但是这不起作用,我不知道问题可能是什么。(当然,我在每次测试中都会改变PID )

我试图做什么来解决这个问题

更改最大端点/接口地址,更改CDC配置的端点/接口地址,为CDC设置不同的波特率,尝试复制Xplained的USB示例。

conf_usb.h

代码语言:javascript
复制
//! 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

任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-15 17:31:56

我认为,如果不删除解析的文件(与inf同名,但扩展名不同(.pnf)),您就无法更改.inf文件。在对.inf进行更改之前,我一直很幸运地删除了这个文件,然后下一次插入USB并创建一个新的.pnf文件。

票数 0
EN

Stack Overflow用户

发布于 2015-06-22 09:30:44

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30957263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档