我想将我之前写的rust usb驱动 移植到sf32lb52上面:
但是目前遇到了一个问题,即USB不响应主机SETUP包,不发出ACK。
我主要参考了 bf0_hal_pcd.c 和usb_glue_sifli.c,并尝试进行了如下初始化。
- 配置系统时钟为240Mhz,USB分频为4,(我也试过DLL2)
- 配置PA35、PA36为Analog模式。
- 使能HPSYS_RCC.ENR2.USBC (HAL_RCC_EnableModule(RCC_MOD_USBC))
- 使能USBC中断向量
- 使能HPSYS_CFG.USBCR.DM_PD |DP_EN | USB_EN
- 使能USBC.USBCFG.AVALID | UAVALID_DR(USB_ENABLE_PHY)
IP内部的配置:
- 关闭Dual Buffer(dpbrxdisl = 0xFE)
- 打开INTRUSBE、INTRTXE等的中断使能
- 使能 USBC.DEVCTL.SESSION
- 使能 USBC.POWER.SOFTCONN
在初始化后连接USB线,使用逻辑分析仪可以看到,主机确实发送了SETUP包,但是从机没有ACK:
IP也没有产生csr0l.RxPktRdy和EP0中断。
但是IP已经正确产生RESET中断,也能产生SUSPEND中断。
由于我没有使用官方HAL层,所以极有可能是我某处的配置出现问题。请教各位大佬,我上面所描述的寄存器操作是否完整?
对于上面的初始化操作,我也尝试过进行一定的顺序调整或者禁用某条的排除法。
除此之外我还有个疑问,我看驱动层似乎sf32这个ip配置为了固定fifo大小,如果是这样,能否提供一张端点对应FIFO大小的表格?
感谢回复!


