使用VB開發(fā)串口、USB通信軟件ppt課件_第1頁
使用VB開發(fā)串口、USB通信軟件ppt課件_第2頁
使用VB開發(fā)串口、USB通信軟件ppt課件_第3頁
使用VB開發(fā)串口、USB通信軟件ppt課件_第4頁
使用VB開發(fā)串口、USB通信軟件ppt課件_第5頁
已閱讀5頁,還剩87頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實際應(yīng)用中,通常要遇到PC與單片機(jī)系統(tǒng)的通信問題。由于PC和單片機(jī)(如MCS-51)都具有串口,因此經(jīng)常使用串口完成兩者之間的數(shù)據(jù)交換。本章主要介紹RS-232C串行通信技術(shù)以及在Windows環(huán)境下編寫串口通信程序的方法、USB接口技術(shù)以及相應(yīng)的開發(fā)實例。,第7章 PC端接口技術(shù),1,RS-232串行通信技術(shù) USB接口技術(shù) 實踐與思考,本章主要內(nèi)容:,第7章 PC端接口技術(shù),2,RS-232串行通信技術(shù),目前已經(jīng)有幾種。RS-232標(biāo)準(zhǔn)是目前常用的串行通信接口標(biāo)準(zhǔn),它是美國EIA(電子工業(yè)聯(lián)合會)與BELL等公司一起開發(fā)的1969年公布的通信協(xié)議。它適合于數(shù)據(jù)傳輸速率在020Kbps范圍內(nèi)

2、的通信。這個標(biāo)準(zhǔn)對串行通信接口的有關(guān)問題,如信號線功能、電器特性都做了明確規(guī)定。由于通信設(shè)備廠商都生產(chǎn)與RS-232C制式兼容的通信設(shè)備,因此,它作為一種標(biāo)準(zhǔn),目前已在計算機(jī)通信接口中廣泛采用。,3,RS-232串行通信技術(shù),RS-232C標(biāo)準(zhǔn)介紹 簡單的串行通信協(xié)議的設(shè)計 MSComm控件介紹 使用VB開發(fā)串行口通信軟件 使用VC+開發(fā)串行口通信軟件,4,RS-232C標(biāo)準(zhǔn)介紹,1. RS-232C中的引腳定義,5,RS-232C標(biāo)準(zhǔn)介紹,2. RS-232C的電氣特性,RS-232C標(biāo)準(zhǔn)對邏輯電平的定義:,在TXD和RXD上:邏輯1(MARK)= 315V,邏輯0(SPACE)=+3+15

3、V。 在RTS、CTS、DSR、DTR和DCD等控制線上:信號有效(接通,ON狀態(tài),正電壓)=+3+15V ,信號無效(斷開,OFF狀態(tài),負(fù)電壓)=315V。,RS-232C與TTL轉(zhuǎn)換:,EIA-RS-232C是用正負(fù)電壓來表示邏輯狀態(tài)的,為了能夠同計算機(jī)接口或終端的TTL器件連接,必須在EIA-RS-232C與TTL電路之間進(jìn)行電平和邏輯關(guān)系的變換。實現(xiàn)這種變換的方法可用分立元件,也可用集成電路芯片。目前較為廣泛地使用集成電路轉(zhuǎn)換器件,如MC1488、SN75150芯片可完成TTL電平到EIA電平的轉(zhuǎn)換,而MC1489、SN75154可實現(xiàn)EIA電平到TTL電平的轉(zhuǎn)換。,6,RS-232C

4、標(biāo)準(zhǔn)介紹,左圖顯示了1488 和1489的內(nèi)部結(jié)構(gòu)和引腳。MC1488的引腳(2)、(4,5)、(9,10)和(12,13)接TTL輸入。引腳3、6、8、11輸出端口接EIA- RS-232C。MC1498的14的1、4、10、13腳接EIA輸入,而3、6、8、11腳接TTL輸出。具體連接方法如右圖所示。,7,RS-232C標(biāo)準(zhǔn)介紹,3. RS-232C接口的電平轉(zhuǎn)換,RS-232C電平采用負(fù)邏輯,即: 邏輯“0”:+5+15V 邏輯“1”:515V,RS-232C不能和TTL電平直接相連,使用時必須進(jìn)行電平轉(zhuǎn)換,否則將使TTL電路燒壞,實際應(yīng)用時必須注意!,常用的電平轉(zhuǎn)換集成電路除了上面所介

5、紹的傳輸線驅(qū)動器MC1488和傳輸線接收器MC1489。另一種常用的電平轉(zhuǎn)換電路是MAX232,MAX232芯片可完成TTLEIA雙向電平轉(zhuǎn)換。 圖為MAX232引腳圖。,8,簡單的串行通信協(xié)議的設(shè)計,PC和單片機(jī)最簡單的連接是零調(diào)制三線經(jīng)濟(jì)型。下圖給出了采用MAX232芯片的PC和單片機(jī)串行通信接口電路,與PC相連采用9芯標(biāo)準(zhǔn)插座。,2. PC通信軟件,1. 單片機(jī)通信軟件,MCS-51通過中斷方式接收PC發(fā)送的數(shù)據(jù),并回送。單片機(jī)串行口工作在方式1,晶振為6MHz,波特率2400,定時器T1按方式2工作,經(jīng)計算定時器預(yù)置值為0F3H,SMOD=1。,參考程序,PC方面的通信程序可以用匯編語

