色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

從整體上介紹usb協議

開源嵌入式 ? 來源:開源嵌入式 ? 作者:開源嵌入式 ? 2021-03-09 15:15 ? 次閱讀

USB作為一種串行接口,應用日益廣泛。如同每個工程設計人員必須掌握I2C,RS232這些接口一樣,我們也必須掌握usb。

本文將從整體上介紹usb協議,包括usb host ,usb hub,usb function。希望能給讀者一個總體上的了解。

一.usb function:

初識usb

usb是一種串行接口協議,它靠d+,d-兩條數據線構成的差分線來進行數據傳輸,這讓我們非常感興趣它到底和我們通常熟悉兩線rs232/485有何區別。了解這種區別有助于我們對usb作一個深入的了解。那么讓我們回想一下到底一個兩線rs232的數據是如何傳送的,如圖一:

ebde6dea-7c3c-11eb-8b86-12bb97331649.jpg


在這里我們的重點在于,我們發現要在串行口傳送數據一個最基本的要求恐怕就是:要知道數據傳輸何時開始,何時結束。即如何delimit.那么rs232怎么做的。顯然,在idle(空閑)時,即無數據傳送時,數據線處于高平,等到有數據開始傳送,發送方首先拉低數據線(start),表示數據傳輸始,接收端也因為這個“start”信號開始準備接受即將到來的數據,類似一次握手隨后,在兩者之間的數據傳送開始,結束后主方再次拉高數據線,表示結束傳輸,自此兩者重新進入Idle狀態。等待下一輪傳送開始。了解了rs232,那么我們自然想到usb如何做到這個呢,既然是串行位流傳輸,也理所當然的解決這個問題。沒錯,Usb協議必然要解決這個問題,讓我們作一個類似rs232的比較吧!類似于rs232,usb的傳輸楨如圖二:

(這里我們暫時忽略這個傳輸所代表的意義)為了說明問題,我們對一些問題簡化,我們定義這樣幾個狀態:假設D+,D-分別表示usb信號線的電平信號。那么對于usb full speed function(high speed ,low speed是不同的),我們定義差分數據線上可能出現的四個狀態:

Data J state:D+=1,D-=0;

Data K state:D+=0,D-=1;

SE0:D+=D-=0;

SE1:D+=D-=1;

那么上面的圖中,相應的也可表示為圖三:

這個對usb full speed function來說,idle狀態將處于Data J state,se0表示一楨結束。看這個圖是不是很像我們熟悉的rs232。沒錯,他們確實很相似。在無數據傳輸時,它們都處于Idle狀態,當要開始傳輸數據時,先發一個sync(同步信號,rs232為start,usb為一sync字節,見協議說明)信號進行“握手”,而后開始傳輸,當傳輸要結束時,發一stop信號(usb為一個se0狀態表示要結束傳輸),最后又進入idle態等待新的傳輸。不過,你可能更加注意到,他們還是不同的。不同在于usb是按packet進行傳輸的,就是說它傳輸的最小單位是packet,而rs232是按字節傳送的,也即它的最小傳送單位是字節。既然是按pakcet傳送,想想我們相較于rs232的按字節單位傳輸,我們可以得到哪些“好處”。想想看,pakcet的好處不就在于我們可以靈活的定義數據的傳送格式,傳送方式,從而可以適應各種各樣的串行設備,這不就是所謂的“通用串行總線”嗎?

從本節開始,我們將介紹usb的傳輸機制。這節先介紹usb現有傳輸方式的背景知識,做為對下節將要展開的四種傳輸類型,描述符,等相關知識的一個導引。

二.usb傳輸

我們在上一節中了解到了usb的“packet”的感念,了解到了usb傳送一個packet總是以sync開始,以eop結束,這個稱為delimiter,即標記packet的始末。有了packet,我們就可以在usb總線上傳輸數據了。但是這還不夠,比如數據傳送方向,即傳回usb主機還是傳下usb從機,數據傳送的地址,數據傳送的類型(這些后面我們將會知道)這些信息在傳輸之前是必須搞清楚的,那么這個信息如何得知呢,看來這就需要我們定一套基于packet的“協議”了。主機與從機在傳輸中均遵循這套“協議”,那么這些問題就可以迎刃而解。事實上,usb的一次數據傳輸總是遵循這樣的“協議”的:首先,主機發第1個packet給從機,聲明數據傳送方向,數據傳輸地址,數據傳輸類型。其次,主機發第2個至第n個packet載有實際數據最后,從機返回一個packet是一個ACK包,報告數據傳輸的果,比如接受出錯或成功等信息,這樣主機就可以借此了解到這次傳輸情況,從而有可能來作出相應措施如決定是否重發。

