當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]基于uclinux的CAN總線嵌入式驅(qū)動(dòng)編程

介紹了uclinux 操作系統(tǒng)的內(nèi)核結(jié)構(gòu)以及設(shè)備驅(qū)動(dòng)編程的基本原理,并對(duì)CAN 總線的嵌入式系統(tǒng)進(jìn)行了硬件設(shè)計(jì)及軟件驅(qū)動(dòng)編程,提出CAN 總線技術(shù)應(yīng)用于嵌入式系統(tǒng)的一種方案。

  1 引言
   
  早期應(yīng)用于八位單片機(jī)軟件設(shè)計(jì)的嵌入式系統(tǒng)主要為前后臺(tái)系統(tǒng)(或超循環(huán)系統(tǒng)),程序大約在幾千行以內(nèi),由兩部分組成,即其應(yīng)用程序是一個(gè)無(wú)限的循環(huán),循環(huán)中調(diào)用函數(shù)完成相應(yīng)的操作,屬于后臺(tái)行為;其中斷服務(wù)程序處理異步事件,屬于前臺(tái)行為.隨著嵌入式系統(tǒng)功能越來(lái)越龐雜,如友好的人機(jī)界面、網(wǎng)絡(luò)化、遠(yuǎn)程監(jiān)控等.各種任務(wù)的優(yōu)先級(jí)不同,傳統(tǒng)的設(shè)計(jì)方法無(wú)法完成,程序長(zhǎng)達(dá)數(shù)萬(wàn)行,程序員必須同繁瑣的底層硬件打交道,這樣效率低下.現(xiàn)代電子技術(shù)的發(fā)展為嵌入式微處理器提供了更多的外設(shè),通用的如串口、并口、以太網(wǎng)口、現(xiàn)場(chǎng)總線、USB口等.基于免費(fèi)自由軟件Linux發(fā)展而來(lái)的嵌入式系統(tǒng)uclinux,是一種免費(fèi)的嵌入式操作系統(tǒng).uclinux系統(tǒng)具有內(nèi)核小、效率高、源碼開(kāi)放、性能穩(wěn)定、大量的開(kāi)發(fā)工具、良好的開(kāi)發(fā)環(huán)境等特點(diǎn),并且各種應(yīng)用程序豐富,是進(jìn)行嵌入式系統(tǒng)開(kāi)發(fā)的最優(yōu)秀工具之一.

        2 uclinux操作系統(tǒng)簡(jiǎn)介
   
  uclinux 系統(tǒng)主要由用戶進(jìn)程、系統(tǒng)調(diào)用接口、uclinux 內(nèi)核、硬件控制器等四部分組成.用戶進(jìn)程是用戶根據(jù)自己的設(shè)計(jì)和功能要求開(kāi)發(fā)的應(yīng)用程序,通過(guò)調(diào)用系統(tǒng)的功能函數(shù)來(lái)實(shí)現(xiàn)系統(tǒng)功能;系統(tǒng)調(diào)用接口通過(guò)系統(tǒng)調(diào)用實(shí)現(xiàn)用戶與系統(tǒng)內(nèi)核的接口,這些調(diào)用和服務(wù)也可以看成是系統(tǒng)內(nèi)核的一部分;uclinux 內(nèi)核是操作系統(tǒng)的靈魂,它抽象了許多硬件細(xì)節(jié),將所有的硬件抽象成統(tǒng)一的虛擬接口,使程序可以以一種統(tǒng)一的方式進(jìn)行數(shù)據(jù)處理,它主要包括基于優(yōu)先級(jí)的進(jìn)程調(diào)度、內(nèi)存管理、文件系統(tǒng)、網(wǎng)絡(luò)接口、進(jìn)程間通訊等五部分;硬件控制器則包含了系統(tǒng)需要的所有可能的物理設(shè)備.以上四個(gè)部分之間的每個(gè)子系統(tǒng)都只能跟鄰近的系統(tǒng)進(jìn)行通信。
   
  uclinux 的設(shè)備管理系統(tǒng)是嵌入式操作系統(tǒng)的重要組成部分,它可以分為:下層、與設(shè)備相關(guān)的,即所謂的設(shè)備驅(qū)動(dòng)程序,直接與相應(yīng)的設(shè)備打交道,并向上提供一組訪問(wèn)接口;以及上層、與設(shè)備無(wú)關(guān),根據(jù)輸入輸出請(qǐng)求,通過(guò)特定設(shè)備驅(qū)動(dòng)提供的接口,與設(shè)備進(jìn)行通信.如通用的串口、網(wǎng)卡等驅(qū)動(dòng)程序在uclinux 中都可以找到.

       3 uclinux驅(qū)動(dòng)編 程原理
   
  uclinux嵌入式系統(tǒng)不能象Linux一樣動(dòng)態(tài)加載驅(qū)動(dòng)程序模塊,而只能同內(nèi)核一起編譯,與應(yīng)用程序、其他驅(qū)動(dòng)程序一起固化到可擦寫(xiě)的Flash上,驅(qū)動(dòng)程序長(zhǎng)駐內(nèi)存,是靜態(tài)驅(qū)動(dòng)程序.uclinux系統(tǒng)根據(jù)設(shè)備性質(zhì)的不同,將設(shè)備分為四種類型:字符設(shè)備(char)、塊設(shè)備(block)、網(wǎng)絡(luò)接口( net )和其他設(shè)備驅(qū)動(dòng)程序模塊.在下載的uclinux源代碼包中,可以在uclinux/linux/drivers目錄下面看到通用設(shè)備如char,block, net, cdrom, scsi, sound等.系統(tǒng)對(duì)于每個(gè)設(shè)備都對(duì)應(yīng)一個(gè)主設(shè)備號(hào)和一個(gè)次設(shè)備號(hào),不同的設(shè)備可以對(duì)應(yīng)相同的主設(shè)備號(hào),應(yīng)用程序訪問(wèn)設(shè)備通過(guò)不同的次設(shè)備號(hào)來(lái)識(shí)別和區(qū)別設(shè)備.在Linux系統(tǒng)/dev目錄下通過(guò)輸入ls -l命令可以查到系統(tǒng)已注冊(cè)的設(shè)備,因此編寫(xiě)新的驅(qū)動(dòng)程序時(shí)必須向系統(tǒng)注冊(cè)
