刚接触USB部分时间不长,把F4的官方例程大概看了一下,太长,太繁琐,所以,自己通过读写寄存器的方式把初始化和中断进行了梳理,目前已经能枚举成功,并能正确加载WinUSB驱动。 但是,有些寄存器的设置完全不知道作者的意图,以及寄存器的功能和设计原因,还希望有这方面研究的网友能指导一下。 1.OTG_FS_DOEPTSIZx寄存器: 手册描述:要接收 SETUP 数据包,必须将控制 OUT 端点中的 STUPCNT 字段 (OTG_FS_DOEPTSIZx) 编程为非零值。但是又接着说:如果在接 收 SETUP 数据包之前,未将 STUPCNT 字段编程为适当值,模块仍能接收 SETUP 数 据包并使 STUPCNT 字段递减。 好像是也不会因为该寄存器的值影响中断,因为没搞清楚,所以直接忽略了该寄存器的设置,仍然可以顺利枚举 2.OTG_FS_DIEPCTL0 和OTG_FS_DOEPCTL0寄存器: 在USB复位中断中,例程注释了:If the EP is already active don't change the EP Control register. 而IN EP0和OUT EP0默认情况下USBAEP=1,所以,按照注释来讲,并不会设置这2个寄存器。 但是,在枚举完成中断中,USB_OTG_EP0Activate函数又根据枚举速度来设置了DIEPCTL0.MPSIZ。 这2个设置不是相互矛盾的吗? |
第二个问题应该是端点未使能的情况下都是可以修改的
评分
查看全部评分
感谢你的解答
但是,应用程序知道SETUP包的数量干什么用呢,收到一个SETUP包之后按照要求响应主机就行了呀,需要设置这个DOEPTSIZ寄存器的应用场景有哪些呢?
端点0的控制寄存器中手册描述USBAEP总是置1的,所以,在枚举中断中,官方库又设置寄存器的MPSIZ就不明白其原因了