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?这对于网卡接收数据是至关重要的。 |
看到,就得回复 |