《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > 基于MCP2515的Linux CAN總線驅動程序設計(一)

基于MCP2515的Linux CAN總線驅動程序設計(一)

2015-05-08

1.前言

       CAN(Controller Area Network)總線,即控制器局域網總線,是一種有效支持分布式控制或實時控制的串行通信網絡。由于其高性能、高可靠性、及獨特的設計和適宜的價格而廣 泛應用于工業現場控制、智能樓宇、醫療器械、交通工具以及傳感器等領域,并已被公認為幾種最有前途的現場總線之一。CAN總線規范已經被國際標準化組織制 訂為國際標準ISO11898,并得到了眾多半導體器件廠商的支持。

       本文使用華清遠見FS2416平臺。FS2416使用Socket網絡設備驅動和字符設備驅動兩種方式向Linux內核提供MCP2515的驅動,本文詳細介紹了使用Socket方式設計的基于MCP2515的Linux CAN總線驅動程序。

2.FS2416簡介

Column596-1.jpg

圖1  FS2416開發板

       FS2416采用的是三星公司的ARM926EJ內核CPU S3C2416,無論從性能上,還是成本上, S3C2416都強于2440,是2440的最完美替代者。

       作為32/16 bit RISC指令集、低成本、低功耗、高性能的微處理器。S3C2416使用了65nm的制作工藝從而降低成本、功耗及提高性能,其使用的ARM926EJ的 核心,集成了2D圖形加速,添加了低功耗模式,支持內部ROM/RAM引導,支持moviNand啟動和低功耗音頻編解碼。此外相對于其他ARM9芯片, 它的外設也得到了升級,有更多的資源。

Column596-2.jpg

圖2  FS2416板級資源介紹

3.MCP2515簡介

MCP2515是一種獨立的CAN總線通信控制器,是Microchip公司首批獨立CAN解決方案的 升級器件,其傳輸能力較Microchip公司原有CAN控制器(MCP2510)高兩倍,最高通信速率可達到1Mbps。MCP2515能夠接收和發送 標準數據幀和擴展數據幀以及遠程幀,通過兩個接收屏蔽寄存器和六個接收過濾寄存器濾除無關報文,從而減輕CPU負擔。


MCP2515主要功能參數及電氣特性如下:
      (1)支持CAN技術規范2.0A/B, 最高傳輸速率達到1Mbps;
      (2)支持標準數據幀、擴展數據幀和遠程幀,每幀數據域長度可為0~8個字節;
      (3)內含兩個的接收緩沖器和三個發送緩沖器,并且可編程設定優先級;
      (4)內含六個29位(bit)的接收過濾寄存器和兩個29位(bit)的接收屏蔽寄存器;
      (5)高速SPI接口,支持SPI 0,0和1,1模式;
      (6)一次性模式可確保報文被一次性傳輸;
      (7)具有可編程時鐘脈沖輸出引腳,可作為其他芯片時鐘信號源;
      (8) 幀起始(SOF)信號輸出功能可被用于在確定的系統中(如時間觸發CAN-TTCAN)執行時隙功能,或在CAN總線診斷中決定早期總線出級;
      (9) 采用低功耗CMOS技術,工作電壓:2.7V~5.5V, 工作電流:5mA(待機狀態1μA);
      (10)工作溫度范圍:(I)-40℃到+85℃,(E)-40℃到+125℃。

4.硬件設計 

MCP2515與S3C2416的硬件連接圖如圖3所示。如硬件原理圖可知MCP2515芯片連接在 S3C2416芯片的SPI0上,中斷接在GPF1上;MCP2515輸出連接SN65HVD230 CAN總線收發器,SN65HVD230是德州儀器公司生產的3.3V CAN收發器。為了節省功耗,縮小電路體積,MCP2515 CAN總線控制器的邏輯電平采用LVTTL,SN65HVD230就是與其配套的收發器。

Column596-3.jpg

圖3  MCP2515硬件連接圖

5.MCP2515 Socket CAN驅動實現

FS2416平臺使用Linux2.6.39的內核,內核中為MCP2515提供了Socket CAN驅動程序,我們只需為MCP2515芯片配置內核選項就可以使用Socket編程的方式使用MCP2515 CAN總線。

