亚洲国产精品嫩草影院久久,国产精品久久久久久久久久久久,久久视频在线视频观看天天看,尤物193在线人妻精品免费

深圳市凱茉銳電子科技有限公司深圳市凱茉銳電子科技有限公司

新聞中心

News

USB協(xié)議簡(jiǎn)介

來(lái)源:深圳市凱茉銳電子科技有限公司2025-02-17

USB–Universal Serial Bus即通用串行總線(xiàn),簡(jiǎn)化了計(jì)算機(jī)與外圍設(shè)備的連接;

1 USB概念

 

主機(jī)host: 主機(jī)是 USB 系統(tǒng)的控制中心,通常是一個(gè)計(jì)算機(jī)或其他設(shè)備,負(fù)責(zé)管理和協(xié)調(diào)所有 USB 設(shè)備的通信。

 

 

Hub: 集線(xiàn)器用于擴(kuò)展 USB 系統(tǒng),允許多個(gè)設(shè)備連接到同一個(gè)主機(jī)。

 

 

設(shè)備device:設(shè)備是連接到 USB 系統(tǒng)的終端設(shè)備,如鍵盤(pán)、鼠標(biāo)、打印機(jī)、存儲(chǔ)設(shè)備等。

 

 

端點(diǎn)endpoint:端點(diǎn)是設(shè)備上的一個(gè)邏輯實(shí)體,用于與主機(jī)進(jìn)行數(shù)據(jù)傳輸。每個(gè)設(shè)備可以有多個(gè)端點(diǎn),每個(gè)端點(diǎn)都有唯一的地址。

 

 

管道Pipe: 管道是主機(jī)和設(shè)備端點(diǎn)之間的通信路徑。每個(gè)管道都有特定的傳輸類(lèi)型和屬性。

 

1.1 USB基本名詞

 

USB協(xié)議均是版本向下兼容。

 

 

USB 1.0/1.1(low/full speed),傳輸速率最大為12Mbps

 

 

USB 2.0(high speed), 傳輸速率最大480Mbps

 

 

USB 3.0(super speed), 采用8b/10b編碼,增加一對(duì)超高速差分線(xiàn) 傳輸速率最大5Gbps

 

 

USB 3.1 采用 128b/132b 編碼,速度提高 1 倍,供電 20V/5A,同時(shí)增加了 A/V 影音傳輸標(biāo)準(zhǔn) 10 Gbps

 

 

USB 3.2 增加一對(duì)超高速傳輸通道,速度再次翻倍,只能在 C 型接口上運(yùn)行 20Gbps

 

2.USB物理接口形式分類(lèi):Type A、Type C;這兩種是最常見(jiàn)的物理接口;

3.PIPE(管道):主機(jī)和endpoint之間的數(shù)據(jù)傳輸是PIPE;
4.方向:端點(diǎn)是有方向的,主機(jī)到從機(jī)成為out端點(diǎn),從機(jī)到主機(jī)成為in端點(diǎn)。
5.管道通信方式:pipe中的數(shù)據(jù)通信方式有兩種,一種是stream一種是message。message要求進(jìn)出進(jìn)出方向必須要求同一個(gè)管道。
6.傳輸方式:USB endpiont有四種類(lèi)型,分別對(duì)應(yīng)了不同的數(shù)據(jù)傳輸方式,分別為control transfers控制傳輸、interrupt transfers中斷傳輸、Bluk Data transfers批量傳輸、Isochronous Data Tranfers等時(shí)傳輸。

 

控制傳輸:用于配置和管理設(shè)備,包括設(shè)備枚舉、設(shè)置配置和獲取狀態(tài)信息。

 

 

中斷傳輸:用于傳輸小量的定時(shí)數(shù)據(jù),如鍵盤(pán)和鼠標(biāo)的輸入。中斷傳輸提供定期的輪詢(xún)機(jī)制,確保數(shù)據(jù)的及時(shí)傳輸。

 

 