該設(shè)備.在uclinux系統(tǒng)中,通過(guò)register_chrdev函數(shù)實(shí)現(xiàn)注冊(cè).
   
  uclinux系統(tǒng)將所有硬件抽象成虛擬的文件系統(tǒng),所有的字符設(shè)備、塊設(shè)備都支持文件操作接口,因此可以對(duì)這種虛擬的設(shè)備文件系統(tǒng)進(jìn)行文件操作.通常對(duì)設(shè)備文件進(jìn)行的操作有open、read、write、release等,即打開(kāi)、讀、寫(xiě)、釋放文件.每一個(gè)設(shè)備驅(qū)動(dòng)程序?qū)嵸|(zhì)上是用來(lái)完成特定任務(wù)的一組函數(shù)集. 驅(qū)動(dòng)程序擁有一個(gè)稱為fileoperation 的數(shù)據(jù)結(jié)構(gòu),其中包含指向驅(qū)動(dòng)程序內(nèi)部大多數(shù)函數(shù)的指針.引導(dǎo)系統(tǒng)時(shí),內(nèi)核調(diào)用每一個(gè)驅(qū)動(dòng)程序的初始化函數(shù),將驅(qū)動(dòng)程序的主設(shè)備號(hào)以及程序內(nèi)部的函數(shù)地址結(jié)構(gòu)的指針傳輸給內(nèi)核.這樣,內(nèi)核就能通過(guò)設(shè)備驅(qū)動(dòng)程序的主設(shè)備號(hào)索引訪問(wèn)驅(qū)動(dòng)程序內(nèi)部的子程序,完成打開(kāi)、讀、寫(xiě)等操作.程序員經(jīng)常面臨的一項(xiàng)工作就是為系統(tǒng)的新設(shè)備編寫(xiě)驅(qū)動(dòng)程序.
   
  在現(xiàn)代控制系統(tǒng)中,為了便于數(shù)據(jù)通訊,在底層常采用現(xiàn)場(chǎng)總線,目前CAN總線廣泛應(yīng)用于過(guò)程工業(yè)、機(jī)械工業(yè)、紡織機(jī)械、農(nóng)用機(jī)械、機(jī)器人、數(shù)控機(jī)床、醫(yī)療器械及傳感器等領(lǐng)域,下面介紹CAN總線應(yīng)用于嵌入式系統(tǒng)的驅(qū)動(dòng)編程.

         4 CAN 總線的性能特點(diǎn)
   
  CAN(Controller Area Network)即控制器局域網(wǎng)絡(luò).CAN 總線目前已形成國(guó)際標(biāo)準(zhǔn) version2.0.該技術(shù)規(guī)范包括A 和B 兩部分.2.0A 給出了CAN 報(bào)文標(biāo)準(zhǔn)格式,而2.0B 給了出廠標(biāo)準(zhǔn)和擴(kuò)展兩種格式.CAN 總線是應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一,CAN為多主方式工作,網(wǎng)絡(luò)上任一節(jié)點(diǎn)均可在任意時(shí)刻主動(dòng)地向網(wǎng)絡(luò)上其他節(jié)點(diǎn)發(fā)送信息,而不分主從,通信方式靈活,且無(wú)需站地址等節(jié)點(diǎn)信息;CAN 網(wǎng)絡(luò)上的節(jié)點(diǎn)信息分成不同的優(yōu)先級(jí),可滿足不同的實(shí)時(shí)要求;CAN 采用非破壞性總線仲裁技術(shù),當(dāng)多個(gè)節(jié)點(diǎn)同時(shí)向總線發(fā)送信息時(shí),優(yōu)先級(jí)較低的節(jié)點(diǎn)會(huì)主動(dòng)地退出發(fā)送,而最高優(yōu)先級(jí)的節(jié)點(diǎn)可不受影響地繼續(xù)傳輸數(shù)據(jù);CAN 只需通過(guò)報(bào)文濾波即可實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)、一點(diǎn)對(duì)多點(diǎn)及全局廣播等幾種方式傳送接收數(shù)據(jù),無(wú)需專門的“調(diào)度”,CAN 的直接通信距離最遠(yuǎn)可達(dá)10km(速率5kbps 以下);通信速率最高可達(dá)1Mbps(此時(shí)通信距離最長(zhǎng)為40m).CAN 上的節(jié)點(diǎn)數(shù)主要取決于總線驅(qū)動(dòng)電路,目前可達(dá)110個(gè);采用短幀結(jié)構(gòu),傳輸時(shí)間短,受干擾概率低,具有極好的檢錯(cuò)效果;CAN 的通信介質(zhì)可為雙絞線、同軸電纜或光纖等.CAN 總線的數(shù)據(jù)通信具有突出的可靠性、實(shí)時(shí)性和靈活性.

       5 CAN總線的嵌入式系統(tǒng)硬件設(shè)計(jì)
   
  本設(shè)計(jì)選用Samsung公司的S3C4510B作為嵌入式系統(tǒng)的微處理器芯片,該處理器是16/32位RISC微處理控制器,內(nèi)含由ARM公司設(shè)計(jì)的16/32位ARM7TDMI RISC處理器核,適用于價(jià)格及功耗敏感的場(chǎng)合.除內(nèi)核外,該微處理器的片內(nèi)外圍功能模塊包括:2個(gè)帶緩沖描述符的HDLC通道;2個(gè)UART通道;2個(gè)GDMA通道;2個(gè)32位定時(shí)器及可編程I/O口.CAN控制器選用philips公司的SJA1000,該芯片與PCA82C200電氣兼容,帶64字節(jié)先進(jìn)先出(FIFO)堆棧,兼容協(xié)議CAN2.0B,支持11位和29位識(shí)別碼,位速率可達(dá)1Mbps,24MHZ時(shí)鐘頻率,芯片內(nèi)含寄存器,可由用戶配置CAN總線波特率,設(shè)置驗(yàn)收屏蔽標(biāo)識(shí)碼,可配置系統(tǒng)為PeliCAN 模式或BasicCAN模式,出錯(cuò)告警等.
   
  該系統(tǒng)采用82C250作為收發(fā)器,其硬件連線如圖(1)所示.AD0~AD7與S3C4510B的p0~p7連線,/cs接p12,ALE接p13,/RD接p14,/wr接p15,/int接X(jué)INTREQ0.