5.1 Socket CAN介紹

Socket CAN是在Linux下CAN協議實現的一種實現方法。Linux下最早使用CAN的方法是基于字符設備來實現的,與之不同的是Socket CAN使用伯克利的Socket接口和Linux網絡協議棧,這種方法使得CAN設備驅動可以通過網絡接口來調用。Socket CAN的接口被設計的盡量接近TCP/IP的協議,讓那些熟悉網絡編程的程序員能夠比較容易的學習和使用。

5.2 向Linux內核注冊MCP2515驅動

向Linux內核添加SPI驅動在之前的文章已經有詳細的介紹,根據硬件原理圖圖3所示,MCP2515掛在SPI0上,使用中斷GPF1,所以要向Linux內核注冊MCP2515設備,注冊代碼如圖4所示。

Column596-4.jpg

圖4  MCP2515 SPI 注冊代碼

注冊完成,執行make menuconfig配置內核選項。

1    [*]Networking support->
        2    <*>CAN bus subsystem support->
        3    <*>Raw CAN Protocal
        4    <*>Broadcast Manage CAN Protocal
        5    CAN Device Drivers->
        6    <*>Platform CAN driver with Netlink support
        7    [*]CAN bit-timing calculation
        8    <*>Microchip MCP251x SPI CAN controllers
        9
        10    Device drivers->
        11    [*]SPI support ->
        12    <*> Samsung S3C2416 series type SPI

編譯內核,內核啟動如圖5顯示即說明MCP2515驅動加載成功。

Column596-5.jpg

圖 5  內核加載提示

6.Socket CAN測試

因為最新版BusyBox對Socket CAN的不支持,所以為了測試和使用Socket CAN,我們需要自己編譯Socket CAN的工具。這里介紹兩個工具,分別是iproute2 和 canutils。

6.1 iproute2

(1)下載iproute2的最新源碼http://www.kernel.org/pub/linux/utils/net/iproute2/ 。筆者下載的是iproute2 3.6.0。

(2)解壓iproute2-3.6.0.tar.xz,修改Makefile第33行。
        33 #CC = gcc
        34 CC = arm-none-linux-gnueabi-gcc

(3)因為我們只需要iprout2的ip命令,所以修改Makefile的第42行。
        42 #SUBDIRS=lib ip tc bridge misc netem genl man
        43 SUBDIRS=lib ip

(4)修改完成執行make命令,生成ip命令,拷貝到開發板文件系統目錄。

(5)使用ip命令。
        ifconfig can0 down         //關閉can0,以便配置
        ./ip link set can0 up type can bitrate 250000         //設置can0波特率
        ./ip -details link show can0        //顯示can0信息

Column596-6.jpg

圖6  iproute 使用簡介

6.2 canutils

Canutils是基于GNU GPLv2許可的開源代碼,包括canconfig、canecho、cansend、candump、cansequence五個工具,用于檢測和監控Socket CAN接口。

(1)下載canutils的最新源碼http://www.pengutronix.de/software/socket-can/download/canutils 。筆者下載的是canutils 4.0.6。
        (2)因為canutils編譯需要libsocketcan庫的支持,需要下載libsocketcan。 http://www.pengutronix.de/software/libsocketcan/download/ 筆者下載的是libsocketcan 0.0.9。
        (3)解壓libsocketcan-0.0.9.tar.bz2。執行configure命令。(其中--host是指定交叉工具鏈,--prefix是指定庫的生成位置)
        ./configure --host=arm-none-linux-gnueabi --prefix=/home/linux/workdir/can/tools/libsocketcan
        (4)執行make編譯庫;
        (5)執行make install 生成庫。至此,libsocketcan編譯完畢。
        (6)解壓canutils-4.0.6.tar.bz2,執行configure命令。(其中--host是指定交叉工具鏈,-- prefix是指定庫的生成位置,libsocketcan_LIBS是指定canconfig需要鏈接的庫,LDFLAGS是指定外部庫的路 徑,CPPFLAGS是指定外部頭文件的路徑)
        ./configure --host=arm-none-linux-gnueabi --prefix=/home/linux/workdir/can/tools/canutils libsocketcan_LIBS=-lsocketcan LDFLAGS=-L/home/linux/workdir/can/tools/socketcan/lib CPPFLAGS=-I/home/linux/workdir/can/tools/socketcan/include
        (7)修改完成執行make命令,生成四個目錄,分別拷貝到開發板文件系統的相應目錄。
        (8)使用canutils工具。(可以使用[命令 + --help]的方式來查看命令的詳細用法,下面只介紹一些常用的指令)

