计算机与USB沟通方式
一直不理解我們的設(shè)備如何通過USB或者其他接口溝通的,查了一些資料。
比如usb設(shè)備。
參考:
詳解USB總線工作原理
USB配置、接口和端點(diǎn)
USB具體通信過程
物理地址和虛擬地址的區(qū)別
1.設(shè)備插入,端口那里電壓發(fā)生變化。
2.進(jìn)入枚舉過程:枚舉就是從設(shè)備中讀取一些信息,了解設(shè)備類型、速度,就可以根據(jù)設(shè)備信息來從硬盤中加載合適的驅(qū)動(dòng)程序到內(nèi)存中運(yùn)行。
具體步驟如下:
s1 端口給cpu通過中斷線發(fā)送一個(gè)硬件中斷信號,計(jì)算機(jī)就能檢測到設(shè)備插入。
s2 CPU檢測到中斷,啟動(dòng)該接口的中斷處理程序,這個(gè)中斷處理程序就是讀hub的一些信息,比如設(shè)備速度類型(是高速設(shè)備還是低速設(shè)備),**HUB應(yīng)該指的是電腦的USB插口 **。hub應(yīng)該是在usb設(shè)備上
s3 中斷處理程序等待100ms,保證接入的設(shè)備進(jìn)入電壓穩(wěn)定狀態(tài),然后發(fā)消息讓HUB進(jìn)入復(fù)位狀態(tài),持續(xù)至少10ms保證電壓穩(wěn)定,等待下一步操作。
s4進(jìn)行高速模式測試,看接入的設(shè)備是否支持高速模式,還是只能全速模式。(不知道如何檢測的,檢測的方式是怎么樣的)
s5 中斷處理程序不斷向HUB發(fā)送Get_Port_Status請求,查詢設(shè)備是否復(fù)位成功和狀態(tài),設(shè)備進(jìn)行回應(yīng),確認(rèn)設(shè)備進(jìn)入空閑狀態(tài),就可以準(zhǔn)備發(fā)消息了。
s6 此時(shí)通信通過控制傳輸,默認(rèn)地址0,端口0(不理解這里是什么意思,控制傳輸是什么?地址是什么?端口是什么?)
s7中斷處理程序向設(shè)備發(fā)送請求獲取最大包長度
s8 中斷處理程序給設(shè)備分配一個(gè)地址(這個(gè)地址是干嘛用的?)
s9 中斷處理程序發(fā)送請求獲取設(shè)備信息,包括支持的配置個(gè)數(shù),設(shè)備類型。設(shè)備ID等(這些內(nèi)容應(yīng)該是提前燒在設(shè)備中了)。
s10 中斷處理程序根據(jù)設(shè)備信息選擇最合適的驅(qū)動(dòng)從硬盤中加載到內(nèi)存運(yùn)行。將設(shè)備以及設(shè)備信息添加到設(shè)備列表里,調(diào)用match函數(shù)查看驅(qū)動(dòng)是否匹配了,以前沒問題后,控制權(quán)就交給驅(qū)動(dòng),中斷處理程序下線!
s6、s8答案:
需要說明的是:在計(jì)算機(jī)這邊,一臺設(shè)備就是接口,接口通過數(shù)個(gè)端點(diǎn)來通信。
總體工作過程如下:
1.客戶軟件把要傳輸?shù)臄?shù)據(jù)放入數(shù)據(jù)緩沖區(qū)。
2.上層應(yīng)用調(diào)用該設(shè)備的驅(qū)動(dòng)程序向usb總線驅(qū)動(dòng)程序發(fā)送請求把數(shù)據(jù)拿走
3.usb主控制器驅(qū)動(dòng)程序?qū)?shù)據(jù)進(jìn)行相關(guān)處理,不然拆解、分包等
4.usb主控制器把數(shù)據(jù)分包,發(fā)到USB總線上,只要發(fā)到USB總線上,設(shè)備就能接收到了?
5.設(shè)備拿走后,調(diào)用設(shè)備內(nèi)的芯片對數(shù)據(jù)進(jìn)行相關(guān)處理。以下第5步中,指定端點(diǎn)實(shí)在計(jì)算機(jī)的接口那里還是設(shè)備中?
上面涉及到了主控制器驅(qū)動(dòng)程序、主控制器,那么設(shè)備的驅(qū)動(dòng)程序是指哪一個(gè)?還是其他的?
懵了,這么多東西?驅(qū)動(dòng)程序是拿來干嘛的?
有一個(gè)問題:根據(jù)我的想法,電腦usb插口是不是有寄存器?,電腦跟usb的通信都通過放在那里的寄存器來運(yùn)行?因?yàn)榭从?jì)算機(jī)的模塊組成圖(譚玉剛的),CPU是由一些引腳到設(shè)備上的,但是我不確定插口那里有沒有寄存器,或者說寄存器在外設(shè)中,插口那里只是線路連接?但是計(jì)算機(jī)組成里又有外設(shè)編址的說法,要是那里沒有寄存器,如何來編址的說法?還有寄存器是如何工作的?
答:關(guān)于端口
我覺得,端點(diǎn)的情況,有多少個(gè),每一個(gè)的特性應(yīng)該會在設(shè)備描述符中發(fā)給計(jì)算機(jī)吧。
訪問外設(shè)的端口(寄存器),在8086CPU上是使用in/out指令,那是因?yàn)?086的外設(shè)是獨(dú)立編址,肯定不能跟訪問內(nèi)存一樣的指令,否則不能區(qū)分訪問的是內(nèi)存還是外設(shè),
但是統(tǒng)一編址就不用in/out指令訪問外設(shè)了,外設(shè)已經(jīng)提前分配好內(nèi)存地址了。
物理地址和虛擬地址的區(qū)別
usb配置、接口和端點(diǎn)
所以說,電腦插口那里并沒有寄存器,只有線路連接的作用。
答:解答寄存器是如何工作的?
首先寄存器也是一個(gè)簡單的數(shù)字線路,和簡單的邏輯門是一樣的,有輸入和輸出,區(qū)別在于普通的邏輯門對于相同的輸入,只有一個(gè)輸出,但是寄存器這個(gè)線路(默認(rèn)只有簡單的1位),當(dāng)它保存的是0時(shí),輸入通電后它的輸出就是0,當(dāng)它保存的是1時(shí),通電后它的輸出就是1。
那么它是如何保存0或者1呢?
我的理解如下:
注:通電即輸入為1
首先,計(jì)算機(jī)沒通電時(shí),它保存的肯定是0。
一個(gè)1位的寄存器由一個(gè)或門、一個(gè)非門、一個(gè)與門構(gòu)成。有兩個(gè)輸入,一個(gè)輸出。假設(shè)一個(gè)輸入為A,一個(gè)為B,B的功能為控制讀或?qū)?#xff0c;設(shè)定當(dāng)B通電,是寫狀態(tài),此時(shí)寫入A,后邊的線路是個(gè)回路結(jié)構(gòu),如果A是1即通電,那么后面的線路就一直通電(是個(gè)回路結(jié)構(gòu),可以保存電),如果A是0,后面的線路就沒電。當(dāng)后面的線路是一直通電狀態(tài)時(shí),就是把1保存下來了,如果要讀寄存器數(shù)據(jù),也就是B不通電,也就是在讀的狀態(tài),那么A通電,因?yàn)楹竺娴木€路是有電的,不論如何輸出都是1。相反,如果后面線路是沒電的,在進(jìn)行讀的時(shí)候,當(dāng)A通電時(shí),因?yàn)楹竺娴木€路沒有保存電,輸出就是0.
也就是說,1或0的保存是通過電的保存來完成。所以這東西不能斷電,否則數(shù)據(jù)丟失。
還有一個(gè)要注意的是寫的時(shí)候要應(yīng)該沒有輸出。
總結(jié)
以上是生活随笔為你收集整理的计算机与USB沟通方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机是如何按照时钟来顺序工作的
- 下一篇: 试图理解80836实模式转变为保护模式