批量傳輸:用于傳輸大量數(shù)據(jù),如文件傳輸和打印任務(wù)。批量傳輸保證數(shù)據(jù)的完整性和可靠性,但不保證實(shí)時(shí)性。

 

 

等時(shí)傳輸:用于實(shí)時(shí)數(shù)據(jù)傳輸,如音頻和視頻流。等時(shí)傳輸保證數(shù)據(jù)的實(shí)時(shí)性和帶寬,但不保證數(shù)據(jù)的完整性。

 

1.2 描述符

主設(shè)備之所以能區(qū)分不同的從設(shè)備,靠的就是描述符;USB協(xié)議里就規(guī)定了各種不同的USB描述符。

+------設(shè)備描述符
        +----------配置描述符1
            +----------接口描述符1
                +----------端點(diǎn)描述符1
                +----------端點(diǎn)描述符2
                +....
            +----------接口描述符2
                +----------端點(diǎn)描述符1
                +....
            +....
        +----------配置描述符2
            +----------接口描述符1
                +----------端點(diǎn)描述符1
                +----------端點(diǎn)描述符2
                +....
            +....
        +....

1.2.1 設(shè)備描述符

設(shè)備描述符:用來(lái)描述該設(shè)備,一個(gè)設(shè)備只有一個(gè)設(shè)備描述符,包含了設(shè)備類(lèi)型、設(shè)備遵循的協(xié)議、廠商ID、產(chǎn)品id、序列號(hào)等。
一個(gè)描述符Demo:

DEVICE DESCRIPTOR
    bLength: 18
    bDescriptorType: 0x01 (DEVICE)
    bcdUSB: 0x0200
    bDeviceClass: Vendor Specific (0xff)
    bDeviceSubClass: 255
    bDeviceProtocol: 255
    bMaxPacketSize0: 64
    idVendor: Marvell Semiconductor, Inc. (0x1286)
    idProduct: Unknown (0x812a)
    bcdDevice: 0x0000
    iManufacturer: 3
    iProduct: 2
    iSerialNumber: 0
    bNumConfigurations: 1

1.2.2 配置描述符

用來(lái)配置設(shè)備,一個(gè)設(shè)備同一時(shí)刻只能有一種配置生效,而且要區(qū)分配置和設(shè)置的區(qū)別。
配置描述符內(nèi)容:

ONFIGURATION DESCRIPTOR
    bLength: 9
    bDescriptorType: 0x02 (CONFIGURATION)
    wTotalLength: 121
    bNumInterfaces: 4
    bConfigurationValue: 1
    iConfiguration: 0
    Configuration bmAttributes: 0xc0  SELF-POWERED  NO REMOTE-WAKEUP
        1... .... = Must be 1: Must be 1 for USB 1.1 and higher
        .1.. .... = Self-Powered: This device is SELF-POWERED
        ..0. .... = Remote Wakeup: This device does NOT support remote wakeup
    bMaxPower: 250  (500mA)

1.2.3 接口描述符

一個(gè)interface就代表一個(gè)設(shè)備。USB interface用來(lái)處理一類(lèi) USB 邏輯連接, 例如一個(gè)鼠標(biāo), 一個(gè)鍵盤(pán), 或者一個(gè)音頻流.但一些 USB 設(shè)備有多個(gè)接口。

INTERFACE DESCRIPTOR (2.0): class Vendor Specific
    bLength: 9
    bDescriptorType: 0x04 (INTERFACE)
    bInterfaceNumber: 2
    bAlternateSetting: 0
    bNumEndpoints: 2
    bInterfaceClass: Vendor Specific (0xff)
    bInterfaceSubClass: 0x00
    bInterfaceProtocol: 0x00
    iInterface: 8

1.2.4 端點(diǎn)描述符