基本上可以歸結為一個“三段式”傳輸這里有人可能注意到了,對這樣一個傳輸機制,從機和主機的功能將是一樣的,因為這樣的實現機制,從機可能在某一時刻是主機,某一時刻又可能是從機,因為他們要實現同樣的功能。這樣實現起來的復雜性也將是一樣的。這里概念或許容易混淆,其實,我們這里的主機(master)和從機(slaver)是一個transceiver,即可收可發。相應的,在某一時刻,master在發數據,我們稱其為transmitter,在接受時我們稱為receiver.對slaver同樣。我們可能還注意到了,usb這種按pakcet傳輸的方式在實現時已經很復雜了(至少比rs232要復雜多吧),至少我們目前看來主從機功能一樣這樣的實現方式似乎還是可行,但是后面我們談到usb host時將會了解到host的功能是如何的復雜,以至于讓一個usb function 也帶上如此的功能成本和實現復雜性將陡然上升。作為面向廣范應用的usb,這是我們不允許的。我們期望的是一個使用usb 的udisk,使用usb的光驅,使用usb的耳麥等等這些東西不要因為usb而變得昂貴,復雜。正是因為這個原因,usb從機的傳輸發式便由上面的方式改成了下面的方式進行:

首先,主機發第1個packet給從機,聲明數據傳送方向,數據傳輸地址,數據傳輸類型。
其次,從機收到主機送來的第一個packet后,再發第2個至第n個packet載有實際數據最后,主機返回一個packet是一個ACK包,報告數據傳輸的結果,比如接受出錯或成功等信息,這樣從機就可以借此了解到這次傳輸情況,從而有可能來作出相應措施如決定是否重發。而對于usb 主機傳輸方式保持不變。對于這樣的改變,我們馬上就有疑問了:這個改變的傳輸方式是和未改變之前的等價嗎。當然,不全等價。問題在哪里?仔細觀察一下便知,兩者區別在于第一個packet是由誰發起的。未改變之前,第一個packet總是由要傳送數據的一方發起,而改變之后的第一個Packet總是由主機發起。這樣,就變成如果從機要發送數據給主機時,總是由主機發起(第一個packet),然后從機開始傳送。可能初次接觸我們會感覺怪怪的,怎么從機要給主機發送數據前反而要主機先發packet給從機。這樣行嗎?我們要說這樣是可以的,因為通常一次傳輸交互的產生,并非無來由的產生,這些都是由程序員控制的,控制usb何時收,何時發,及發給誰!!!這里我們就注意到了,usb function(總是作為從機)的功能一下從原來與主機具有相同功能的tranceiver變成了現在僅具發送(或接收)功能的transmitter(或Receiver)實現的復雜性及成本可想而知也就相應得減小了。

三.usb full speed function的四種傳輸類型

我們了解到了usb host與usb function之間采用的是一種“非對稱”的傳輸,也就是說,無論usb接受數據還是發送數據,都是由usb host首先發起。即傳輸的第一個packet總是由usb host發出的。這個packet將聲明本次即將進行的數據傳輸方向,數據傳輸地址和數據傳輸類型。

控制傳輸:

或許你已經注意到了,一個usb host端口并不是僅僅支持一個Usb function.如圖1

通過usb hub,一個usb host端口可以連接usb鼠標,usb鍵盤,Usb寫字板......。要連接這么多東西在同一個usb host上,我們通常會有一個基本問題,即usb host如何識別這些被連接在它的端口上的設備呢。正如通常的主從式通訊系統一樣,如rs485多機通訊,我們通常是用一個特定的地址標志每一個從設備。對這里的usb,我們采用同樣的方法,將為每個掛接在該usb host上的usb function指定一個特定地址,通過這個特定地址來識別每個usb function.看來這將是一個usb function在數據傳輸之前必須解決的問題--得到它的地址分配。這個“地址指定”的過程需要usb host通知usb function才能完成,這個交互過程就是一個控制式傳輸。通過這個“控制式傳輸”,usb host將指定地址給usb function ,以為即將進行的正式通訊做好準備工作。這里細心的讀者可能已經注意到了,既然usb host總要分配地址給usb function才能進行正式的數據傳輸工作,那么usb host將如何與一個初始時未分配地址的usb function進行交互來分配地址呢。這里,是這樣解決的:usb協議保留了一個“通用地址”0,usb host 通過這個地址0來和初始未分配地址的usb function進行通訊,進行一些初始的準備工作,諸如這里的為它非配一個特定地址。后面我們就會了解到,usb除了配置地址外,還有一些其它參數需要事先主從雙方達成共識。這些參數也都是通過控制式傳輸完成的。一個Usb 的控制式傳輸如下圖:

