USB硬件模块必要的寄存器有哪些?

发布时间:2026/5/26 9:46:53

USB硬件模块必要的寄存器有哪些? USB硬件模块必要的寄存器有哪些作者将狼才鲸日期2025-11-28CSDN阅读地址前言许多想学习USB驱动的人一看到芯片里USB模块的寄存器IP文档有一百多个或者好几百个看得头大顿时就退缩了而当看到USB协议栈里密密麻麻的源文件还有什么UTMI、EHCI等接口后也觉得复杂但其实USB驱动只需要把控制器PHY与协议栈的接口匹配好就行因此实际核心的内容不多也就是位、域、包、事务、传输这五层中实现到事务或者到包这一层的处理物理层由控制器和PHY组成USB1.0低速/USB1.1全速时PHY可以由GPIO模拟出来USB2.0高速及以后必须要用专门的PHY芯片下面介绍了控制器PHY中必要的寄存器寄存器信息参考自开源IP核coresultraembedded/cores 包含USB HOST/DEVICE/FSVarious HDL (Verilog) IP Coresmirrors_ultraembedded/cores里面除了Verilog的IP核外还有USB协议栈中HCD层的C代码至于完整的USB协议栈并没有给出。Device端寄存器地址偏移寄存器名称32bit描述0x00USB_FUNC_CTRL[RW] Control Register 控制寄存器设备挂载等0x04USB_FUNC_STAT[RW] Status Register 状态寄存器0x08USB_FUNC_ADDR[RW] Address Register 地址寄存器0x0cUSB_EP0_CFG[RW] Endpoint 0 Configuration 端点配置有多少个端点就有多少组寄存器0x10USB_EP0_TX_CTRL[RW] Endpoint 0 Tx Control 端点发送控制0x14USB_EP0_RX_CTRL[W] Endpoint 0 Rx Control 端点接收控制0x18USB_EP0_STS[R] Endpoint 0 status 端点状态寄存器0x1cUSB_EP0_DATA[RW] Endpoint Data FIFO 端点数据0x20USB_EPn_CFG[RW] Endpoint n Configuration0x24USB_EPn_TX_CTRL[RW] Endpoint n Tx Control0x28USB_EPn_RX_CTRL[W] Endpoint n Rx Control0x2cUSB_EPn_STS[R] Endpoint n status0x30USB_EPn_DATA[RW] Endpoint n Data FIFORegister: USB_FUNC_CTRL 控制寄存器比特名称描述8HS_CHIRP_ENHigh-speed Chirp Enable 高速啁啾需外接PHY留作扩展用SE0帧后发送7PHY_DMPULLDOWNUTMI PHY D- Pulldown Enable D-主动下拉默认是上拉的6PHY_DPPULLDOWNUTMI PHY D Pulldown Enable D主动下拉默认是上拉的5PHY_TERMSELECTUTMI PHY Termination Select 启动端接电阻区分低速全速设备D或D-上拉主机则是下拉4:3PHY_XCVRSELECTUTMI PHY Transceiver Select 收发器使能2:1PHY_OPMODEUTMI PHY Output Mode 输出模式0低速、1全速、2高速、3无0INT_EN_SOFInterrupt enable - SOF reception 中断使能Register: USB_FUNC_STAT 状态寄存器比特名称描述13RSTUSB Reset Detected (cleared on write) 获取主机的复位状态处理后写清零12:11LINESTATEUSB line state (bit 1 D, bit 0 D-) DD-值用于判断高速啁啾正常留作扩展用10:0FRAMEFrame number 帧号Register: USB_FUNC_ADDR 地址寄存器比特名称描述6:0DEV_ADDRDevice address 设备地址Register: USB_EPx_CFG 端点配置比特名称描述3INT_RXInterrupt on Rx ready 接收完成2INT_TXInterrupt on Tx complete 发送完成1STALL_EPStall endpoint 设备进入中止状态0ISOIsochronous endpoint 同步端点例如多媒体数据流Register: USB_EPx_TX_CTRL 端点发送控制比特名称描述17TX_FLUSHInvalidate Tx buffer 使发送缓存无效清缓存16TX_STARTTransmit start - enable transmit of endpoint data 传输开始10:0TX_LENTransmit length 传输长度Register: USB_EPx_RX_CTRL 端点接收控制比特名称描述1RX_FLUSHInvalidate Rx buffer 使接收缓存无效清缓存0RX_ACCEPTReceive data accepted (read) 接收到数据Register: USB_EPx_STS 端点状态比特名称描述20TX_ERRTransmit error (buffer underrun) 发送错误如underflow19TX_BUSYTransmit busy (active) 发送忙18RX_ERRReceive error - CRC mismatch or buffer overflow 接收错误如CRC错误17RX_SETUPSETUP request received 接收到SETUP令牌包16RX_READYReceive ready (data available) 接收成功10:0RX_COUNTEndpoint received length (RD) 端点接收到的长度Register: USB_EPx_DATA 端点数据比特名称描述7:0DATARead or write from Rx or Tx endpoint FIFO 读写的数据Ddevice端流程寄存器初始化清收发缓存、进入低速/全速、D或D-上拉循环读状态寄存器识别复位有复位则清空缓存重新开启关闭收发器并将D-或D的上拉电阻脱离一端时间循环读指定端点状态寄存器1. 识别发送、接收错误2. 识别令牌包的到达并进行处理3. 识别OUT包并开始发数据。Host寄存器地址偏移寄存器名称32bit描述0x00USB_CTRL[RW] Control of USB reset, SOF and Tx FIFO flush 控制寄存器0x04USB_STATUS[R] Line state, Rx error status and frame time 状态寄存器0x08USB_IRQ_ACK[W] Acknowledge IRQ by setting relevant bit 中断响应寄存器0x0cUSB_IRQ_STS[R] Interrupt status 中断状态寄存器0x10USB_IRQ_MASK[RW] Interrupt mask 中断屏蔽0x14USB_XFER_DATA[RW] Tx payload transfer length 发送数据长度0x18USB_XFER_TOKEN[RW] Transfer control info (direction, type) 传输控制信息0x1cUSB_RX_STAT[R] Transfer status (Rx length, error, idle) 接收状态0x20USB_WR_DATA[W] Tx FIFO address for write data 写的数据0x20USB_RD_DATA[R] Tx FIFO address for read data 收的数据Register: USB_CTRL 控制寄存器比特名称描述8TX_FLUSHFlush Tx FIFO 清发送缓存7PHY_DMPULLDOWNUTMI PHY D- Pulldown Enable 下拉D-6PHY_DPPULLDOWNUTMI PHY D Pulldown Enable 下拉D5PHY_TERMSELECTUTMI PHY Termination Select 启动端接电阻4:3PHY_XCVRSELECTUTMI PHY Transceiver Select 启动收发器2:1PHY_OPMODEUTMI PHY Output Mode 模式0低速、1全速、2高速、3无0ENABLE_SOFEnable SOF (start of frame) packet generation 使能SOF起始帧生成Register: USB_STATUS 状态寄存器比特名称描述31:16SOF_TIMECurrent frame time (0 - 48000) 当前帧时间2RX_ERRORRx error detected (UTMI). Clear on new xfer. 接收错误1:0LINESTATE_BITSLine state (1 D-, 0 D) 当前DD-电平Register: USB_IRQ_ACK 中断响应寄存器比特名称描述3DEVICE_DETECTInterrupt on device detect (linestate ! SE0). 设备检测2ERRInterrupt on error conditions. 错误1DONEInterrupt on transfer completion. 传输完成0SOFInterrupt on start of frame. 帧开始Register: USB_IRQ_STS 中断状态寄存器比特名称描述3DEVICE_DETECTInterrupt on device detect (linestate ! SE0). 设备检测2ERRInterrupt on error conditions. 错误1DONEInterrupt on transfer completion. 传输完成0SOFInterrupt on start of frame. 帧开始Register: USB_IRQ_MASK 中断屏蔽寄存器比特名称描述3DEVICE_DETECTInterrupt on device detect (linestate ! SE0). 设备检测2ERRInterrupt on error conditions. 错误1DONEInterrupt on transfer completion. 传输完成0SOFInterrupt on start of frame. 帧开始Register: USB_XFER_DATA 发送数据长度比特名称描述15:0TX_LENTx transfer data length 发送数据长度Register: USB_XFER_TOKEN 令牌包传输比特名称描述31STARTTransfer start request 传输开始30ININ transfer (1) or OUT transfer (0) 数据输入29ACKSend ACK in response to IN data 令牌包响应28PID_DATAXDATA1 (1) or DATA0 (0) PID数据类型23:16PID_BITSToken PID (SETUP0x2d, OUT0xE1 or IN0x69) 令牌包命令值15:9DEV_ADDRDevice address 设备地址8:5EP_ADDREndpoint address 端点地址Register: USB_RX_STAT 接收状态寄存器比特名称描述31START_PENDTransfer start pending 一个USB传输请求已经被主机控制器驱动接受并且已经排入调度队列但尚未被物理硬件主机控制器真正开始执行30CRC_ERRCRC error detected 校验错误29RESP_TIMEOUTResponse timeout detected (no response) 超时28IDLESIE idle 空闲23:16RESP_BITSReceived response PID PID响应15:0COUNT_BITSReceived data count 接收长度Register: USB_WR_DATA 写数据比特名称描述7:0DATADate byte 写的数据Register: USB_RD_DATA 读数据比特名称描述7:0DATADate byte 读的数据Host端流程这里只能提供出HCD (Host Controller Driver)USB协议栈的最底层接口其它包含文件系统、U盘识别与读写的部分还需移植完整的USB协议栈。可以使用标准接口UHCI, OHCI, EHCI, xHCI也可以自定义接口此处建议用自定义接口。

相关新闻