新聞中心

        EEPW首頁 > 模擬技術 > 設計應用 > 基于USB技術的CAN總線適配器的研究與開發

        基于USB技術的CAN總線適配器的研究與開發

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

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

        隨著usb1.1、usb2.0規范的相繼制定,為外設與計算機的接口提出了新的發展方向。usb的主要特點有:外設安裝簡單,可實現熱插撥;通訊速率高,usb1.1全速傳送速率為12mbps,與標準串行端口相比,大約快100倍;支持多設備連接;提供內置電源。

        本文引用地址:http://www.104case.com/article/20914.htm

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


        適配器硬件接口

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

        傳感器從現場采集來的模擬信號經電路轉換成相應的數字量,at89s52對該數字量做相應的處理后,在現場進行顯示監控,同時寫入sja1000發送到can總線上供其他設備使用或做進一步的處理。

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

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

        在其頭文件里需定義usb規范中的各種描述符格式,包括設備描述表、配置描述表、接口描述表、端點描述表、字符串描述表以及描述表類型。這樣,在發送配置[接口(1),端點(1),接口(2),端點(2),…,類,廠商等]聯合描述表時,主機usbd可以根據描述類型標識區分各種分描述表。


        軟件編程

        軟件編程包括微控制器的固件和計算機端usb驅動程序兩部分。軟件編程主要分為三部分:初始化單片機及其外圍電路(包括中斷控制器);可以執行中斷的主循環;讀寫中斷服務程序并馬上執行。

        微控制器固件編程

        usb 實驗系統可使用pdiusbd12 在usb 上傳輸數據,這些設備的cpu 要忙于處理前臺任務,pdiusbd12 的固件往往設計成基于中斷查詢和響應的層次式結構。這種完全的中斷驅動,使得當cpu 處理前臺任務時,usb 的傳輸可在后臺進行,這就確保了最佳的傳輸速率和更好的軟件結構,同時簡化了編程和調試,也易于實現固件的維護和移植。

        pdiusbd12的功能框圖

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


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

        主循環mainloop.c

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

        主循環的流程如圖3所示:主循環檢查事件標志并進入對應的子程序進行進一步的處理。mcu一上電就需要初始化其所有的端口、存儲區、定時器和中斷服務程序。之后mcu將重新連接usb,包括將soft_connect寄存器設置為on。主循環的職能有:

        1)初始化mcu所有i/o端口、存儲區、定時器和中斷寄存器等;

        2)解除片選和片選pdiusbd12;

        3)清除事件標志寄存器;

        4)重新連接usb;

        5)恢復到未配置狀態、設置配置狀態;

        6)在具體的usb應用系統中,主循環要做其他的前臺工作。

        中斷服務程序

        后臺isr (中斷服務程序)和前臺主程序循環之間的數據交換通過事件標志和一個公共的數據緩沖區來實現。例如pdiusbd12 的普通端點和主端點可以使用循環的數據緩沖區。當pdiusbd12 從usb 收到一個數據包,它就對cpu 產生一個中斷請求,cpu 立即響應中斷。在isr 中,固件將數據包從pdiusbd12 內部緩沖區移到循環數據緩沖區并在隨后清零pdiusbd12 的內部緩沖區以使其能接收新的數據包。cpu 可以繼續它當前的前臺任務直到完成,然后返回到主循環檢查循環緩沖區內是否有新的數據并開始新的前臺任務。中斷服務程序流程如圖4所示。

        固件編程是usb數據傳輸系統中終端設備程序設計的一個重要概念。微控制器通過固件程序與計算機進行數據交換。固件設計的目的是:使pdiusbd12在usb上達到最大的傳輸速率;增加系統的可擴展性和硬件無關性。

        固件要實現的內容:一是對sja1000初始化,接收can總線送來的數據,收集can網絡狀態信息,并將主機的數據下發到can網絡;二是對pdiusbd12初始化,完成usb總線連接過程,并組織can網絡和主機之間的數據傳送。設計中采用keilc51軟件編譯環境。

        usb設備驅動程序和應用程序設計

        實時數據采集程序的書寫離不開中斷的使用。為了在可視化編程中使用中斷,必須選擇適當的工具來書寫底層驅動程序。目前,市場上存在多種開發wdm 設備驅動程序的工具。其中ddk 是最基本的,也是最原始的驅動開發工具。用戶可以根據自己的需要更改inf文件,然后在ddk中重新編譯連接生成新的驅動程序,用來滿足實際應用的需要。我們也可以使用windriver 來開發設備驅動程序。利用它開發設備驅動程序不需要熟悉操作系統的內核,用戶編寫的驅動程序工作在用戶模式下,通過與windriver 的.vxd 或.sys 文件交互來達到驅動硬件的目的,只需要啟動driver wizard,檢測連接的usb設備,讀取usb設備中的端點及配置信息,并自動生成操作usb設備的管道讀寫函數代碼及inf文件。


        結論與展望

        研究工作總結

        由于usb 具有使用簡單、即插即用、熱插拔、開放性、高速、穩定、可靠性高等優點,它特別適用于儀器儀表、虛擬儀器、數據采集設備、監控設備和加密設備等等場合。基于usb技術的can總線適配器的實物照片如圖5所示。

        本論文得到主要結論如下:

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

        2) 本設計采用的windriver 是一種簡單的驅動程序設計軟件,它使開發者擺脫了核心態驅動開發的難點,可以在用戶態開發簡單的驅動程序,而不需對操作系統和底層驅動的原理了解太多,這有利于快速開發外設驅動。

        3)各個節點通過can 現場總線連成通訊網絡,再通過usb 連接到主機、筆記本、現場監控機。該系統用usb 作為節點連接到計算機的接口具有快速、即插即用、支持熱插拔的特點,使連接更加高效、便利。

        展望

        本設計在usb 接口的硬件、固件、驅動程序以及用戶軟件訪問驅動程序的方法做了一些探索性的工作。雖然該系統的硬件設計、單片機程序和驅動程序及應用軟件的編碼調試都已基本完成,但設計中仍有需要進一步改進的地方,而且,針對不同的需求,也需要做適當的改動。建議今后在以下幾個方面開展進一步的工作:

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

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

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

        5)雖然usb接口的設備已經在市場上比比皆是,然而不難發現,相比與傳統的串口、ps/2 等廉價接口,usb設備的價格還是相對較高。

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



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 武陟县| 开化县| 边坝县| 柏乡县| 合江县| 萨迦县| 沈丘县| 雅安市| 甘谷县| 渝北区| 蚌埠市| 长武县| 桑植县| 图木舒克市| 涡阳县| 洛川县| 林西县| 乐至县| 综艺| 新密市| 毕节市| 台湾省| 塔河县| 郸城县| 马关县| 砚山县| 贵德县| 教育| 辽阳县| 南陵县| 荆门市| 泗水县| 新田县| 乳山市| 孝感市| 法库县| 抚顺县| 剑河县| 蒙阴县| 普洱| 安化县|