dwc->dr_mode == USB_DR_MODE_PERIPHERAL : extcon_get_cable_state_(edev, EXTCON_USB)) { ...... spin_lock_irqsave(&dwc->lock, flags); // 设备模式 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE); spin_unlock_irqrestore(&dw
dwc2则是拥有otg功能的控制器 在usb3.0中,控制器则只剩了xhci,与dwc3,同样的dwc3也是拥有otg功能。 usb phy Usb phy主要负责实际的物理信号。将串行的usb数据转换成控制器所需要的数据格式。同时,我们usb信号质量也与phy有关,在一定程度上phy可以改善usb眼图,但主要还是靠usb走线 typec phy 与usb phy功能类似...
4.检查USB相关的初始化是否正确,包括时钟使能,IO模块使能,外设模块使能,时钟配置(比如48M时钟源等),检查模块复位,模块寄存器保护等。回读寄存器确认相应的寄存器是否确实配置成功,回读总是必要的,可靠性编程中需要考虑,写入不一定成功的,芯片也是有出错概率的。 我这里针对DWC的IP,测试代码如下,10mS进行一次断开和连接...
2 使用树莓派4b作为PC的USB键盘 参考资料 接下来,通过阅读key-mime-pi项目的源代码,发现使用树莓派4b设备模拟一个USB设备是一件非常容易的事情。根据该项目的代码,可以分解出以下两个步骤: 1.需要开启dwc2驱动:在树莓派的config.txt中添加dtoverlay=dwc2,设备启动后,确认一下启动是否开启: 代码语言:javascript 代...
dwc3_core_init_mode里面会进行不同模式的初始化,包括otg、host或者peripheral。 staticintdwc3_core_init_mode(structdwc3*dwc) {switch(dwc->dr_mode) { case USB_DR_MODE_PERIPHERAL://外围模式,也就是当从设备dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_DEVICE);if(dwc->usb2_phy)otg_set_vbus(dwc...
DWC2即新思(Synopsys )的DesignWare® Cores USB 2.0 HiSpeed On-The-Go (OTG)控制器IP,被大量使用。从linux的内核源码驱动中就带DWC2的驱动(新思官方维护),可以看出其使用的非常多。
dwc2的Scatter/Gather DMA模式是一种高效的操作方式,减轻了软件的负担,软件只需要设置好描述符,硬件DMA就会进行处理,我们这里即基于该模式来实现同步发送,其他传输方式也是类似。充分利用其特性实现灵活的发送处理,在资源充足要求高效时我们可以构造非常大的链表一次性发送非常大的数据,而资源紧张,性能要求没这么高时,可...
linux内核drivers/usb下有控制器支持的代码:chipidea,dwc2,dwc3等,当然最通用的还是EHCI/XHCI/UHCI/OHCI。 USB包 USB数据传输有四种类型: 控制传输(Control Transfers),非周期,突发。用于对总线和总线上的设备进行设置,并返回状态信息,即用于命令和状态的传输。
本文由RT-Thread论坛用户@sakumisu原创发布:https://club.rt-thread.org/as...背景之前适配 DWC2 USB IP 的时候,主要是基于 st 的 hal 库来走的,当时我就对他们的 hal 库代码不满,只是无奈,迫于时间就没重构…