USB通信的基本物理單位,一個(gè)endpiont只能承載一個(gè)方向的數(shù)據(jù)。endpiont分為如下幾種:

 

CONTROL
控制端點(diǎn)被用來(lái)允許對(duì) USB 設(shè)備的不同部分存取. 通常用作配置設(shè)備, 獲取關(guān)于設(shè)備的信息, 發(fā)送命令到設(shè)備, 或者獲取關(guān)于設(shè)備的狀態(tài)報(bào)告. 這些端點(diǎn)在尺寸上常常較小.每個(gè) USB 設(shè)備有一個(gè)控制端點(diǎn)稱(chēng)為"端點(diǎn) 0", 被 USB CORE用來(lái)在插入時(shí)配置設(shè)備. 這些傳送由 USB 協(xié)議保證來(lái)總有足夠的帶寬使它到達(dá)設(shè)備.

 

 

INTERRUPT
中斷端點(diǎn)傳送小量的數(shù)據(jù), 以固定的速率在每次 USB 主請(qǐng)求設(shè)備數(shù)據(jù)時(shí). 這些端點(diǎn)對(duì) USB 鍵盤(pán)和鼠標(biāo)來(lái)說(shuō)是主要的傳送方法. 它們還用來(lái)傳送數(shù)據(jù)到 USB 設(shè)備來(lái)控制設(shè)備, 但通常不用來(lái)傳送大量數(shù)據(jù). 這些傳送由 USB 協(xié)議保證來(lái)總有足夠的帶寬使它到達(dá)設(shè)備.

 

 

ISOCHRONOUS
同步端點(diǎn)也傳送大量數(shù)據(jù), 但是這個(gè)數(shù)據(jù)常常不被保證它完成. 這些端點(diǎn)用在可以處理數(shù)據(jù)丟失的設(shè)備中, 并且更多依賴(lài)于保持持續(xù)的數(shù)據(jù)流. 實(shí)時(shí)數(shù)據(jù)收集, 例如音頻和視頻設(shè)備, 一直都使用這些端點(diǎn).

 

BULK端點(diǎn)描述符數(shù)據(jù)內(nèi)容如下:

ENDPOINT DESCRIPTOR
    bLength: 7
    bDescriptorType: 0x05 (ENDPOINT)
    bEndpointAddress: 0x86  IN  Endpoint:6
        1... .... = Direction: IN Endpoint
        .... 0110 = Endpoint Number: 0x6
    bmAttributes: 0x02
        .... ..10 = Transfertype: Bulk-Transfer (0x2)
    wMaxPacketSize: 512
        .... ..10 0000 0000 = Maximum Packet Size: 512
    bInterval: 0

1.3 USB的分層

1.3.1 協(xié)議層

協(xié)議層主要包括:數(shù)據(jù)包類(lèi)型、數(shù)據(jù)包的格式、對(duì)主機(jī)和設(shè)備發(fā)送的數(shù)據(jù)包的預(yù)期響應(yīng)、描述了四種USB 3.0事務(wù)類(lèi)型、支持批量傳輸類(lèi)型的流式傳輸支持、設(shè)備/主機(jī)可能接收/發(fā)送的各種響應(yīng)和數(shù)據(jù)包的定時(shí)參數(shù)。
整個(gè)協(xié)議包的類(lèi)型有:

640.webp.png

1.3.2 鏈路層

Link Layer鏈路層主要包括:數(shù)據(jù)包幀、鏈路命令、鏈路管理和流量控制、鏈路錯(cuò)誤規(guī)則/恢復(fù)、重置、鏈路狀態(tài)機(jī)描述;

1.3.3 物理層

定義了高速組件之間互操作性所需的電氣層參數(shù)。

1.4 USB傳輸

