www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 嵌入式操作系統(tǒng)Android下CAN驅(qū)動(dòng)程序的實(shí)現(xiàn),不但需要在Linux內(nèi)核中添加CAN驅(qū)動(dòng)設(shè)備,還要實(shí)現(xiàn)Android HAL層的調(diào)用。以S5PV 210微處理器與CAN總線控制器MCP2515為例,分析了Android設(shè)備驅(qū)動(dòng)原理,以及

嵌入式操作系統(tǒng)Android下CAN驅(qū)動(dòng)程序的實(shí)現(xiàn),不但需要在Linux內(nèi)核中添加CAN驅(qū)動(dòng)設(shè)備,還要實(shí)現(xiàn)Android HAL層的調(diào)用。以S5PV 210微處理器與CAN總線控制器MCP2515為例,分析了Android設(shè)備驅(qū)動(dòng)原理,以及Android下CAN設(shè)備驅(qū)動(dòng)程序的開發(fā)流程和方法,設(shè)計(jì)了相關(guān)的重要數(shù)據(jù)結(jié)構(gòu)和代碼,實(shí)現(xiàn)了CAN總線的驅(qū)動(dòng)程序開發(fā)。

Android是指“機(jī)器人”,由Google公司于2007年11月5日發(fā)布的基于Linux平臺(tái)的開源手機(jī)操作系統(tǒng),是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件。Android是一個(gè)開放平臺(tái),在嵌入式移動(dòng)設(shè)備領(lǐng)域里具有良好的應(yīng)用前景,但在不同的設(shè)備上往往有不同的硬件支持,要在Android中添加這些硬件應(yīng)用,不是單純地在Linux內(nèi)核中添加驅(qū)動(dòng)模塊,還必須在用戶空間和應(yīng)用框架中添加對(duì)應(yīng)的支持。
控制器局域網(wǎng)絡(luò)(Control Area Network,CAN),屬于現(xiàn)場(chǎng)總線的范疇,是德國Bosch公司在20世紀(jì)80年代初,為解決現(xiàn)代汽車中眾多的控制與測(cè)試儀器之間的數(shù)據(jù)交換而開發(fā)的一種串行數(shù)據(jù)通信總線。由于CAN總線的數(shù)據(jù)通信具有良好的可靠性、實(shí)時(shí)性和靈活性,CAN已經(jīng)在汽車工業(yè)、航空工業(yè)、工業(yè)控制等領(lǐng)域中得到了廣泛應(yīng)用。文中以S5PV210微處理器為硬件平臺(tái),通過擴(kuò)展其SPI接口,實(shí)現(xiàn)了CAN控制器MCP 2515在Android操作系統(tǒng)下的驅(qū)動(dòng)程序開發(fā)。

1 系統(tǒng)硬件結(jié)構(gòu)
系統(tǒng)數(shù)據(jù)的收發(fā)都要通過CAN總線模塊,CAN總線模塊設(shè)計(jì)框圖如圖1所示,S5PV210通過SPI接口實(shí)現(xiàn)與MCP2515的連接,MCP2515的CAN輸入輸出引腳和CAN總線收發(fā)器MCP2551接在一起,構(gòu)成一個(gè)完整的CAN總線收發(fā)模塊。