6、言編寫,也可以用其他高級語言例如VB、VC來編寫。,匯編語言編寫的參考程序,9,MSComm控件介紹,在Windows環(huán)境下,串口是系統(tǒng)資源的一部分。應(yīng)用程序要使用串口進(jìn)行通信,必須在使用前向操作系統(tǒng)提出資源申請要求(打開串口),通信完成后必須釋放資源(關(guān)閉串口)。在Windows的系統(tǒng)函數(shù)中,均包含了支持通信中斷的功能。對串口通信而言,Windows為相應(yīng)的串口設(shè)備開放了用戶定義的輸出緩沖區(qū)和輸入緩沖區(qū),應(yīng)用程序只能對輸入/輸出緩沖區(qū)進(jìn)行操作,數(shù)據(jù)進(jìn)出串口的操作均由系統(tǒng)后臺完成。以接收為例,系統(tǒng)每接收一個字符就產(chǎn)生一個低級的硬件中斷,系統(tǒng)的串口驅(qū)動程序?qū)⒔邮盏降淖址腿胼斎刖彌_區(qū),此時應(yīng)用程

7、序就可以通過訪問輸入緩沖區(qū)得到接收到的字符信息。,10,MSComm控件介紹,Windows為用戶提供了兩種方式實現(xiàn)串口通信。,使用串口通信控件 使用Windows的API應(yīng)用程序接口,使用串口通信控件進(jìn)行串口程序開發(fā)極為方便,如果不需要對串口進(jìn)行高級控制一般多選擇使用MSComm控件進(jìn)行開發(fā)。本章介紹在VB下使用MSComm控件進(jìn)行計算機(jī)實驗室溫控系統(tǒng)串口程序開發(fā)。,11,使用串口通信控件,針對串口通信,微軟公司專門提供了MSComm控件,使用該控件進(jìn)行串口通信設(shè)計是十分方便的,程序員不必花時間去了解較為復(fù)雜的API函數(shù)。通過簡單修改控件的屬性和使用控件提供的方法,就可以實現(xiàn)對串口的配置、完

8、成串口接收和發(fā)送數(shù)據(jù)。,12,使用Windows的API應(yīng)用程序接口,在Windows中,串口是以文件的形式被打開和訪問的。串口和串口通信驅(qū)動需要使用設(shè)備控制塊(Device Control Block,DCB)進(jìn)行配置。應(yīng)用程序使用API函數(shù)CreateFile打開串口,ReadFile讀串口,CreateEvent建立事件對象和CloseHandle關(guān)閉串口。,13,使用Windows的API應(yīng)用程序接口,Micronsoft Communications Control (MSComm)是Micronsoft公司提供的簡化Windows下串口通信編程的ActiveX控件,它為應(yīng)用程序提供

9、了通過串口收發(fā)數(shù)據(jù)的簡便方法。在串口編程中,使用MSComm控件非常方便,僅需通過簡單修改控件的屬性和使用控件提供的方法,就可以實現(xiàn)對串口的配置,完成串口接收和發(fā)送數(shù)據(jù)等任務(wù)。,14,使用Windows的API應(yīng)用程序接口,(1)MSComm控件的通信方法。MSComm控件提供了兩種處理通信的方式:事件驅(qū)動方式和查詢方式。 (2)MSComm控件的屬性與常數(shù)。,CommPort屬性。設(shè)置并返回通信端口號。端口號的范圍為116,但如果用PortOpen屬性打開一個并不存在的端口時,MSComm控件會產(chǎn)生錯誤68(設(shè)備無效)。 RThreshold屬性。設(shè)置返回要接收的字符數(shù)。接收字符后,如果RT

10、hreshold屬性被設(shè)置為0(默認(rèn)值),則不產(chǎn)生OnComm事件,如果RThreshold被設(shè)成n,則接收緩沖區(qū)收到n個字符時MSComm控件產(chǎn)生OnComm事件。 CTSHolding屬性。確定是否通過查詢Clear To Send(CTS)線的狀態(tài)發(fā)送數(shù)據(jù)。該屬性在設(shè)計時無效,在運(yùn)行時為只讀。,15,使用Windows的API應(yīng)用程序接口,SThreshold屬性。設(shè)置并返回傳輸緩沖區(qū)中允許的最小字符數(shù)。若SThreshold屬性被設(shè)置為0(默認(rèn)值)時,數(shù)據(jù)傳輸不會產(chǎn)生OnComm事件。而當(dāng)SThreshold屬性被設(shè)為1,當(dāng)傳輸緩沖區(qū)完全空時,MSComm控件產(chǎn)生OnComm事件。 C

11、DHolding屬性。通過查詢Carrier Detect(CD)線的狀態(tài)確定是否有傳輸。該屬性在設(shè)計時無效,在運(yùn)行時為只讀。 DSRHolding屬性。確定Data Set Read(DSR)線的狀態(tài)。該屬性在設(shè)計時無效,在運(yùn)行時為只讀。 Settings屬性。設(shè)置返回波特率、奇偶校驗、數(shù)據(jù)位、停止位參數(shù)。當(dāng)端口打開時,如果屬性值非法,則MSComm控件產(chǎn)生錯誤380(非法屬性值)。,16,各個屬性值間用逗號隔開,其中BBBB為波特率,P為奇偶校驗,D為數(shù)據(jù)位數(shù),S為停止位數(shù)。其默認(rèn)值為“9600,N,8,1”。,Settings屬性的設(shè)置由4個設(shè)置組成,格式如下:,InputLen屬性。設(shè)

12、置并返回Input屬性從接收緩沖區(qū)中讀取的字符數(shù)。InputLen 屬性的默認(rèn)值是0。設(shè)置InputLen為0時,使用Input將使MSComm控件讀取緩沖區(qū)中全部的內(nèi)容。,使用Windows的API應(yīng)用程序接口,17,使用Windows的API應(yīng)用程序接口,EOFEnable 屬性。確定在輸入過程中 MSComm 控件是否尋找文件結(jié)尾(EOF)字符。如果找到 EOF 字符,將停止輸入并激活 OnComm 事件,此時 CommEvent 屬性設(shè)置為 comEvEOF。 語法:object.EOFEnable = value EOFEnable 屬性語法包括下列部分: value 布爾表達(dá)式,確

