USB开源IP核(USB1.0、1.1、2.0)仓库(FPGA Verilog),用GPIO模拟USB1.1(不使用PHY芯片)
本文整理了开源USB IP核资源及GPIO模拟USB1.1的实现方案,汇总了多个Verilog实现的USB1.1/2.0设备控制器、主机控制器和PHY的开源项目(如WangXuan95/FPGA-USB-Device等)。同时提供了USB协议详解、U盘Mass Storage协议解析等技术文档链接,涵盖令牌包、控制传输、NRZI编码等关键技术点。特别指出可通过GPIO模拟USB1.1通信(无需PH
USB开源IP核(USB1.0、1.1、2.0)仓库(FPGA Verilog),和用GPIO模拟USB1.1(不使用PHY芯片)
| 作者 | 将狼才鲸 |
|---|---|
| 创建日期 | 2025-11-26 |
- CSDN阅读地址
- 备注:用中文/gitcode/gitee搜不到什么有用信息,要在www.yandex.com或cn.bing.com国际版上用英文搜,或者直接在www.github.com里面用英文搜。
USB Verilog IP资料网址:
Malogic FPGA Board 第2课(1)Malogic USB IP介绍
优秀的 Verilog/FPGA开源项目介绍(五)- USB通信
一份USB IP核的寄存器文档:全志F1C100S usb裸机驱动移植1
开源USB Verilog IP仓库:
WangXuan95/FPGA-USB-Device
PGA-USB-Device
Dr.W.X/FPGA-USB-Device
开源工具包/Verilog代码实现USB2.0协议 两份商用USB IP代码
【免费下载】 探索USB 2.0协议的Verilog实现:一个开源项目的深度解析
ultraembedded/cores 包含USB HOST/DEVICE/FS,Various HDL (Verilog) IP Cores
freecores/usbhostslave USB 1.1 Host and Function IP core 主从都有
avakar/usbcorev A full-speed device-side USB peripheral core written in Verilog.
no2fpga/no2usb Nitro USB FPGA core
www-asics-ws/usb1_device USB 1.1 Device IP Core
www-asics-ws/usb2_dev USB 2.0 Device IP Core 参考意义不大,不能直接在FPGA中使用,需要搭配PHY使用
esynr3z/usb20dev USB 2.0 FS Device controller IP core written in SystemVerilog
freecores/usb1_functPublic USB 1.1 Function IP Core
Zeba-Xie/Open-USB2.0-Device-Controller
pbing/USB 低速鼠标 FPGA USB 1.1 Low-Speed Implementation
nand2mario/usb_hid_host HID设备主机端,键盘鼠标手柄
ulixxe/usb_cdc 全速USB转串口Device
ultraembedded/core_usb_cdc
ultraembedded/core_usb_uart
ultraembedded/core_usb_fs_phy USB Full Speed PHY
ultraembedded/core_usb_sniffer USB capture IP
ultraembedded/core_usb_host https://github.com/ultraembedded/core_usb_host Basic USB 1.1 Host Controller for small FPGAs
Public
lawrie/tiny_usb_examples Using the TinyFPGA BX USB code in user designs
Dfinitski/SDR-Micron SDR Micron USB receiver
dineshannayya/usb1_host USB1.1 Host Controller + PHY
mzakharo/usb-de2-fpga Hardware interface for USB controller on DE2 FPGA Platform
freecores/usb_phy USB 1.1 PHY
WangXuan95/FPGA-ftdi245fifo An FPGA-based FT232H/FT600 chip controller for rapid data transmission via USB. 使用FT232H/FT600芯片进行FPGA与电脑之间的高速数据传输。
Zeba-Xie/Open-USB2.0-Device-Controller USB2.0 Device Controller IP Core
ulixxe/usb_dfu Full Speed USB DFU interface for FPGA and ASIC designs
maxs-well/USB_Ctrl USB2.0 Verilog
marsohod4you/UsbHost Simple FIFO-based USB Host Controller
rohitk-singh/usb-device USB 2.0 Device IP core using Migen with out-of-box AXI Slave Interface
U盘协议相关网址:
4.USB详解(U盘)
USB – STM32F103 U盘(MassStorage)SDIO接口SCSI协议Bulk传输讲解(五)
USB Mass Storage大容量存储的基本知识
USB Mass Storage协议
01 MSC类设备-基础篇(一)
USB Mass Storage
USB Mass Storage Class
USB协议详解第19讲(USB包-包的组成及分类)
USB编码方式(NRZI)及时钟同步方式
USB协议详解第24讲(USB包-控制传输包详解)
USB 令牌包 --SETUP包
USB协议
USB 1.1协议中文详解与实战解析
开源文档教程/USB1.1协议中文版资源介绍
开源工具包/USB协议规范文档集合
USB2.0 速度识别–区分低速-高速-全速
USB 低速与全速
【通信协议解析】USB3.0通信协议解析
USB总线电平标准、USB总线状态、USB总线信号详解
USB 协议分析(含基本协议和 USB 请求和设备枚举)
USB协议详解:从SOP到EOP的完整流程解析
不使用FPGA,用纯AVR汇编实现USB 1.1低速device:
AVR® Instruction Set Manual
avr指令集
V-USB AVR单片机USB编程
QMK Firmware V-USB:软件实现的USB协议栈
AVR-USB(V-USB) IAR工程
V-USB官网
AVR-USB(V-USB)学习过程(一)
AVRUSB技术探讨
V-USB 数据收发实现分析
8051 vusb Tx实现
V-USB USB设备模拟原理分析
vusb简介
硬件知识分享——USB2.0简单知识
USB2.0协议深入理解——从零开始学习USB2.0协议(三)
杂七杂八:
U盘(mass storage device),大容量设备有很多种,U盘就是其中一种,bInterfaceClass字段为0x08,bInterfaceSubClass有好几种,但大部分U盘都使用0x06,即SCSI命令集,bInterfaceProtocol字段有3种:0x00、0x01、0x50。
USB缓存保持64字节即可。
USB低速:USB低速模式下,一个数据包的有效载荷(即实际数据)最多为8个字节(实际总12字节加SOF、EOF域);
为低速设备设置了一个严格的时间上限,每个微帧(125 µs),用于在总线上传输一个数据包;
令牌包(Token Packet):由主机发出,指明传输类型(IN/OUT)、设备地址和端点号;
USB全速:最常用的中断(Interrupt)和批量(Bulk)传输,一个数据包的最大有效载荷是64字节;
但是同步传输 (Isochronous)的音频、视频可达到1023(每个微帧(125 µs),不享受硬件重传机制);
USB高速:最常用的批量传输,一个数据包的最大有效载荷是512字节,中断传输和同步传输1024字节;
USB高速模式(480 Mbps)将时间划分为 125 µs 的帧,但每个帧又进一步划分为 8个微帧,每个微帧长度为 1.5 µs;
使用USB低速协议(1.5Mbps)无法实现U盘功能。USB低速协议仅适用于键盘、鼠标等简单外设,其带宽和传输能力不足以支持U盘的大容量数据存储和读写需求;
USB包结构:
低位在前,高位在后;
每个包:SOP(从J到K状态) + SYNC同步域(00000001) + 包标识符PID + 其它 + 包结束符EOP(SE0、单端0状态)
SETUP令牌包(IN/OUT/SOF/SETUP):SOP(从J到K状态) + SYNC同步域(00000001) + 包标识符PID + 7位地址 + 4位端点号 + 5位CRC + 包结束符EOP(SE0、单端0状态)
V-USB的USB_INTR_VECTOR汇编处理逻辑主要涉及USB中断的快速响应和数据收发控制;
寄存器保存:中断入口处通过push YL、push YH等指令快速保存寄存器状态
同步检测:通过waitForJ和waitForK循环检测USB信号的J/K状态,确保数据传输同步
数据解码:使用ror指令移位重构数据,st y+, x3将解码后的数据存储到接收缓冲区
据包处理:调用usbProcessRx函数解析接收到的数据包,区分SETUP包或OUT数据包并触发相应处理逻辑
状态恢复:中断处理结束后通过out USBDDR, x2恢复总线控制状态,确保USB信号输出正确
时钟同步:依赖外部晶振或高精度时钟源,避免因时钟误差导致时序错误
低速时:
低速1.5Mbps模式仅使用D-引脚;
低速模式,空闲时D-高,D+低;
低速时D-上拉;
J状态高电平,K状态低电平,SEO单端零,复位Reset,总线空闲Idle,挂起Suspend,同步SYNC
低速时D-有上拉电阻(全速时D+有上拉电阻)
在低速中断传输中,即使没有数据,主机也会每帧(1ms)发送一个Keep-alive信号(实质是一个SEO状态),以维持设备连接状态。
差动1:D+高,D-低;
差动0:D+低,D-高;
J状态:全速差动1,低速差动0;
K状态:全速差动0,低速差动1;
时间概念,在USB中,一帧就是1MS,它是一个独立的单元,包含了一系列总线动作,USB将1帧分为好几份,每一份中是一个USB的传输动作。
域是USB数据最小的单位,由若干位组成(至于是多少位由具体的域决定),域可分为七个类型:同步、标识、地址、端点、帧号、数据、校验+SOP、EOP
包:SOP起始+SYNC同步+PID+地址+帧号+数据+CRC+EOP
包:SOP + SYNC + Packet_Content + EOP
Packet_Content:PID+地址+帧号+数据+CRC
由域构成的包有四种类型,分别是令牌包、数据包、握手包和特殊包
分别有IN事务、OUT事务和SETUP事务三大事务,每一种事务都由令牌包、数据包、握手包三个阶段构成
传输由OUT、IN、SETUP事务其中的事务构成,传输有四种类型,中断传输、批量传输、同步传输、控制传输
传输、事务、包、域、位及波形
低速设备SOP信号:总线从IDLE状态(J状态:差分0)切到K状态(差分1)
低速设备EOP信号:总线持续2位时间的SE0(单端0)状态,后跟随1位时间的J状态(差分0)
Reset信号:主机拉低两根信号线(SE0状态)并保持10ms
总线3ms以上的IDLE状态,则设备会认为主机发起了一次挂起操作
Resume信号可以由USB主机发起,也可以由USB设备本身触发,但是只有USB主机可以结束Resume信号;翻转数据线上的极性并保持20ms来唤醒设备,并以低速EOP信号结尾;
SYNC信号:3个KJ状态的切换,后跟随2位时间的K状态;
当主机检测到某一个数据线电平拉高保持了一段时间,就认为有设备连接上来了;
没有设备连接时或者设备断开时,主机端D+、D-数据线上的下拉电阻起作用,使得二者都在低电平;当低电平持续TDDIS时间就会被主机认为是断开状态;
主机轮询机制
所有数据传输都必须由主机(Host)主动发起
令牌包:首先由主机发出,用于定义本次事务的类型(如IN、OUT)、目标设备地址和端点号,相当于下达指令。
数据包:随后由令牌包指定的方向进行传输(主机到设备或设备到主机)。此包是可选的,例如某些握手事务就不包含数据阶段。
握手包:最后由数据接收方发出,用于向发送方反馈本次事务的接收状态(如ACK、NAK)。
主机 互联 物理设备;功能层 USB设备层 USB系统软件 主机控制器与总线接口层;
小端字节序
应用层定义设备功能,如HID(鼠标、键盘)、CDC(串口设备)、MSC(U盘)
协议层负责通信规则,包括传输模式(控制、批量、中断、同步传输)、事务(SETUP、IN、OUT)和包(令牌包、数据包、握手包)的组成
硬件层实现物理信号转换,通过端点(EP0-EPn)和NRZI编码将数字信号转换为D+/D-差分电平
【NRZI】
USB使用NRZI编码(非归零反相编码)
J状态 K状态 空闲状态 SOP EOP
0:表示电平发生一次跳变(从 J 变 K,或从 K 变 J);1:表示电平保持不变(继续保持 J 或继续保持 K);
强制插 0,也就是传说中的 bit-stuffing,如果要传输的数据中有 6个连续的 1,发送前就会在第 6 个 1 后面强制插入一个 0,让发送的信号强制出现翻转
一个包被分为不同域,域是 USB 数据最小的单位;同步字段(SYNC)、包标识符(PID)、地址字段(ADDR)、数据字段(DATA,包括帧号)、检验字段(CRC)、包结束(EOP);
包所包含的域是不一样的,都要以同步域 SYNC 开始 ,紧跟一个包标识符 PID,最终 以包结束符 EOP 来结束;
SOP(Start-of-Packet):从 IDLE 状态切换到 K 状态的电平变化;
SYNC(Synchronization):所有的USB包都是以SYNC开始,全速/低速包的SYNC段度为8bit(7 bit 0和1 bit 1);
PID(Packet Identifier):PID是用来表示一个包的类型,共有8bit,实际使用4bit(PID0 ~ PID3),另外4bit是PID0 ~ PID3 的取反,用来校验PID。
PID 规定了四类包:令牌包、数据包、握手包和特殊包。
地址域共占11bit,其中低7bit是设备地址,高4bit是端点地址。
设备地址:
7bit,设备在主机上的地址,地址 000 0000 被命名为零地址,是任何设备第一次连接到主机时,在被主机配置、枚举前的默认地址,由此可以知道为什么一个 USB 主机只能接127个设备。
端点地址:
4bit,由此可知一个USB 设备端点数量最大为16个(实际低速设备最多支持3个端点);
Frame Number
帧号共11bit,只在SOF令牌包时发送,主机每发出一帧,帧号都会自加1,当帧号达到0x7FF 时,将归零重新开始计数。
包是 USB 总线上数据传输的最小单位,不能被打断或干扰,否则会引发错误。若干个数据包组成一次事务传输。一次事务传输也不能打断,属于一次事务传输的几个包必须连续,不能跨帧完成。一次传输由一次到多次事务传输构成,是可以跨帧完成。
令牌包分为IN令牌包、OUT令牌包、SETUP令牌包和SOF包;
数据包分为 DATA0、DATA1、DATA2 和 MDATA 四种类型。在 USB 发送数据时,若单次需发送的数据长度大于对应端点的容量,则需将数据拆分为多个包分批发送。
握手包包括 ACK、NAK、STALL 以及 NYET 四种;
特殊包。
USB通信的基本处理单元是事务,它代表一次完整的数据交互过程。事务主要分为IN、OUT和SETUP三种类型。
USB 2.0枚举
Wireshark等软件工具进行USB报文捕获与分析
只能存在一个HOST,里面会存在一个root hub
星形结构,由HOST往下级联,做多连接7层
USB传输模式分为实时传输、BULK传输、中断传输、控制传输
USB传输是以package的形式来传的
Low Speed:在USB Device端有一个1.5K电阻接在D-到VCC上;
总体枚举过程:插入设备—检查D+/D—发送JK序列—枚举成功
实际枚举过程:
•1.插入设备
•设备插入HUB/HOST,然后获得电源供电,此时Device处于power state,可以从总线获得100mA电流
•2.HUB检测设备
•HUB的D±有14.25K-25K的下拉电阻,Device的D±有1K左右上拉电阻,插入后会把HUB的电平抬高,此时检测到Device插入
•3.Host获悉设备
•HUB会把有设备插入的事件给到HOST,接着HOST给HUB【发送get port state指令】,要求获取更多信息
•4.确认是设备是FS/LS
•HUB通过检测D±的电压来确认,HS是以FS的硬件状态来响应的
•5.HUB复位设备
•HOST向HUB【发送set port feature】请求,此时D±将被拉低,设备处于复位状态
•6.HOST获悉设备是否支持HS
•JK序列:J序列在D+,K序列在D-
•复位期间,支持HS的设备会发送K序列,【HUB响应J序列】,此时可以观察到KJKJ样式,同时设备移除上拉电阻,进入HS
•没有KJ序列,设备进入FS
•7.HOST与设备之间建立通信通道
•HOST【发送get port state】让设备移除复位状态,进入default status,
•此时设备以地址00H与主机通信
•如果一次不够( get port state ),就多来几次
•8.HOST【发送get descriptor】了解default pipe的最大信息包尺寸
•在【host和设备的endpoint之间的连接叫作pipe】,而设备的endpoint叫做default pipe
•9.HOST给设备指定一个地址
•【HOST发送set address】给设备一个唯一地址进行通信,设备【进入address status】
•10.HOST了解设备信息
•HOST【发送get descriptor】获取设备信息,信息包括PID、VID这些
•除了基本信息,HOST还会请求其他额外信息,如果设备不支持这个请求,就【返回STALL】信号
•STALL:USB设备在接收到HOST发送的无法支持的请求时,会发送这个信号回去
•11.【HOST加载驱动程序】,驱动程序选择合适配置给到设备,设备进入配置状态,开始工作
•例如Windows会使用inf文件来确认最佳配置
USB低速1.5Mbps(03.3V)、全速12Mbps(03.3V)、高速480Mbps(0~400mV)
USB3.0 5G 10G 20G(-200~+200mV)
USB2.0低速和全速协议;
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐




所有评论(0)