當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]引言在鐵路系統(tǒng)中,為了保證列車的安全運(yùn)行,需要對(duì)鐵軌及周圍狀況進(jìn)行實(shí)時(shí)檢測(cè)。目前采用的方法是在鐵路沿線安裝多個(gè)檢測(cè)設(shè)備,用于檢測(cè)洪水、大風(fēng)、泥石流等自然災(zāi)害及軌

引言

在鐵路系統(tǒng)中,為了保證列車的安全運(yùn)行,需要對(duì)鐵軌及周圍狀況進(jìn)行實(shí)時(shí)檢測(cè)。目前采用的方法是在鐵路沿線安裝多個(gè)檢測(cè)設(shè)備,用于檢測(cè)洪水、大風(fēng)、泥石流等自然災(zāi)害及軌溫等參數(shù)。這些設(shè)備一般采用的通信方式是RS232、RS485或CAN,并通過專線連接至監(jiān)控中心的各個(gè)監(jiān)控設(shè)備。這種方式極大浪費(fèi)了線路資源,也不易于設(shè)備的統(tǒng)一管理。因此,需要一種安裝在鐵路沿線的設(shè)備,它將附近的檢測(cè)設(shè)備發(fā)送的信息統(tǒng)一收集并通過一條專線直接送往監(jiān)控中心。為了與多個(gè)檢測(cè)設(shè)備通信,必須同時(shí)具有多個(gè)RS232、RS485和CAN接口?;谶@種應(yīng)用需要,本文提出了擴(kuò)展多個(gè)CAN總線接口的方法。

1 系統(tǒng)結(jié)構(gòu)

1.1 芯片介紹系統(tǒng)

采用Atmel公司的AT91RM9200(以下簡(jiǎn)稱“9200”)作為MCU。該處理器基于ARM920T內(nèi)核,主頻為180 MHz時(shí),性能可達(dá)到200MIPS;最高主頻為209 MHz。該處理器還具有豐富的外設(shè)資源,非常適合工業(yè)控制領(lǐng)域的應(yīng)用[1];采用的操作系統(tǒng)是ARMLinux,內(nèi)核版本為2.4.19。

目前主流的CAN協(xié)議控制器一般采用I/O總線(SJA1000等)或SPI接口(MCP2515等)與MCU進(jìn)行通信。由于本設(shè)計(jì)采用PC /104總線擴(kuò)展卡的方式來(lái)擴(kuò)展多個(gè)RS232和RS485接口,沒有多余的I/O片選線可用,因此最終選用9200的SPI接口與MCP2515進(jìn)行多路CAN總線接口的擴(kuò)展。

MCP2515是Microchip公司推出的具有SPI接口的獨(dú)立CAN控制器。它完全支持CAN V2.0B技術(shù)規(guī)范,通信速率最高可達(dá)1 Mbps,內(nèi)含3個(gè)發(fā)送緩沖器、2個(gè)接收緩沖器、6個(gè)29位驗(yàn)收濾波寄存器和2個(gè)29位驗(yàn)收屏蔽寄存器[2];它的SPI接口時(shí)鐘頻率最高可達(dá)10 MHz,可滿足一個(gè)SPI主機(jī)接口擴(kuò)展多路CAN總線接口的需要。

1.2 系統(tǒng)硬件接口

圖1是9200與MCP2515的接口原理框圖,通過9200的SPI接口,連接了5個(gè)MCP2515。由于9200的SPI從設(shè)備片選線數(shù)量有限,故采用片選譯碼方式,NPCS0可作為普通的外部中斷線使用(NPCS0與IRQ5復(fù)用引腳)。由于9200的外部中斷線資源有限,故采用中斷線共享的方式,即分別有兩個(gè)MCP2515共享同一中斷線,最后一個(gè)MCP2515獨(dú)占一條中斷線,以滿足不同通信速率下數(shù)據(jù)處理的需要。

 


500)this.width=500" border=0>

