嵌入式Win CE中CAN總線控制器的驅動設計與實現

2020-11-29 電子發燒友

嵌入式Win CE中CAN總線控制器的驅動設計與實現

秩名 發表於 2012-05-17 10:18:10

  0 引 言

  近年來,由於消費電子、計算機、通信(3C)一體化趨勢日趨明顯,嵌入式系統再度成為研究和應用的熱點。嵌入式作業系統(Real-time Embedded OperatingSystem,RTOS或EOS)作為一種實時的、支持嵌入式系統應用的作業系統軟體,成為嵌入式系統(包括硬、軟體系統)極為重要的組成部分,通常包括與硬體相關的底層驅動軟體、系統內核、設備驅動接口、通信協議、圖形界面、標準化瀏覽器Browser等。Windows CE作業系統就是微軟公司從整體上為有限資源平臺設計的多線程、完整優先權、多任務的作業系統。Win CE支持各種處理器產品家族,包括x86,Xscale,ARM,MIPS和SH系列。它的模塊化設計允許它對從掌上電腦到專用工業控制器的用戶電子設備進行定製,選擇系統模塊和組件的多少決定了所需內存的大小。

  Windows CE作業系統之所以能夠支持各種各樣的硬體設備,是因為對每一款硬體設備,都有其對應的設備驅動程序,否則這款硬體就無法在Windows CE下正常工作。Win CE提供了4種設備模型,其中2種是專門用於Win CE的模型,另外2種外部模型來自其他的作業系統。基於Win CE的兩種模型是本機的設備驅動程序和流接口的驅動程序;兩種外部模型用於通用串行總線(USB)和網絡驅動器接口標準(NDIS)驅動程序。下面針對Win CE系統下基於三星公司的ARM9內核晶片S3C2410的CAN總線控制器SJA1000,以流接口驅動程序形式進行設計。

  1 CAN總線及控制器工作原理

  控制器區域網CAN是由ISO定義的串行通信總線,主要用於各種過程檢測及控制。它是一種多主總線,通信介質可以是雙絞線、同軸電纜或光導纖維。通信速率可達1 Mb/s。CAN總線通信接口中集成了CAN協議的物理層和數據鏈路層功能,可完成對通信數據的成幀處理,包括位填充、數據塊編碼、循環冗餘檢驗、優先級判別等項工作。它的基本設計規範要求有高位速率和高抗電磁幹擾性,而且能夠檢測出產生的任何錯誤。由於CAN串行通信總線具有這些特性,它很自然的在汽車製造業以及航空工業中受到廣泛應用。

  SJA1000是一種獨立控制器用於移動目標和一般工業環境中的區域網絡控制(CAN)。它是Philips半導體公司的PCA82C200 CAN控制器(BasicCAN)的替代產品。而且它增加了一種新的工作模式(PeliCAN),這種模式支持具有很多新特性的CAN2.0B協議。其內部體系結構如下圖1所示。

  

  CAN核心模塊控制CAN幀的發送和接收。接口管理邏輯負責連接外部主控制器,該控制器可以是衛星控制器件或任何其他器件。經過SJA1000復用的地址/數據總線訪問寄存器和控制讀/寫選通信號都在這處理。SJA1000的發送緩衝器能夠存儲一個完整的報文(擴展或標準的)。當主控制器初始化發送,接口管理邏輯會使CAN核心模塊從發送緩衝器讀CAN報文。當收到一個報文時,CAN核心模塊將串行位流轉換成用於驗收濾波器的並行數據。通過這個可編程的濾波器,SJA1000能確定主控制器要接收哪些報文。所有收到的報文由驗收濾波器驗收並存儲在接收FIFO。儲存報文的多少由工作模式決定,最多能存儲32個報文。

  2流接口驅動程序工作機制

  相比於本機設備驅動程序,流接口驅動程序表現為一個動態連結庫,由設備管理器統一加載、管理和卸載。與具有單獨目的的內部設備驅動程序相比,所有的流接口驅動程序都是用同一組接口並調用同一個函數集——流接口函數。Win CE的文件系統通過這些人口點函數與流接口驅動進行通信,從而達到應用程式訪問驅動程序、操作硬體的目的。流接口驅動程序要實現的DLL接口見表1。

  

  在實際的開發中,上述接口名稱中的XXX三個字母被具體設備的設備文件名所代替。流接口驅動程序通過編譯後,生成DLL文件,即動態連結庫文件。

  3 CAN總線控制器SJA1000驅動程序設計

  CAN總線控制器SJA1000驅動採用流接口驅動程序模型,要實現的流接口函數分別為CAN_Init,CAN_Deinit,CAN_Open,CAN_Close,CAN_Read,CAN_Wfite,CAN_IOControl等。應用程式使用CreatFile()函數以文件的方式打開CAN控制器驅動,以獲取驅動文件的句柄,然後使用該句柄調用DeviceloControl(),ReadFile(),WriteFile()函數來CAN控制器的各種功能。

  由於篇幅有限,下面僅針對CAN_Init,CAN_Read和CAN_IntrThread函數的實現進行詳細的設計。

  3.1 CAN_Init函數的設計實現

  當用戶開始使用CAN總線控制器時,設備管理器調用這個函數來初始化控制器設備SJA1000。這個函數是通過設備管理器提供的ActiveDeviceEx()函數來調用的。函數執行後,如果成功就返回設備的句柄。CAN_Init函數的流程如圖2所示。

  

  3.2 CAN_Read函數的設計實現

  根據CAN協議規範,報文的接收由CAN控制器SJA1000獨立完成,收到的報文放在接收緩衝器。可以發送給主控制器的報文由狀態寄存器的接收緩衝器狀態標誌「RBS「和接收中斷標誌「RI」標出(如果使能)。主控制器會將這條信息發送到本地的報文存儲器,然後釋放接收緩衝器並對報文操作。發送過程能被SJA1000的中斷請求或查詢SJA1000的控制段狀態標誌來控制。CAN_Read函數操作成功則返回實際讀取的字節數,否則返回值為-1。CAN_Read函數程序的流程圖如圖3所示。

  

  3.3 CAN_IntrThread函數的設計實現

  在SJA1000控制器中,報文的發送和接收是採用中斷方式來完成的。內核函數InterruptInitialize()外部中斷事件和將邏輯中斷號綁定,這一步就會使能該中斷。當該中斷發生時,ISR就觸發該事件生效。完成以上工作後,驅動程序中的IST就可以使用WaitForSingleObject()函數等待中斷的發生。中斷處理結束後,IST需要調用InterruptDone()告訴作業系統中斷處理結束。中斷服務線程CAN_IntrThread函數程序流程圖如圖4所示。

  

  其他的流接口函數根據Win CE流接口驅動程序模型進行編寫。

  4驅動程序的封裝及加載

  通過上面的工作,能夠編譯得到一個DLL函數,但它的接口函數還沒有導出,還需要告訴連結程序需要輸出什麼樣的函數。為此,必須建立一個def文件,使用Windows下自帶的記事本程序編輯一個文件名為「can.def」的文件:

  

  然後修改Platform Builder的工程下的.reg文件,添加以下的代碼:

  

  最後需要編寫自己的CEC文件。主要是添加一個Build Method,任務是複製註冊表到Win CE的系統目錄下面。加一個bib File,其主要功能是把編譯的can.dll文件添加到系統內核中去。保存寫好的CEC文件,在Platform Builder中添加CEC特徵到系統選項中去。生成系統時,添加自己的CEC特性,可以包含剛編寫的can驅動程序。

  5結 語

  介紹了CAN總線及其控制器SJA1000的工作原理,並給出了SJA1000在Win CE下的流驅動程序部分函數的程序流程圖。通過對CAN總線控制器SJA1000流驅動程序的設計,加深了對Win CE下流接口驅動程序開發的理解,為進一步開發嵌入式Win CE作業系統系統下CAN總線設備提供了一個良好的底層硬體驅動支持,並且對以後開發基於Win CE下的其他設備驅動程序有較強的參考價值。

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 基於嵌入式WinCE的CAN總線控制器驅動設計
    基於Win CE的兩種模型是本機的設備驅動程序和流接口的驅動程序;兩種外部模型用於通用串行總線(USB)和網絡驅動器接口標準(NDIS)驅動程序。下面針對 Win CE系統下基於三星公司的ARM9內核晶片S3c2410的CAN總線控制器SJAl000,以流接口驅動程序形式進行設計。
  • 在嵌入式網關中CAN總線有什麼應用?
    在嵌入式網關中CAN總線有什麼應用?而為了使這一趨勢得以實現,連接Internet網絡的嵌入式網關是其關鍵。 從現實來看,乙太網擴展了現有的系統,但是現場總線不可能完全被工業乙太網替代,後者的潛力巨大,其應用領域一定會不斷擴大。所以,將現場總線與乙太網結合,從而實現底層生產與上層管理的緊密集成,已經成為一種趨勢。
  • I2C總線驅動在嵌入式系統中的兩種實現
    結構緊湊,因此其構成系統的成本較低;並且在總線上增加器件不會影響系統的正常工作,所有的I。C器件共用一套總線,因此其系統修改和可擴展性好。即使有不同時鐘速度的器件連接到總線上,時間同步機制也能夠很方便地確定總線時鐘,因此在嵌入式系統中得到了廣泛的應用。
  • 基於CAN總線的運動控制系統設計
    μCLinux(microcontrol linux)即「微控制器領域中的Linux系統」,主要是針對目標處理器沒有存儲管理單元(MMU)的嵌入式系統而設計的。它保留了Linux的大多數優點:穩定、良好的移植性、優秀的網絡功能、對各種文件系統完備的支持和標準豐富的API.同時μCLinux包含大量的設備驅動程序,以及提供良好的驅動程序開發框架。
  • Linux下I2C總線EEPROM驅動程序設計方法
    而一個具體的總線控制器驅動要使用某一種算法。例如,Linux內核中提供的算法i2e-algo-8260可以用在MPC82xx系列處理器提供的I2C總線控制器上。Linux內核中提供了一些常見處理器如MPC82xx系列的算法驅動。對於I2C設備,基本上每種具體設備都有自己的基本特性。其驅動程序一般都需要特別設計。  在I2C總線驅動程序體系結構中。
  • 嵌入式系統中USB主機控制器的設計
    過去USB僅應用於個人計算機,而在嵌入式系統領域的巨大潛力還沒有開發出來,USB在嵌入式系統中的應用包括本文將介紹在嵌入式系統中應用USB時其主機控制器的設計。
  • CAN總線—PROFIBUS-DP總線網關的實現方法
    工廠在擴建,改建等過程中很可能會選用與原先現場設備總線標準不同的產品,這些設備由於使用不同的現場總線,彼此間不能實現數據共享,於是就降低了設備間功能互補的優點。因此針對多種總線共存的客觀事實,探討如何解決不同現場總線系統的互聯有著重要的現實意義。
  • 嵌入式整流模塊控制器設計
    單片機+μC/OS-II嵌入式實時作業系統作為軟硬體開發平臺的嵌入式整流模塊控制器的統一化設計方法。關鍵詞:AVR單片機;μC/OS-II;嵌入式控制器引言  雖然目前通信電源產品中嵌入式控制系統的研發技術比較成熟,但是同一系列(如DUM系列)不同功率型號的產品具有不同的性能參數,以致控制系統採用不同的控制方法;同時,在以往的產品研發過程中,不同的嵌入式系統工程師具有不同的軟硬體設計思想,帶來了晶片應用、電路體系、軟體結構的差異
  • 基於LIN總線的電動車窗控制器設計
    而在這種速率上採用LIN總線方式的網絡控制,正好可以滿足其要求,並且LIN總線能節省大量的線束、便於維護和實現汽車診斷功能。本文提出了一種將LIN總線運用到車窗控制系統中的設計方案,並給出系統硬體及軟體的實現方法。1 車窗控制系統的網絡結構設計 本設計主要實現4個車窗的升降功能及車窗防堵轉。
  • 嵌入式系統USB接口的虛擬示波器設計
    嵌入式系統的發展使得基於嵌入式微處理器和實時作業系統的嵌入式虛擬儀器能夠滿足惡劣工作環境下的便攜虛擬儀器的需要。同時,基於USB總線的儀器設備克服了現有PC總線虛擬儀器的不足,可滿足自動化工業測量的要求,特別適合現場信號的測試。
  • 基於C8051F040單片機的CAN總線和RS-232串口通信設計
    為了實現對CAN總線和RS-232串口雙向通信需求,提出了一種基於C8051F040單片機的數據通信方案,並完成系統設計。分析了CAN總線和RS-232串口的通信特點,介紹了單片機硬體,並對軟體的設計思路與流程做了詳盡描述,完成功能檢測。實驗結果表明,該設計達到了要求。
  • 一種嵌入式Web伺服器的設計方案
    嵌入式Web伺服器的硬體系統包含了Web通信功能的微處理器或者微控制器系統,它可以和前端的應用系統直接集成在一起,也可以通過現場總線與應用系統相連。一個完整的硬體系統由微型處理器、FLASH存儲器、DRAM存儲器、網絡接口和前端應用系統硬體所組成。
  • 現代汽車核心技術-CAN總線應用層協議標準SAE J1939
    一、技術背景本文引用地址:http://www.eepw.com.cn/article/201706/350776.htm在當今的中高檔汽車中都採用了汽車總線技術。汽車總線為汽車內部各種複雜的電子設備、控制器、測量儀器等提供了統一數據交換渠道。
  • 嵌入式PROFIBUS現場總線通信接口設計
    0引言 目前國內對自動化產品(電器、儀表、驅動裝置等)提出PROFIBUS通信功能要 求,主要來源於: (1)國外生產設備及技術的引進,特別是從歐洲引進的成套設備通常採用PROFIBUS現場總線 ,因此對國內配套產品提出了現場總線PROFIBUS通信功能的技術要求; (2)國內自動化系統廠家比較成功的、面向行業的控制系統
  • 基於C167單片機和CAN總線實現數位化電梯控制系統的設計
    在數位化電梯系統的設計中關鍵部分是主控器中的群控算法及CAN總線通信的實現, 下面詳細介紹此兩部分的具體實現。 3 C167微控制器介紹 C167 單片機是80C166 系列中的一款高性能的微處理器。CPU時鐘頻率最高可達40MHz , 片內ROM128K/256 K,片內RAM11K,尋址能力16M。
  • 編碼器的CAN總線接口及其在光電跟蹤系統中的應用
    總線連接可實現實時測量。由於CAN總線的高性能、高可靠性及獨特的設計,已成為目前國內外普及和實時性最高的現場總線。控制系統中內部通信方式的發展變化,使得用作測量角位移和角速度的編碼器要提供CAN總線接口以滿足整個控制系統的現場總線設計要求。
  • 嵌入式開發:STM32 FSMC接口驅動TFT-LCD設計
    本文提出了一種能直接驅動數字液晶屏的設計方案,方案先介紹了TFT數字彩屏的工作原理,利用STM32處理器的FSMC接口設計的硬體電路和軟體程序均能對顯示控制晶片進行有效的控制。在實際應用中顯示清晰流暢,並且CPU有足夠的時間來處理用戶程序。該方案能成功應用在電腦橫機的人機界面顯示中,且其硬體電路結構簡單、控制方式靈活、對於其他型號的接口晶片也能提供參考。
  • 現場總線的智能冷陰極電離規控制器的實現
    該真空計帶有符合CAN協議的現場總線接口、RS485/RS232C以及用於聯鎖保護快速響應的接口,可有效地驅動多種國內外規管,量程範圍是。國外品牌有美國HPS公司的Series 423 I-MAG規管及其控制器(測量範圍是)。目前基於M014規管的真空計的市場價格約5000元,價格低廉、操作簡單,但控制器的保護、報警功能很弱,測量誤差較大,另外測量範圍和通訊功能也有限。
  • CAN總線協議概述
    在北美和西歐,CAN總線協議已經成為汽車計算機控制系統和嵌入式工業控制區域網的標準總線,並且擁有以CAN為底層協議專為大型貨車和重工機械車輛設計的J1939協議。​這種優先級一旦在系統設計時被確立後就不能再被更改。總線讀取中的衝突可通過位仲裁解決。如圖2所示,當幾個站同時發送報文時,站1的報文標識符為011111;站2的報文標識符為0100110;站3的報文標識符為0100111。所有標識符都有相同的兩位01,直到第3位進行比較時,站1的報文被丟掉,因為它的第3位為高,而其它兩個站的報文第3位為低。
  • 數字溫度傳感器DS1621在Linux下的IIC接口驅動設計
    Linux作業系統下的嵌入式設備驅動,通過IIC總線,實現ARM與外圍模塊間的協同工作,有著廣泛的應用。1 IIC總線協議以及選用晶片功能1.1 IIC總線的特點以及工作協議 IIC串行總線由兩根信號線組成:一根雙向傳輸的數據線SDA;另一根是時鐘線SCL。