CAN 匯流排嵌入式驅動程式設計

2021-06-09 14:37:15 字數 2595 閱讀 5164

摘要:介紹了uclinux 作業系統的核心結構以及裝置驅動程式設計的基本原理,並對can 匯流排的嵌入式系統進行了硬體設計及軟體驅動程式設計,提出can 匯流排技術應用於嵌入式系統的一種方案。

1 引言

早期應用於八位微控制器軟體設計的嵌入式系統主要為前後臺系統(或超迴圈系統),程式大約在幾千行以內,由兩部分組成,即其應用程式是乙個無限的迴圈,迴圈中呼叫函式完成相應的操作,屬於後台行為;其中斷服務程式處理非同步事件,屬於前台行為.隨著嵌入式系統功能越來越龐雜,如友好的人機介面、網路化、遠端監控等.各種任務的優先順序不同,傳統的設計方法無法完成,程式長達數萬行,程式設計師必須同繁瑣的底層硬體打交道,這樣效率低下.現代電子技術的發展為嵌入式微處理器提供了更多的外設,通用的如串列埠、並口、乙太網口、現場匯流排、usb口等.基於免費自由軟體linux發展而來的嵌入式系統uclinux,是一種免費的嵌入式作業系統.uclinux系統具有核心小、效率高、原始碼開放、效能穩定、大量的開發工具、良好的開發環境等特點,並且各種應用程式豐富,是進行嵌入式系統開發的最優秀工具之一.

2 uclinux作業系統簡介4 can 匯流排的效能特點

can(controller area network)即控制器區域網路.can 匯流排目前已形成國際標準 version2.0.該技術規範包括a 和b 兩部分.2.0a 給出了can 報文標準格式,而2.0b 給了出廠標準和擴充套件兩種格式.can 匯流排是應用最廣泛的現場匯流排之一,can為多主方式工作,網路上任一節點均可在任意時刻主動地向網路上其他節點傳送資訊,而不分主從,通訊方式靈活,且無需站位址等節點資訊;can 網路上的節點資訊分成不同的優先順序,可滿足不同的實時要求;can 採用非破壞性匯流排仲裁技術,當多個節點同時向匯流排傳送資訊時,優先順序較低的節點會主動地退出傳送,而最高優先順序的節點可不受影響地繼續傳輸資料;can 只需通過報文濾波即可實現點對點、一點對多點及全域性廣播等幾種方式傳送接收資料,無需專門的「排程」,can 的直接通訊距離最遠可達10km(速率5kbps 以下);通訊速率最高可達1mbps(此時通訊距離最長為40m).can 上的節點數主要取決於匯流排驅動電路,目前可達110個;採用短幀結構,傳輸時間短,受干擾概率低,具有極好的檢錯效果;can 的通訊介質可為雙絞線、同軸電纜或光纖等.can 匯流排的資料通訊具有突出的可靠性、實時性和靈活性.

5 can匯流排的嵌入式系統硬體設計

本設計選用samsung公司的s3c4510b作為嵌入式系統的微處理器晶元,該處理器是16/32位risc微處理控制器,內含由arm公司設計的16/32位arm7tdmi risc處理器核,適用於**及功耗敏感的場合.除核心外,該微處理器的片內外圍功能模組包括:2個帶緩衝描述符的hdlc通道;2個uart通道;2個gdma通道;2個32位定時器及可程式設計i/o口.can控制器選用philips公司的sja1000,該晶元與pca82c200電氣相容,帶64位元組先進先出(fifo)堆疊,相容協議can2.0b,支援11位和29位識別碼,位速率可達1mbps,24mhz時鐘頻率,晶元內含寄

存器,可由使用者配置can匯流排波特率,設定驗收遮蔽標識碼,可配置系統為pelican 模式或basiccan模式,出錯告警等.

該系統採用82c250作為收發器,其硬體連線如圖(1)所示.ad0~ad7與s3c4510b的p0~p7連線,/cs接p12,ale接p13,/rd接p14,/wr接p15,/int接xintreq0.

圖1 sja1000硬體連線

6 驅動軟體設計

圖2 can匯流排初始化框圖

本設計中,can匯流排驅動程式是作為乙個模組放在linux/deriver/char/資料夾裡面,軟體流程如圖(2)所示,其設計詳細介紹如下.

模組首先對引用的庫函式進行申明,並且定義:

#define iopmod (*(volatile unsigned *)0x3ff5000)

#define iopdata (*(volatile unsigned *)0x3ff5008)

#define iopcon (*(volatile unsigned *)0x3ff5004)

#define extdbwth(*(volatile unsigned *)0x3ff5

#define syscfg(*(volatile unsigned *)0x

主要有以下幾個模組:

void can_init(void)

在該驅動程式中,定義結構變數can_fops為應用程式訪問核心的介面:

static struct file_operations can_fops = ;

static int can_release(struct inode *inode, struct file *file)

static int can_open(struct inode *inode,struct file *file)

printk("can has get irq 0\n");

enable_irq(int_can);

…… ; 配置sja1000內部中斷及遮蔽暫存器

return 0;

}7 結束語

本文介紹了can匯流排在嵌入式系統中的驅動程式設計,對can匯流排技術在嵌入式系統中的應用進行了探索.本設計已在通訊用逆變電源遠端監控系統中應用.

嵌入式學習(三)嵌入式系統匯流排

pci peripheral component interconnect 1 支援 10 臺外設 2 匯流排時鐘頻率 33.3mhz 66mhz 3 最大資料傳輸速率 133mb s 4 時鐘同步方式 5 與 cpu 及時鐘頻率無關 6 匯流排寬度 32 位 5v 64 位 3.3v 7 能自動識...

嵌入式匯流排協議(三) IIC匯流排

iic匯流排是一種序列 半雙工匯流排,有以下特點 主機傳送起始訊號啟用匯流排 主機傳送乙個位元組資料指明從機位址和後續位元組的傳送方向 0 主機給從機發資料 1 從機給主機發資料 被定址的從機傳送應答訊號回應主機 傳送器傳送乙個位元組資料 接收器傳送應答訊號回應傳送器 重複步驟4 5 通訊完成後主機...

嵌入式linux IIC驅動

linux驅動和裝置隔離,驅動分層,iic驅動框架分為兩部分 1.1 iic匯流排驅動 platform是虛擬匯流排,針對沒有匯流排的裝置實現,匯流排 裝置 驅動框架,iic不用虛擬,可直接用匯流排bus。iic匯流排驅動有兩個重要資料結構 i2c adapter,i2c algorithm。i2c...