工業現場總線是工廠底層設備之間的通信網絡,是計算機數字通信技術在自動化領域的應用,為車間底層設備信息及生產過程信息集成提供了通信技術平臺。傳統的工業串行總線標準有RS232和RS485,CAN則是目前廣泛應用的典型的現代工業現場總線標準。以太網是一種可應用于工業以及辦公環境的通用網絡標準。這些不同的串行通信標準,由于各種不同原因分別得到不同應用。為了實現這些不同標準節點之間的數據通信,必須有一個實現這些不同標準之間協議轉換的網關設備,TC700就是為實現這個目的而設計的。 RS232、RS485串行總線標準主要是完成物理層之間的協議轉換工作,而CAN和以太網之間的協議轉換既包括物理層的轉換也包括數據鏈路層的轉換,是二層的轉換結構。因此,TC700能夠實現串口與網口、CAN口與網口之間的協議轉換功能,我們將其看作是一種復合型的工業總線網關設備。 1 TC700 的功能原理與硬件結構 1.1 TC700 網關設備的功能原理 TC700網關采用嵌入式系統架構進行設計,包括了RS232、RS485、CAN和以太網幾種類型的接口。TC700能夠支持簡單的路由功能,在把RS232、RS485、CAN接入IP網絡的同時,可從IP網絡中對每個串口設備進行訪問。在數據傳輸時,TC700中的RS232、RS485與CAN接口均被分配一個IP地址,從串口接收到的負載數據能夠各自組成相應格式的數據幀,通過網絡接口發送出去,在局域網甚至在廣域網進行傳輸;反之,本地主機或遠程主機也可以通過Internet遠程訪問各個串行接口。TC700的原理框圖如圖1所示: 1.2 TC700 協議轉換器硬件總體結構 TC700協議轉換器使用了飛思卡爾公 司(原摩托羅拉公司)生產的微處理器 MPC850作為它的CPU,它是TC700總體結 構的中心,對各個模塊進行控制。這些模塊 分為兩部分,一部分是核心支持模塊,主要 包含電源模塊,存儲器模塊(SDRAM與Flash Memory),時鐘和復位模塊和通用I/O模塊。 另一部分為通信模塊,包括串口模塊,以太 網模塊、CAN接口模塊等。MPC850集成了 一個高性能的嵌入式PowerPC核和一個包 含特殊設計的32位RISC處理器的通信處理 器(CPM)。它的 CPM 支持6個串行通道: 一個串行通信控制器(SCC)、一個通用串 行總線通道(USB)、兩個串行管理控制器 (SMC)、一個I?C(Inter-Integrated Circuit) 接口和一個串行外圍接口電路(SPI)。本 文中,筆者著重介紹了TC700協議轉換器的 CAN接口驅動開發過程中的硬件設計和軟 件設計兩個部分。 2 CAN 接口硬件電路設計 CAN總線是一種串行數據通信協議, 在CAN總線通信接口中集成了CAN協議的 物理層和數據鏈路層功能,可以完成對通信 數據成幀處理。CAN總線接口的設計有硬 件設計和軟件設計兩種方式。軟件設計方式 需要開發人員編寫相應的程序來實現數據 的成幀、解幀和完成數據幀的收發功能。這 就增加了開發人員的負擔,延長開發周期。 最重要的是軟件程序會增大系統運行開銷, 使CPU利用率降低等,因此本文采用硬件開 發方式完成對CAN接口的設計。在CAN控制器的選擇上,由于TC700的CPU與CAN控制 器之間的通信是通過SPI接口來實現的,因 此除了選有帶有SPI接口的CPU芯片之外, CAN控制器也須選擇帶有SPI接口的芯片。 美國微芯科技有限公司生產的MCP2510是 一款帶有SPI 接口的CAN 控制器,它通過 SPI 接口與CPU進行數據傳輸。MCP2510支 持CAN 技術規范V2.0A和 V2.0B,并能夠 發送和接收標準的和擴展的信息幀, 同時具 有接收濾波和信息管理的功能,還具有靈活 的中斷管理能力。這些特點使得CPU 對 CAN 總線的操作變得非常簡便。另外, 筆者還選擇了PHILIP生產的PCA82C250芯 片作為TC700網關設備的CAN的收發器。 PCA82C250具有放大MCP2510與CAN總線 之間傳輸信號的功能,可以使CAN總線有充 分的負載能力與總線上其他設備進行數據 交換。 (a) MCP2510接口電路圖 (b) PCA82C250 接口電路 圖 2 CAN 總線的接口電路 圖2是CAN總線的接口電路原理圖, MCP2510通過SPI接口的四個管腳SPIMISO、 SPIMOSI 、SPICLK 、SPI_SEL 分別與CPU 的 PB[28]、PB[29]、PB[30]、PD[7]管腳相連, 即實現了MCP2510與CPU雙方SPI接口的互 連。SPI接口間的通信協議也是可以采用軟 件算法的方式來實現的;CAN控制器MCP2510 與CAN 收發器PCA82C250 通過CAN_TX 和 CAN_RX管腳進行相連,這里的PCA82C250作 為MCP2510與物理總線的接口。為了提高系 統的抗干擾能力,在MCP2510和PCA82C250之 間加了雙通道數字隔離器ADuM1201 , ADuM1201有諸多優于光電隔離器件性能的 地方,可以很好的滿足CAN總線上電氣隔離 的要求。 3 基于VxWorks 的CAN 接口驅動程序設計 3.1 基于VxWorks 的嵌入系統的工作原理 本網關所采用的嵌入式操作系統 VxWorks是美國“風河”(Wind River)公司 開發研制的一種嵌入式實時操作系統 (RTOS)。在眾多的嵌入式操作系統中, VxWorks以良好的可靠性和卓越的實時性, 在軍事、航空航海、通信、醫療等高科技技 術領域都有著廣泛的應用與發展,在嵌入式 領域中占有極其重要的地位。VxWorks具有 小巧的內核、可被裁剪、廣泛的硬件支持和 第三方軟件開發商支持等優點,極大地提高 了程序員的開發效率。 加電后,TC700首先啟動VxWorks操作 系統,包括了兩個映像的啟動過程。一是 BootRom 映像; 另一是VxWorks 映像。 BootRom映像是一個最小化、專用的系統映 像,又稱為啟動映像,它保存在固定位置(如 FlashROM或ROM),主要負責加載和運行 最終使用的VxWorks映像。即在VxWorks操作系統正式啟動之前,首先需要定制和建立 BootRom,然后通過它下載配置可加載的 VxWorks映像到RAM中運行。VxWorks映像 加載完畢后,系統就啟動內核創建根任務 usrRoot,通過調用iosInit()函數初始化I/O 文件系統,初始化各個串口并安裝驅動程 序。初始化工作完成之后,VxWorks操作系 統正式加載,網關開始工作。 3.2 SPI 接口驅動程序的開發 SPI接口驅動程序是為了完成TC700協 議轉換器的CAN通信而設計的,在本系統 中,筆者通過移植u-boot中的spi.c文件使該 驅動能夠在VxWorks操作系統下順利運行。 在SPI接口的驅動程序spi.c中有三個主要的 功能函數:sysSpiHwInit()、spi_write()和 spi_read()。 (1) sysSpiHwInit(),使SPI能夠正常工 作;初始化參數RAM;設置參數RAM和雙 口RAM的基址等。 (2) spi_write(),該函數為SPI接口的寫 函數,定義接收緩沖區和發送緩沖區指針變 量,并為其分配存儲空間;寫入寫數據使能 控制字。 (3) spi_read(),該函數為SPI接口的讀函 數,同樣也需定義接收、發送緩沖區的指針 變量和分配存儲空間;并寫入讀數據使能控 制字。 4 CAN 接口驅動程序流程 VxWorks 操作系統中的I/O 系統中有 兩種基本設備類型[5]:字符設備和塊存取設 備,本文中所研究的CAN 口設備屬于字符 設備。I/O 系統為所有的字符設備提供統一 的訪問接口[6],其基本作用就是,把用戶請 求分配到與設備對應的驅動例程中去。 在 CAN 接口驅動程序的開發過程中, 我們對VxWorks 的虛擬設備ttyDrv 進行封 裝,使其向上將TTY 設備安裝到標準的I/O 系統中去,從而完成上層程序對硬件設備的 操作;向下為實際的硬件設備提供底層的設 備驅動程序。 4.1 CAN 設備初始化過程 ①網關設備加電后,操作系統啟動, 創建根任務UsrRoot,并通過該任務調用iosInit ( )函數對VxWorks 的I/O系統進行初 始化; ②調用設備驅動初始化函數ttyDrv( ), 該函數先初始化CAN設備驅動程序,然后調 用iosLib 庫中的函數iosDrvInstall( ),為該設 備的相關I/O驅動程序分配一個驅動號 (ttyDrvNum = iosDrvInstall (ttyopen, (FUNCPTR) NULL, ttyOpen, ttyClose, tyRead, tyWrite, ttyIoctl);),并將其對應的 函數入口地址增加到驅動程序表中 (drvTable); ③ttyDevCreate ( )函數用來創建設備 驅動。首先將已經定義并初始化的結構體 TYCO_DEV傳遞給ttyDevCreate ( )函數,然 后調用iosDevAdd ( )將設備名(該設備名稱 為tyCo/4)和驅動號(ttyDrvNum)加入設 備鏈表(iosDvList)中。 CAN設備驅動的初始化工作主要包括 為讀寫緩沖區分配存儲空間、創建讀寫同步 信號量和互斥信號量以及初始化等待任務 列表等。 4.2 CAN 設備驅動程序的訪問過程 系統在對設備進行初始化完畢之后, 應用程序可以通過I/O系統對設備進行訪 問。但在VxWorks中,應用程序是通過打開 命名文件來訪問I/O設備的。對每個設備的 訪問都會看成是對一個文件的操作,每個被 打開的文件都會作為一個條目存儲在文件 描述符表(fdTable)中[2]。 ①調用open()函數打開要訪問的設備 tyCo/4; ②I/O系統根據設備名(tyCo/4)在設 備鏈表(iosDvList)中進行查找匹配,返回 設備數據結構指針( TYCO_DEV * pTyCoDev); ③被打開的設備作為文件設備在文件 描述符表中被分配到一個空的文件條目 ( FD_ENTRY); ④I/O系統根據查找到的設備驅動號 (ttyDrvNum)在設備驅動程序表(drvTable) 中查找該設備對應的ttyOpen (TYCO_DEVpTyCoDev, char * name, int flags, intmode)驅動例程。如果成功,則通過該驅動例程將設備驅動描述符指針 (pTyCoDev)、設備文件名和驅動返回值 存放在空的文件條目中,并返回一個文件描 述符(fd); ⑤應用程序通過調用ioLib中的read或 write函數對設備文件進行訪問。首先,這兩 個函數通過文件描述符(fd)找到對應的設 備描述符。然后根據設備描述符找到對應的 drvTable表,在DRVTABLE表中調用TTY設 備的例程函數tyWrite ()、tyRead (),通過這 兩個例程函數調用驅動程序spi.c 中的 spi_write和spi_read函數與實際的CAN接口 硬件設備進行數據傳輸,從而實現CAN報文 的發送和接收。 5 結束語 本文的創新點是作者將UNIX系統下 的SPI接口程序移植到VxWorks系統下,使 其能在VxWorks系統下正常運行,從而完成 了TC700網關的CAN驅動程序的開發。另 外,本文提出的TC700CAN接口驅動程序的 設計,是VxWorks的驅動機制在X86平臺上 的實現,其開發思路也能夠為基于其他平臺 的CAN接口驅動開發提供一些經驗。傳統的 硬件驅動程序開發,需要開發人員使用匯編 語言編寫軟件程序。而在嵌入式系統中, TC700的驅動開發過程是在上層進行的,即 軟件驅動程序的開發,通過高級語言進行程 序編寫即可。實踐調試結果表明:本文所設 計的網關實現了CAN接口驅動的功能,能可 靠的運行并能與CAN總線上的設備進行正 常的數據交換,充分體現了CAN總線高性 能、高可靠性的特點。 |