开发产品时采用了沁恒ch592,做USB开发时遇到了一个奇葩的无法枚举问题。
典型症状
使用USB线直连电脑时没有问题,可以正常使用。
如果接入某些特定方案的USB Hub(例如GL3510
、GL3520
),可能会出现以下2种情况:
- 无法枚举,USB Hub会频繁发送Reset请求,最后系统停止识别而报错
- 复位请求无法触发USB中断函数
此时代码具备如下特征:
- 使用tmos
- 启用了低功耗
- 设备通过USB Hub接入到主机,目前测试到
GL3510
、GL3520
会出现此问题
解决方案
经过与ble翟工沟通,确认该问题由启用了芯片低功耗HAL_SLEEP
导致,关闭低功耗即可。
同时翟工也跟给出2个方案:
- 比较稳妥的办法是多加一个IO口,接到USB的外壳,外壳一般会在电脑端接地,这样IO判断到被拉低了,就直接return不去休眠。
- 或者在触发了USB的中断之后,置标志变量,加一个事件延时一段事件后清标志变量,在一段时间内判断是否完成了USB枚举。
原因分析
本人手中有5款扩展坞,目前测试有两款会导致此问题,经过拆解后发现其主控为GL3510
、GL3520
。经过和翟工讨论状态,推测原因为该芯片对时序要求较高,由于低功耗以及TMOS导致mcu没有及时反馈reset的响应信号,导致hub认为设备异常,从而频繁发送reset。
文章
如果各位有语音播报需求,想在组态软件、监控系统中采用语音播报、语音合成器、485语音播报器、声光报警灯、语音报警器,可以参考
Zabbix与声光报警灯语音告警语音播报
其中以典型的Zabbix为例,讲解如何使用语音通知终端对接Zabbix平台。