目录
前沿
1 初识USB PHY芯片
2 ULPI接口与USB PHY芯片
3 USB3318简介
3.1 USB3318引脚定义
3.2 USB3318与ULPI接口时序
3.3 STM32F407 OTGHS如何驱动USB3318
3.4 USB3318原理图设计
4 总结
前沿
前面对STM32F407 OTG模块进行了简单的讲解,如果使用OTG_FS模块,那么直接使用芯片引出的GPIO脚,就能够实现USB的通信,但是如果想要使用高速USB,那么芯片内部是不支持的,需要通过ULPI接口外挂一个高速的PHY芯片,才能实现USB高速通信。
1 初识USB PHY芯片
我们知道,MCU只能识别0和1的数字信号,但是USB信号是差分信号,如何把差分信号转换为数字信号送入到MCU中呢,这里就需要一个电平转换芯片--USB PHY芯片(当然USB PHY芯片不仅仅实现普通的电平转换,也实现一些特定信号的解码和译码),通过USB PHY芯片,把差分信号转换为MCU能够识别的数字信号,常见的USB PHY芯片有很多,如:
- CYPRESS公司的CY7C68003芯片
- MICROCHIP公司的USB334X芯片
- NXP公司的ISP1506A和ISP1512A芯片
- SMSC公司的USB3300和USB3318芯片
这里我们以USB3318进行讲解。
2 ULPI接口与USB PHY芯片
说到这里,当然有小伙伴会问,这么多款的芯片,是不是每款芯片我们都需要设计不同的驱动程序来运行,答案是否定的,因为这些芯片都遵循ULPI协议,可以理解ULPI协议是一个标准的协议,大家都遵循,那么实现驱动也就是一样的,就像外面很多的SPI FLASH芯片,都能兼容同一套程序一样。
STM32F407 OTGHS也遵循ULPI协议,所以我们只需要配置好寄存器,硬件就会自动的发送时序,来实现MCU对USB PHY芯片的控制,进而实现MCU内部的USB与外部USB进行通信。
3 USB3318简介
我们可以通过alldatasheet下载USB3318用户手册,建议下载Microphone的,讲解更加的全面。
打开手册,查看FEATURES,可知,它是支持高速USB和ULPI接口的OTG PHY。
3.1 USB3318引脚定义
首先查看方框图,可以大致了解USB3318整个系统的架构,我们这里只关注ULPI Interface和USBDP/DM接口部分(也就是图中画红框部分)。
ULPI Interface主要是使用ULPI的12条信号线与STM32F407 OTG HS模块进行通信,上一节对这个信号做了一个讲解,这里就不做讲解了
DP、DM是USB的差分信号线,主要接收USB的数据,ID线则是识别此设备是主机还是从机,VBUS则是供电引脚,它支持内部供电和外部供电两种选择。
其它的引脚主要是时钟和电源引脚,按照说明接线即可。
3.2 USB3318与ULPI接口时序
ULPI接口时序如下图所示,ULPI是同步时序,所以需要clock时钟,在发送方向上,dir为低表示数据为发送,数据在每个clock的上升沿发送,nxt为高表示数据已经被接收,stop为高表示停止数据的发送。接收方向相同。
3.3 STM32F407 OTGHS如何驱动USB3318
STM32F407 OTGHS通过ULPI接口实现对USB3318芯片的驱动及控制,它通过读写USB3318的寄存器实现此操作,这里以写寄存器进行简单的讲解。如下图所示:
可以看出,写寄存器分为2步,首先是TXD CMD,最后是Reg Data,TXD CMD如下图所示,这里为立即写,所以低6位需要查找寄存器地址。
比如我们想要对Function Control寄存器进行写操作,我们这里只能对0x04进行写操作,所以这里的地址需要填写10b(bit7:6)+0x04=0x84,然后填入需要写入该寄存器的值,比如我们这里想复位PHY,我们这里的Reg Data就需要填写0x61。
3.4 USB3318原理图设计
一般来说,每种芯片都会有推荐的电路设计,我们只需要按照官方推荐的设计,就能设计出一款能够使用的图纸,以下是USB Device模式下的电路设计图。
4 总结
理解导致这里,基本上对USB3318和ULPI接口有了一个初步的了解,具体ULPI协议是我们不需要关注的,这个是芯片设计人员关注的问题,我们只需要配置好寄存器,然后硬件自动的初始化好USB PHY芯片,我们操作寄存器,OTGHS模块就通过ULPI接口对USB PHY芯片进行数据的读取和状态的设置,最后我们只需要通过寄存器和RAM来查看USB的状态和USB的数据。
更多USB3318的细节请参考USB3318数据手册,比如下图所示的OTG Vbus 框图,可以看出,VBUS引脚其实是可以不用接电源的,如果VDD33接了电源,并且ChrgVbus开关闭合,USB PHY芯片就有VBUS电源。