在线时间7 小时
UID2071555
ST金币0
蝴蝶豆0
注册时间2014-11-12
初级会员
- 最后登录
- 2020-7-21
|
a0a.1 32b0c
1. 官方OTG库写的不错,他的框架是while循环调用的状态机,大量的中断来驱动数据收发和设备拔插。官方的HID,Mass class类驱动都是要人工加载,而不是自动识别的,这个不太好。
2. 为了应用程序可移植性,一般我都是自己重写驱动。对stm32的otg host模式有些感悟:
.能轮询的东西就不用中断, 比如检测device拔插,对实时性没啥要求,用中断没意思,还会造成系统状态机复杂化
. stm32的中断有两种,一种是全局中断GINTSTS,比如设备拔插,发送缓冲区空,接收缓冲区满等。一种是通道中断HCINT(0..7),里面包括通道trnansaction成功,ack,nak,stall反馈等。所以对于收发数据,需要根据GINTSTS中断来决定读写数据,从HCINT获取transaction是否结束或者失败。这个搞清楚了,这个驱动就没什么难度了。
另外有个疑问:
目前发现stm32的接收行为,是写一次HCCHAR寄存器,他发一个IN token,无论收到nak还是ack,后面都停下来了。
有没有一种模式,写一次HCCAHR命令,他能一直工作到ack为止,如果收到nak,他就不不停的IN?这对于网卡接收数据是至关重要的。
|
|