遇到反馈最多的问题是收不了数据,发不了数据。
多半是不清楚USB数据收发的机制导致。这里不做教学,只讲怎么用起来。
以CH554EVT.ZIP为代码基础,寄存器说明参考CH554DS1.PDF
文中所有提到的代码均以伪代码形式,便于理解。
先总结:
USB设备片面的理解是“被动的”。USB主要就是上传(IN事务,DEVICE->HOST)和下传(OUT事务,HOST->DEVICE)。上传的被动体现在设备准备好需要上传的数据之后,等着主机来将数据取走。下传的被动体现在设备需要准备好空闲的缓冲区,等着主机将数据发下来。数据什么时候流动,流动方向是什么,完全取决于主机,主机怎么控制数据流,取决于协议(这个协议包括标准USB CLASS协议,还有用户自定交互流程)。
因为这个被动,就会产生问题:
1、什么时候才表示主机将数据取走了、什么时候主机已经把数据发下来了。
2、上传数据不能够在主循环中拼命执行,因为可能上一包数据并没有成功发送。