13、定當(dāng)找到 EOF 字符時,OnComm 事件是否被激活,如“設(shè)置值”中所描述。 value的設(shè)置值為True:當(dāng)EOF字符找到時 OnComm 事件被激活。 value的設(shè)置值為False(默認(rèn)):當(dāng)EOF字符找到時OnComm事件不被激活。,當(dāng)EOFEnable屬性設(shè)置為False,OnComm控件將不在輸入流中尋 找EOF字符。,說明:,18,使用Windows的API應(yīng)用程序接口,Handshake常數(shù)。 Handshake常數(shù)如表所示。,OnComm常數(shù)。 OnComm常數(shù)如表所示,19,使用Windows的API應(yīng)用程序接口,Error常數(shù)。Error常數(shù)如表所示。,20,使用Win

14、dows的API應(yīng)用程序接口,InputMode常數(shù)。InputMode常數(shù)如表所示。,21,使用Windows的API應(yīng)用程序接口,(3)錯誤消息(MS Comm控件)。表列出MSComm控件可以捕獲的錯誤。,22,使用Windows的API應(yīng)用程序接口,23,使用VB開發(fā)串行口通信軟件,用戶界面設(shè)計 初始化程序 發(fā)送數(shù)據(jù) 接收數(shù)據(jù) 其他工作,使用VB開發(fā)串行通信程序的詳細(xì)步驟。,24,用戶界面設(shè)計,添加控件,最終完成界面,添加用戶界面,新工程界面,新建工程,25,用戶界面設(shè)計,修改界面上各控件的屬性如下表所示。,26,初始化程序,程序的初始化部分主要完成對串口的設(shè)置工作,包括串口的選擇、波

15、特率及幀結(jié)構(gòu)設(shè)置、打開串口以及發(fā)送和接收觸發(fā)器的時間控制等。此外,在程序運(yùn)行前,還應(yīng)進(jìn)行清除發(fā)送和接收緩沖區(qū)的工作。這部分工作是在窗體載入的時候完成的,因此應(yīng)將初始化代碼放在Form_Load()函數(shù)中添加如下代碼,這樣就完成了程序的初始化工作。,27,初始化程序,初始化代碼 Private Sub Form_Load() MSComm.CommPort = 2 設(shè)置串口2 MSComm.Settings = 9600,N,8,1 波特率9600bps,無校驗,8位數(shù)據(jù),1位停止位 MSComm.InputLen = 0 讀取接收緩沖區(qū)的所有字符 MSComm.InBufferSize = 1

16、024 設(shè)置接收緩沖區(qū)為1024字節(jié) MSComm.OutBufferSize = 512 設(shè)置發(fā)送緩沖區(qū)為512字節(jié) MSComm.PortOpen = True 打開串口 MSComm.SThreshold = 0 不觸發(fā)發(fā)送事件 MSComm.RThreshold = 1 每一個字符到接收緩沖區(qū)都觸發(fā)接收事件 MSComm.InBufferCount = 0 清除發(fā)送緩沖區(qū)數(shù)據(jù) MSComm.OutBufferCount = 0 清除接收緩沖區(qū)數(shù)據(jù) Text_SEND.Text = 清空發(fā)送文本框 Text_RECV.Text = 清空接收文本框 End Sub,28,發(fā)送數(shù)據(jù),本例中,

17、發(fā)送數(shù)據(jù)的過程是通過單擊發(fā)送數(shù)據(jù)按鈕來完成的。程序應(yīng)完成下面的工作: (1)單擊發(fā)送數(shù)據(jù)按鈕,程序檢查發(fā)送文本框中的內(nèi)容是否為空,如果為空,則終止發(fā)送命令,警告后返回。 (2)檢測串口是否處于打開狀態(tài),如串口關(guān)閉,則打開串口。 (3)將發(fā)送文本框中的內(nèi)容送入MSComm的發(fā)送緩沖區(qū),等待數(shù)據(jù)發(fā)送。,29,發(fā)送數(shù)據(jù),雙擊發(fā)送數(shù)據(jù)部分,添加Button_Send_Click() 函數(shù),其代碼如下: 發(fā)送數(shù)據(jù) Private Sub Button_SEND_Click() Dim x As String If Text_SEND.Text = Then 發(fā)送數(shù)據(jù)不能為空 x = MsgBox(發(fā)送數(shù)

18、據(jù)不能為空, 16) Exit Sub End If If Not MSComm.PortOpen Then 保證串口打開 MSComm.PortOpen = True End If MSComm.Output = Text_SEND.Text + Chr$(13) 發(fā)送數(shù)據(jù) For i = 1 To 20000000 延時 Next End Sub,30,接收數(shù)據(jù),接收數(shù)據(jù)部分使用了事件響應(yīng)方式。當(dāng)串口收到數(shù)據(jù)使得數(shù)據(jù)緩沖區(qū)的內(nèi)容超過1字節(jié)時就會引發(fā)comEvReceive事件。OnComm()函數(shù)負(fù)責(zé)捕捉這一事件,并負(fù)責(zé)將發(fā)送緩沖區(qū)的內(nèi)容送入輸出文本框顯示。OnComm()函數(shù)還對錯誤信息

19、進(jìn)行捕捉,當(dāng)程序發(fā)生緩沖區(qū)溢出之類的錯誤時,由程序員負(fù)責(zé)將緩沖區(qū)清空。,31,接收數(shù)據(jù),要實現(xiàn)上述功能,首先要雙擊MSComm控件創(chuàng)建OnComm(),并輸入代碼: 接收數(shù)據(jù) Private Sub MSComm_OnComm() Select Case MSComm.CommEvent 檢驗串口事件 錯誤處理 Case comEventOverrun 數(shù)據(jù)丟失 Text_SEND.Text = 清空發(fā)送緩沖區(qū) Text_RECV.Text = 清空接收緩沖區(qū) Text_SEND.SetFocus Exit Sub Case ComEventRxOver 接收緩沖區(qū)溢出 Text_SEND.T