USB總線(xiàn)上傳輸數(shù)據(jù)是以包(packet)為基本單位的,必須把不同的包組織成事務(wù)(transaction)才能傳輸數(shù)據(jù)。
USB協(xié)議定義了四種傳輸(transfer)類(lèi)型: 批量傳輸 , 同步傳輸 , 中斷傳輸 , 控制傳輸 .其中,批量傳輸、同步傳輸、中斷傳輸每傳輸一次數(shù)據(jù)都是一個(gè)事務(wù)。

1.4.1 包packet

一個(gè)包被分為不同域,根據(jù)不同類(lèi)型的包,所含的域也是不一樣的。但都要以同步域SYNC開(kāi)始,緊跟一個(gè)包標(biāo)識(shí)符PID,最終以包結(jié)束符EOP來(lái)結(jié)束這個(gè)包。

PID域: PID用來(lái)標(biāo)識(shí)一個(gè)包的類(lèi)型,它共有8位,只使用低四位,高四位取反,用來(lái)校驗(yàn)PID;
PID規(guī)定了四類(lèi)包: 令牌包 、 數(shù)據(jù)包 、 握手包 、 特殊包 . 同類(lèi)的包又各分為具體的四種包:

地址域: 地址共占11位,其中低7位是設(shè)備地址,高4位是端點(diǎn)地址;

 

幀號(hào)域:幀號(hào)占11位,主機(jī)每發(fā)一幀,幀號(hào)都會(huì)自動(dòng)加1,當(dāng)幀號(hào)達(dá)到0x7FF時(shí),將歸零重新開(kāi)始計(jì)數(shù)。

 

 

數(shù)據(jù)域:根據(jù)傳輸類(lèi)型的不同,數(shù)據(jù)域的數(shù)據(jù)長(zhǎng)度從0到1024字節(jié)不等。

 

CRC域: 計(jì)算地址域和幀號(hào)域的CRC,或數(shù)據(jù)域數(shù)據(jù)的CRC;

1.4.2 包類(lèi)型

 

令牌包–四種:
OUT: 通知設(shè)備將要輸出一個(gè)數(shù)據(jù)包
IN: 通知設(shè)備返回一個(gè)數(shù)據(jù)包
SETUP: 只用在控制傳輸中,也是通知設(shè)備將要輸出一個(gè)數(shù)據(jù)包,域OUT令牌的區(qū)別是:只使用DATA0數(shù)據(jù)包,且只能發(fā)到device的控制端點(diǎn)
SOF: 在每幀開(kāi)始時(shí)以廣播的形式發(fā)送,針對(duì)USB全速設(shè)備,主機(jī)每1ms產(chǎn)生一個(gè)幀,USB主機(jī)會(huì)對(duì)當(dāng)前幀號(hào)進(jìn)行統(tǒng)計(jì),每次幀開(kāi)始時(shí)通過(guò)SOF包發(fā)送幀號(hào)

 

數(shù)據(jù)包
數(shù)據(jù)包沒(méi)有地址域和幀號(hào)域,根據(jù)transfer的類(lèi)型不同,數(shù)據(jù)包最大長(zhǎng)度有所不同。

 

握手包–4種
ACK: 傳輸正確完成
NAK: 設(shè)備暫時(shí)沒(méi)有準(zhǔn)備好接收數(shù)據(jù),或沒(méi)有準(zhǔn)備好發(fā)送數(shù)據(jù)
STALL: 設(shè)備不能用于傳輸
NYET/ERR: 僅用于高速傳輸,設(shè)備沒(méi)有準(zhǔn)備好或出錯(cuò)

 

握手包僅有PID域:

1.5 傳輸transfer

事務(wù)可以分為三類(lèi):

 

setup事務(wù): 主機(jī)用來(lái)向設(shè)備發(fā)送控制命令

 

 

數(shù)據(jù)輸入事務(wù): 主機(jī)用來(lái)從設(shè)備讀取數(shù)據(jù)

 

 

數(shù)據(jù)輸出事務(wù): 主機(jī)用來(lái)向設(shè)備發(fā)送數(shù)據(jù)

 

