<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于USB技術(shù)的CAN總線適配器的研究與開發(fā)

          基于USB技術(shù)的CAN總線適配器的研究與開發(fā)

          ——
          作者:福建師范大學(xué) 王娜 時(shí)間:2007-01-26 來源:《世界電子元器件》 收藏
          引言

          can總線是德國bosch公司在20世紀(jì)80年代初為解決現(xiàn)代汽車中眾多的控制與測試儀器之間的數(shù)據(jù)交換而開發(fā)的一種串行數(shù)據(jù)通信總線,是一種多主總線系統(tǒng),通信介質(zhì)可以是雙絞線、同軸電纜或光導(dǎo)纖維,其通信速率可達(dá)1mbps。在can總線通信控制器中集成了can協(xié)議的物理層和數(shù)據(jù)鏈路層功能,可完成對通信數(shù)據(jù)的成幀處理,包括零位的插入/刪除、數(shù)據(jù)塊編碼、循環(huán)冗余檢驗(yàn)、優(yōu)先級判別等項(xiàng)工作。can協(xié)議的一個(gè)最大特點(diǎn)是廢除了傳統(tǒng)的站地址編碼,而代之以對數(shù)據(jù)塊進(jìn)行編碼。采用這種方法的優(yōu)點(diǎn)是可使網(wǎng)絡(luò)內(nèi)的節(jié)點(diǎn)個(gè)數(shù)在理論上不受限制,數(shù)據(jù)塊的標(biāo)識(shí)碼可由11位(按can技術(shù)規(guī)范2.0a)或29位(按can技術(shù)規(guī)范2.0b)二進(jìn)制數(shù)組成,因此可以定義211或229個(gè)不同的數(shù)據(jù)塊。這種按數(shù)據(jù)塊編碼的方式,還可使不同的節(jié)點(diǎn)同時(shí)接收到相同的數(shù)據(jù),這一點(diǎn)在分布式控制系統(tǒng)中非常有用。數(shù)據(jù)段長度最多為8個(gè)字節(jié),可滿足通常工業(yè)領(lǐng)域中控制命令、工作狀態(tài)及測試數(shù)據(jù)的一般要求。同時(shí),8個(gè)字節(jié)不會(huì)占用總線時(shí)間過長、從而保證了通信的實(shí)時(shí)性。can協(xié)議采用crc檢驗(yàn)并可提供相應(yīng)的錯(cuò)誤處理功能,保證了數(shù)據(jù)通信的可靠性。

          隨著usb1.1、usb2.0規(guī)范的相繼制定,為外設(shè)與計(jì)算機(jī)的接口提出了新的發(fā)展方向。usb的主要特點(diǎn)有:外設(shè)安裝簡單,可實(shí)現(xiàn)熱插撥;通訊速率高,usb1.1全速傳送速率為12mbps,與標(biāo)準(zhǔn)串行端口相比,大約快100倍;支持多設(shè)備連接;提供內(nèi)置電源。

          本文引用地址:http://www.ex-cimer.com/article/20914.htm

          通用串行總線(universal serial bus)是國外幾家公司為了解決日益增加的pc外設(shè)與有限的主板插槽和端口之間的矛盾而制定的一種串行通信的標(biāo)準(zhǔn)。usb作為一種新型的計(jì)算機(jī)接口技術(shù),具有傳輸速度高、實(shí)時(shí)性強(qiáng)、易于擴(kuò)展、使用靈活、能夠進(jìn)行錯(cuò)誤偵測等特點(diǎn),可以在很大范圍內(nèi)取代rs-232、并行端口,進(jìn)行短距離高速數(shù)據(jù)傳輸,因而應(yīng)用普遍。


          適配器硬件接口

          適配器硬件電路由微控制器、can總線接口、usb總線接口和dc-dc隔離電源模塊等組成。原理框圖如圖1所示。

          傳感器從現(xiàn)場采集來的模擬信號(hào)經(jīng)電路轉(zhuǎn)換成相應(yīng)的數(shù)字量,at89s52對該數(shù)字量做相應(yīng)的處理后,在現(xiàn)場進(jìn)行顯示監(jiān)控,同時(shí)寫入sja1000發(fā)送到can總線上供其他設(shè)備使用或做進(jìn)一步的處理。

          at89s52單片機(jī)的ale,wr,rd端分別控制sja1000的ale/as,wr,rd端,p2.0控制片選cs,地址和數(shù)據(jù)總線由p0口分時(shí)復(fù)用實(shí)現(xiàn)。can接口電路使用philips的pca82c250芯片實(shí)現(xiàn)電平的轉(zhuǎn)換,以滿足can總線通信要求,并可調(diào)整轉(zhuǎn)換速度和防止大的干擾。

          usb設(shè)備在正常使用以前,必須由主機(jī)配置設(shè)備。主機(jī)一般會(huì)從usb設(shè)備獲取配置信息后再確定此設(shè)備有哪些功能。在發(fā)出連接usb命令后,主機(jī)先讀取設(shè)備描述符,然后發(fā)出設(shè)置usb地址setup包,設(shè)置usb地址后,進(jìn)行主機(jī)客戶驅(qū)動(dòng)與設(shè)備初始化。其余端點(diǎn)(endpoint)依此類推。usb器件在經(jīng)歷了枚舉、定地址、設(shè)定接口、端點(diǎn)等步驟以后,進(jìn)入正常的工作狀態(tài)。

          在其頭文件里需定義usb規(guī)范中的各種描述符格式,包括設(shè)備描述表、配置描述表、接口描述表、端點(diǎn)描述表、字符串描述表以及描述表類型。這樣,在發(fā)送配置[接口(1),端點(diǎn)(1),接口(2),端點(diǎn)(2),…,類,廠商等]聯(lián)合描述表時(shí),主機(jī)usbd可以根據(jù)描述類型標(biāo)識(shí)區(qū)分各種分描述表。


          軟件編程

          軟件編程包括微控制器的固件和計(jì)算機(jī)端usb驅(qū)動(dòng)程序兩部分。軟件編程主要分為三部分:初始化單片機(jī)及其外圍電路(包括中斷控制器);可以執(zhí)行中斷的主循環(huán);讀寫中斷服務(wù)程序并馬上執(zhí)行。

          微控制器固件編程

          usb 實(shí)驗(yàn)系統(tǒng)可使用pdiusbd12 在usb 上傳輸數(shù)據(jù),這些設(shè)備的cpu 要忙于處理前臺(tái)任務(wù),pdiusbd12 的固件往往設(shè)計(jì)成基于中斷查詢和響應(yīng)的層次式結(jié)構(gòu)。這種完全的中斷驅(qū)動(dòng),使得當(dāng)cpu 處理前臺(tái)任務(wù)時(shí),usb 的傳輸可在后臺(tái)進(jìn)行,這就確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時(shí)簡化了編程和調(diào)試,也易于實(shí)現(xiàn)固件的維護(hù)和移植。

          pdiusbd12的功能框圖

          pdiusbd12是一款性價(jià)比很高的usb器件。它通常用作微控制器系統(tǒng)中實(shí)現(xiàn)與微控制器進(jìn)行通信的高速通用并行接口。該器件采用模塊化的方法實(shí)現(xiàn)一個(gè)usb接口,使現(xiàn)存的體系結(jié)構(gòu)使固件投資減到最小。它還支持本地的dma傳輸。這種實(shí)現(xiàn)usb接口的標(biāo)準(zhǔn)組件使得設(shè)計(jì)者可以在各種不同類型微控制器中選擇出最合適的微控制器。這種靈活性減小了開發(fā)的時(shí)間、風(fēng)險(xiǎn)以及費(fèi)用(通過使用已有的結(jié)構(gòu)和減少固件上的投資),從而用最快捷的方法實(shí)現(xiàn)最經(jīng)濟(jì)的usb外設(shè)的解決方案。pdiusbd12完全符合usb1.1版的規(guī)范。圖2 為pdiusbd12的功能框圖。


          usb 設(shè)備接到hub 的某個(gè)端口上,該hub 就會(huì)通知主機(jī)發(fā)生了設(shè)備接入事件,主機(jī)確認(rèn)設(shè)備的接入事件和接入端口,設(shè)備處于連接狀態(tài)(attached)。主機(jī)向該端口送一個(gè)持續(xù)100ms的復(fù)位命令(reset)信號(hào),當(dāng)reset 信號(hào)結(jié)束時(shí),端口被使能并打開,復(fù)位后所有的寄存器和狀態(tài)被復(fù)位,并能響應(yīng)默認(rèn)地址。這時(shí)hub 能夠提供100ma 電流給usb 設(shè)備,usb 設(shè)備進(jìn)入上電狀態(tài)(powered)。主機(jī)通過該默認(rèn)地址讀取設(shè)備的描述器來獲得此地址相應(yīng)的默認(rèn)管道的最大數(shù)據(jù)傳輸量。這時(shí)設(shè)備處于地址默認(rèn)狀態(tài)(default);主機(jī)給設(shè)備分發(fā)一個(gè)唯一的地址,設(shè)備進(jìn)入地址狀態(tài)(addressed)。主機(jī)讀取設(shè)備的配置信息,主機(jī)以配置信息向設(shè)備分發(fā)一個(gè)配置值,該端點(diǎn)準(zhǔn)備就緒可以開始工作,設(shè)備可以使用,這時(shí)設(shè)備處于配置狀態(tài)。若設(shè)備在上電狀態(tài)后,未獲得總線的訪問權(quán),則進(jìn)入掛起狀態(tài)(suspended ),直到總線激活以后重進(jìn)入原狀態(tài)。設(shè)備在掛起狀態(tài)吸入電流可以很小,必須小于500 a 。當(dāng)設(shè)備從hub 端口移走時(shí),hub 通知主機(jī),主機(jī)確認(rèn)后使該端口進(jìn)入無能狀態(tài),端口關(guān)閉。

          主循環(huán)mainloop.c

          主循環(huán)是固件的前臺(tái)。設(shè)備上電后,主機(jī)要通過設(shè)備的上拉電阻產(chǎn)生的信號(hào)變化來檢測新的設(shè)備連接,因此,mcu 一旦上電就要初始化其所有端口、存儲(chǔ)區(qū)、定時(shí)器和中斷服務(wù)程序。為了確保在mcu 準(zhǔn)備好服務(wù)pdiusbd12 之前pdiusbd12 不會(huì)進(jìn)行操作,mcu 將重新連接usb ,包括將soft_connect寄存器設(shè)置為on 。pdiusbd12芯片內(nèi)置1.5k soft_connect上拉電阻,默認(rèn)時(shí)不與vcc相連,這就允許mcu來決定與usb 建立連接的時(shí)間。

          主循環(huán)的流程如圖3所示:主循環(huán)檢查事件標(biāo)志并進(jìn)入對應(yīng)的子程序進(jìn)行進(jìn)一步的處理。mcu一上電就需要初始化其所有的端口、存儲(chǔ)區(qū)、定時(shí)器和中斷服務(wù)程序。之后mcu將重新連接usb,包括將soft_connect寄存器設(shè)置為on。主循環(huán)的職能有:

          1)初始化mcu所有i/o端口、存儲(chǔ)區(qū)、定時(shí)器和中斷寄存器等;

          2)解除片選和片選pdiusbd12;

          3)清除事件標(biāo)志寄存器;

          4)重新連接usb;

          5)恢復(fù)到未配置狀態(tài)、設(shè)置配置狀態(tài);

          6)在具體的usb應(yīng)用系統(tǒng)中,主循環(huán)要做其他的前臺(tái)工作。

          中斷服務(wù)程序

          后臺(tái)isr (中斷服務(wù)程序)和前臺(tái)主程序循環(huán)之間的數(shù)據(jù)交換通過事件標(biāo)志和一個(gè)公共的數(shù)據(jù)緩沖區(qū)來實(shí)現(xiàn)。例如pdiusbd12 的普通端點(diǎn)和主端點(diǎn)可以使用循環(huán)的數(shù)據(jù)緩沖區(qū)。當(dāng)pdiusbd12 從usb 收到一個(gè)數(shù)據(jù)包,它就對cpu 產(chǎn)生一個(gè)中斷請求,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)前的前臺(tái)任務(wù)直到完成,然后返回到主循環(huán)檢查循環(huán)緩沖區(qū)內(nèi)是否有新的數(shù)據(jù)并開始新的前臺(tái)任務(wù)。中斷服務(wù)程序流程如圖4所示。

          固件編程是usb數(shù)據(jù)傳輸系統(tǒng)中終端設(shè)備程序設(shè)計(jì)的一個(gè)重要概念。微控制器通過固件程序與計(jì)算機(jī)進(jìn)行數(shù)據(jù)交換。固件設(shè)計(jì)的目的是:使pdiusbd12在usb上達(dá)到最大的傳輸速率;增加系統(tǒng)的可擴(kuò)展性和硬件無關(guān)性。

          固件要實(shí)現(xiàn)的內(nèi)容:一是對sja1000初始化,接收can總線送來的數(shù)據(jù),收集can網(wǎng)絡(luò)狀態(tài)信息,并將主機(jī)的數(shù)據(jù)下發(fā)到can網(wǎng)絡(luò);二是對pdiusbd12初始化,完成usb總線連接過程,并組織can網(wǎng)絡(luò)和主機(jī)之間的數(shù)據(jù)傳送。設(shè)計(jì)中采用keilc51軟件編譯環(huán)境。

          usb設(shè)備驅(qū)動(dòng)程序和應(yīng)用程序設(shè)計(jì)

          實(shí)時(shí)數(shù)據(jù)采集程序的書寫離不開中斷的使用。為了在可視化編程中使用中斷,必須選擇適當(dāng)?shù)墓ぞ邅頃鴮懙讓域?qū)動(dòng)程序。目前,市場上存在多種開發(fā)wdm 設(shè)備驅(qū)動(dòng)程序的工具。其中ddk 是最基本的,也是最原始的驅(qū)動(dòng)開發(fā)工具。用戶可以根據(jù)自己的需要更改inf文件,然后在ddk中重新編譯連接生成新的驅(qū)動(dòng)程序,用來滿足實(shí)際應(yīng)用的需要。我們也可以使用windriver 來開發(fā)設(shè)備驅(qū)動(dòng)程序。利用它開發(fā)設(shè)備驅(qū)動(dòng)程序不需要熟悉操作系統(tǒng)的內(nèi)核,用戶編寫的驅(qū)動(dòng)程序工作在用戶模式下,通過與windriver 的.vxd 或.sys 文件交互來達(dá)到驅(qū)動(dòng)硬件的目的,只需要啟動(dòng)driver wizard,檢測連接的usb設(shè)備,讀取usb設(shè)備中的端點(diǎn)及配置信息,并自動(dòng)生成操作usb設(shè)備的管道讀寫函數(shù)代碼及inf文件。


          結(jié)論與展望

          研究工作總結(jié)

          由于usb 具有使用簡單、即插即用、熱插拔、開放性、高速、穩(wěn)定、可靠性高等優(yōu)點(diǎn),它特別適用于儀器儀表、虛擬儀器、數(shù)據(jù)采集設(shè)備、監(jiān)控設(shè)備和加密設(shè)備等等場合?;趗sb技術(shù)的can總線適配器的實(shí)物照片如圖5所示。

          本論文得到主要結(jié)論如下:

          1 ) 系統(tǒng)采用can 總線取代傳統(tǒng)的分布式數(shù)據(jù)采集系統(tǒng)常用的485 總線,在數(shù)據(jù)傳輸速度、傳輸距離、抗干擾和故障檢測方面的性能得到了很大的提高。

          2) 本設(shè)計(jì)采用的windriver 是一種簡單的驅(qū)動(dòng)程序設(shè)計(jì)軟件,它使開發(fā)者擺脫了核心態(tài)驅(qū)動(dòng)開發(fā)的難點(diǎn),可以在用戶態(tài)開發(fā)簡單的驅(qū)動(dòng)程序,而不需對操作系統(tǒng)和底層驅(qū)動(dòng)的原理了解太多,這有利于快速開發(fā)外設(shè)驅(qū)動(dòng)。

          3)各個(gè)節(jié)點(diǎn)通過can 現(xiàn)場總線連成通訊網(wǎng)絡(luò),再通過usb 連接到主機(jī)、筆記本、現(xiàn)場監(jiān)控機(jī)。該系統(tǒng)用usb 作為節(jié)點(diǎn)連接到計(jì)算機(jī)的接口具有快速、即插即用、支持熱插拔的特點(diǎn),使連接更加高效、便利。

          展望

          本設(shè)計(jì)在usb 接口的硬件、固件、驅(qū)動(dòng)程序以及用戶軟件訪問驅(qū)動(dòng)程序的方法做了一些探索性的工作。雖然該系統(tǒng)的硬件設(shè)計(jì)、單片機(jī)程序和驅(qū)動(dòng)程序及應(yīng)用軟件的編碼調(diào)試都已基本完成,但設(shè)計(jì)中仍有需要進(jìn)一步改進(jìn)的地方,而且,針對不同的需求,也需要做適當(dāng)?shù)母膭?dòng)。建議今后在以下幾個(gè)方面開展進(jìn)一步的工作:

          1)由于開發(fā)板使用89s52作為d12 的控制器,這就從根本上限制了適配器數(shù)據(jù)傳輸速度的提高。在實(shí)驗(yàn)過程中,使用89s52 芯片和仿真器作為主控制器,而它們的工作頻率比較低,它們變成了設(shè)備提高傳輸速率的瓶頸。如果換用工作頻率更高的處理器,此開發(fā)板的傳輸速率會(huì)成倍的增加。

          2) 隨著usb 主控制器芯片的推出,usb 外設(shè)可以脫離笨重的pc ,直接進(jìn)行通訊。例如在數(shù)據(jù)采集系統(tǒng)中,如果系統(tǒng)本身usb 主控能力,采集到的數(shù)據(jù)在現(xiàn)場可以直接存入優(yōu)盤,采集完畢再由優(yōu)盤導(dǎo)入計(jì)算機(jī)進(jìn)行處理。這樣,將大大減小系統(tǒng)體積,方便攜帶。利用主控芯片設(shè)計(jì)帶主控制器的外設(shè),以實(shí)現(xiàn)點(diǎn)對點(diǎn)通訊,是目前usb 設(shè)計(jì)的重點(diǎn)。很多公司推出了自己的主控制器芯片,如isp1160 ( philips 全速usb 主控制器)。

          3) windriver雖然降低了驅(qū)動(dòng)程序的編寫難度,但也降低了程序的執(zhí)行效率。在實(shí)際應(yīng)用中如果效率不夠,可以考慮將速率要求高的部分插入到核心態(tài)運(yùn)行,這樣可提高效率。適配器中的固件編程使用了c語言編寫,程序中有許多函數(shù)的調(diào)用,雖然程序的可讀性相對較好,但它的執(zhí)行效率卻不如匯編語言的執(zhí)行效率高。因此,選擇編程語言也是提高設(shè)備傳輸率的方法之一。

          5)雖然usb接口的設(shè)備已經(jīng)在市場上比比皆是,然而不難發(fā)現(xiàn),相比與傳統(tǒng)的串口、ps/2 等廉價(jià)接口,usb設(shè)備的價(jià)格還是相對較高。

          6)usb想要真正統(tǒng)一外設(shè)接口,必須要在與ieee 1394 的競爭中獲勝。1394 只用一根線來傳送信號(hào),使之不單在pc 外設(shè),在通信領(lǐng)域也有很好的應(yīng)用。但是1394 的一個(gè)致命的缺點(diǎn)是價(jià)格太高,一直無法有廣泛的應(yīng)用。隨著1394 芯片價(jià)格的回落,它與usb 的競爭將越來越激烈。



          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();