20、ext = 清空發(fā)送緩沖區(qū) Text_RECV.Text = 清空接收緩沖區(qū) Text_SEND.SetFocus Exit Sub,32,接收數(shù)據(jù),Case ComEventTxFull 發(fā)送緩沖區(qū)已滿 Text_SEND.Text = 清空發(fā)送緩沖區(qū) Text_RECV.Text = 清空接收緩沖區(qū) Text_SEND.SetFocus Exit Sub 事件處理 Case ComEvReceive 接收緩沖區(qū)內(nèi)有數(shù)據(jù) Dim str As String str = MSComm.Input 從接收隊列中讀入字符串 Text_RECV.Text = Text_RECV.Textstr 讀出

21、字符串送顯 End Select End Sub,33,其他工作,完成通信的主要功能后,還需要輸入程序完成其他兩個按鈕的功能,這兩個按鈕負(fù)責(zé)清除發(fā)送和接收兩個文本框的內(nèi)容。該部分代碼內(nèi)容十分簡單,其代碼實現(xiàn)如下: 清空接收文本框 Private Sub Button_RECV_C_Click() Text_RECV.Text = 清空接收文本框 Text_SEND.SetFocus End Sub 清空發(fā)送文本框 Private Sub Button_SEND_C_Click() Text_SEND.Text = 清空發(fā)送文本框 Text_SEND.SetFocus,34,其他工作,使用該軟件

22、實現(xiàn)通信效果的界面如圖所示。,運(yùn)行測試程序,35,使用VC+開發(fā)串行口通信軟件,用戶界面設(shè)計 初始化程序 發(fā)送數(shù)據(jù) 接收數(shù)據(jù) 其他工作,使用 Visual C+6.0(VC+6.0)開發(fā)串口通信軟件的方法。,36,用戶界面設(shè)計,新建工程步驟1,新建工程步驟2,建立新工程后界面,編輯程序界面,添加控件,最終完成界面,37,用戶界面設(shè)計,修改程序界面用到的各個控件的屬性后,要使用這些控件,還需要為其添加對應(yīng)的變量。該項工作是使用ClassWizard面板來完成的。在Member Variables選項卡中相應(yīng)控件的Control ID,MFC單擊Add Variables按鈕為相應(yīng)控件添加對應(yīng)變量

23、。,ClassWizard面板,添加控件對應(yīng)變量,38,用戶界面設(shè)計,各個控件添加變量的具體設(shè)置如表所示。,添加變量后的ClassWizard面板如圖所示。,39,初始化程序,在VC中,需要將這部分代碼添加到對話框類的OnInitDialog()函數(shù)中。,if(m_MSComm.GetPortOpen() / 如果串口已打開,則關(guān)閉串口 m_MSComm.SetPortOpen(FALSE); m_MSComm.SetCommPort(2); / 選擇COM2 if(!m_MSComm.GetPortOpen() m_MSComm.SetPortOpen(TRUE); / 打開串口 else

24、AfxMessageBox(serial port open error); m_MSComm.SetSettings(“9600,n,8,1”); / 設(shè)置波特率9600,無 校驗,8位數(shù)據(jù)位,1位停止位 m_MSComm.SetRThreshold(1); / 串口接收緩沖區(qū)中有多于或等于1 個字符時將產(chǎn)生接收數(shù)據(jù)的OnComm事件 m_MSComm.SetInputLen(0); / 設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度為0 m_MSComm.GetInput(); / 預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù),40,接收數(shù)據(jù),當(dāng)MSComm的接收緩沖區(qū)有字符時,程序會發(fā)送事件消息,OnComm()函數(shù)響應(yīng)該消息并進(jìn)

25、行處理。由于MSComm類的GetInput()函數(shù)返回的數(shù)據(jù)變量類型為Variant型,而編輯框?qū)?yīng)的顯示字符串是Cstring型,因此接收數(shù)據(jù)時,需要先進(jìn)行類型轉(zhuǎn)換。在VC中,轉(zhuǎn)換過程如下:,OnComm()函數(shù)的完整代碼,將Variant類型轉(zhuǎn)換為ColeSafeArray類型; 將ColeSafeArray類型轉(zhuǎn)換為BYTE型數(shù)組; 將BYTE型數(shù)組轉(zhuǎn)換為Cstring變量。,41,發(fā)送數(shù)據(jù),發(fā)送數(shù)據(jù)功能使用發(fā)送數(shù)據(jù)按鈕對應(yīng)函數(shù)Onsend()來實現(xiàn)。發(fā)送數(shù)據(jù)時,程序僅需要讀出發(fā)送編輯框的內(nèi)容,將其轉(zhuǎn)化為發(fā)送程序需要的數(shù)據(jù)格式后,再使用C語言中的強(qiáng)制類型轉(zhuǎn)換功能,將其轉(zhuǎn)換為ColeVa

26、riant數(shù)據(jù)類型,由MSComm類的SetOutput()函數(shù)送入發(fā)送緩沖區(qū)即可。,發(fā)送函數(shù)OnSend()的源代碼,42,其他工作,void CRS232_VCDlg:OnClr() / TODO: Add your control notification handler code here m_str_send = ; / 清空發(fā)送文本框 m_str_recv = ; / 清空接收文本框 UpdateData(FALSE); / 更新文本框內(nèi)容 ,清空按鈕用于清除發(fā)送編輯框和接收編輯框中的已有內(nèi)容,其相應(yīng)函數(shù)OnClr的代碼如下:,43,其他工作,運(yùn)行測試程序,連接串口線,啟動軟件后,