1.5.1 批量傳輸

批量傳輸使用批量傳輸事務(wù)(IN傳輸/OUT傳輸),一次批量傳輸事務(wù)分為三個(gè)階段: 令牌包階段、數(shù)據(jù)包階段、握手包階段

描述:
1.令牌階段: 主機(jī)發(fā)送BULK令牌包,令牌包中包含設(shè)備地址、端點(diǎn)號(hào)、數(shù)據(jù)方向
2.數(shù)據(jù)包階段:
從機(jī)如果接收令牌包出錯(cuò),無(wú)響應(yīng),讓主機(jī)等待超時(shí)
從機(jī)端點(diǎn)不存在,回送STALL
從機(jī)端點(diǎn)數(shù)據(jù)未準(zhǔn)備好,回送NAK
從機(jī)數(shù)據(jù)準(zhǔn)備好,回送數(shù)據(jù)包

3.握手包階段:數(shù)據(jù)包正確,并有足夠的空間保留數(shù)據(jù),設(shè)備返回ACK握手包括:NYET握手包(只有高速模式才有NYET握手包,表示本次數(shù)據(jù)接收成功,但沒(méi)有能力接收下一次傳輸)
    數(shù)據(jù)包正確,但沒(méi)有足夠的空間保存數(shù)據(jù),設(shè)備返回NAK握手包。主機(jī)收到NAK后,延時(shí)一段時(shí)間后,再重新進(jìn)行批量輸出事務(wù)
    數(shù)據(jù)包正確,但端點(diǎn)處于掛起狀態(tài);設(shè)備返回一個(gè)STALL握手包
    數(shù)據(jù)包錯(cuò)誤,設(shè)備不返回任何握手包,讓主機(jī)等待超時(shí)

    CRC錯(cuò)誤或位填充錯(cuò)誤: 設(shè)備不返回任何握手包,讓主機(jī)等待超時(shí);

1.5.2 中斷傳輸

    中斷傳輸一般用于小批量的和非連續(xù)的數(shù)據(jù)傳輸,但實(shí)時(shí)性高的場(chǎng)合,主要應(yīng)用于人機(jī)交互設(shè)備(HID)的鼠標(biāo)和鍵盤(pán)。

1.5.3 同步傳輸

    同步傳輸是不可靠的傳輸,只關(guān)心數(shù)據(jù)的實(shí)時(shí)性,不關(guān)心數(shù)據(jù)的正確性,它沒(méi)有握手包,也不支持PID翻轉(zhuǎn)。主機(jī)在排定事務(wù)傳輸時(shí),同步傳輸有最高優(yōu)先級(jí).應(yīng)用在數(shù)據(jù)量大,對(duì)實(shí)時(shí)性要求較高的場(chǎng)合,如視頻設(shè)備,音頻設(shè)備;

同步傳輸包含兩個(gè)階段: 令牌階段、數(shù)據(jù)階段:

1.5.4 控制傳輸

    控制傳輸是一種特殊的傳輸方式。當(dāng)USB設(shè)備初次連接主機(jī)時(shí),用控制傳輸傳送控制命令等對(duì)設(shè)備進(jìn)行配置。同時(shí)設(shè)備接入主機(jī)時(shí),需要通過(guò)控制傳輸去獲取USB設(shè)備的描述符以及 對(duì)設(shè)備進(jìn)行識(shí)別,在設(shè)備的枚舉過(guò)程中都是使用控制傳輸進(jìn)行數(shù)據(jù)交換。

控制傳輸分為三個(gè)階段:

建立過(guò)程:

主機(jī)發(fā)送令牌包: SETUP

主機(jī)發(fā)送數(shù)據(jù)包: DATA0

設(shè)備返回握手包: ACK或不應(yīng)答