1.1 S5PV210的SPI接口
接口協(xié)議(Setial Peripheral Interface,SPI)是Motorola公司推出的一種使用時(shí)鐘線和2根數(shù)據(jù)線傳輸數(shù)據(jù)的同步串行協(xié)議,即串行外設(shè)接口。S5PV210提供的SPI接口主要用于S5PV210與外圍低速器件之間進(jìn)行同步串行數(shù)據(jù)傳輸,可以實(shí)現(xiàn)全雙工通信,傳輸速度最高可達(dá)5 Mbit·s-1。SPI總線接口主要用于主從分布式的通信網(wǎng)絡(luò),由4根線即可完成主從之間的數(shù)據(jù)通信,這4根線分別為:時(shí)鐘線(SCLK)、數(shù)據(jù)輸入線(SI)、數(shù)據(jù)輸出線(SO)和片選線(CS),其中CS的有效與否完全由主控制器決定,時(shí)鐘信號(hào)也由主控制器發(fā)出。
1.2 CAN控制器MCP2515
MCP2515是MICroChip生產(chǎn)的一款獨(dú)立CAN協(xié)議控制器。MCP2515支持CAN1.2、CAN2.0A、主動(dòng)和被動(dòng)CAN2.0B等版本的協(xié)議,能夠發(fā)送和接收標(biāo)準(zhǔn)和擴(kuò)展報(bào)文,它還同時(shí)具備驗(yàn)收過濾以及報(bào)文管理功能。圖2為MCP2515的結(jié)構(gòu)框圖。該器件主要由3個(gè)部分組成:(1)CAN協(xié)議引擎。(2)為器件及其運(yùn)行進(jìn)行配置的控制邏輯和SRAM寄存器。(3)SPI協(xié)議模塊。


1.3 CAN收發(fā)器MCP2551
MCP2551是一個(gè)可容錯(cuò)的高速CAN器件,可作為CAN協(xié)議控制器和物理總線接口。MCP2551可為CAN協(xié)議控制器提供差分收發(fā)能力,它完全符合ISO—11898標(biāo)準(zhǔn),且滿足24 V電壓要求。它的工作速率達(dá)1 Mbit·s-1。

2CAN總線驅(qū)動(dòng)程序的設(shè)計(jì)
2.1 Android操作系統(tǒng)驅(qū)動(dòng)原理
Android雖然使用了Linux內(nèi)核,但應(yīng)用程序是用Java語言開發(fā)的,所以應(yīng)用程序在調(diào)用設(shè)備驅(qū)動(dòng)不能像Linux應(yīng)用程序那樣使用系統(tǒng)調(diào)用,必須用Java虛擬機(jī)的JNI的本地(Native)方法。另一方面,Android要成為一個(gè)通用性強(qiáng)的平臺(tái),必須加強(qiáng)它的可移植性,這也是在Andr oid架構(gòu)添加一個(gè)(HAL)硬件抽象層的原因,目的是為設(shè)備的調(diào)用提供一個(gè)更高級(jí)的封裝。圖3所示為Android驅(qū)動(dòng)程序的技術(shù)結(jié)構(gòu)。



HAL Stub以*.so庫的形式存在,在整個(gè)驅(qū)動(dòng)架構(gòu)中,它是驅(qū)動(dòng)運(yùn)行在用戶空間的一部分,它往上為Dalvik虛擬機(jī)提供硬件設(shè)備的抽象接口,往下通過系統(tǒng)調(diào)用與Linux內(nèi)核中的驅(qū)動(dòng)程序交互數(shù)據(jù),在這個(gè)過程中HAL可以對(duì)驅(qū)動(dòng)程序的數(shù)據(jù)進(jìn)行處理,即在Linux內(nèi)核中的驅(qū)動(dòng)程序只需提供一個(gè)與硬件設(shè)備傳輸數(shù)據(jù)的功能,而具體的操作可以由HAL完成。Android下CAN總線驅(qū)動(dòng)程序的實(shí)現(xiàn),不但要在Linux內(nèi)核中添加CAN驅(qū)動(dòng)模塊,還必須在用戶空間和應(yīng)用框架中添加對(duì)應(yīng)的支持。
2.2 CAN驅(qū)動(dòng)程序?qū)崿F(xiàn)流程
主控制器S5PV210通過其自身的SPI接口實(shí)現(xiàn)與MCP2515的連接,若要使平臺(tái)正常工作,軟件的實(shí)現(xiàn)是必需的。首先要確保S5PV210的SPI口可以正常收發(fā)數(shù)據(jù),然后利用SPI口對(duì)MCP2515的寄存器進(jìn)行設(shè)置。CAN驅(qū)動(dòng)程序流程圖如圖4所示,第一步是實(shí)現(xiàn)S5PV210的SPI總線的加載和聲明;第二步是Linuxkernel中CAN驅(qū)動(dòng)的實(shí)現(xiàn),包括MCP2515的初始化、MCP2515的讀寫、CAN驅(qū)動(dòng)的加載。第三步是Android HAL層的調(diào)用。



