usb基礎知識
幀: 是一個時間概念,在USB中,一幀就是1MS,包含了一系列總線動作。USB
本文引用地址:http://cqxgywz.com/article/201611/322917.htm將一幀分為好幾份,每份就是USB的一個傳輸動作。
上行:設備到主機為上行,主機到設備為下行。
2、數據在USB中的發送是由低位到高位發送的。
3、USB的數據格式:
數字串構成域(有七種),域再構成包,包再構成事務(IN、OUT、SETUP),事務最后構成傳輸(中斷傳輸、并行傳輸、批量傳輸和控制傳輸)。
域:
名稱 | 值 | 意義 |
同步域(SYNC) | 固定為0000 0001 | 用于同步 |
標識域(PID) | 四位標識符+四位標識符反碼 | 表明包的類型和格式,共16種 |
地址域(ADDR) | 7位地址 | 設備在主機上的地址(注1) |
端點域(ENDP) | 4位 | |
幀號域(FRAM) | 11位 | 每個幀都有其編號,最大為0x800 |
數據域(DATA) | ||
校驗域(CRC) |
注:1、地址000 0000被命名為零地址,是任何一個設備第一次連接到主機時,在被主機配置、枚舉前的默認地址,由此可以知道為什么一個USB主機只能接127個設備的原因。
2、端點域有4位,所以一個設備最多有16個端點。
包:
令牌包 | SYNC+PID+ADDR+ENDP+CRC5(五位的校驗碼)(輸入、輸出、設置) SYNC+PID+11位FRAM+CRC5(五位的校驗碼)(幀起始包) |
數據包 | SYNC+PID+0~1023字節+CRC16 |
握手包 | SYNC+PID |
特殊包 |
事務:
IN:令牌包、數據包、握手包
OUT:令牌包、數據包、握手包
SETUP:令牌包、數據包、握手包 這8個字節的內容就是標準的USB設備請求命令(共有11條
傳輸:
傳輸由IN、OUT、SETUP中的事務構成,有中斷傳輸、批量傳輸、控制傳輸、
同步傳輸、控制傳輸,其中中斷傳輸和批量轉輸的結構一樣,同步傳輸有最簡單的結構,而控制傳輸是最重要的也是最復雜的傳輸。
1、 中斷傳輸:由OUT事務和IN事務構成,用于鍵盤、鼠標等HID設備的數據傳輸中
2、 批量傳輸:由OUT事務和IN事務構成,用于大容量數據傳輸,沒有固定的傳輸速率,也不占用帶寬,當總線忙時,USB會優先進行其他類型的數據傳輸,而暫時停止批量轉輸。
3、 同步傳輸:由OUT事務和IN事務構成,有兩個特殊地方,第一,在同步傳輸的IN和OUT事務中是沒有返回包階段的;第二,在數據包階段所有的數據包都為DATA0
4、 控制傳輸:最重要的也是最復雜的傳輸,控制傳輸由三個階段構成(初始設置階段、可選數據階段、狀態信息步驟),每一個階段可以看成一個的傳輸,也就是說控制傳輸其實是由三個傳輸構成的,用來于USB設備初次加接到主機之后,主機通過控制傳輸來交換信息,設備地址和讀取設備的描述符,使得主機識別設備,并安裝相應的驅動程序,這是每一個USB開發者都要關心的問題
令牌包:
0x01輸出(OUT)啟動一個方向為主機到設備的傳輸,并包含了設備地址和標號
0x09輸入(IN)啟動一個方向為設備到主機的傳輸,并包含了設備地址和標號
0x05幀起始(SOF)表示一個幀的開始,并且包含了相應的幀號
0x0d設置(SETUP)啟動一個控制傳輸,用于主機對設備的初始化
數據包:
0x03偶數據包(DATA0),
0x0b奇數據包(DATA1)
握手包:
0x02確認接收到無誤的數據包(ACK)
0x0a無效,接收(發送)端正在忙而無法接收(發送)信息
0x0e錯誤,端點被禁止或不支持控制管道請求
特殊包0x0C前導,用于啟動下行端口的低速設備的數據傳輸


評論