2.數(shù)據(jù)過(guò)程(可選): 一個(gè)數(shù)據(jù)過(guò)程可以不包含或包含多個(gè)數(shù)據(jù)事務(wù),但所有數(shù)據(jù)事務(wù)必須是同一方向的。若數(shù)據(jù)方向發(fā)生了改變則認(rèn)為進(jìn)入了狀態(tài)過(guò)程. 數(shù)據(jù)過(guò)程中的第一個(gè)數(shù)據(jù)包必須是DATA1,然后 每次正確傳輸一個(gè)數(shù)據(jù)包后就在DATA0和DATA1之間交替;

            3.狀態(tài)過(guò)程: 狀態(tài)過(guò)程只使用DATA1包,并且傳輸方向與數(shù)據(jù)方向相反。

2 USB1.1 示例
    此Demo只展示創(chuàng)建一個(gè)簡(jiǎn)單的 USB 設(shè)備模塊,該模塊能夠響應(yīng)主機(jī)的請(qǐng)求,并發(fā)送和接收數(shù)據(jù);實(shí)現(xiàn)最基本的控制傳輸功能。

module usb_device (
input wire clk, // 時(shí)鐘信號(hào)
input wire reset_n, // 復(fù)位信號(hào),低電平有效
input wire usb_dp, // USB D+ 信號(hào)
input wire usb_dm, // USB D- 信號(hào)
output reg usb_dp_out, // USB D+ 輸出
output reg usb_dm_out, // USB D- 輸出
output reg [7:0] data_out, // 發(fā)送到主機(jī)的數(shù)據(jù)
input wire [7:0] data_in, // 從主機(jī)接收的數(shù)據(jù)
output reg data_valid, // 數(shù)據(jù)有效信號(hào)
output reg data_ready // 數(shù)據(jù)準(zhǔn)備好信號(hào)
);

// 內(nèi)部狀態(tài)機(jī)狀態(tài)
typedef enum logic [2:0] {
IDLE,
SYNC,
TOKEN,
DATA,
HANDSHAKE
} state_t;

state_t state, next_state;

// 內(nèi)部寄存器
reg [7:0] token_reg;
reg [7:0] data_reg;
reg [7:0] handshake_reg;

// 組合邏輯部分
always_comb begin
next_state = state;
usb_dp_out = 1'bz;
usb_dm_out = 1'bz;
data_valid = 1'b0;
data_ready = 1'b0;

case (state)
IDLE: begin
if (usb_dp && !usb_dm) begin
next_state = SYNC;
end
end
SYNC: begin
if (!usb_dp && usb_dm) begin
next_state = TOKEN;
end
end
TOKEN: begin
token_reg = {usb_dm, token_reg[7:1]};
if (token_reg[0]) begin
next_state = DATA;
end
end
DATA: begin
if (token_reg[0]) begin
// 接收數(shù)據(jù)
data_reg = {usb_dm, data_reg[7:1]};
if (data_reg[0]) begin
data_out = data_reg;
data_valid = 1'b1;
next_state = HANDSHAKE;
end
end else begin
// 發(fā)送數(shù)據(jù)
usb_dp_out = data_in[7];
usb_dm_out = ~data_in[7];
data_in = {1'b0, data_in[7:1]};
if (data_in[0]) begin
data_ready = 1'b1;
next_state = HANDSHAKE;
end
end
end
HANDSHAKE: begin
// 發(fā)送握手包
handshake_reg = 8'b00000011; // ACK
usb_dp_out = handshake_reg[7];
usb_dm_out = ~handshake_reg[7];
handshake_reg = {1'b0, handshake_reg[7:1]};
if (handshake_reg[0]) begin
next_state = IDLE;
end
end
endcase
end

// 時(shí)序邏輯部分
always_ff @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
state <= IDLE;
end else begin
state <= next_state;
end
end

endmodule


相關(guān)資訊

專(zhuān)業(yè)工程師

24小時(shí)在線(xiàn)服務(wù)提交需求快速為您定制解決方案

13798538021