① 配置CAN的總線通訊波特率:
        canconfig canX bitrate + 波特率

Column596-7.jpg

圖7  使用canutils 工具設置CAN總線波特率

② 開啟 / 重啟 / 關閉CAN總線
        canconfig canX start
        canconfig canX restart
        canconfig canX stop

Column596-8.jpg

圖8  設置CAN總線狀態

③ 查看CAN總線狀態
        canecho canX

Column596-9.jpg

圖9  查看CAN總線狀態

④ 發送信息
        cansend canX –-identifier=ID + 數據

Column596-10.jpg

圖10  CAN總線發送數據

⑤ 接收數據
        candump canX

Column596-11.jpg

圖11  CAN總線接收數據

⑥ 使用濾波器接收ID匹配的數據
        candump canX –-filter=ID:mask

Column596-12.jpg

圖12  CAN總線使用濾波器接收匹配數據

7.總結

至此,使用Socket方式的MCP2515 CAN總線驅動設計的就介紹完了,用戶可以使用Socket套接字的方式,參照canutils的源碼設計自己的應用程序。


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
久久精品亚洲一区| 日韩一级在线| 亚洲日本欧美| 韩国一区二区三区在线观看| 国产精品视频久久久| 欧美日韩一区国产| 欧美另类一区二区三区| 你懂的成人av| 美女精品视频一区| 久久精品国产亚洲高清剧情介绍| 亚洲中无吗在线| 亚洲一区二区三区四区五区黄| 日韩亚洲精品视频| 日韩视频在线一区| 亚洲美女免费精品视频在线观看| 亚洲国产免费| 亚洲经典视频在线观看| 亚洲国产高清在线| 亚洲国产精品悠悠久久琪琪| 亚洲电影视频在线| 亚洲一区二区三区久久| 亚洲一区二区动漫| 亚洲先锋成人| 午夜国产精品视频| 午夜视频一区二区| 午夜精品一区二区三区在线视| 国产日韩一区二区三区在线播放 | 欧美视频久久| 欧美日韩亚洲高清一区二区| 欧美日韩爆操| 欧美三级特黄| 国产精品美女久久久久久免费| 国产精品成人一区二区网站软件 | 国产精品私拍pans大尺度在线 | 亚洲免费在线| 欧美一区日韩一区| 亚洲激情一区二区三区| 亚洲美洲欧洲综合国产一区| 一本一本a久久| 欧美亚洲日本国产| 卡通动漫国产精品| 欧美日韩在线综合| 国产日本欧美视频| 亚洲第一在线| 亚洲视频999| 午夜久久福利| 亚洲人成在线观看| 亚洲综合欧美| 久久综合九色欧美综合狠狠| 欧美日韩国产综合久久| 国产模特精品视频久久久久 | 亚洲成人在线网站| 亚洲精一区二区三区| 亚洲男人的天堂在线观看| 久久精品亚洲| 宅男噜噜噜66一区二区66| 欧美伊人久久大香线蕉综合69| 久久综合色88| 国产精品福利久久久| 国内精品嫩模av私拍在线观看| 在线免费观看视频一区| 一本久久综合亚洲鲁鲁| 午夜欧美不卡精品aaaaa| 亚洲韩国精品一区| 亚洲无玛一区| 性久久久久久| 欧美激情精品久久久久久黑人| 欧美日韩中文字幕日韩欧美| 欧美激情区在线播放| 国产精品日韩欧美| 一区二区三区在线观看欧美| 欧美亚一区二区| 欧美影视一区| 在线中文字幕日韩| 久久都是精品| 免费在线一区二区| 国产乱码精品| 亚洲国产日韩美| 这里只有视频精品| 久久av免费一区| 亚洲另类春色国产| 亚洲欧美综合| 免费成人av在线看| 国产精品成人观看视频免费| 久久综合激情| 欧美体内谢she精2性欧美| 国产欧美日韩视频| 1769国内精品视频在线播放| 亚洲私人影院| 亚洲国产精品va在线看黑人| 一级日韩一区在线观看| 久久国产精品久久久久久久久久 | 国产欧美日韩麻豆91| 亚洲国产精品一区二区www| 亚洲性视频网址| 亚洲国产精品久久久| 亚洲一区二区三区四区视频| 老司机凹凸av亚洲导航| 欧美日本一区二区视频在线观看 | 久久精品欧美| 国产精品色婷婷久久58| 亚洲国产精品va在线观看黑人| 亚洲社区在线观看| 亚洲精品一区二区网址 | 亚洲男女自偷自拍| 欧美激情1区2区3区| 国产亚洲欧洲| 在线亚洲精品福利网址导航| 亚洲欧洲另类国产综合| 欧美一区二区三区喷汁尤物| 欧美国产乱视频| 国产亚洲福利一区| 亚洲视频免费在线| 999亚洲国产精| 久久综合色8888| 国产欧美日韩不卡免费| a91a精品视频在线观看| 性欧美在线看片a免费观看| 性欧美精品高清| 欧美日韩亚洲一区二区三区四区 | 久久久久.com| 欧美福利视频在线观看| 国产视频综合在线| 在线一区二区三区四区五区| 亚洲乱码精品一二三四区日韩在线| 欧美一区二视频| 欧美日韩一级片在线观看| 亚洲国产一二三| 亚洲国产第一页| 久久久久久久尹人综合网亚洲 | 欧美精品一区二区蜜臀亚洲| 亚洲国产精品999| 久久精品99久久香蕉国产色戒| 香蕉乱码成人久久天堂爱免费| 欧美日本国产精品| 亚洲国产精品久久久久秋霞不卡| 久久精品国产免费观看| 欧美中文在线观看国产| 国产精品vip| 日韩一区二区福利| 在线亚洲伦理| 欧美视频官网| 99精品国产在热久久婷婷| 日韩一级精品| 欧美激情综合五月色丁香| 亚洲电影av在线| 亚洲日本免费电影| 欧美国产视频在线| 精品电影在线观看| 日韩亚洲欧美精品| 欧美激情综合五月色丁香小说| 亚洲人成绝费网站色www| 亚洲精品午夜精品| 欧美精品首页| 99精品国产一区二区青青牛奶| 中日韩美女免费视频网站在线观看 | 亚洲国产一成人久久精品| 免费看精品久久片| 亚洲高清久久| 日韩视频免费观看高清在线视频| 欧美激情精品久久久| 亚洲精品裸体| 亚洲精品久久久久久久久久久 | 国产精品日韩在线播放| 亚洲一区二区在线免费观看视频 | 欧美激情一区二区三区在线| 亚洲三级国产| 亚洲影院污污.| 欧美日韩一区高清| 欧美在线|欧美| 欧美**人妖| 亚洲看片网站| 亚洲综合日韩| 国产亚洲欧美一区二区| 亚洲激情婷婷| 欧美激情综合亚洲一二区| 亚洲综合电影| 久久欧美中文字幕| 91久久精品一区二区别| 亚洲淫性视频| 国产一区视频观看| 亚洲精品国产精品国产自| 欧美精品在线观看| 久久国产精品网站| 欧美人成网站| 亚洲女人av| 欧美有码在线视频| 久久久精品欧美丰满| 一区二区在线视频| 亚洲午夜国产一区99re久久| 国产日韩欧美麻豆| 亚洲日本黄色| 国产精品美女主播| 亚洲电影有码| 欧美色图天堂网| 亚洲一级高清| 欧美剧在线免费观看网站| 亚洲免费视频中文字幕| 免费视频久久| 亚洲一区二区三区在线播放|