27、首先勾選十六進(jìn)制發(fā)送/接收單選框,在發(fā)送文本框中添入數(shù)據(jù)“02 35 08 4A”的字符串,單擊發(fā)送按鈕。然后刪除發(fā)送文本框中的內(nèi)容,去掉十六進(jìn)制發(fā)送/接收的勾選,再填入數(shù)據(jù)“Goodbye”,軟件的測試效果如圖所示。,44,USB接口技術(shù),USB的全稱為Universal Searial Bus,即通用串行總線。與RS-232類似,USB總線也是一種串行外圍設(shè)備連接的總線形式,它是1995年由Microsoft、Compaq、IBM等公司聯(lián)合制定的一種新的PC串行通信協(xié)議,從推出之日起就得到了各大廠商的廣泛支持,得以不斷完善和發(fā)展,目前 USB協(xié)議的最新版本已經(jīng)達(dá)到了2.0。USB總線作為一

28、種新的串行總線,不僅在傳輸速度上得到了極大的提高,同時還具有接口簡單、真正的即插即用、傳輸線供電、多設(shè)備級聯(lián)等特性。USB總線的成功推出,對外設(shè)的接口產(chǎn)生了廣泛的影響,目前使用USB總線接口的如鍵盤、鼠標(biāo)、閃存、攝像頭等外圍設(shè)備在市場上已廣泛存在。本節(jié)將系統(tǒng)地介紹USB總線開發(fā)的相關(guān)知識,幫助讀者盡快熟悉USB開發(fā)流程。,45,USB接口技術(shù),USB總線介紹 EZ-USB系列接口控制芯片 EZ-USB固件程序開發(fā) USB通信設(shè)計要點,46,USB總線介紹,USB設(shè)備主要具有以下優(yōu)點:,(1)可以熱插拔 (2)攜帶方便 (3)標(biāo)準(zhǔn)統(tǒng)一 (4)可以連接多個設(shè)備,USB的互聯(lián) USB的設(shè)備 USB的

29、主機(jī),USB的互聯(lián)主要包括以下幾方面 :,USB的總線結(jié)構(gòu) USB的電氣特性與電源管理 USB總線協(xié)議 系統(tǒng)設(shè)置 數(shù)據(jù)流種類 USB設(shè)備 USB主機(jī):硬件和軟件,一個典型的USB系統(tǒng)的描述如下。它主要被定義為3個部分:,47,USB的總線結(jié)構(gòu),USB連接了USB設(shè)備和USB主機(jī),USB的物理連接是有層次性的星形結(jié)構(gòu)。每個網(wǎng)絡(luò)集線器是在星形的中心,每條線段是點點連接。從主機(jī)到集線器或其功能部件,或從集線器到集線器或其功能部件。 在任何USB系統(tǒng)中,只有一個主機(jī)。USB和主機(jī)系統(tǒng)的接口稱為主機(jī)控制器,主機(jī)控制器可由硬件、固件和軟件綜合實現(xiàn)。根集線器是由主機(jī)系統(tǒng)整合的,用以提供更多的連接點。,48,

30、USB的總線結(jié)構(gòu),USB的設(shè)備如下所示: 網(wǎng)絡(luò)集線器,向USB提供了更多的連接點。 功能器件:為系統(tǒng)提供具體功能,如ISDN的連接,數(shù)字的游戲桿或揚(yáng)聲器。 USB設(shè)備提供的USB標(biāo)準(zhǔn)接口的主要依據(jù): 對USB協(xié)議的運(yùn)用。 對標(biāo)準(zhǔn)USB操作的反饋,如設(shè)置和復(fù)位。 標(biāo)準(zhǔn)性能的描述性信息。,49,USB的電氣特性與電源管理,1電氣特性,USB的高速信號的比特率定為12Mbps。 低速信號傳送的模式定為1.5Mbps。,低速模式需要更少的EMI保護(hù)。兩種模式可在用同一USB總線傳輸?shù)那闆r下自動地動態(tài)切換。,USB傳送信號和電源是通過一種4線的電纜,圖中的兩根線用于發(fā)送信號。存在兩種數(shù)據(jù)傳輸率:,50,

31、USB的電氣特性與電源管理,2機(jī)械特性,所有設(shè)備都有一個上行的連接。上行連接器和下行連接器不可簡單地互換,這樣就避免了集線器間非法的循環(huán)往復(fù)的連接。電纜中有4根導(dǎo)線:一對互相纏繞的標(biāo)準(zhǔn)規(guī)格線,一對符合標(biāo)準(zhǔn)的電源線。連接器有4個方向,具有屏蔽層,以避免外界干擾,并有易拆裝的特性。,3. 電源,電源分配:即USB的設(shè)備如何通過USB分配得到由主計算機(jī)提供的能源。 電源管理:即通過電源管理系統(tǒng),USB的系統(tǒng)軟件和設(shè)備如何與主機(jī)協(xié)調(diào)工作。,電源主要包括以下兩個方面:,51,USB總線協(xié)議,USB總線屬一種輪詢方式的總線,主機(jī)控制端口初始化所有的數(shù)據(jù)傳輸。 存在兩種類型的通道:流和消息。 事務(wù)預(yù)處理允許

32、對一些數(shù)據(jù)流的通道進(jìn)行控制,從而 在硬件級上防止了對緩沖區(qū)的高估或低估,通過發(fā)送不確認(rèn)握手信號從而阻塞了數(shù)據(jù)的傳輸速度。,52,系統(tǒng)設(shè)置,1USB設(shè)備的安裝,主機(jī)對每個設(shè)備指定唯一的USB地址,并檢測這種新裝的USB設(shè)備是集線器還是功能部件。,2. USB設(shè)備的拆卸,當(dāng)USB設(shè)備從集線器的端口拆除后,集線器關(guān)閉該端口,并且向主機(jī)報告該設(shè)備已不存在。,3. 總線標(biāo)號,總線標(biāo)號就是對連接在總線上的設(shè)備指定唯一地址的一種動作 。,53,數(shù)據(jù)流種類,控制數(shù)據(jù)傳送:在設(shè)備連接時用來對設(shè)備進(jìn)行設(shè)置,還可對指定設(shè)備進(jìn)行控制,如通道控制。 批量數(shù)據(jù)傳送:大批量產(chǎn)生并使用的數(shù)據(jù),在傳輸約束下,具有很廣的動態(tài)范圍