圖1 AT91RM9200與MCP2515接口原理框圖

 


圖2 MCP2515 CAN總線接口電路

圖2是MCP2515的外圍CAN總線接口框圖,圖中省略了MCP2515和9200的接口部分。由于設(shè)備需要安裝在鐵路沿線,必須具有防雷擊的能力。因此MCP2515與CAN總線收發(fā)器(TJA1050)之間采用高速光耦進(jìn)行完全的電氣隔離,并且光耦兩端電路的電源也必須用電源隔離模塊隔離開,這樣才能真正起到隔離的作用。在TJA1050的CANH和CANL引腳與地之間連接2個(gè)30 pF的電容,可以過濾CAN總線上的高頻干擾;2個(gè)二極管可以在總線電壓發(fā)生瞬變干擾時(shí)起保護(hù)作用。光耦正常工作時(shí)輸入電流為10 mA左右,內(nèi)部發(fā)光二極管的正向電壓降為1.7 V左右,因此要特別注意輸入端串聯(lián)電阻的阻值選擇。

2 SPI主機(jī)的工作方式

9200通過SPI接口與5個(gè)MCP2515進(jìn)行通信,9200的SPI控制器工作在主機(jī)模式,MCP2515工作在從機(jī)模式。MCP2515 支持多個(gè)指令(如復(fù)位指令、讀指令、寫指令等),以便于9200通過SPI接口對(duì)MCP2515的內(nèi)部寄存器進(jìn)行讀/寫操作。9200 SPI控制器作為主機(jī)時(shí)工作模式流程如圖3所示[1]。

 


500)this.width=500" border=0>

圖3 AT91RM9200 SPI控制器主機(jī)模式流程

需要注意的是,SPI使能后,只有在SPI_TDR(發(fā)送數(shù)據(jù)寄存器)中有數(shù)據(jù)時(shí),才會(huì)根據(jù)片選配置(固定外設(shè)或可變外設(shè))使能相應(yīng)片選;而 SPI_TDR中無(wú)數(shù)據(jù)時(shí),則片選自動(dòng)禁用。因此,9200向MCP2515連續(xù)發(fā)送多個(gè)字節(jié)時(shí),要保證在前一個(gè)字節(jié)傳輸完畢前,后一個(gè)字節(jié)就被寫入到 SPI_TDR中,以避免片選被自動(dòng)禁用;同時(shí),在傳輸完每一個(gè)字節(jié)后,還要讀取SPI_RDR(接收數(shù)據(jù)寄存器)。

下面以MCP2515的讀指令為例,說明圖4所示的驅(qū)動(dòng)程序完成一次讀指令操作(只讀一個(gè)字節(jié)數(shù)據(jù))的過程,并假設(shè)9200 SPI采用固定外設(shè)的片選配置方式。其他指令的軟件實(shí)現(xiàn)流程與讀指令類似。

 


500)this.width=500" border=0>

圖4 SPI讀指令操作軟件流程

3 驅(qū)動(dòng)程序設(shè)計(jì)

驅(qū)動(dòng)程序是應(yīng)用程序與硬件之間的中間軟件層,它完全隱蔽了設(shè)備工作的細(xì)節(jié)。Linux操作系統(tǒng)根據(jù)設(shè)備中信息傳送方式的不同,將設(shè)備分成3種類型:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備[3]。9200與MCP2515的通信都是通過SPI接口以字節(jié)為單位進(jìn)行的,因此MCP2515屬于字符設(shè)備。由于5 個(gè)MCP2515共享9200的一個(gè)SPI接口,因此采用一個(gè)驅(qū)動(dòng)程序來(lái)管理所有的MCP2515,這樣做有利于對(duì)所有設(shè)備進(jìn)行統(tǒng)一管理。

3.1 驅(qū)動(dòng)程序中定義的主要數(shù)據(jù)結(jié)構(gòu)

