完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32_USB-FS-Device_Lib_V4.1.0 file :usb_core.c funciton name: RESULT Standard_ClearFeature(void) code : if (wIndex0 0x80) { /* IN endpoint */ if (_GetTxStallStatus(Related_Endpoint )) { ClearDTOG_TX(Related_Endpoint); SetEPTxStatus(Related_Endpoint, EP_TX_VALID); } } else { /* OUT endpoint */ if (_GetRxStallStatus(Related_Endpoint)) { if (Related_Endpoint == ENDP0) { /* After clear the STALL, enable the default endpoint receiver */ SetEPRxCount(Related_Endpoint, Device_Property.MaxPacketSize); _SetEPRxStatus(Related_Endpoint, EP_RX_VALID); } else { ClearDTOG_RX(Related_Endpoint); _SetEPRxStatus(Related_Endpoint, EP_RX_VALID); } } } question: i saw that status of IN endpint was set to VALID(EP_TX_VALID) after recover from HALT; i wonder why we don't set the status to NAK; The USB spec doesn't specify how to leave the endpoints after a halt is cleared. but for an interrupt IN endpoint such as a HID device,at that point when the endpoint recover from halt status,the device will send an packet with uncertain data to the host,since the host automatically query the device by IN token in a determined interval constantly,and it can be quite possible for the packet buffer contains uncertain data at that point; possible advice: just set the status to NAK,firmware could set it to VALID if necessary data get ready to transfer to host later. 主要意思是在一个端点从HALT状态恢复后,发送是有效的,那样的话,比如对于一个中断型的IN端点,会自动发给主机一个数据包,这个数据包的内容是不定的,很可能包含未知的数据; 疑问就是为何不在端点恢复后将发送端点设置为NAK,在固件准备好数据后在由固件设为VALID。
|
|
相关推荐
1个回答
|
|
STM32_USB-FS-Device_Lib_V4.1.0 是 STMicroelectronics 提供的一个用于 STM32 微控制器的 USB 设备固件库。在您提到的代码段中,`Standard_ClearFeature` 函数的作用是清除 USB 端点的特征。这个函数是 USB 标准设备请求的一部分,用于处理 SET_FEATURE 请求。
在 USB 协议中,SET_FEATURE 请求用于设置或清除特定的 USB 特征,例如STALL(阻塞)特征。当收到 SET_FEATURE 请求并指定 ENDPOINT_HALT 特征时,设备需要清除指定端点的 STALL 状态。 在您提供的代码段中,`Standard_ClearFeature` 函数首先检查 wIndex0 参数(一个 16 位的参数,用于指定要操作的端点)以确定是输入端点还是输出端点。如果 wIndex0 的低 7 位(0x80)为 1,表示是输入端点。 接下来,代码检查指定端点的传输状态是否为 STALL。如果是,它将清除数据令牌翻转位(DTOG_TX),然后设置端点传输状态。这里的关键是,代码并没有将发送端点设置为 NAK(不应答),而是根据 USB 协议的要求,清除 STALL 状态并恢复正常的端点传输。 USB 协议规定,在清除 STALL 状态后,设备应该准备好接收或发送数据,而不是进入 NAK 状态。NAK 状态通常用于设备忙或无法立即处理请求时。在这种情况下,清除 STALL 状态后,设备应该准备好继续处理数据传输。 总之,STM32_USB-FS-Device_Lib_V4.1.0 在端点恢复后不将发送端点设置为 NAK,是因为 USB 协议要求在清除 STALL 状态后,设备应该恢复正常的端点传输状态,而不是进入 NAK 状态。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1618 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1545 浏览 1 评论
979 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1597 浏览 2 评论
1864浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
645浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
516浏览 3评论
532浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
505浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 21:45 , Processed in 1.130916 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号