基于USB技術(shù)的CAN總線適配器的研究與開發(fā)
can總線是德國bosch公司在20世紀80年代初為解決現(xiàn)代汽車中眾多的控制與測試儀器之間的數(shù)據(jù)交換而開發(fā)的一種串行數(shù)據(jù)通信總線,是一種多主總線系統(tǒng),通信介質(zhì)可以是雙絞線、同軸電纜或光導(dǎo)纖維,其通信速率可達1mbps。在can總線通信控制器中集成了can協(xié)議的物理層和數(shù)據(jù)鏈路層功能,可完成對通信數(shù)據(jù)的成幀處理,包括零位的插入/刪除、數(shù)據(jù)塊編碼、循環(huán)冗余檢驗、優(yōu)先級判別等項工作。can協(xié)議的一個最大特點是廢除了傳統(tǒng)的站地址編碼,而代之以對數(shù)據(jù)塊進行編碼。采用這種方法的優(yōu)點是可使網(wǎng)絡(luò)內(nèi)的節(jié)點個數(shù)在理論上不受限制,數(shù)據(jù)塊的標識碼可由11位(按can技術(shù)規(guī)范2.0a)或29位(按can技術(shù)規(guī)范2.0b)二進制數(shù)組成,因此可以定義211或229個不同的數(shù)據(jù)塊。這種按數(shù)據(jù)塊編碼的方式,還可使不同的節(jié)點同時接收到相同的數(shù)據(jù),這一點在分布式控制系統(tǒng)中非常有用。數(shù)據(jù)段長度最多為8個字節(jié),可滿足通常工業(yè)領(lǐng)域中控制命令、工作狀態(tài)及測試數(shù)據(jù)的一般要求。同時,8個字節(jié)不會占用總線時間過長、從而保證了通信的實時性。can協(xié)議采用crc檢驗并可提供相應(yīng)的錯誤處理功能,保證了數(shù)據(jù)通信的可靠性。
隨著usb1.1、usb2.0規(guī)范的相繼制定,為外設(shè)與計算機的接口提出了新的發(fā)展方向。usb的主要特點有:外設(shè)安裝簡單,可實現(xiàn)熱插撥;通訊速率高,usb1.1全速傳送速率為12mbps,與標準串行端口相比,大約快100倍;支持多設(shè)備連接;提供內(nèi)置電源。
本文引用地址:http://m.butianyuan.cn/article/20914.htm通用串行總線(universal serial bus)是國外幾家公司為了解決日益增加的pc外設(shè)與有限的主板插槽和端口之間的矛盾而制定的一種串行通信的標準。usb作為一種新型的計算機接口技術(shù),具有傳輸速度高、實時性強、易于擴展、使用靈活、能夠進行錯誤偵測等特點,可以在很大范圍內(nèi)取代rs-232、并行端口,進行短距離高速數(shù)據(jù)傳輸,因而應(yīng)用普遍。
適配器硬件接口
適配器硬件電路由微控制器、can總線接口、usb總線接口和dc-dc隔離電源模塊等組成。原理框圖如圖1所示。
傳感器從現(xiàn)場采集來的模擬信號經(jīng)電路轉(zhuǎn)換成相應(yīng)的數(shù)字量,at89s52對該數(shù)字量做相應(yīng)的處理后,在現(xiàn)場進行顯示監(jiān)控,同時寫入sja1000發(fā)送到can總線上供其他設(shè)備使用或做進一步的處理。at89s52單片機的ale,wr,rd端分別控制sja1000的ale/as,wr,rd端,p2.0控制片選cs,地址和數(shù)據(jù)總線由p0口分時復(fù)用實現(xiàn)。can接口電路使用philips的pca82c250芯片實現(xiàn)電平的轉(zhuǎn)換,以滿足can總線通信要求,并可調(diào)整轉(zhuǎn)換速度和防止大的干擾。
usb設(shè)備在正常使用以前,必須由主機配置設(shè)備。主機一般會從usb設(shè)備獲取配置信息后再確定此設(shè)備有哪些功能。在發(fā)出連接usb命令后,主機先讀取設(shè)備描述符,然后發(fā)出設(shè)置usb地址setup包,設(shè)置usb地址后,進行主機客戶驅(qū)動與設(shè)備初始化。其余端點(endpoint)依此類推。usb器件在經(jīng)歷了枚舉、定地址、設(shè)定接口、端點等步驟以后,進入正常的工作狀態(tài)。
在其頭文件里需定義usb規(guī)范中的各種描述符格式,包括設(shè)備描述表、配置描述表、接口描述表、端點描述表、字符串描述表以及描述表類型。這樣,在發(fā)送配置[接口(1),端點(1),接口(2),端點(2),…,類,廠商等]聯(lián)合描述表時,主機usbd可以根據(jù)描述類型標識區(qū)分各種分描述表。
軟件編程
軟件編程包括微控制器的固件和計算機端usb驅(qū)動程序兩部分。軟件編程主要分為三部分:初始化單片機及其外圍電路(包括中斷控制器);可以執(zhí)行中斷的主循環(huán);讀寫中斷服務(wù)程序并馬上執(zhí)行。
微控制器固件編程
usb 實驗系統(tǒng)可使用pdiusbd12 在usb 上傳輸數(shù)據(jù),這些設(shè)備的cpu 要忙于處理前臺任務(wù),pdiusbd12 的固件往往設(shè)計成基于中斷查詢和響應(yīng)的層次式結(jié)構(gòu)。這種完全的中斷驅(qū)動,使得當(dāng)cpu 處理前臺任務(wù)時,usb 的傳輸可在后臺進行,這就確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時簡化了編程和調(diào)試,也易于實現(xiàn)固件的維護和移植。
pdiusbd12的功能框圖
pdiusbd12是一款性價比很高的usb器件。它通常用作微控制器系統(tǒng)中實現(xiàn)與微控制器進行通信的高速通用并行接口。該器件采用模塊化的方法實現(xiàn)一個usb接口,使現(xiàn)存的體系結(jié)構(gòu)使固件投資減到最小。它還支持本地的dma傳輸。這種實現(xiàn)usb接口的標準組件使得設(shè)計者可以在各種不同類型微控制器中選擇出最合適的微控制器。這種靈活性減小了開發(fā)的時間、風(fēng)險以及費用(通過使用已有的結(jié)構(gòu)和減少固件上的投資),從而用最快捷的方法實現(xiàn)最經(jīng)濟的usb外設(shè)的解決方案。pdiusbd12完全符合usb1.1版的規(guī)范。圖2 為pdiusbd12的功能框圖。
usb 設(shè)備接到hub 的某個端口上,該hub 就會通知主機發(fā)生了設(shè)備接入事件,主機確認設(shè)備的接入事件和接入端口,設(shè)備處于連接狀態(tài)(attached)。主機向該端口送一個持續(xù)100ms的復(fù)位命令(reset)信號,當(dāng)reset
信號結(jié)束時,端口被使能并打開,復(fù)位后所有的寄存器和狀態(tài)被復(fù)位,并能響應(yīng)默認地址。這時hub 能夠提供100ma 電流給usb 設(shè)備,usb
設(shè)備進入上電狀態(tài)(powered)。主機通過該默認地址讀取設(shè)備的描述器來獲得此地址相應(yīng)的默認管道的最大數(shù)據(jù)傳輸量。這時設(shè)備處于地址默認狀態(tài)(default);主機給設(shè)備分發(fā)一個唯一的地址,設(shè)備進入地址狀態(tài)(addressed)。主機讀取設(shè)備的配置信息,主機以配置信息向設(shè)備分發(fā)一個配置值,該端點準備就緒可以開始工作,設(shè)備可以使用,這時設(shè)備處于配置狀態(tài)。若設(shè)備在上電狀態(tài)后,未獲得總線的訪問權(quán),則進入掛起狀態(tài)(suspended
),直到總線激活以后重進入原狀態(tài)。設(shè)備在掛起狀態(tài)吸入電流可以很小,必須小于500 a 。當(dāng)設(shè)備從hub 端口移走時,hub 通知主機,主機確認后使該端口進入無能狀態(tài),端口關(guān)閉。
主循環(huán)mainloop.c
主循環(huán)是固件的前臺。設(shè)備上電后,主機要通過設(shè)備的上拉電阻產(chǎn)生的信號變化來檢測新的設(shè)備連接,因此,mcu 一旦上電就要初始化其所有端口、存儲區(qū)、定時器和中斷服務(wù)程序。為了確保在mcu 準備好服務(wù)pdiusbd12 之前pdiusbd12 不會進行操作,mcu 將重新連接usb ,包括將soft_connect寄存器設(shè)置為on 。pdiusbd12芯片內(nèi)置1.5k soft_connect上拉電阻,默認時不與vcc相連,這就允許mcu來決定與usb 建立連接的時間。
主循環(huán)的流程如圖3所示:主循環(huán)檢查事件標志并進入對應(yīng)的子程序進行進一步的處理。mcu一上電就需要初始化其所有的端口、存儲區(qū)、定時器和中斷服務(wù)程序。之后mcu將重新連接usb,包括將soft_connect寄存器設(shè)置為on。主循環(huán)的職能有:
1)初始化mcu所有i/o端口、存儲區(qū)、定時器和中斷寄存器等;
2)解除片選和片選pdiusbd12;
3)清除事件標志寄存器;
4)重新連接usb;
5)恢復(fù)到未配置狀態(tài)、設(shè)置配置狀態(tài);
6)在具體的usb應(yīng)用系統(tǒng)中,主循環(huán)要做其他的前臺工作。
中斷服務(wù)程序
后臺isr (中斷服務(wù)程序)和前臺主程序循環(huán)之間的數(shù)據(jù)交換通過事件標志和一個公共的數(shù)據(jù)緩沖區(qū)來實現(xiàn)。例如pdiusbd12 的普通端點和主端點可以使用循環(huán)的數(shù)據(jù)緩沖區(qū)。當(dāng)pdiusbd12 從usb 收到一個數(shù)據(jù)包,它就對cpu 產(chǎn)生一個中斷請求,cpu 立即響應(yīng)中斷。在isr 中,固件將數(shù)據(jù)包從pdiusbd12 內(nèi)部緩沖區(qū)移到循環(huán)數(shù)據(jù)緩沖區(qū)并在隨后清零pdiusbd12 的內(nèi)部緩沖區(qū)以使其能接收新的數(shù)據(jù)包。cpu 可以繼續(xù)它當(dāng)前的前臺任務(wù)直到完成,然后返回到主循環(huán)檢查循環(huán)緩沖區(qū)內(nèi)是否有新的數(shù)據(jù)并開始新的前臺任務(wù)。中斷服務(wù)程序流程如圖4所示。
固件編程是usb數(shù)據(jù)傳輸系統(tǒng)中終端設(shè)備程序設(shè)計的一個重要概念。微控制器通過固件程序與計算機進行數(shù)據(jù)交換。固件設(shè)計的目的是:使pdiusbd12在usb上達到最大的傳輸速率;增加系統(tǒng)的可擴展性和硬件無關(guān)性。
固件要實現(xiàn)的內(nèi)容:一是對sja1000初始化,接收can總線送來的數(shù)據(jù),收集can網(wǎng)絡(luò)狀態(tài)信息,并將主機的數(shù)據(jù)下發(fā)到can網(wǎng)絡(luò);二是對pdiusbd12初始化,完成usb總線連接過程,并組織can網(wǎng)絡(luò)和主機之間的數(shù)據(jù)傳送。設(shè)計中采用keilc51軟件編譯環(huán)境。
usb設(shè)備驅(qū)動程序和應(yīng)用程序設(shè)計
實時數(shù)據(jù)采集程序的書寫離不開中斷的使用。為了在可視化編程中使用中斷,必須選擇適當(dāng)?shù)墓ぞ邅頃鴮懙讓域?qū)動程序。目前,市場上存在多種開發(fā)wdm 設(shè)備驅(qū)動程序的工具。其中ddk 是最基本的,也是最原始的驅(qū)動開發(fā)工具。用戶可以根據(jù)自己的需要更改inf文件,然后在ddk中重新編譯連接生成新的驅(qū)動程序,用來滿足實際應(yīng)用的需要。我們也可以使用windriver 來開發(fā)設(shè)備驅(qū)動程序。利用它開發(fā)設(shè)備驅(qū)動程序不需要熟悉操作系統(tǒng)的內(nèi)核,用戶編寫的驅(qū)動程序工作在用戶模式下,通過與windriver 的.vxd 或.sys 文件交互來達到驅(qū)動硬件的目的,只需要啟動driver wizard,檢測連接的usb設(shè)備,讀取usb設(shè)備中的端點及配置信息,并自動生成操作usb設(shè)備的管道讀寫函數(shù)代碼及inf文件。
結(jié)論與展望
研究工作總結(jié)
由于usb 具有使用簡單、即插即用、熱插拔、開放性、高速、穩(wěn)定、可靠性高等優(yōu)點,它特別適用于儀器儀表、虛擬儀器、數(shù)據(jù)采集設(shè)備、監(jiān)控設(shè)備和加密設(shè)備等等場合。基于usb技術(shù)的can總線適配器的實物照片如圖5所示。
本論文得到主要結(jié)論如下:
1 ) 系統(tǒng)采用can 總線取代傳統(tǒng)的分布式數(shù)據(jù)采集系統(tǒng)常用的485 總線,在數(shù)據(jù)傳輸速度、傳輸距離、抗干擾和故障檢測方面的性能得到了很大的提高。
2) 本設(shè)計采用的windriver 是一種簡單的驅(qū)動程序設(shè)計軟件,它使開發(fā)者擺脫了核心態(tài)驅(qū)動開發(fā)的難點,可以在用戶態(tài)開發(fā)簡單的驅(qū)動程序,而不需對操作系統(tǒng)和底層驅(qū)動的原理了解太多,這有利于快速開發(fā)外設(shè)驅(qū)動。
3)各個節(jié)點通過can 現(xiàn)場總線連成通訊網(wǎng)絡(luò),再通過usb 連接到主機、筆記本、現(xiàn)場監(jiān)控機。該系統(tǒng)用usb 作為節(jié)點連接到計算機的接口具有快速、即插即用、支持熱插拔的特點,使連接更加高效、便利。
展望
本設(shè)計在usb 接口的硬件、固件、驅(qū)動程序以及用戶軟件訪問驅(qū)動程序的方法做了一些探索性的工作。雖然該系統(tǒng)的硬件設(shè)計、單片機程序和驅(qū)動程序及應(yīng)用軟件的編碼調(diào)試都已基本完成,但設(shè)計中仍有需要進一步改進的地方,而且,針對不同的需求,也需要做適當(dāng)?shù)母膭印=ㄗh今后在以下幾個方面開展進一步的工作:
1)由于開發(fā)板使用89s52作為d12 的控制器,這就從根本上限制了適配器數(shù)據(jù)傳輸速度的提高。在實驗過程中,使用89s52 芯片和仿真器作為主控制器,而它們的工作頻率比較低,它們變成了設(shè)備提高傳輸速率的瓶頸。如果換用工作頻率更高的處理器,此開發(fā)板的傳輸速率會成倍的增加。
2) 隨著usb 主控制器芯片的推出,usb 外設(shè)可以脫離笨重的pc ,直接進行通訊。例如在數(shù)據(jù)采集系統(tǒng)中,如果系統(tǒng)本身usb 主控能力,采集到的數(shù)據(jù)在現(xiàn)場可以直接存入優(yōu)盤,采集完畢再由優(yōu)盤導(dǎo)入計算機進行處理。這樣,將大大減小系統(tǒng)體積,方便攜帶。利用主控芯片設(shè)計帶主控制器的外設(shè),以實現(xiàn)點對點通訊,是目前usb 設(shè)計的重點。很多公司推出了自己的主控制器芯片,如isp1160 ( philips 全速usb 主控制器)。
3) windriver雖然降低了驅(qū)動程序的編寫難度,但也降低了程序的執(zhí)行效率。在實際應(yīng)用中如果效率不夠,可以考慮將速率要求高的部分插入到核心態(tài)運行,這樣可提高效率。適配器中的固件編程使用了c語言編寫,程序中有許多函數(shù)的調(diào)用,雖然程序的可讀性相對較好,但它的執(zhí)行效率卻不如匯編語言的執(zhí)行效率高。因此,選擇編程語言也是提高設(shè)備傳輸率的方法之一。
5)雖然usb接口的設(shè)備已經(jīng)在市場上比比皆是,然而不難發(fā)現(xiàn),相比與傳統(tǒng)的串口、ps/2 等廉價接口,usb設(shè)備的價格還是相對較高。
6)usb想要真正統(tǒng)一外設(shè)接口,必須要在與ieee 1394 的競爭中獲勝。1394 只用一根線來傳送信號,使之不單在pc 外設(shè),在通信領(lǐng)域也有很好的應(yīng)用。但是1394 的一個致命的缺點是價格太高,一直無法有廣泛的應(yīng)用。隨著1394 芯片價格的回落,它與usb 的競爭將越來越激烈。
評論