CAN總線通信是基于報(bào)文幀的,在驅(qū)動(dòng)程序中,無(wú)論發(fā)送數(shù)據(jù)還是接收數(shù)據(jù)都是基于報(bào)文幀的操作[4],因此需要設(shè)計(jì)合適的數(shù)據(jù)結(jié)構(gòu)以滿足數(shù)據(jù)操作的需要。

3.1.1接收與發(fā)送CAN報(bào)文幀結(jié)構(gòu)體

typedef struct {

unsigned char node_num;

unsigned intid;

unsigned char dlc;

unsigned char data[8];

int ext_flag;

int rtr_flag;

} CanFrame;

其中,node_num為MCP2515的節(jié)點(diǎn)號(hào)(0~4),id為CAN報(bào)文幀的標(biāo)識(shí)符,dlc為數(shù)據(jù)長(zhǎng)度(0~8),data為CAN報(bào)文幀的數(shù)據(jù)緩沖區(qū),ext_flag用于標(biāo)識(shí)CAN報(bào)文幀是否為擴(kuò)展幀,rtr_flag用于標(biāo)識(shí)CAN報(bào)文幀是否為遠(yuǎn)程幀。[!--empirenews.page--]

3.1.2 設(shè)備配置結(jié)構(gòu)體

(1) 波特率和報(bào)文濾波配置結(jié)構(gòu)體

typedef struct{

unsigned charnode_num;

CanBaudRatebaudrate;

CanFilter filter;

int br_flag;

int fi_flag;

} CanDevConfig;

其中,node_num為MCP2515的節(jié)點(diǎn)號(hào)(0~4),baudrate為CAN總線通信速率,filter為報(bào)文濾波配置結(jié)構(gòu),br_flag用于標(biāo)識(shí)波特率配置是否有效,fi_flag用于標(biāo)識(shí)報(bào)文濾波配置是否有效。 baudrate和filter的數(shù)據(jù)結(jié)構(gòu)類型定義如下:

typedef enum {

_125kbps,

_250kbps,

_500kbps,

_1Mbps

} CanBaudRate;

typedef struct{

unsigned int mask_0;

unsigned int mask_1;

unsigned int filter_0;

unsigned int filter_1;

unsigned int filter_2;

unsigned int filter_3;

unsigned int filter_4;

unsigned int filter_5;

}CanFilter;

(2) 工作模式配置結(jié)構(gòu)體

typedef struct{

unsigned char node_num;

unsigned char oper_mode;

} CanDevMode;

其中,node_num意義同上,oper_mode表示該節(jié)點(diǎn)的工作模式。MCP2515共有5種工作模式,分別是配置模式、休眠模式、僅監(jiān)聽模式、回環(huán)模式和正常模式。一般設(shè)備都工作在正常模式。

3.1.3 環(huán)形數(shù)據(jù)接收緩沖區(qū)結(jié)構(gòu)體

typedef struct {

CanFrame can_recv_buf[RECV_BUF_SIZE];

int recv_pos;

int read_pos;

wait_queue_head_twq;

} CanDev;

其中,can_recv_buf為接收CAN報(bào)文幀環(huán)形數(shù)據(jù)緩沖區(qū),recv_pos和read_pos分別表示數(shù)據(jù)存入和讀出緩沖區(qū)的位置;wq定義的是一個(gè)等待隊(duì)列,用于實(shí)現(xiàn)阻塞型read操作。

3.2 驅(qū)動(dòng)程序接口

驅(qū)動(dòng)程序的接口主要分為3個(gè)部分:初始化與退出函數(shù)接口,完成設(shè)備安裝和卸載等操作;文件系統(tǒng)接口,由file_operations數(shù)據(jù)結(jié)構(gòu)來(lái)完成;與設(shè)備的接口,完成對(duì)設(shè)備的讀/寫等操作。

3.2.1 初始化與退出函數(shù)