3 CAN總線驅(qū)動(dòng)程序的實(shí)現(xiàn)
3.1 SPI總線加載和聲明
系統(tǒng)的CAN總線設(shè)備通過S5PV210的SPI總線連接,因此,需要設(shè)計(jì)SPI線驅(qū)動(dòng)完成數(shù)據(jù)接收與發(fā)送。關(guān)于SPI總線驅(qū)動(dòng)在Linux內(nèi)核中已有良好的支持,加載并聲明SPI總線就可以直接使用。Linux內(nèi)核使用包裝后的抽象設(shè)備驅(qū)動(dòng)spi_driver,間接與原始設(shè)備驅(qū)動(dòng)建立聯(lián)系,并最終通過調(diào)用driver_register來注冊(cè)原始設(shè)備驅(qū)動(dòng),即只需要在內(nèi)核提供的spi_driver上修改調(diào)試,大幅提高了程序效率和可移植性。
這樣在結(jié)構(gòu)體mop2515_driver里完成了對(duì)MCP2515驅(qū)動(dòng)函數(shù)probe,remove的賦值。然后就可以通過SPI對(duì)MCP2515的寄存器進(jìn)行設(shè)置來實(shí)現(xiàn)CAN總線驅(qū)動(dòng)程序。

3.2 Linux中CAN驅(qū)動(dòng)程序?qū)崿F(xiàn)
針對(duì)MCP2515控制器,在Linux kernel設(shè)計(jì)中采用字符設(shè)備驅(qū)動(dòng)開發(fā)的形式。驅(qū)動(dòng)初始化函數(shù)statICint_init MCP2515_init(),首先通過ioremap()函數(shù)將S5PV210的SPI寄存器的物理地址映射到內(nèi)核空間,這樣才可以在驅(qū)動(dòng)程序中訪問和配置S5PV210的SPI寄存器。在正確配置S5PV210的SPI寄存器后,通過register_chrdev()函數(shù)為MCP2515注冊(cè)設(shè)備驅(qū)動(dòng),分配主設(shè)備號(hào),這樣在設(shè)備文件目錄中創(chuàng)建對(duì)應(yīng)的設(shè)備文件后,就可以用Linux的系統(tǒng)函數(shù)操作MCP2515了。而分配內(nèi)存部分放在probe()函數(shù)中完成,分配空間包括為設(shè)備數(shù)據(jù)結(jié)構(gòu)以及其內(nèi)部的接收發(fā)送緩沖區(qū)動(dòng)態(tài)分配空間。同時(shí)在probe()還需要完成申請(qǐng)中斷工作,并初始化中斷處理隊(duì)列,在中斷處理隊(duì)列中讀取CANINTF寄存器,判斷是接收/發(fā)送中斷的哪一個(gè)緩沖器,或者說是錯(cuò)誤中斷最后通過enable_IRQ()函數(shù)使能S5PV210相應(yīng)的中斷引腳。
(1)MCP2515初始化。在實(shí)現(xiàn)了SPI的加載和聲明后,就可以利用SPI寫命令對(duì)MCP2515進(jìn)行初始化。MCP2515的初始化過程為:首先將CAN控制寄存器CANCTRL的REQOP<2:0>位設(shè)置為‘100’進(jìn)入配置模式,所有錯(cuò)誤計(jì)數(shù)器被清零,進(jìn)入配置模式后設(shè)置波特率,禁止所有中斷,設(shè)置濾波器,清除發(fā)送接收緩存,打開中斷,完成MCP2515的初始化。MCP2515初始化過程如圖5所示。