一個Usb的控制式傳輸分為兩個或三個階段進行傳輸:setup stage,data stage(視情況而定),status stage。

首先是setup stage,聯系上節所說的Usb傳輸模式,usb Host總是先發起第一個packet--這里它

首先發起setup,

之后發起以data0為起始的setup data,

最后usb function回應ack結束一次交互。

其次如果有data stage,類似的,還是按照上節說的usb傳輸模式,

usb host總是先發起第一個Packet--Out(或in),

之后usb host(或usb function)發起以data1為起始的payload data,

最后Usb fuction(或usb host)回應ack結束一次交互。如果數據未傳完,繼續data stage,同上繼續。

最后是status stage,類似的,

usb host首先發起第一個Packet--in(或out),

之后usb function(或usb host)發起以data1為起始的Null data(0長度),

最后Usb host(或usb function)回應ack結束一次交互。

如此,整個控制式傳輸結束。你或許有疑問,data stage為什么進行了多次而非一次完成?實際上,usb總是將一批大量的數據分成了許多小段來進行傳輸,稱為一個pay load。這樣傳輸的目的是容易對傳輸進行控制。既然一次大量的數據總是被分成一段一段來分次傳輸,那么這里就出現了一個需要事先確定的參數(wMaxPacketSize):即每次即這個小段有多大。這個參數如地址指派一樣,正式傳輸之前需要事先達成共識。通過控制式傳輸,現在我們

已經完成了usb function的地址指定等參數的設置工作,下一步可以進行正式的數據傳輸了。

塊傳輸:

我們終于等到usb function 配置完成,現在我們的任務是要傳送一批數據,這里可以使用批量數據傳輸(bulk Transactions)。一個批量傳輸總是按照如圖所示方式進行。

首先,usb host發起第一個Packet--in(或out),表示要開始數據傳輸了。

其次,usb function(或usb host)發起以data1(或data0)為起頭的payload data,開始一次交互。

再其次,usb host(或Usb function)發起ack回應這次交互。如果數據還為傳完,繼續上述過程,即:如此繼續直至傳輸完成。

首先,usb host再次發起一個Packet--in(或out),表示又要開始數據傳輸了。

其次,usb function(或usb host)發起以data0(或data1)為起頭的payload data,開始又一次交互。

再次,usb host(或Usb function)發起ack回應這次交互。

這里的疑問依然是為什么一次可能傳完的數據為什么分成多次進行傳輸,原因在上次介紹控制式傳輸式已經說明。后面我們就會明白,為什么這樣可以方便控制傳輸過程。仔細看看控制式的data stage采用的傳輸方式,是否就是批量傳輸方式呢?!注意,每次payload data的“牽頭人”(preamble)在輪番掉換,先是data1,接著data0,再是data1,......如此接替,只要有一次交互出現問題,這個接替規則就會被打破進而被Usb host識別而發現傳輸異常。所以這個交替的“牽人”規則是可靠數據傳輸的所采取的措施之一。

同步傳輸和中斷式傳輸:

在批量數據傳輸中,觸發一次批量數據傳輸總是“被動”的,就是說需要數據傳輸時Usb host并不會主動發起傳輸,而是需要得到你的指令。當你告訴它:“一切ok,讓我們開始吧!” 這時它才開始數據傳輸。這種方式顯然在某些情況下并不適合。比如音視頻流,你無法要求它聽從你的“指揮”,讓它等你發指令給usb host,然后開始一次傳輸。我們需要的是一種“及時”傳輸。一個好的方案就是設置一個timer,按照tick發起usb傳輸。這個tick通常以1ms(usb full speed)為最小單位。這時,可以設置為每次1ms tick出現,usb host“自動”發起一次數據傳輸。那么這種方案具體如何來實現呢?看來最基本的要素便是一個發出tick的timer,而這個“timer”需要usb host和usb function(事實上還要包括usb hub)雙方均能“看到”,從而協調工作,否則單方面的timer又有何意義?這個"timer"(或tick)在usb中使用一個特殊的packet實現,即是SOF。這個SOF由USB HOST 相當精確的以每1.00 ms ±0.0005 ms的時間周期發送給usb device,來在二者之間定時。從而usb function能夠“及時”的了解到“現在時刻”。現在我們在usb host和usb function之間建立起了“對時”機制。那么接下來看看剛才設想的“自動”傳輸如何實現。事實上,一旦usb host及usb function雙方建立了一種時間機制,那么這種“自動”傳輸是很容易實現的。usb 實現同步式傳輸或中斷式傳輸總是以一種類似于批量數據傳輸的方式進行的,唯一不同的是傳輸的觸發不再是“被動”的,而是由SOF所建立的tick觸發。