在安裝驅(qū)動(dòng)程序時(shí),操作系統(tǒng)會(huì)調(diào)用初始化函數(shù)進(jìn)行設(shè)備注冊(cè)、設(shè)備初始化以及安裝中斷處理例程等操作。參考文獻(xiàn)[3]詳細(xì)論述了設(shè)備注冊(cè)的方法,而這里主要討論設(shè)備初始化時(shí)的配置方法。在本驅(qū)動(dòng)程序中,設(shè)備初始化分兩步:一是對(duì)9200的SPI控制器初始化,二是對(duì)5個(gè)MCP2515初始化。

在卸載設(shè)備驅(qū)動(dòng)程序時(shí)會(huì)調(diào)用退出函數(shù),退出函數(shù)主要完成設(shè)備的注銷和中斷釋放。

參考文獻(xiàn)[3]詳細(xì)論述了中斷處理例程的安裝、設(shè)備注銷和中斷釋放的方法,此處不再詳述。

3.2.2 中斷接收服務(wù)例程

MCP2515收到CAN報(bào)文幀后,產(chǎn)生中斷并將INT引腳置低。9200響應(yīng)外部中斷,并調(diào)用和外部中斷相對(duì)應(yīng)的中斷處理例程。中斷處理例程共有 3個(gè): at91_mcp2515_irq_handler_0響應(yīng)IRQ0的中斷,at91_mcp2515_irq_handler_1_2響應(yīng)IRQ1的中斷,at91_mcp2515_irq_handler_3_4響應(yīng)IRQ2的中斷。其中IRQ0只和一個(gè)MCP2515相連,而IRQ1和IRQ2分別被兩個(gè)MCP2515所共享。IRQ0和IRQ1的中斷處理流程分別如圖5和圖6所示,IRQ2與IRQ1的中斷處理流程相同。

 


500)this.width=500" border=0>

圖5 IRQ0中斷處理流程

 


500)this.width=500" border=0>

圖6 IRQ1中斷處理流程

需要注意的是,在圖5的處理流程中并沒有清中斷操作。這是因?yàn)椴捎昧薘X讀緩沖區(qū)指令讀取MCP2515 RX緩沖區(qū)中的數(shù)據(jù)。該指令操作結(jié)束后,MCP2515會(huì)自動(dòng)清除相應(yīng)的接收中斷標(biāo)志位。

3.2.3 文件系統(tǒng)接口定義

文件系統(tǒng)接口struct file_operations的成員全部是函數(shù)指針,這些指針指出了設(shè)備驅(qū)動(dòng)程序所提供的入口點(diǎn)位置。本驅(qū)動(dòng)程序所定義的file_operations為:

static struct file_operations at91_mcp2515_fops = {

owner: THIS_MODULE,

write: at91_mcp2515_write,

read:at91_mcp2515_read,

ioctl: at91_mcp2515_ioctl,

open: at91_mcp2515_open,

release:at91_mcp2515_release,

};

3.2.4 ioctl函數(shù)

ioctl函數(shù)用于對(duì)設(shè)備進(jìn)行配置。我們?cè)趇octl函數(shù)中實(shí)現(xiàn)了兩個(gè)命令: IOCTRL_CONFIG_CAN_DEV用于配置節(jié)點(diǎn)的CAN總線波特率和報(bào)文濾波,IOCTRL_SET_OPER_MODE用于配置節(jié)點(diǎn)的工作模式。這兩種配置命令所對(duì)應(yīng)的配置參數(shù)都是指向應(yīng)用層相應(yīng)數(shù)據(jù)結(jié)構(gòu)的指針,兩個(gè)配置結(jié)構(gòu)在3.1.2小節(jié)已經(jīng)介紹過了。

