女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

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

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

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

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


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


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

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



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



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

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


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

4 Android HAL層的調用
CAN驅動程序在

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

在現(xiàn)代工業(yè)和汽車領域,控制器局域網(CAN)總線作為一種可靠且高效的通信方式,廣泛應用于各種電子設備之間的數(shù)據(jù)傳輸。在 CAN 總線系統(tǒng)中,有一個看似毫不起眼卻至關重要的元件 ——120Ω 終端電阻。這個小小的電阻,對于...

關鍵字: 控制器局域網 總線 通信

其他電腦(比如安卓手機/平板電腦)的屏幕壞了,你可能想在安排維修之前緊急訪問一些東西。你可以使用android的USB OTG功能(是的,幾乎每個android都支持這個功能,你可以將鼠標和鍵盤連接到它)。

關鍵字: USB 鼠標 Android 樹莓派

在現(xiàn)代電子系統(tǒng)中,電源扮演著核心角色,如同人體的心臟,為整個系統(tǒng)穩(wěn)定運行提供不可或缺的動力支持。從日常生活中的智能設備,到復雜精密的工業(yè)控制系統(tǒng),再到關乎國計民生的航空航天、醫(yī)療等關鍵領域,電源的可靠性直接決定了系統(tǒng)的穩(wěn)...

關鍵字: 電源 設備 系統(tǒng)

為增進大家對CAN總線的認識,本文將對CAN總線協(xié)議以及CAN總線負載率的設置予以介紹。

關鍵字: CAN 指數(shù) 總線

為增進大家對CAN總線的認識,本文將對CAN總線的特征以及高低速CAN總線的特性予以介紹。

關鍵字: CAN 指數(shù) 總線

為增進大家對CAN總線的認識,本文將對CAN總線的工作原理、CAN總線和LIN總線的區(qū)別予以介紹。

關鍵字: CAN 指數(shù) 總線

在現(xiàn)代電子系統(tǒng)中,I2C(Inter-Integrated Circuit)總線憑借其簡單性和高效性,成為了芯片間通信的常用方式,廣泛應用于傳感器、存儲器、顯示驅動等多種設備的連接。然而,在實際應用過程中,I2C 總線通...

關鍵字: 芯片 總線 傳感器

光耦隔離:經典且應用廣泛光耦隔離利用光耦合器實現(xiàn)信號隔離與傳輸,其核心組件為發(fā)光二極管和光敏元件。輸入信號使發(fā)光二極管發(fā)光,光敏元件接收光信號后產生電信號,完成信號傳輸,同時實現(xiàn)輸入與輸出的電氣隔離。光耦隔離在 CAN...

關鍵字: 光耦隔離 磁耦隔離 總線

在工業(yè)自動化、汽車電子等領域,CAN(Controller Area Network)總線憑借其高可靠性、多主通信能力和良好的抗干擾性能,成為設備間數(shù)據(jù)傳輸?shù)氖走x。然而,在復雜的電磁環(huán)境中,CAN 總線易受各種干擾,導致...

關鍵字: CAN 總線 隔離

Google 宣布與中國 AR 科技公司 XREAL 達成深度戰(zhàn)略合作,聯(lián)合推出全球首款專為 Android XR 平臺打造的旗艦級 AR 眼鏡 Project Aura。

關鍵字: Google XREAL Android XR眼鏡 AR
關閉