完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想用 EP0 测试 USB3.0 的速度。 主机通过控制传输向 FX3 的 EP0 发送 512 字节数据(FX3 的 EP0 最大数据包大小为 512 字节),我发现固件程序必须在设置数据包的回调函数中调用 CyU3PUsbGetEP0Data(512, recvBuf,NULL) 函数,主机才能继续发送。 是否通过控制权转移来实现?
以下是代码片段,请注意对 0x81 的处理: /* 处理 USB 设置请求的回调。 */ CyBool_t CyFxBulkLoopApplication::CyFxBulkLpApplnUSBSetuPCB ( uint32_t setupdat0, /* SETUP Data 0 */ uint32_t setupdat1 /* SETUP Data 1 */ ) { ... if (bType == CY_U3P_USB_Vendor_RQT) { 如果 (bRequest == 0xE0) { isHandled = CyTrue; CyU3PUsbAckSetup (); CyU3PThreadSleep (100); CyU3PDeviceReset(CyFalse); } else if(bRequest==0x80) { isHandled = CyTrue; if(bReqType == 0x42) { CyU3PUsbGetEP0Data(5, (uint8_t*)glBulkLoop_p->recvBuf, NULL); //将收到的字符大转小,小转大 for (uint8_t i=0;i<5;i++) { uint8_t ch = glBulkLoop_p->recvBuf[i]; if (ch>= 'a' ch<= 'z') glBulkLoop_p->recvBuf[i] = ch ~32; // 转换为大写 else if (ch>= 'A' ch<= 'Z') glBulkLoop_p->recvBuf[i] = ch | 32; // 转换为小写 } } else if(bReqType == 0xC2) { CyU3PUsbSendEP0Data(5, glBulkLoop_p->recvBuf); } } else if (bRequest == 0x81) { isHandled = CyTrue; 如果 (bReqType == 0x42) { /*必须这样做,主机才能继续发送。*/ CyU3PUsbGetEP0Data(512, (uint8_t*)glBulkLoop_p->recvBuf, NULL); } } } } |
|
相关推荐
1个回答
|
|
根据您提供的信息,您想使用EP0测试USB 3.0的速度。在这种情况下,您需要确保在固件程序中正确处理USB设置请求的回调函数。以下是一些建议和解释:
1. 首先,确保您已经正确初始化了FX3设备,并配置了EP0作为控制端点。 2. 在处理USB设置请求的回调函数中,您需要检查接收到的请求类型。根据您的代码片段,您已经检查了bType字段。这是正确的,因为bType字段表示请求类型。 3. 对于0x81请求,这是一个控制传输请求,其中数据从主机传输到设备。在这种情况下,您需要在设置数据包的回调函数中调用`CyU3PUsbGetEP0Data(512, recvBuf, NULL)`函数。这个函数的作用是从EP0接收数据,并将数据存储在`recvBuf`缓冲区中。 4. 在调用`CyU3PUsbGetEP0Data`函数后,您需要确保正确处理接收到的数据。这可能包括检查数据长度、处理数据等。 5. 最后,您需要确保在回调函数中返回正确的状态。如果处理成功,返回`true`;如果处理失败,返回`false`。 以下是修改后的代码片段: ```c /* 处理 USB 设置请求的回调。 */ CyBool_t CyFxBulkLoopApplication::CyFxBulkLpApplnUSBSetupCB (uint32_t setupdat0, /* SETUP Data 0 */ uint32_t setupdat1 /* SETUP Data 1 */) { ... if (bType == ...) { // 检查请求类型 if (request == 0x81) { // 控制传输请求,从主机接收数据 CyU3PReturnStatus_t status = CyU3PUsbGetEP0Data(512, recvBuf, NULL); if (status == CY_U3P_SUCCESS) { // 处理接收到的数据 ... return true; // 处理成功 } else { return false; // 处理失败 } } } ... } ``` 通过以上步骤,您应该能够正确处理USB 3.0的控制传输请求,并测试EP0的速度。请注意,实际速度可能会受到硬件、固件和软件等多种因素的影响。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教个XMC1404调试串口接收时为什么一直无法接收数据的问题
200 浏览 0 评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5736 浏览 2 评论
4090 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3606 浏览 9 评论
1215 浏览 8 评论
432浏览 2评论
257浏览 2评论
366浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5752浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
435浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-5 00:19 , Processed in 0.613961 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号