USB基础知识--Endpoint与pipe
参考文档:《FX3_PROGRAMMERS_MANUAL》
第一部分:用一个比喻来理解
想象一下,USB设备(比如你的U盘)是一个公司大楼,而主机(比如你的电脑)是邮局。
公司大楼(USB设备):
- 这个大楼有很多个部门,每个部门负责处理特定的事情。
- 比如:
- 前台(Endpoint 0):这是公司唯一对外的总机。所有来联系公司的人,都必须先通过前台。前台负责确认对方身份、问清楚要办什么事,然后转接到相应的部门。这个部门是必须存在的。
- 收件部(一个OUT端点):专门接收从邮局寄来的包裹(数据)。
- 发件部(一个IN端点):专门把公司要寄出的包裹送到邮局。
邮局(USB主机):
- 邮局知道这个公司的每个部门地址。它不会把包裹胡乱扔进公司大门,而是会建立一条条专用的邮路(Pipe/管道),直接通到对应的部门。
- 比如,邮局会建立一条路到“收件部”用来送包裹,建立另一条路到“发件部”用来取包裹。
现在,我们把比喻对应回USB术语:
- 公司大楼 = USB设备(如U盘、鼠标、键盘)
- 部门 = Endpoint(端点)
- 前台 = Endpoint 0(控制端点,用于管理设备)
- 收件部 = 某个OUT端点(接收主机发来的数据)
- 发件部 = 某个IN端点(向主机发送数据)
- 邮局 = USB主机(你的电脑)
- 专用邮路 = Pipe(管道)(主机软件与设备端点之间的逻辑连接)
所以,Endpoint的本质就是:USB设备内部专门负责一种数据收/发任务的“小窗口”或“端口”。
第二部分:结合文档的详细解释
现在你有了基本概念,我们再回头看文档里的专业描述,就很容易理解了。
1. Endpoint是逻辑实体(Logical Entity) 这意味着它不是一个物理的插口,而是设备内部程序定义的一个“地址”或“邮箱”。数据包会通过USB线缆传过来,设备内部的芯片会根据数据包上的“地址”(即端点号)把数据送到对应的“邮箱”里。
2. 方向性(IN 和 OUT) 这是USB中非常重要的概念,但很容易混淆。记住,方向永远是相对于主机(你的电脑)而言的:
- OUT:数据从主机流出 -> 到设备。比如,电脑把文件写入U盘。
- IN:数据流入主机 <- 从设备。比如,U盘把文件读给电脑。
3. 端点0(Endpoint 0)的特殊性
- 每个USB设备必须要有端点0。
- 它就像公司的“前台”或“总机”,用于控制传输。
- 当你把USB设备插上电脑时,电脑(主机)就是通过端点0来询问设备:“你是谁?”(获取描述符)、“你叫什么名字?”(获取字符串)、“你需要多少电压?”等等。这个过程叫做枚举。
- 端点0没有描述符,它是“天生”就存在的。
4. 端点描述符(Endpoint Descriptor) 这就像是每个部门的“工作说明书”,告诉主机这个部门是干什么的、能处理多大的包裹、工作节奏怎么样。描述符里包含了:
- 端点号:是哪个部门(比如端点1)。
- 方向:是收件部(OUT)还是发件部(IN)。
- 传输类型:这个部门处理什么类型的业务(下面会讲)。
- 最大包大小:这个部门一次能处理多大的包裹(比如每次最多512字节)。
- 轮询间隔:主机应该多久来问一次这个部门有没有新包裹(对于中断传输)。
5. 传输类型(Transfer Types) 不同的端点(部门)处理不同类型的数据(业务),这决定了数据传输的优先级和可靠性。文档中提到了四种:
- 控制传输(Control):最重要的传输,必须通过端点0进行。用于查询、配置设备。就像通过“前台”办理重要手续。
- 批量传输(Bulk):用于传输大量、不要求实时性、但必须准确的数据。比如U盘传文件、打印机打文档。就像“物流部”,不要求快,但要求货物不能出错。
- 中断传输(Interrupt):用于传输少量、但需要设备及时响应数据。比如鼠标移动、键盘按键。主机会定期(比如每10毫秒)来“问一下”鼠标:“你动了吗?”。
- 同步传输(Isochronous):用于传输实时性要求高的连续数据流,可以容忍少量错误。比如摄像头视频流、USB音箱音频流。就像“直播流”,要求持续不断,偶尔卡一下或有点马赛克可以接受。
总结
对于一个USB小白来说,你可以这样记住:
Endpoint(端点)就是USB设备内部的一个“专用窗口”。
- 每个窗口有编号(如1,2,3...)。
- 每个窗口有方向(IN是设备往外送数据,OUT是设备收数据)。
- 有一个特殊的0号窗口是“接待窗口”,负责管理通信。
- 不同窗口处理不同类型的业务(控制、文件、实时流等)。
- 电脑通过建立到这些窗口的“管道”来和设备高效地收发数据。
希望这个解释能让你彻底明白!这是理解整个USB通信模型的基础,非常重要。