33、。 中斷數(shù)據(jù)的傳送:用來描述或匹配人的感覺或?qū)μ卣鞣磻?yīng)的回饋。 同步數(shù)據(jù)的傳送:由預(yù)先確定的傳送延遲來填滿預(yù)定的USB帶寬。,對于任何指定的設(shè)備進(jìn)行設(shè)置時一種通道只能支持上述一種方式的數(shù)據(jù)傳輸。,USB的結(jié)構(gòu)包含4種基本的數(shù)據(jù)傳輸類型:,54,USB設(shè)備,USB設(shè)備分為諸如集線器、分配器或文本設(shè)備等種類。集線器類指的是一種提供USB連接點的設(shè)備,USB設(shè)備需要提供自檢和屬性設(shè)置的信息,USB設(shè)備必須在任何時刻執(zhí)行與所定義的USB設(shè)備狀態(tài)相一致的動態(tài) 。,1. 設(shè)備特性,當(dāng)設(shè)備被連接、編號后,該設(shè)備就擁有一個唯一的USB地址。設(shè)備就是通過該USB地址被操作的,每一個USB設(shè)備通過一個或多個通道與

34、主機(jī)通信。所有USB設(shè)備必須在零號端口上有一指定的通道,每個USB設(shè)備的USB控制通道將與之相連。通過此控制通道,所有的USB設(shè)備都列入一個共同的準(zhǔn)入機(jī)制,以獲得控制操作的信息。此類信息主要有以下幾類 :,55,USB設(shè)備,標(biāo)準(zhǔn)信息:這類信息是對所有USB設(shè)備的共同性的定義,包括一些如廠商識別、設(shè)備種類、電源管理等的項目。設(shè)備設(shè)置、接口及終端的描述在此給出。 類別信息:此類信息給出了不同USB的設(shè)備類的定義,主要反映其不同點。 USB廠商信息:USB設(shè)備的廠商可自由地提供各種有關(guān)信息,其格式不受該規(guī)范制約。此外,每個USB設(shè)備均提供USB的控制和狀態(tài)信息。,56,USB設(shè)備,(2)功能部件,功

35、能部件是一種通過總線進(jìn)行發(fā)送接收數(shù)據(jù)和控制信息的USB設(shè)備,通過一根電纜連接在集線器的某個端口上,功能設(shè)備一般是一種相互無關(guān)的外部設(shè)備。,定位設(shè)備:如鼠標(biāo)或光筆。 輸入設(shè)備:如鍵盤。 電信適配器:如ISDN。,一個集線器包括兩部分:集線控制器(Controller)和集線放大器(Repeater)。集線放大器是一種在上游端口和下游端口之間的協(xié)議控制開關(guān),而且硬件上支持復(fù)位、掛起、喚醒的信號。,(1)集線器,2. 設(shè)備描述,57,USB設(shè)備,臺式機(jī)環(huán)境下的集線器,58,USB主機(jī):硬件和軟件,USB的主機(jī)通過主機(jī)控制器與USB設(shè)備進(jìn)行交互。主機(jī)功能如下:,檢測USB設(shè)備的安裝和拆卸。 管理在主機(jī)

36、和USB設(shè)備之間的控制流。 管理在主機(jī)和USB設(shè)備之間的數(shù)據(jù)流。 收集狀態(tài)和動作信息。 提供能量給連接的USB設(shè)備。,59,EZ-USB系列接口控制芯片,使用嵌入MCU的USB控制器,CPU只需要訪問一系列寄存器和存儲器,便可實現(xiàn)USB口的數(shù)據(jù)傳輸,從而簡化了程序的設(shè)計,并且供應(yīng)商還提供許多范例電路和測試代碼,使設(shè)計者從復(fù)雜的協(xié)議解釋中得到解脫?,F(xiàn)在,許多芯片制造商開始生產(chǎn)一些基于通用MCU的USB控制器,采用研制人員所熟知的指令集,大大簡化了編程的難度。如基于8051結(jié)構(gòu)的USB控制器有:Intel公司的8X930A、8X931A;CYPRESS公司的EZ-USB等。此外,還有基于MITSU

37、BISHI 740/7600/M16C的USB芯片;基于MOTORORA HC05系列的USB芯片等。本節(jié)中介紹EZ-USB 2100系列單片機(jī)。,60,EZ-USB系列接口控制芯片,EZ-USB組成結(jié)構(gòu)及特性 EZ-USB微處理器 AN2131Q的封裝和引腳描述 EZ-USB的枚舉和再枚舉 EZ-USB端點 EZ-USB的存儲空間,61,EZ-USB組成結(jié)構(gòu)及特性,1EZ-USB芯片組成結(jié)構(gòu),EZ-USB的組成框圖,62,EZ-USB組成結(jié)構(gòu)及特性,2EZ-USB特性,(1)改進(jìn)的8051內(nèi)核。性能可達(dá)到標(biāo)準(zhǔn)8051的510倍,與標(biāo)準(zhǔn)8051的指令完全兼容。 (2)高度集成。EZ-USB將上