(2)MCP2515中斷方式。由于CAN總線接收數(shù)據(jù)時(shí)必須與系統(tǒng)以中斷方式交換數(shù)據(jù),所以必須注冊(cè)中斷。使用的中斷函數(shù)有request_irq(),free_irq(),enable_irq()和dISAble_irq(),其中函數(shù)request_irq()是給定的中斷源裝載中斷處理程序;enable_irq()調(diào)用中斷控制函數(shù)使給定的中斷鏈有效;free_irq()釋放分配給已定中斷的內(nèi)存;disable_irq()使定義中斷鏈?zhǔn)А>唧w代碼為request_irq(irq_EINTO mcp2515_int,IRQF_DISABLED,device_name,NULL);其中函數(shù)request_irq()的第1個(gè)參數(shù)是設(shè)備申請(qǐng)的中斷號(hào);第2個(gè)參數(shù)是向系統(tǒng)注冊(cè)的中斷處理函數(shù);第3個(gè)參數(shù)是中斷處理的屬性,IRQF_DISABLED表示中斷處理程序是一個(gè)快速中斷處理程序,被調(diào)用時(shí)屏蔽所有中斷;第4個(gè)參數(shù)是中斷的設(shè)備名稱;第5個(gè)參數(shù)是申請(qǐng)時(shí)通知系統(tǒng)的設(shè)備標(biāo)志,該函數(shù)返回值為0表示申請(qǐng)成功,返回負(fù)數(shù)表示失敗,這樣當(dāng)中斷發(fā)生時(shí),在中斷處理函數(shù)mcp2515_int()中讀取CAN狀態(tài)寄存器CANSTAT,判斷RXB0是否裝入報(bào)文,如果是則把報(bào)文通過SPI接收數(shù)據(jù)寄存器讀取到buff er中,等待系統(tǒng)函數(shù)CAN_Read()讀取。
(3)MCP2515驅(qū)動(dòng)程序的核心文件結(jié)構(gòu)file_operations。CAN總線應(yīng)用程序通過file_operations數(shù)據(jù)結(jié)構(gòu)訪問CAN設(shè)備驅(qū)動(dòng)函數(shù),</kem el/linux/fs.h>對(duì)file_operations數(shù)據(jù)結(jié)構(gòu)中的各個(gè)變量做了詳解。內(nèi)核可以通過文件結(jié)構(gòu)來訪問驅(qū)動(dòng)程序的函數(shù),實(shí)現(xiàn)系統(tǒng)調(diào)用。
CAN應(yīng)用程序可以通過系統(tǒng)函數(shù)read()和write()實(shí)現(xiàn)讀取和寫入相應(yīng)的數(shù)據(jù),open()函數(shù)中完成設(shè)備的打開,close()函數(shù)中完成注銷設(shè)備的工作,ioctl()函數(shù)中需要完成MCP2515控制器的初始化工作:設(shè)置控制器的工作模式、設(shè)置控制總線的波特率、清空發(fā)送緩沖區(qū)和接收緩沖區(qū)等。
3.3 CAN驅(qū)動(dòng)編譯
(1)將寫好的驅(qū)動(dòng)源文件拷貝到/kernel/drivers/char/下,并打開Kconfig添加如下代碼:
config S5pv210_CAN
tristate“S5pv210 can controller driver”
depends on ARCH_S5pv210
help
This option enable support for CAN
(2)在/kernel/drivers/char/Makefile文件的適當(dāng)位置添加如下代碼:
obj-$(CONFIG_S5pv210_CAN)+=S5pv210-can.o
(3)添加can功能。在/kernel/下make menuconfig DeviceDrivers→Characterdevices→S5pv210 cancontroller driver動(dòng)態(tài)加載CAN驅(qū)動(dòng)并保存退出。
(4)重新編譯內(nèi)核。在終端進(jìn)入/kernel/目錄,執(zhí)行make命令后在/kernel/drivers/char/下找到S5pv210_can.o,此為Linux kernel層生成的CAN設(shè)備驅(qū)動(dòng)文件,kernel層驅(qū)動(dòng)向下直接操作硬件,向上層也就是HAL層,提供/dev/can設(shè)備節(jié)點(diǎn)文件,提供驅(qū)動(dòng)接口uncLOCked_ioctl()函數(shù)。

4 Android HAL層的調(diào)用
CAN驅(qū)動(dò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日 /美通社/ -- 英國汽車技術(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日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(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中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

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

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

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

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

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

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(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年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

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