在基于Infineon(原Cypress)的AN75779应用笔记实现USB CDC通信时,需要以下关键步骤和注意事项:
1. AN75779与CDC通信基础
- AN75779的核心功能:该应用笔记提供了USB设备固件开发的框架,通常默认支持HID、大容量存储等USB类。需要修改其USB配置以支持CDC类。
- CDC类特性:
- 虚拟串口通信(VCOM)
- 需要
CDC ACM(Abstract Control Model)子类
- 使用批量传输(Bulk Endpoint)或中断传输(Interrupt Endpoint)
2. 必要的修改步骤
(1) 修改USB描述符
- 设备描述符:
const uint8_t CYCODE USB_DEVICE_DESCRIPTOR[] = {
0x12, // bLength
0x01, // bDescriptorType (Device)
0x00, 0x02, // bcdUSB (USB 2.0)
0x02, // bDeviceClass (CDC)
0x00, // bDeviceSubClass
0x00, // bDeviceProtocol
0x40, // bMaxPacketSize0
... // VID/PID等
};
配置描述符:
- 添加CDC功能描述符(如
Header Functional Descriptor, ACM Functional Descriptor, Union Functional Descriptor)
- 示例片段:
// CDC Header Functional Descriptor
0x05, // bLength
0x24, // bDescriptorType (CS_INTERFACE)
0x00, // bDescriptorSubtype (Header)
0x10, 0x01, // bcdCDC (1.10)
// ACM Functional Descriptor
0x04, // bLength
0x24, // CS_INTERFACE
0x02, // Subtype: ACM
0x02, // Capabilities (支持Set_Line_Coding等)
// Union Functional Descriptor
0x05, // bLength
0x24, // CS_INTERFACE
0x06, // Subtype: Union
0x00, // Master Interface (通信接口)
0x01 // Slave Interface (数据接口)
(2) 端点配置
- 通信接口(Interrupt Endpoint):
- 数据接口(Bulk Endpoint):
3. 关键代码实现
(1) 处理CDC类请求
在USBFS_SetupCallback()函数中添加对CDC特定请求的处理:
switch (requestType) {
case USB_SET_INTERFACE:
// 处理接口设置
break;
case USB_CLASS_REQ:
switch (bRequest) {
case 0x20: // SET_LINE_CODING
// 保存波特率、数据位等配置
memcpy(&lineCoding, pData, sizeof(lineCoding));
break;
case 0x21: // GET_LINE_CODING
memcpy(pData, &lineCoding, sizeof(lineCoding));
break;
case 0x22: // SET_CONTROL_LINE_STATE
// 控制DTR/RTS信号
break;
}
break;
}
(2) 数据收发逻辑
- 发送数据(通过批量IN端点):
uint8_t txBuffer[64];
// 填充数据到txBuffer
USB_LoadInEP(CDC_DATA_IN_EP, txBuffer, sizeof(txBuffer));
- 接收数据(通过批量OUT端点):
uint8_t rxBuffer[64];
if (USB_GetEPState(CDC_DATA_OUT_EP) == USB_OUT_BUFFER_FULL) {
uint32_t count = USB_GetEPCount(CDC_DATA_OUT_EP);
memcpy(rxBuffer, USB_GetOutEPBuffer(CDC_DATA_OUT_EP), count);
// 处理接收到的数据
}
4. 参考资料与工具
- Infineon官方文档:
- 调试工具:
- USBlyzer或Wireshark:捕获USB数据包,验证描述符和通信流程
- Infineon USBCheck工具:验证USB协议合规性
- 示例代码:
- 参考Infineon SDK中的
USB_CDC_Example项目(如CY8CKIT-049)
5. 上位机通信示例
6. 常见问题
- 驱动安装:
- Windows可能需要
.inf文件(参考Infineon提供的cyusb.inf)
- Linux/MacOS通常自动识别CDC设备
- 端点冲突:确保AN75779原有代码中的端点分配与CDC端点无冲突
- 数据传输延迟:优化缓冲区管理,使用DMA传输(如果硬件支持)
通过以上步骤,您应能基于AN75779框架实现完整的USB CDC通信。建议从Infineon官方支持论坛获取最新的代码示例和补丁。
|
|
|
2025-5-23 18:20:17
评论
举报
|
|
|
|