
前言 Demo 程序中,HID 和 Audio 单独运行都不会有问题,把 HID 和 Audio 整合在一起,同进传送数据时,会出现Audio 不能传送数据的情况。 + u) M( A9 n, ^$ g; p W, a n 根本原因 3 n3 u& E, R& h) m4 j 基本情况: 1. 当增加HID 的传输频率时,这种情况更容易出现。( y' T/ `6 O9 l/ X- T# T9 G 2. 当HID 包在帧开始时,不会出现这个问题。0 c: I5 l1 {7 T% ^1 \ 根本原因是相关的参考手册中描述的一个已知的问题。" Y8 q+ v& E( s F1 | 35.13.8 Worst case response time When the OTG_HS controller acts as a device, there is a worst case response time for any" m- X# _5 a$ x. b, p* _ tokens that follow an isochronous OUT. This worst case response time depends on the AHB+ h; n; r* |- _1 f clock frequency. The core registers are in the AHB domain, and the core does not accept another token+ P" g9 q- v- F before updating these register values. The worst case is for any token following an5 R# H* e# F- @- k$ o$ E isochronous OUT, because for an isochronous transaction, there is no handshake and the4 K' O# }# P% X. B) b1 b next token could come sooner. This worst case value is 7 PHY clocks when the AHB clock8 N& m ?3 Q" d u4 {5 M! K$ Z1 k' M X is the same as the PHY clock. When the AHB clock is faster, this value is smaller.3 J) ?( O3 W7 ^9 x0 R If this worst case condition occurs, the core responds to bulk/interrupt tokens with a NAK1 p0 b+ L x% C, f! l5 S; b5 z p8 u and drops isochronous and SETUP tokens. The host interprets this as a timeout condition9 D5 {) d8 L: s- s" L% r for SETUP and retries the SETUP packet. For isochronous transfers, the Incomplete- ?5 o& l- d9 n4 _/ E1 P" i isochronous IN transfer interrupt (IISOIXFR) and Incomplete isochronous OUT transfer, |! }# Z# n2 ^" ~+ S9 ` interrupt (IISOOXFR) inform the application that isochronous IN/OUT packets were/ u, g, e! @% V$ o dropped. 因此,建议在帧开始的时候或帧结束前开始发送HID 数据包。; _" x- p7 e1 E% b4 Y % P. f% V" g5 r/ i- G# p2 [7 J 解决方案:1 U. B! G& T" ^* _ 1. 在帧开始的时候发送数据。# W' { _4 R, k# C5 W! R 2. 在帧80%,85%,90%,95%时发送数据。通过设置 #define DCFG_FRAME_INTERVAL_80 0 #define DCFG_FRAME_INTERVAL_85 1 #define DCFG_FRAME_INTERVAL_90 2& z1 ~% w. V# C' C #define DCFG_FRAME_INTERVAL_95 3 3 R4 q$ h2 [% g2 B3 T) R1 F USBx_DEVICE->DCFG |= DCFG_FRAME_INTERVAL_80; RM0090 34.16.4 Device-mode registers OTG_FS device configuration register (OTG_FS_DCFG)/ k. A: p2 c7 P4 ]6 _0 G9 t0 k Bits 12:11 PFIVL: Periodic frame interval* G; G5 V4 Z- S7 \2 G4 @$ M Indicates the time within a frame at which the application must be notified using! j: ]: I" Z7 T" |. r the end of periodic frame interrupt. This can be used to determine if all the isochronous traffic for that9 p7 \, {: j6 D, ^/ s frame is complete. 00: 80% of the frame interval 01: 85% of the frame interval 10: 90% of the frame interval 11: 95% of the frame interval' ~: Y0 l; S( w I9 D 7 q) @: T. D! n7 M1 {( x8 [ H) ] ![]() |
这些实验的视频介绍比较重要 |
我也出现这个问题,文章里的处理方法是有 otg 设备的,我的是 stm32f103c8t6,没有 otg,有什么其他解决方法吗?0 `4 \" o" M; Z" E3 M- P. W |