【文章內(nèi)容簡介】
與 PC的集成進行了優(yōu)化,適合于開發(fā)低成本的外設(shè)。 本文設(shè)計的基于 USB總線的數(shù)據(jù)采集系統(tǒng)正是充分地利用了 USB 總線的上述優(yōu)點,從而有效地解決了傳統(tǒng)數(shù)據(jù)采集系統(tǒng)的缺陷。很方便地就能夠?qū)崿F(xiàn)低成本、高可靠性、實時的數(shù)據(jù)采集,適用于對瞬態(tài)信號進行采集和處理 系統(tǒng)的設(shè)計方案 本論文所設(shè)計的數(shù)據(jù)采集系統(tǒng)是在單片機 89C51 控制下進行數(shù)據(jù)采集,并通 過PHILIPS 公司的 USB 接口芯片 PDIUSBD12 上傳給 PC 機進行分析、顯示和存盤。該系統(tǒng)用傳統(tǒng)的 USB總線取代了 RS232 串行總線,通過對 USB協(xié)議和設(shè)備構(gòu)架的充分理解,對以單片機 89C51 和 USB 接口芯片 D12 為主的數(shù)據(jù)采集系統(tǒng)進行了硬件設(shè)計和軟件編程,并在此設(shè)計的基礎(chǔ)上給出相應(yīng)的原理圖。硬件設(shè)計主要解決的是 D12 與單片機的接口電路的設(shè)計。軟件設(shè)計可分為 兩 部分:一是充分了解 D12 的主要功能特點,為滿足D12 在 USB 上的最大傳輸速率而編寫固件程序,用 C51 語言編寫:二是了解 USB 的設(shè)備驅(qū)動程序與應(yīng)用 。 本數(shù)據(jù)采集系統(tǒng)的系統(tǒng)框圖如下圖所示: MCUU S B接口芯片P C機A/D轉(zhuǎn)換器多路模擬開關(guān) 安徽工程大學(xué)畢業(yè)論文 5 第 2 章 USB 協(xié)議 簡介 USB 傳輸要件 設(shè)備端點 端點是 可唯一識別的 USB 設(shè)備的一 部分, 它是主機與設(shè)備間通信流的一個結(jié)束點。一系列相互獨立的端點在一起構(gòu)成了 USB 邏輯設(shè)備。每個邏輯設(shè)備有一個唯一的地址,這個地址是在設(shè)備連上主機時由主機分配的,而設(shè)備中的每個端點在設(shè)備內(nèi)部有唯一的端點號。這個端點號是在設(shè)備設(shè)計時給定的。每個端點都是一個簡單的連接點,或者支持數(shù)據(jù)流進設(shè) 備,或者支持其流出設(shè)備,兩者不可兼得。 端點號不為 0 的端點在被設(shè)置前處于未知狀態(tài),是不能被主機訪問的。 所有 USB 設(shè)備都需要實現(xiàn)一個缺省的控制方法。這種方法將端點 0 作為輸入端點和輸出端點。 USB 系統(tǒng)用這個缺省方法初始化。一旦設(shè)備接上并加電,且收到一個總線復(fù)位命令,端點 0 就是可訪問的了。 除缺省控制通道的缺省端點外,其他端點只有在設(shè)備被設(shè)置后才可使用。 USB 通道 USB 通道是設(shè)備上的端點和主機上的軟件之間的聯(lián)系,體現(xiàn)了主機上緩存和端點間傳送數(shù)據(jù)的能力。 USB 有兩個不同且互斥的通道通信格式: ? 流:指不具 有 USB 定義的格式的數(shù)據(jù)流。 ? 消息:指具有某種 USB 定義的格式的數(shù)據(jù)流。 USB 不解釋在通道中傳送的數(shù)據(jù)的內(nèi)容。消息通道要求數(shù)據(jù)組織成 USB 定義的格式,但它的內(nèi)容, USB 是不管的 USB 總線協(xié)議層 位定序 數(shù)據(jù)位被發(fā)送到總線的時候,首先最低有效位,跟著是下一個最低有效位,最后是最高有效位 同步字段 所有的包都是從同步字段開始的,同步字段是產(chǎn)生最大的邊緣轉(zhuǎn)換密度的編碼序列。同步字段作為空閑狀態(tài)出現(xiàn)在總線上,通過被定義為 8 位長的二進制串,輸入電路以本地時鐘對齊輸入數(shù)據(jù)。同步字 段的最后 2 位是同步字段結(jié)束的記號,并且標志了包標識符的開始 趙瓊:基于單片機和 USB 接口的數(shù)據(jù)采集器系統(tǒng)設(shè)計 6 包標識符 所有 USB 包的同步字段后都緊跟著包標識符 ( PID)。 如圖 所示, PID 由 4 位的包類型字段和其后的 4 位的校驗字段構(gòu)成。 PID 指出了包的類型,并由此隱含地指出了包的格式和包上所用錯誤檢測的類型。 PID 的 4 位的校驗字段可以保證 PID 譯碼的可靠性,這樣包的余項也就能被正確地解釋。 PID 的校驗字段通過求包類型字段的二進制反碼產(chǎn)生。如果 4 個 PID 檢驗位不是它們的各自的包標識符位的補,則說明存在 PID 錯。 ( LSb) ( MSb) PID0 PID1 PID2 PID3 PID0 PID1 PID2 PID3 USB 的傳輸結(jié)構(gòu) USB 的傳輸結(jié)構(gòu)描述的是各個類型 USB 傳輸?shù)臅r序、數(shù)據(jù)包和特征。下面分別介紹一下 4 種 USB 傳輸類型的傳輸結(jié)構(gòu): 控制傳輸 控制傳輸用于在設(shè)備初次連接時對器件進行配置,以及對設(shè)備的狀態(tài)進行實時檢測,還有在設(shè)備配置完成后用于特殊傳輸目的。端點 0 只可以采用控制傳送的方式。每一個控制 傳輸都必須有設(shè)置與狀態(tài)階段,數(shù)據(jù)階段則是選擇性的。 控制傳輸?shù)脑O(shè)置事務(wù)傳輸結(jié)構(gòu)如圖 所示: S E T U PA C KD A T A 0空 閑標 記數(shù) 據(jù)握 手空 閑主 機功 能 部 件 圖 控制傳輸結(jié)構(gòu)示意圖 安徽工程大學(xué)畢業(yè)論文 7 控制傳送的數(shù)據(jù)階段,由一個以上的輸入或輸出事務(wù)構(gòu)成,遵守和批處理傳送相同的協(xié)議規(guī)則。所有的數(shù)據(jù)階段里的事務(wù)都必須有相同的方向(即全部輸入或全部輸出)。在數(shù)據(jù)項中要發(fā)送的數(shù)據(jù)的數(shù)量和其方向在建立階段被指定。如果數(shù)據(jù)的數(shù)量超過了先前確定的數(shù)據(jù)包的大小,數(shù)據(jù)在支持最大的包大小的多個事務(wù)中被發(fā)送(輸入或輸出)。任何剩下的數(shù) 據(jù)都作為剩余在最后的事務(wù)中被發(fā)送。 批量傳輸 批量傳輸包含一個或者多個傳輸事務(wù),其傳輸是單方向的,即所有的事務(wù)都必須是輸入或輸出事務(wù)。如果需要雙向傳數(shù)據(jù),需要另建立一個管道。 批量傳輸?shù)膫鬏斀Y(jié)構(gòu)如圖 所示: 空 閑I NA C KD A T A 0 /D A T A 1D A T A 0 /D A T A 1O U T空 閑N A K S T A L L標 記數(shù) 據(jù)空 閑A C KN A K S T A L L握 手數(shù) 據(jù)出 錯數(shù) 據(jù)出 錯主 機 功 能 部 件 圖 批量傳輸結(jié)構(gòu)示意圖 中斷傳輸 中斷傳輸適用于小批量的、點式、非連續(xù)的數(shù)據(jù)傳輸應(yīng)用的場合。中斷傳輸必須在指定的時間內(nèi)完成,它一般應(yīng)用于鼠標、鍵盤、游戲桿等 HID( Human Interface Device)類設(shè)備以 及集線器的狀態(tài)報表中。 中斷傳輸?shù)膫鬏斀Y(jié)構(gòu)如圖 所示: 趙瓊:基于單片機和 USB 接口的數(shù)據(jù)采集器系統(tǒng)設(shè)計 8 空 閑I NA C KD A T A 0 /D A T A 1D A T A 0 /D A T A 1O U T空 閑N A K S T A L L標 記數(shù) 據(jù)空 閑A C KN A K S T A L L握 手數(shù) 據(jù)出 錯數(shù) 據(jù)出 錯主 機 功 能 部 件 圖 中斷傳輸結(jié)構(gòu)示意圖 同步傳輸 同步傳輸?shù)囊饬x在于每一個幀或者微幀內(nèi)必須傳輸固定數(shù)目的字節(jié)數(shù)據(jù),它適用于固定速度或者特定時間的傳輸。同步傳輸沒有聯(lián)絡(luò)階段,所以不能保證傳輸?shù)耐耆煽啃浴? 同步傳輸?shù)膫鬏斀Y(jié)構(gòu)如圖 所示: I N O U TD A T A 0 / D A T A 0標 記數(shù) 據(jù)空 閑空 閑 圖 同步傳輸結(jié)構(gòu)示意圖 USB 總線枚舉過程 USB 規(guī)范定義的設(shè)備 狀態(tài)總共有 6個,分別是連接 ( Attached)、 上電 ( Powered)、默認 ( Default)、 地址 ( Address)、 配置 ( Configured) 和掛起 ( Suspend)。 USB 總線枚安徽工程大學(xué)畢業(yè)論文 9 舉過程中, USB 設(shè)備需要經(jīng)歷后 4 種狀態(tài)。 USB 集線器負責(zé)監(jiān)測設(shè)備的連接情況,而 USB 主機會通過集線器輪詢地查詢設(shè)備。當(dāng)主機發(fā)現(xiàn)一個新的設(shè)備時,會要求集線器建立與設(shè)備的通信通道,即設(shè)備的端點 0,控制傳輸端點 。 之后,主機會通過此通道向設(shè)備發(fā)送一系列的標準 USB 請求以獲取所需的信息,設(shè)備必須響應(yīng)這些請求并且采取適當(dāng)?shù)膭幼?。這個 過程即稱為 USB 的總線枚舉。 總線枚舉的過程如下: ① 設(shè)備連接 USB 設(shè)備通過 USB 總線與主機相連。 ② 設(shè)備上電 USB 設(shè)備可以采用 USB 總線供電,也可以使用外部電源供電。 ③ 主機檢測到設(shè)備,進行復(fù)位 設(shè)備連接到總線后,主機通過檢測設(shè)備在差分信號線的上拉電阻檢測到有新的設(shè)備連接,并獲釋該設(shè)備是全速設(shè)備還是低速設(shè)備,如果上拉電阻與 D+線相連,則為全速設(shè)備,如果上拉電阻與 D- 線相連,則為低速設(shè)備,主機確認有設(shè)備連接后,向該端口發(fā)送一個復(fù)位信號。 ④ 設(shè)備默認狀態(tài) 設(shè)備收到一個復(fù)位信號后,連接到主機的所有設(shè)備的地址為默認地 址 ( 00H), 主機會首先發(fā)送一個獲取設(shè)備描述符的請求,設(shè)備通過這個默認地址向主機發(fā)送第一次設(shè)備描述符。 ⑤ 地址分配 當(dāng)主機接收到有設(shè)備對默認地址 ( 00H) 來響應(yīng)的時候,就確認有設(shè)備連接,主機對設(shè)備分配一個空閑的地址(如 02H), 以后設(shè)備就只對 02H 地址進行響應(yīng)。 ⑥ 讀取 USB 設(shè)備描述符 主機分配給設(shè)備地址后,通過這個地址主機讀取該設(shè)備描述符,確認 USB 設(shè)備的屬性。 ⑦ 設(shè)備配置 主機依照讀取的 USB 設(shè)備描述符來進行配置,如果設(shè)備所需的 USB 資源得以滿足,主機就會查找驅(qū)動,當(dāng)正確找到驅(qū)動后,主機給設(shè)備發(fā)送配置命令,配 置完畢后,這個USB 設(shè)備就枚舉成功了。 ⑧ 掛起 為了節(jié)省電源,當(dāng)總線保持空閑狀態(tài)超過 3ms以后,設(shè)備驅(qū)動程序就會進入掛起狀態(tài),在掛起狀態(tài)時,設(shè)備的消耗電流不超過 500181。A 。 當(dāng)被掛起時, USB設(shè)備保留了包括其地址和配置信息在內(nèi)的所有的內(nèi)部狀態(tài) 趙瓊:基于單片機和 USB 接口的數(shù)據(jù)采集器系統(tǒng)設(shè)計 10 USB 的設(shè)備描述符 標準的 USB 描述符包括設(shè)備 ( Device) 描述符、配置 ( Configuration) 描述符、接口 ( Interface) 描述符、端點 ( Endpoint) 描述符以及字符串 ( String) 描述符,字符串描述符不是必須的。不同的描述符從不同的層級來表示 設(shè)備的屬性。設(shè)備描述符包含了整個設(shè)備的信息以及設(shè)備支持的配置號碼,每一個設(shè)備只能由一個設(shè)備描述符。但每一個設(shè)備可以有幾個配置描述符,它包含了電源管理信息以及所支持的接口號碼。接口描述符包含了與端點通信所需要的信息,它可以有零個或多個端點描述符。各個描述符的樹狀結(jié)構(gòu)如圖 所示: 設(shè) 備 描 述 符配 置 描 述 符 配 置 描 述 符 配 置 描 述 符接 口 描 述 符 接 口 描 述 符端 點描 述 符接 口 描 述 符端 點描 述 符端 點描 述 符端 點描 述 符端 點描 述 符端 點描 述 符 圖 描述符的樹狀結(jié)構(gòu) 設(shè)備描述符描述了一個 USB 設(shè)備的總體信息,它在枚舉過程中主機從設(shè)備讀取的第一個描述符。設(shè)備描述符總共有 18 個字節(jié),分為 14 個字段。 配置、接口以及端點描述符是在主機得到設(shè)備描述符之后發(fā)送給主機的。配置描述符描述了一個特定的設(shè)備配置信息,主機使用 Set_Configuration 請求來選擇一個配置,用 Get_Configuration 請求來返回一個配置。當(dāng)主機請求獲取一個配置描述符的時候,與配置描述符相關(guān)的所有接口、端點描述符都會一并返回。配置描述符由 9 個字節(jié)組成,分為 8 個字段。 接口描述符描述了一個配置中的特定接口。接口描述符總是作為配置描述符的一部分被返回,主機不能通過 Get_Descriptor 請求直接獲取接口描述符。接口描述符由 9 個字節(jié)組成,分為 9 個字段。 端點描述符包含了主機用來確定一個端點帶寬要求的信息。除了端點 0 外,一個接口所使用的每一個端點都有它自己的描述符。端點 0 不需要描述符,它也不能直接由Get_Descriptor 請求來獲得。端點描述符由 7 個字節(jié)組成,分為 6 個字段 。 安徽工程大學(xué)畢業(yè)論文 11 USB 請求 USB 規(guī)范定義了 3 種請求,分別是標準請求 ( Standard Request)、 類請求 ( Class Request) 和廠商請求 ( Vendor Request)。 USB 規(guī)范定義了 11 種標準請求,所有設(shè)備都必須對這 11 種請求作出響應(yīng),即使 當(dāng)主機沒有給設(shè)備分配一個地址或者沒有配置設(shè)備。 某些設(shè)備的功能類似或者提供類似的服務(wù), USB 協(xié)議就將它們歸為一類,并且定義了特定的請求,稱為類請求。 但是只有類請求是不能滿足眾多 USB 廠商的需求的,所以, USB 協(xié)議允許一個供應(yīng)商為它的設(shè)備自定義特殊的請求,此類請求稱為廠商請求。 所有的 USB 總線設(shè)備以缺省控制管道響應(yīng)主機發(fā)出的請求,這些請求是通過控制傳輸來完成的,請求及請求的參數(shù)通過 Setup 包發(fā)向設(shè)備,由主機負責(zé)設(shè)置 Setup 包內(nèi)的每個域的值。 Setup 包格式如表 所示。 表 SETUP包格式 大?。?B) 1 1 2 2 2 域 bmRequestType bRequest wValue wIndex wLength 在表 中, bmReq