ST意法半导体
直播中

凤毛麟角

9年用户 1026经验值
私信 关注
[问答]

关于STM32L4x6上OTG-FS的一些问题求解

我们正在尝试通过使用安装在 STM32L476 上的 OTG_FS IP 的 USB 主机内核,以高速和低软件负载接收批量短数据包(最大数据包大小 4 字节)。

先决条件
・我不使用 cubemx 生成的代码。
・主机和设备一对一连接。(我不使用集线器)
・激活管仅为散装管(处于稳定状态,不包括控制管)。
・最大数据包大小为 8 字节。
・OTG_FS 内核被强制作为 USB host-only 工作(FHMOD@OTG_GUSBCFG = 1)。
・AHB CLK 为 75MHz。

在实现上面的过程中,我有一些疑问。

1.去抖完成中断(DBCDNE@OTG_GOTGINT)
我正在考虑在端口连接检测到中断 (PCDET@OTG_HPRT) 之后使用 DBCDNE 中断等待电气去抖周期。

但是,手册指出,除非启用 HNPCAP 或 SRPCAP,否则不会发生 DBCDNE 中断。

不使用host-only模式和HNP/SRP功能时,DBCDNE中断可以不使用吗?

2.NAK中断
为了减少软件负载,我想通过内部定序器的自主操作进行 IN-NAK 轮询,而不是每次 IN-NAK 轮询时都生成 NAK 中断。

但不幸的是,对于连续的IN-NAK轮询,似乎NAK中断使能和中断例程清除中断是必不可少的。

是否可以在没有软件干预的情况下保持 USB 主机核心定序器运行 IN-NAK 轮询?

3. IN-NAK轮询频率
我想增加 HOST 进行 IN-NAK 轮询的频率,以便以高速和严格的时序获取数据。

不幸的是,IN-NAK 轮询每帧仅进行 20 次。

通用串行总线规范修订版 2.0 的表 5-9 指出,当数据有效载荷为 8 字节时,每帧可以发出 71 次传输。

当然,我认为轮询间隔会根据目标设备的响应性能略有变化....
在不考虑目标设备响应性能的情况下,USBHost sequencer每帧可以发出多少次IN token?

回帖(1)

倪驰銮

2023-2-6 09:59:57
1. 我不知道,从未使用过 OTG 工具,但我也没有理由在这个特定问题上怀疑 RM
2. 不,硬件中没有自动 NAK 处理,您必须在软件中进行。
3. 可能主机和设备软件都给定了。在堆栈处理(中断)开始和结束时观察主机和设备上的总线流量和切换引脚,以评估主要瓶颈在哪里。
--
在与 OTG_USB 模块的怪癖斗争了很长一段时间后,我什至不认为它是连接两个 STM32 的可行选择。YMMV。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分