38、述多個模塊集成在一個芯片中,從而減少了各芯片接口部分時序配合時的麻煩。 (3)USB 內(nèi)核。EZ-USB系列芯片接收全部USB 的吞吐量。這種采用EZ-USB的設(shè)計,不受端點數(shù)目、緩沖區(qū)大小及傳輸速度的限制。,63,EZ-USB組成結(jié)構(gòu)及特性,(4)軟配置。這個特性給USB外設(shè)開發(fā)者帶來許多方便。如開發(fā)過程中,當(dāng)固件需要修改時,可以在PC上修改好以后,下載到EZ-USB,從而省去了編程芯片的麻煩。這種基于RAM的軟配置方法,可以允許無限的配置和升級。 (5)易用的軟件開發(fā)工具。驅(qū)動程序和固件的開發(fā)與調(diào)試相互獨立,可加快開發(fā)的速度。,64,EZ-USB微處理器,EZ-USB微處理器是一個改進(jìn)的8

39、051內(nèi)核,使用標(biāo)準(zhǔn)8051指令系統(tǒng),其指令執(zhí)行速度比標(biāo)準(zhǔn)8051快 。,改進(jìn)的8051內(nèi)核還有以下幾處結(jié)構(gòu)上的改進(jìn):,(1)第2個數(shù)據(jù)指針,可用于存儲器塊之間的傳輸。 (2)第2個UART。 (3)第3個16位計數(shù)器/定時器(TIMER2)。 (4)與非多路復(fù)用16位地址總線的高速存儲器直接接口。 (5)增加了7個中斷源(INT2INT5、PFI、T2和UART1)。 (6)可變的MOVX執(zhí)行時間可適應(yīng)高/低速的RAM外設(shè)。 (7)256字節(jié)的內(nèi)部寄存器RAM,8K字節(jié)的程序/數(shù)據(jù)復(fù)合SRAM。 (8)3.3 V工作電壓。,EZ-USB 集成芯片在8051的基礎(chǔ)上又有其他的改進(jìn):快速外部數(shù)據(jù)

40、塊傳輸(指針自動增量,快速傳輸模式)、USB中斷向量、CONTROL傳輸?shù)腟ETUP和DATA部分有各自的緩沖器。,65,AN2131Q的封裝和引腳描述,EZ-USB 2100系列中80引腳封裝的AN2131Q的引腳排列圖,66,AN2131Q的封裝和引腳描述,DISCON#:引腳1,輸出。該引腳由兩個位DISCOE和DISCON控制。當(dāng)DISCOE=0時,引腳懸空;當(dāng)DISCOE=1時,驅(qū)動引腳,驅(qū)動的邏輯與DISCON位相反。 USBD,USBD+:引腳77,79 ,高阻態(tài)。USB D+/D信號。將24振蕩器與USB D+/D引腳相連。 A0A15:引腳712,15,16,2629,343

41、7輸出。8051地址總線。 D0D7:引腳4851,5760,I/O/高阻態(tài)。8051數(shù)據(jù)總線。該雙向總線空閑時處于高阻狀態(tài),總線讀時為輸入,總線寫時為輸出。,67,AN2131Q的封裝和引腳描述,PSEN:引腳80,輸出。程序存儲器使能端。引腳接低電平時有效,表示從外部存儲器中讀取程序。當(dāng)EA為低電平時,程序存儲器的地址從0X1B40開始;當(dāng)EA為高電平時,程序存儲器的地址從0X0000開始。 PA0PA7:引腳6871,7376,I/O。多功能輸入/輸出引腳。 PB0PB7:引腳4447,5255,I/O。多功能輸入/輸出引腳。 PC0PC7:引腳3033,3841,I/O。多功能輸入/輸

42、出引腳。,68,AN2131Q的封裝和引腳描述,BKPT:引腳61,輸出斷點。當(dāng)8051地址總線與BPADDRH/L寄存器的內(nèi)容一致,且USBBAV寄存器中的斷點使能(BPEN)時,該引腳被激活(高電平)。如果USBBAV寄存器中的BPPULSE位為高,就產(chǎn)生8個24 MHz高電平的時鐘脈沖;如果BPPULSE位為低,保持高電平直到8051清除USBBAV寄存器中的BREAK位(寫1)。 RESET:引腳25,輸入有效高電平復(fù)位。使8051和SIE復(fù)位。該引腳一般通過1個10 k電阻接地,用1個1F電容接VCC。,69,AN2131Q的封裝和引腳描述,EA:引腳24,輸入。訪問外部存儲器。該引

43、腳有效(HI)時,8051并不是從內(nèi)部程序RAM中獲得代碼,而是從外部存儲器中讀取代碼。當(dāng)EA=0時,8051從外部存儲器的0X1B40地址(AN2131)開始讀取代碼。 AVCC:引腳21,電源。Analog VCC(模擬電源)。該引腳為芯片的模擬部分提供電源。 AGND:引腳18,電源。Analog Ground(模擬地)。盡可能以最短路徑接地。,70,AN2131Q的封裝和引腳描述,XIN:引腳19,輸入晶振輸入。該引腳經(jīng)由12 MHz晶振和2233 pF電容接地。它也能用12 MHz的時鐘電路驅(qū)動。 XOUT:引腳20,輸出。晶振輸出。該引腳經(jīng)由12 MHz晶振和2233 pF電容接地

44、。當(dāng)XIN由12 MHz時鐘電路驅(qū)動時,該引腳懸空。 WAKEUP#:引腳66,輸入。USB喚醒。當(dāng)8051掛起時,該引腳上的一個上升沿可開啟振蕩器,向8051發(fā)出中斷,請求推出掛起狀態(tài)。維持WAKEUP#的低電平可避免EZ-USB芯片進(jìn)入掛起狀態(tài)。,71,AN2131Q的封裝和引腳描述,SCL:引腳65,OD(漏極開路)。I2C時鐘。即使沒有I2C設(shè)備相連,也要用2.2 k電阻接VCC。 SDA:引腳64,OD(漏極開路)。I2C數(shù)據(jù)。即使沒有I2C設(shè)備相連,也要用2.2 k電阻接VCC。 CLK24:引腳4,輸入。24 MHz時鐘,可鎖定為12 MHz輸入時鐘。當(dāng)CPUCS寄存器中的OUT