用IOCTRL_CONFIG_CAN_DEV命令配置波特率和報(bào)文濾波時(shí),在配置完成后,如果節(jié)點(diǎn)處于INACTIVE狀態(tài),則需要使能節(jié)點(diǎn)內(nèi)部的接收中斷,使能節(jié)點(diǎn)所對(duì)應(yīng)的外部中斷,并將節(jié)點(diǎn)狀態(tài)設(shè)置為ACTIVE。在通常情況下,通過ioctl函數(shù)對(duì)需要配置的節(jié)點(diǎn)執(zhí)行完 IOCTRL_CONFIG_CAN_DEV命令后,還要再對(duì)配置過的節(jié)點(diǎn)執(zhí)行IOCTRL_SET_OPER_MODE命令,使節(jié)點(diǎn)處于正常的工作模式。

3.2.5 關(guān)于競(jìng)爭(zhēng)問題

本系統(tǒng)是單CPU系統(tǒng),采用Linux 2.4.19內(nèi)核,且是非搶占式的;同時(shí),此設(shè)計(jì)的驅(qū)動(dòng)程序也只允許一個(gè)進(jìn)程打開并操作該設(shè)備。在這種情況下,驅(qū)動(dòng)程序中所涉及的競(jìng)爭(zhēng)問題主要就是中斷處理程序內(nèi)核代碼和其他設(shè)備操作的內(nèi)核代碼之間的資源競(jìng)爭(zhēng)。在上文中所提到的所有設(shè)備操作中,都要通過9200的SPI接口與MCP2515進(jìn)行通信。 9200與MCP2515進(jìn)行通信都是以命令字節(jié)開始的,并且在一個(gè)命令操作過程中(一般會(huì)連續(xù)傳輸多個(gè)字節(jié)),片選和時(shí)鐘是不能被禁用的,否則操作就會(huì)失敗。因此,MCP2515的一個(gè)完整的命令操作就是一個(gè)臨界區(qū)域,在對(duì)MCP2515進(jìn)行一個(gè)命令操作的過程中必須禁用所有的中斷,以保證命令操作的正常執(zhí)行。在驅(qū)動(dòng)程序中,采用local_irq_save和local_irq_restore函數(shù)對(duì)中斷禁用和恢復(fù),在這兩個(gè)函數(shù)調(diào)用之間,就是對(duì) MCP2515執(zhí)行一個(gè)命令操作的代碼。[!--empirenews.page--]

結(jié)語(yǔ)

本文針對(duì)特有的應(yīng)用需求提出的多路CAN總線接口和驅(qū)動(dòng)程序設(shè)計(jì),經(jīng)過測(cè)試,可以穩(wěn)定正常地運(yùn)行。關(guān)于驅(qū)動(dòng)程序的編譯和運(yùn)行方法,參考文獻(xiàn) [3]有很好的說明。上層的測(cè)試程序編寫也比較簡(jiǎn)單,但要注意數(shù)據(jù)結(jié)構(gòu)的定義和底層驅(qū)動(dòng)程序的一致性。本文側(cè)重介紹設(shè)計(jì)的基本方法和實(shí)現(xiàn)基本的功能。 MCP2515本身提供了許多的功能,在實(shí)現(xiàn)基本功能的基礎(chǔ)上,也可以根據(jù)自己的應(yīng)用需要再進(jìn)行功能擴(kuò)展。

參考文獻(xiàn)

[1] Atmel corporation. AT91RM9200 data sheet, 2006.

[2] Microchip Technology Inc. MCP2515 data sheet,2005.

[3] 魏永明,駱剛,姜君. LINUX設(shè)備驅(qū)動(dòng)程序[M]. 第2版.北京:中國(guó)電力出版社,2004.

[4] 杜尚豐,曹曉鐘,徐津.CAN總線測(cè)控技術(shù)及其應(yīng)用[M].北京:電子工業(yè)出版社,2007.

徐曉東(碩士研究生),主要研究方向?yàn)榍度胧较到y(tǒng)及其應(yīng)用;

路紅英(高級(jí)工程師),主要研究方向?yàn)橛?jì)算機(jī)應(yīng)用和多媒體技術(shù);

張寧(教授),主要研究方向?yàn)橛?jì)算機(jī)測(cè)控、視頻技術(shù)以及嵌入式系統(tǒng)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