首先,時間到達,usb host發起第一個Packet--in(或out),表示要開始數據傳輸了。

其次,usb function(或usb host)發起以data1(或data0)為起頭的payload dat開始一次交互。

再其次,如果是中斷式傳輸,usb host(或Usb function)發起ack回應這次交互,如果是同步式傳輸,該步跳過。

如此重復上述步驟,即usb host等待下一個tick到達,并開始新一輪的交互。這里我們注意到了,同步式傳輸和中斷式傳輸二者雖然都是時間觸發,但是中斷式傳輸需要ack應答,而相反,同步式傳輸不需要。這個最大的區別決定了同步式傳輸是一種非可靠傳輸,但是因此換來了更多的usb傳輸時間。也因此,同步式傳輸的 payload data(對應wMaxPacketSize )通常相較于其他傳輸方式比較大,因為它消掉了ack所占有數據傳輸時間。這里還有一個地方值得注意的是tick的設定,這個tick也是需要事先usb host 和usb function達成共識的參數之一。

以上是USB通信的簡要概述,需要詳細協議與程序的可以聯系本公眾號,我們會把完整的協議與程序發送給您。

責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    60

    文章

    7950

    瀏覽量

    264874
  • 數據傳輸
    +關注

    關注

    9

    文章

    1914

    瀏覽量

    64640
  • 通信
    +關注

    關注

    18

    文章

    6036

    瀏覽量

    136060

原文標題:【USB接口的奧秘】讓大家都懂USB通信原理

