STC8H8K64U 的 USB 功能测试(续)
对 STC8H8K64U 的USB测试昨天没搞定, 判断可能是供电的问题, 直接用5V不行, 从USB2TTL上采电3.3V时存在一个问题, 就是 D-/D+ 在上电前就已经连接了, 不符合 USB 的正常上电流程, 在 MCU 开始工作前接入 D-/D+, 可能会造成host的请求无法响应.
今天用AMS1117做了一个转接板, 把USB的5V转为3.3V给MCU供电. 现在连上USB接口就能正常识别了.
转接板
一边是 MicroUSB 口, 加 AMS1117 3.3V, 在 VCC In 上是 2.5uF + 10nF, VCC Out 上是 2.5uF + 100uF, 空载时测试电压是 5.1V 和 3.27V
接线
转接板 STC8H8K64U
3.3V -> VCC
D- -> P3.0
D+ -> P3.1
GND -> GND
代码
测试代码下载地址 http://www.stcmcudata.com/STC8F-DATASHEET/STC8H8K64U-DEMO-CODE.ZIP , 使用其中的"39-通过USB发送命令读取ADC测试程序", 这个目录下还有一个上位机测试软件 STC USB-HID Demo.exe
测试
正常编译烧录后, 按上面的接线, 连上PC, P3.2 如果有连接, 无论是高电平还是低电平, Win10都无法正常识别, 所以将 P3.2 悬空
上电后, STC8H8K64U 会先进入 ISP 模式, 再进入正常模式(运行用户代码)
- 如果这时候 D-/D+ 快速接入(将USB快速插进接口), HOST产生了查询, 就会停留在 ISP 模式
- 这个状态与是否打开了 STC-ISP 没有关系, 开不开 STC-ISP, 都会进入 ISP 模式.
- 因为转接卡有电容, 能保持几秒到十几秒的电量
- 如果当前是ISP模式, 断开再接入, 不管快速还是慢速, 都很可能还保持在ISP模式
- 如果当前是正常模式, 断开再接入也大概率保持正常模式
ISP模式
ISP模式和正常模式在设备管理器看到的设备是一样的, 要在属性里查看 VIP PID来判断. ISP模式下对应的是 34BF,1001
设备管理器
STC-ISP, 在这个模式下, 如果打开 STC-ISP, 就能看到对应的设备
正常模式
如果D-/D+接入与上电有一些时间间隔, 即插入USB的速度放慢一些, STC8H8K64U 在ISP模式后会进入正常模式, 继续执行用户代码,
这个测试中因为烧录了HID演示代码, 会识别到新的HID设备.
设备管理器
Bus Hound
上位机测试
Bus Hound 捕获的通信
结束
以上检测了 STC8H8K64U 上的 USB 基础功能, 后续可能会继续做一些测试. 现在存在的问题是: 如何避免接入USB时进入ISP模式? 只靠USB接入速度来控制是不行的.
更新
进一步测试, 发现问题在于 P3.2 的连线太长, 正确的做法是
- 将 P3.2 通过一个100-200R的电阻与GND连接, 连线长度控制在10cm以内, 就能确保每次连接都正确识别并进入 ISP 模式.
- 将 P3.2 通过一个3-5KR的电阻与3.3V连接, 同样连线不能太长, 可以确保正确识别并进入正常模式