45、CLKEN=0時沒有輸出。 NC:引腳67。該引腳不連接。,72,EZ-USB的枚舉和再枚舉,PC運(yùn)行時,若插上或拔去一個USB設(shè)備,Windows系統(tǒng)便會自動裝載或卸去設(shè)備的驅(qū)動程序,即所謂的即插即用。這一系列動作的自動完成歸因于在每一個USB設(shè)備里都有一個描述符表,記錄了設(shè)備的要求和性能。當(dāng)插上USB時,要經(jīng)過以下幾個步驟:,73,EZ-USB的枚舉和再枚舉,(1)主機(jī)向地址0發(fā)送“Get_Descriptor/Device”請求(設(shè)備第一次連接時,必須響應(yīng)地址0)。 (2)設(shè)備響應(yīng)該請求,并將ID數(shù)據(jù)發(fā)送給主機(jī)。 (3)主機(jī)向設(shè)備發(fā)出“Set_Address”請求,給設(shè)備提供一個唯一的地

46、址,以區(qū)別其他與總線相連的設(shè)備。 (4)主機(jī)發(fā)出“Get_Descriptor”請求,獲取更多的設(shè)備信息。據(jù)此,主機(jī)可以了解到該設(shè)備的其他情況,如該設(shè)備的端點個數(shù)、電氣要求、所需帶寬,然后下載程序。,74,EZ-USB的枚舉和再枚舉,為了支持軟特性,EZ-USB芯片能自動地作為一個不需要固件的USB設(shè)備進(jìn)行枚舉,所以,USB接口本身可用來下載8051的程序和描述符表。當(dāng)8051復(fù)位時,EZ-USB的內(nèi)核進(jìn)行最初(通電)的枚舉和下載。這種支持程序下載的最初USB 設(shè)備被稱為“默認(rèn)的USB設(shè)備”。 在代碼描述符表從主機(jī)中下載到EZ-USB RAM后,8051脫離復(fù)位狀態(tài),開始執(zhí)行設(shè)備程序。EZ-U

47、SB設(shè)備再次枚舉,這一次是作為裝入的設(shè)備。第二次枚舉稱為“再枚舉”。再枚舉的完成是EZ-USB芯片通過給USB 加電,模擬物理斷開和重連接來完成的。,75,EZ-USB端點,由于USB是串行總線,因此設(shè)備端點實際上是一個FIFO存儲器。主機(jī)通過發(fā)出4位地址及1位方向位,選擇設(shè)備端點。所以,USB可定位32個端點:IN0IN15和OUT0OUT15。8051從OUT緩沖區(qū)中讀取端點數(shù)據(jù),將通過USB傳輸?shù)亩它c數(shù)據(jù)寫入IN緩沖區(qū)。,USB端點有4種類型:,1.塊(Bulk) 2.控制 3.中斷 4.同步。,76,EZ-USB的存儲空間,EZ-USB的RAM被分為兩部分:一部分用做程序存儲空間,另一

48、部分用做數(shù)據(jù)存儲空間,包括EZ-USB的數(shù)據(jù)傳輸緩沖區(qū)和控制寄存器。,18051存儲器,EZ-USB系列芯片中,RAM空間可以是4KB或8KB,兩者的地址分配空間是不同的。對8KB的片內(nèi)RAM,其中通用功能的RAM占用0X00000X1B3F,共6976個字節(jié)。這部分RAM 可以通過EZ-USB內(nèi)核或I2C總線上E2PROM寫入指令代碼或數(shù)據(jù)。,77,EZ-USB的存儲空間,EEZ-USB使用RD信號、WR信號和PSEN信號擴(kuò)展外部存儲器,外部存儲器地址最大可以擴(kuò)展為0X00000XFFFF,如果擴(kuò)展外部存儲器既被用做程序存儲器又被用做數(shù)據(jù)存儲器,可以將RD信號和PSEN信號進(jìn)行邏輯或形成OE

49、信號后接入存儲芯片讀信號,將RD、WR和PSEN進(jìn)行邏輯或形成CS信號做選通信號。,2EZ-USB擴(kuò)展存儲器,78,EZ-USB的存儲空間,當(dāng)EA=0時,內(nèi)部存儲器的地址分配不變,對外部數(shù)據(jù)存儲器,0X00000X01FF和0X7F400X7FFF可以用做數(shù)據(jù)RAM,但RD、WR、CS和OE不可用,對外部程序存儲器,0X00000X1B40可以用做代碼RAM,但不產(chǎn)生PSEN選通信號。 當(dāng)EA=1時,內(nèi)部RAM和外部數(shù)據(jù)存儲器的地址分配方式與EA=0時相同,但程序存儲器將完全指向外部存儲器,這樣內(nèi)部程序存儲器完全被用做數(shù)據(jù)存儲器。,79,EZ-USB固件程序開發(fā),人機(jī)接口設(shè)備(HID)類是Windows完全支持的USB總線設(shè)備類型中的一種。在運(yùn)行Windows98或更高版本操作系統(tǒng)的PC上,應(yīng)用程序可以與HID進(jìn)行通信。對于主機(jī)的驅(qū)動和HID通信,設(shè)備必須使用相應(yīng)的固件程序來滿足一定的要求,通過固件程序的調(diào)度,主機(jī)才可以得到設(shè)備的描述符表以及完成端點數(shù)據(jù)的傳輸。,固件基礎(chǔ) EZ-USB固件程序架構(gòu) EZ-USB固件程序開發(fā)實例,80,固件基礎(chǔ),1HID類描述符表,HID類描述符表的主要目的是識別HID 通信中所使用的其他描述符表。類描述符表可以有7

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論