文章出處:【微信號:KY_QRS,微信公眾號:開源嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    RT-Thread USB協議棧-CherryUSB快速上手指南

    CherryUSB是一個小而美、可移植性高的USB主從協議棧。它是由國內開發者開發的一款USB協議棧,以其優秀的性能效率得到了開發者的青睞,特別是在高速
    的頭像 發表于 11-22 01:09 ?291次閱讀
    RT-Thread <b class='flag-5'>USB</b><b class='flag-5'>協議</b>棧-CherryUSB快速上手指南

    USB PD3.1協議芯片-LDR6020

    LDR6020是一款功能強大的USB PD3.1協議芯片,以下是對LDR6020的詳細介紹: ? ? 一、基本特性 LDR6020集成了3組6路DRP USB-C及PD通信
    的頭像 發表于 11-10 10:23 ?462次閱讀
    <b class='flag-5'>USB</b> PD3.1<b class='flag-5'>協議</b>芯片-LDR6020

    MCTP協議的簡單介紹

    通信。因為MCTP協議可以在多種底層傳輸媒介運行,如I2C、SMBus、I3C、PCIe、USB和以太網等,因此MCTP在不同的硬件平臺和通信環境中具有廣泛的適用性。
    的頭像 發表于 10-21 14:26 ?1400次閱讀
    MCTP<b class='flag-5'>協議</b>的簡單<b class='flag-5'>介紹</b>

    DVEVM的主機USB支持

    電子發燒友網站提供《DVEVM的主機USB支持.pdf》資料免費下載
    發表于 10-15 10:04 ?0次下載
    DVEVM<b class='flag-5'>上</b>的主機<b class='flag-5'>USB</b>支持

    電視usb是用來干什么的

    電視USB接口是一個非常實用的功能,它允許用戶通過USB設備(如U盤、移動硬盤等)直接播放存儲在這些設備的多媒體文件,如視頻、音頻、圖片等。此外,
    的頭像 發表于 10-12 10:06 ?2798次閱讀

    USB協議分析儀的技術原理和應用場景

    USB協議分析儀的技術原理和應用場景可以詳細闡述如下:技術原理USB協議分析儀的技術原理主要基于以下幾個方面: 總線監聽:USB
    發表于 09-24 14:29

    涂鴉智能照明產品方案整體介紹

    Tuya智能照明產品方案整體介紹
    發表于 09-05 11:49 ?1次下載

    HSW-JD6610 USB-PD/PPS 及多協議控制器

    描述JD6610是一款簡化的USB Power Delivery 3.1SPR及可編程電源 (PPS) 協議控制器。 它也支持華為的快速充電協議(FCP),超級充電協議(SCP)、AF
    發表于 08-28 09:14 ?0次下載

    EtherCAT站轉EtherNet/IP協議網關(JM-EIP-ECAT)

    EtherNet/IP設備連接到EtherCAT網絡。 廣泛應用:在工業自動化領域,不同設備和系統可能采用不同的通信協議。EtherCAT站轉EtherNet/IP協議網關可以將
    的頭像 發表于 08-15 17:30 ?448次閱讀
    EtherCAT<b class='flag-5'>從</b>站轉EtherNet/IP<b class='flag-5'>從</b>站<b class='flag-5'>協議</b>網關(JM-EIP-ECAT)

    Porfinet轉EtherCAT總線協議轉換網關

    ,?從而實現不同工業通信協議之間的互操作性。?這些網關設備通常具有兩個以太網接口,?分別用于連接Porfinet和EtherCAT網絡1/2。? 2. 網關做為 Porfinet網絡設備一側的站(即
    的頭像 發表于 07-16 15:11 ?375次閱讀
    Porfinet<b class='flag-5'>從</b>轉EtherCAT<b class='flag-5'>從</b>總線<b class='flag-5'>協議</b>轉換網關

    HPM USB系列:HPM6700雙USB功能介紹

    HPM6700系列MCU提供了2個USB外設端口。這些端口內置高速PHY,支持OTG模式,主機模式支持高速、全速和低速模式,設備模式支持高速和全速模式,完全兼容USB 2.0協議
    的頭像 發表于 05-30 11:40 ?662次閱讀
    HPM <b class='flag-5'>USB</b>系列:HPM6700雙<b class='flag-5'>USB</b>功能<b class='flag-5'>介紹</b>

    USB轉多協議串口通信

    、232、TTL多協議串口的通信。板子預留了5V和3.3V的供電輸出,輸出電流最大500mA。 一. 產品簡介: 1)項目背景是在實際應用中需要多種串口調試工具,攜帶起來也不太方便就做了這款USB
    的頭像 發表于 04-29 16:23 ?594次閱讀
    <b class='flag-5'>USB</b>轉多<b class='flag-5'>協議</b>串口通信

    全功能USB Type-C擴展塢介紹

    筆記本的USB Type-C屬于“全功能”型不僅同時支持數據傳輸、DP視頻輸出和USB PD協議的充電功能,還支持更豪華的擴展塢設備。
    的頭像 發表于 04-09 11:13 ?1835次閱讀
    全功能<b class='flag-5'>USB</b> Type-C擴展塢<b class='flag-5'>介紹</b>

    CAN和CANFD協議簡介(

    CAN和CANFD協議簡介(
    的頭像 發表于 01-26 08:06 ?1428次閱讀
    CAN和CANFD<b class='flag-5'>協議</b>簡介(<b class='flag-5'>上</b>)

    求助,如何實現QC協議USB PD協議

    如何實現QC協議USB PD協議
    發表于 01-24 08:11
    主站蜘蛛池模板: 国产亚洲日韩在线播放不卡| 99视频久九热精品| 强被迫伦姧惨叫VIDEO| 久久久久亚洲日日精品| 海角社区在线视频播放观看| 国产乱色伦影片在线观看| 粉嫩国产14xxxxx0000| 久久国产亚洲精品AV麻豆| 国产午夜精品片一区二区三区 | 果冻传媒视频在线播放 免费观看 果冻传媒视频在线播放 | caoporn超碰视频| 99热久久视频只有精品6国产| 2021国产在线视频| 91久久精品国产亚洲| 午夜福利电影网站鲁片大全| 熟妇无码乱子成人精品| 甜性涩爱dvd| 欧美日韩亚洲一区二区三区在线观看| 免费看黄色小说| 欧美18在线| 日韩精品 中文字幕 有码| 色爰情人网站| 欧美高清video mr.sexo| 欧美性FREE玩弄少妇| 日本一本二本三区免费免费高清| 快播av种子大全| 免费99精品国产自在现线| 欧美zzzoooxxx| 日韩欧美一区二区三区在线| 丝袜情趣在线资源二区| 亚洲 自拍 欧洲 视频二区| 日本丝袜护士| 双腿打开揉弄高潮H苏安安秦慕深| 外国三级片名| 鸭子玩富婆流白浆视频| 一本色道久久综合亚洲精品蜜桃冫| 中文无码字慕在线观看| 亚洲免费黄色| 中文字幕精品AV内射夜夜夜| fyeex性欧美人与曾| 国产激情精品久久久久久碰|