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