请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC2531EMK 主题中讨论的其他器件:CC2531
我正在使用 CC2531 USB 软件狗进行产品开发、并使用 USB 示例源代码(swrc088)开发特定于供应商的类和协议、下面是我的描述符配置
配置描述符: wTotalLength: 0x0019 bNumInterfaces: 0x01 bConfigurationValue:0x01 iConfiguration: 0x00 bmAttributes: 0x80 (总线供电) 最大功率: 0x19 (50mA) 接口描述符: bInterfaceNumber: 0x00 bAlternateSetting:0x00 bNumEndpoints: 0x01 bInterfaceClass: 0xFF bInterfaceSubClass:0xFF bInterfaceProtocol:0xFF iInterface: 0x00 端点描述符: bEndpointAddress: 0x83 传输类型: 批量 wMaxPacketSize: 0x0040 (64) b 间隔: 0x05
下面是我的数据包的 Wireshark 转储,按照 USB_framework.c,我应该在 usbSetupData.pbuffer (usbfwSetupHandler())中接收数据,但当我调试时,我总是会看到一些垃圾数据。
void usbfwSetupHandler (void)
{
uint8 controlReg;
uint8 bytesNow;
uint8 oldEndpoint;
//保存旧索引设置,然后选择端点0并获取控制寄存
器 oldEndpoint = USBFW_GET_SELECT_END终结 点();
USBFW_SELECT_终结 点(0);
controlReg = USBCS0;
//如果
(usbfwData.ep0Status = EP_RX){
//读取 FIFO
字节 Now = USBCNT0;
usbfwReadFifo (&USBF0、bytesNow、usbSetupData.pbuffer);
usbSetupData.bytesLeft --=字节 Now;
usbSetupData.pbuffer +=字节 Now;
// Arm the 终结点
USBCS0 = usbSetupData.bytesLeft? USBCS0_CLR_OUTPKT_RDY:(USBCS0_CLR_OUTPKT_RDY | USBCS0_DATA_END);
//完成后,对相应的请求处理程序进行调用
if (usbSetupData.bytesLeft = 0){
if (ProcessFunc) ProcessFunc();
usbfwData.ep0Status = EP_IDLE;
}
//返回此处,因为在下一个中断之前不会再发生任何情况
USBFW_SELECT_终结 点(oldEndpoint);
return;
//让应用程序处理接收
}否则,如果(usbfwData.ep0Status == EP_MANUAL_RX){
ProcessFunc();
}
请提供我在这里遗漏的内容