圖1 SJA1000硬件連線


        6 驅(qū)動(dòng)軟件設(shè)計(jì)

圖2 CAN總線初始化框圖

本設(shè)計(jì)中,CAN總線驅(qū)動(dòng)程序是作為一個(gè)模塊放在linux/deriver/char/文件夾里面,軟件流程如圖(2)所示,其設(shè)計(jì)詳細(xì)介紹如下.

        模塊首先對(duì)引用的庫(kù)函數(shù)進(jìn)行申明,并且定義:
  #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
  主要有以下幾個(gè)模塊:
  void can_init(void)
  {
  SYSCFG =SYSCFG & 0x0fffffffd;
  EXTDBWTH =EXTDBWTH& 0x00ff0ff;
  IOPMOD=0xf0ff;
  IOPDATA=0x6000; 寄存器地址0,MOD寄存器
  IOPDATA= IO_PDATA&0xdfff; ALE=0 配置MOD寄存器
  IOPDATA= IO_PDATA|0x3f; ; 復(fù)位模式、使能
  IOPDATA=0x6006; ;寄存器地址6,總線定時(shí)器0寄存器
  IOPDATA=IO_PDATA&0xdfff; ALE=0配置寄存器
  IOPDATA= IO_PDATA|0x3f; 跳轉(zhuǎn)寬度、波特率設(shè)置
  ……;配置總線定時(shí)器1、驗(yàn)收代碼寄存器等
  IOPDATA=0x6000; SJA1000 寄存器地址0,MOD寄存器
  IOPDATA=IO_PDATA&0xdfff; ALE=0配置MOD寄存器
  IOPDATA= IO_PDATA&0xfe;寫(xiě)復(fù)位位,進(jìn)入工作模式
  result = register_chrdev(254,"can",&can_fops);申請(qǐng)主設(shè)備號(hào)
  if (result<0) {
  printk(KERN_WARNING "CAN:can’t getmajor ", result);
  return result;
  }
  在該驅(qū)動(dòng)程序中,定義結(jié)構(gòu)變量can_fops為應(yīng)用程序訪問(wèn)內(nèi)核的接口:
  static struct file_operations can_fops = {
  read: can_read,
  write: can_write,
  open: can_open,
  release: can_release,
  }; 
  static int can_release(struct inode *inode, struct file *file)
  {
  MOD_DEC_USE_COUNT; ;用戶減計(jì)數(shù)
  Return 0;
  }
  static int can_open(struct inode *inode,struct file *file)
  {
  Scull_Dev *dev;
  Int num = NUM(inode->i_rdev); 設(shè)備號(hào)
  Int type = TYPE(inode->i_rdev); 設(shè)備類型
  If (num>=scull_nr_devs) return -ENODEV;
  dev = &scull_devices[num];
  flip->private_data = dev;
  MOD_INC_USE_COUNT; 用戶數(shù)人工計(jì)數(shù)
  IOPCON=0x16; //xIRQ0
  disable_irq(INT_can);
  if(request_irq(INT_can, &can_rx,
  SA_INTERRUPT, "can rx isr","can")) {
  printk("s3c4510-can: Can"t get irq %dn",
  INT_sja1000);
  return -EAGAIN;
  }
  printk("can has get irq 0n");
  enable_irq(INT_can);
  …… ; 配置SJA1000內(nèi)部中斷及屏蔽寄存器
  return 0;
  }

       7 結(jié)束語(yǔ)
   
  本文介紹了CAN總線在嵌入式系統(tǒng)中的驅(qū)動(dòng)編程,對(duì)CAN總線技術(shù)在嵌入式系統(tǒng)中的應(yīng)用進(jìn)行了探索.本設(shè)計(jì)已在通信用逆變電源遠(yuǎn)程監(jiān)控系統(tǒng)中應(yī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工具的開(kāi)發(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ì)開(kāi)幕式在貴陽(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)閉