當(dāng)前位置首頁(yè) > 計(jì)算機(jī) > 嵌入式開發(fā)
搜柄,搜必應(yīng)! 快速導(dǎo)航 | 使用教程

嵌入式Linux設(shè)備驅(qū)動(dòng)程序開發(fā)ppt課件

文檔格式:PPT| 58 頁(yè)|大小 577.73KB|積分 20|2024-12-01 發(fā)布|文檔ID:253203481
第1頁(yè)
第2頁(yè)
第3頁(yè)
下載文檔到電腦,查找使用更方便 還剩頁(yè)未讀,繼續(xù)閱讀>>
1 / 58
此文檔下載收益歸作者所有 下載文檔
  • 版權(quán)提示
  • 文本預(yù)覽
  • 常見問題
  • 第一講 嵌入式系統(tǒng)概述,電信學(xué)院 崔寅鳴,Mobile: 13602731383,E-mail: ymcui@,嵌入式Linux設(shè)備驅(qū)動(dòng)程序開發(fā),電子信息工程學(xué)院 楊昕欣,嵌入式Linux設(shè)備驅(qū)動(dòng)程序開發(fā)電子信息工程學(xué)院 楊昕欣,本講主要內(nèi)容,交叉編譯環(huán)境,Makefile,簡(jiǎn)介,設(shè)備驅(qū)動(dòng)相關(guān)概念,設(shè)備驅(qū)動(dòng)程序的開發(fā)流程,I2C,驅(qū)動(dòng)程序?qū)嵗?,,,本講主要內(nèi)容交叉編譯環(huán)境,交叉編譯環(huán)境,嵌入式系統(tǒng)的開發(fā)需要宿主機(jī)(Host pc),因?yàn)榍度胧较到y(tǒng)一般沒有大容量的存儲(chǔ)設(shè)備由于host pc的處理器與嵌入式微處理器通常不同,為了生成能夠在嵌入式系統(tǒng)中運(yùn)行的代碼,需要進(jìn)行交叉編譯交叉編譯:在宿主機(jī)上編譯可以在目標(biāo)系統(tǒng)上運(yùn)行的二進(jìn)制文件交叉編譯環(huán)境嵌入式系統(tǒng)的開發(fā)需要宿主機(jī)(Host pc),因,交叉編譯環(huán)境,一般包括:,Gcc,編譯器,,for c,c++,Binutil,,一些輔助工具,包括,objdump(,可反編譯二進(jìn)制文件)、,as(,匯編器)、,ld(,鏈接器)等,Glibc,,提供系統(tǒng)調(diào)用和基本函數(shù)的,c,庫(kù),C header,Gdb,調(diào)試器,交叉編譯環(huán)境一般包括:,交叉編譯環(huán)境的建立,以,root,用戶登陸,linux,系統(tǒng),將,/usr/local,目錄備份,然后清空,將,BSP0.3.6/Toolchain/,中的,armLinuxXToolChain01.tar.gz,glibc2.1.3.tar.gz,inst_glibc2.1.3,ftp,上傳到,/usr/local,執(zhí)行,# tar xvfz armLinuxXToolChain01.tar.gz,# tar xvfz glibc2.1.3.tar.gz,# rm -rf arm-elf-linux/lib,# cp -R arm/gnu/release/arm-linux/lib arm-elf-linux/,交叉編譯環(huán)境的建立以root用戶登陸linux系統(tǒng),嵌入式Linux一般調(diào)試方法,使用,Gdbserver,和,gdb,在目標(biāo)系統(tǒng)上運(yùn)行,gdbserver,在主機(jī)上運(yùn)行,gdb,一般通過以太網(wǎng)建立連接,嵌入式Linux一般調(diào)試方法使用Gdbserver和gdb,Makefile簡(jiǎn)介,Linux,開發(fā)一般有大量源代碼,為了避免大量重復(fù)的鍵入,gcc,進(jìn)行編譯,定義了,Makefile,文件,用于自動(dòng)編譯,#,make,該操作會(huì)調(diào)用,Makefile,Makefile,一般定義了:,Gcc,編譯工具,編譯命令,目標(biāo)文件,依賴關(guān)系,,Makefile簡(jiǎn)介L(zhǎng)inux開發(fā)一般有大量源代碼,為了避免,Makefile簡(jiǎn)介,例,:,test.o: test.c test.h,gcc -c -g test.c,,-g,生成調(diào)試信息,-,c,只編譯不鏈接成為可執(zhí)行文件,-,o,確定輸出文件名稱,-,O,優(yōu)化,-,w,禁止警告信息,-,Wall,打開所有類型警告信息,,Makefile簡(jiǎn)介例:,Makefile變量,makefile,變量-,預(yù)定義變量,$* 不包含擴(kuò)展名的目標(biāo)文件名,$+ 所有的依賴文件,以空格分開,并以出現(xiàn)的先后為序,可能包含重復(fù)的依賴文件。

    < 第一個(gè)依賴文件的名稱,$? 所有的依賴文件,以空格分開,這些依賴文件的修改日期比目標(biāo)的創(chuàng)建日期晚@ 目標(biāo)的完整名稱^ 所有的依賴文件,以空格分開,不包含重復(fù)的依賴文件Makefile變量makefile 變量-預(yù)定義變量,簡(jiǎn)單Make指令說明,# Make clean ——,清除編譯過程的中間文件,# make dep ——,設(shè)置,Makefile,文件中各個(gè)目標(biāo)所依賴的文件列表,簡(jiǎn)單Make指令說明# Make clean ——清除編譯,使用Makefile方法,嵌入式,Linux,中,Makefile,更加復(fù)雜,可在已有,Makefile,文件基礎(chǔ)上更改,使用Makefile方法嵌入式Linux中Makefile更,Linux系統(tǒng)中的設(shè)備文件,Linux,將所有外部設(shè)備看成是一類特殊文件,稱之為“設(shè)備文件”,如果說系統(tǒng)調(diào)用是,Linux,內(nèi)核和應(yīng)用程序之間的接口,那么設(shè)備驅(qū)動(dòng)程序則可以看成是,Linux,內(nèi)核與外部設(shè)備之間的接口設(shè)備驅(qū)動(dòng)程序向應(yīng)用程序屏蔽了硬件在實(shí)現(xiàn)上的細(xì)節(jié),使得應(yīng)用程序可以像操作普通文件一樣來操作外部設(shè)備,,Linux系統(tǒng)中的設(shè)備文件Linux將所有外部設(shè)備看成是一類,設(shè)備驅(qū)動(dòng)程序是內(nèi)核重要部分,系統(tǒng)調(diào)用接口,文件子系統(tǒng),I/o,設(shè)備,字符、塊設(shè)備,,設(shè)備驅(qū)動(dòng)程序,進(jìn)程間通信,進(jìn)程控制,,進(jìn)程調(diào)度,,內(nèi)存管理,硬件控制程序,內(nèi)核簡(jiǎn)略結(jié)構(gòu):,設(shè)備驅(qū)動(dòng)程序是內(nèi)核重要部分系統(tǒng)調(diào)用接口文件子系統(tǒng)I/o設(shè)備字,設(shè)備驅(qū)動(dòng)的大致結(jié)構(gòu),設(shè)備驅(qū)動(dòng)的大致結(jié)構(gòu),設(shè)備驅(qū)動(dòng)的作用,設(shè)備驅(qū)動(dòng)是位于應(yīng)用和物理設(shè)備之間的軟件層,負(fù)責(zé)完成二者間的,I/O,操作;,在,LINUX,系統(tǒng)里,對(duì)用戶程序,設(shè)備驅(qū)動(dòng)隱藏了設(shè)備的具體細(xì)節(jié),為不同設(shè)備提供了一致的接口;,設(shè)備驅(qū)動(dòng)是嵌入式系統(tǒng)開發(fā)的重要內(nèi)容之一,設(shè)備驅(qū)動(dòng)的作用設(shè)備驅(qū)動(dòng)是位于應(yīng)用和物理設(shè)備之間的軟件層,負(fù)責(zé),設(shè)備驅(qū)動(dòng)完成的工作,對(duì)設(shè)備初始化和釋放,把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù),讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù),檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤,設(shè)備驅(qū)動(dòng)完成的工作對(duì)設(shè)備初始化和釋放,設(shè)備文件類型,通常有字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備三種,字符設(shè)備,字符設(shè)備是能夠像字節(jié)流一樣被訪問的設(shè)備,例如字符終端、串口、鍵盤、聲卡、,LCD、,觸摸屏、掃描儀、打印機(jī)、并口、鼠標(biāo)、游戲桿等。

    塊設(shè)備,塊設(shè)備是指支持面向塊訪問的設(shè)備,每塊包含2的,N,次冪字節(jié)數(shù)據(jù),例如,IDE,設(shè)備(磁盤)、,floppy disk 、CD-ROM、Ramdisk,等塊設(shè)備接口必須支持掛裝文件系統(tǒng)網(wǎng)絡(luò)設(shè)備——即能夠和其他主機(jī)交換數(shù)據(jù)的設(shè)備接口設(shè)備文件類型通常有字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備三種,主設(shè)備號(hào)與次設(shè)備號(hào),LINUX,系統(tǒng)中,設(shè)備由一個(gè)主設(shè)備號(hào)和一個(gè)次設(shè)備號(hào)來標(biāo)識(shí);,主設(shè)備號(hào)唯一標(biāo)識(shí)了設(shè)備類型,即設(shè)備驅(qū)動(dòng)程序類型,它是塊設(shè)備表或字符設(shè)備表中設(shè)備表項(xiàng)的索引次設(shè)備號(hào)僅由設(shè)備驅(qū)動(dòng)程序解釋,一般用于識(shí)別在若干可能的硬件設(shè)備中,,I/O,請(qǐng)求所涉及到的那個(gè)設(shè)備主設(shè)備號(hào)與次設(shè)備號(hào)LINUX系統(tǒng)中,設(shè)備由一個(gè)主設(shè)備號(hào)和一個(gè),主設(shè)備號(hào)與次設(shè)備號(hào),主設(shè)備號(hào)(Major Number)相同的設(shè)備使用相同的驅(qū)動(dòng)程序,而次設(shè)備號(hào)(minor Number)用來區(qū)分該類型不同的設(shè)備實(shí)例主設(shè)備號(hào)與次設(shè)備號(hào)主設(shè)備號(hào)(Major Number)相同的,內(nèi)核設(shè)備驅(qū)動(dòng)模塊,設(shè)備驅(qū)動(dòng)程序以兩種方式添加到內(nèi)核:,Build in,直接把驅(qū)動(dòng)程序編譯到內(nèi)核代碼中,Module,以模塊的方式加載驅(qū)動(dòng)程序,內(nèi)核設(shè)備驅(qū)動(dòng)模塊設(shè)備驅(qū)動(dòng)程序以兩種方式添加到內(nèi)核:,Linux設(shè)備節(jié)點(diǎn)的添加,設(shè)備在/,dev,路徑下,可用如下命令添加,dev,節(jié)點(diǎn),,b,代表塊設(shè)備,,C,表示字符設(shè)備,mknod /dev/hda1 b 127 1,,塊設(shè)備,主設(shè)備號(hào)127,次設(shè)備號(hào)1,Linux設(shè)備節(jié)點(diǎn)的添加設(shè)備在/dev路徑下,設(shè)備驅(qū)動(dòng)大致構(gòu)成,Linux,的設(shè)備驅(qū)動(dòng)程序大致可以分為如下幾個(gè)部分:驅(qū)動(dòng)程序的注冊(cè)與注銷、設(shè)備的打開與釋放、設(shè)備的讀寫操作、設(shè)備的控制操作、設(shè)備的中斷和輪詢處理,,設(shè)備驅(qū)動(dòng)大致構(gòu)成Linux的設(shè)備驅(qū)動(dòng)程序大致可以分為如下幾個(gè),設(shè)備驅(qū)動(dòng)構(gòu)成,設(shè)備驅(qū)動(dòng)構(gòu)成:,驅(qū)動(dòng)程序的注冊(cè)與注銷,register_chrdev( ),或者,register_blkdev( ),unregister_chrdev( ),或,unregister_blkdev( ),設(shè)備的打開與釋放,通過調(diào)用,file_operations,結(jié)構(gòu)中的函數(shù),open( ),file_operations,結(jié)構(gòu)中的函數(shù),release( ),設(shè)備驅(qū)動(dòng)構(gòu)成設(shè)備驅(qū)動(dòng)構(gòu)成:,設(shè)備驅(qū)動(dòng)構(gòu)成,設(shè)備的讀寫操作,Read(),Write(),設(shè)備的控制操作,ioctl( ),設(shè)備的中斷和輪詢處理,對(duì)于不支持中斷的硬件設(shè)備,讀寫時(shí)需要輪流查詢?cè)O(shè)備狀態(tài),以便決定是否繼續(xù)進(jìn)行數(shù)據(jù)傳輸。

    如果設(shè)備支持中斷,則可以按中斷方式進(jìn)行操作,,設(shè)備驅(qū)動(dòng)構(gòu)成設(shè)備的讀寫操作,模塊化的字符設(shè)備驅(qū)動(dòng)程序框架,int init_module(void),{,,硬件初始化;,注冊(cè)設(shè)備;,注冊(cè)中斷;,},void cleanup_module(void),{,,釋放中斷資源;,釋放該設(shè)備;,釋放其他的系統(tǒng)資源;,},模塊化的字符設(shè)備驅(qū)動(dòng)程序框架int init_module(,file_operations,結(jié)構(gòu),struct file_operations driver_fops = {,open: driver_open,,release: driver_release,,read: driver_read,,write: driver_write,,poll: driver_poll,,ioctl: driver_ioctl,,fasync: driver_fasync, };,file_operations結(jié)構(gòu)struct file_o,file_operations,結(jié)構(gòu),open:,用于打開文件設(shè)備,release:,在關(guān)閉文件的調(diào)用,read:,用于從設(shè)備中讀取數(shù)據(jù),write:,向設(shè)備發(fā)送數(shù)據(jù),poll:,查詢?cè)O(shè)備是否可讀或可寫,ioctl:,提供執(zhí)行設(shè)備特定命令的方法,fasync:,用于設(shè)備的異步通知操作,,file_operations結(jié)構(gòu)open: 用于打開文件設(shè),設(shè)備的注冊(cè)與注銷,,devfs,注冊(cè):,result =,devfs_register_chrdev,(0, MOD_NAME, ,//,申請(qǐng)主設(shè)備號(hào),,if ( result < 0 ) { return -ENODEV; },devfs_handle =,devfs_register,(NULL, MOD_NAME, ,result, 0,,,,該方法的優(yōu)點(diǎn):無需創(chuàng)建設(shè)備節(jié)點(diǎn),由系統(tǒng)自動(dòng)完成。

    設(shè)備的注冊(cè)與注銷,devfs注冊(cè):,設(shè)備的注冊(cè)與注銷,,devfs,注銷:,devfs_unregister_chrdev,(MAJOR, MOD_NAME);,devfs_unregister,(devfs_handle);,,,設(shè)備的注冊(cè)與注銷, devfs注銷:,設(shè)備的注冊(cè)與注銷,方法二,注冊(cè):,result =,register_chrdev,(0, MOD_NAME, ,if ( result < 0 ){ return -ENODEV; },mknod,/dev/ MOD_NAME, C, MAJOR,MINOR,注銷:,unregister_chrdev,(Major, MOD_NAME);,rm,/dev/ MOD_NAME,,設(shè)備的注冊(cè)與注銷,方法二注冊(cè):,中斷的申請(qǐng)與釋放,申請(qǐng):,request_irq,(irq , irq_handler, flag, dev_name, dev_id);,dev_id,用于共享中斷信號(hào)線釋放:,free_irq,(irq, dev_id);,,,中斷的申請(qǐng)與釋放申請(qǐng):,用戶空間與內(nèi)核空間的數(shù)據(jù)拷貝,方法一:,copy_to_user(void *to, const void *from,unsigned long count);,copy_from_user(void *to, const void *from,unsigned long count);,方法二:,_ _,copy_to_user(),_ _copy_from_user(),上述2種方法功能類似,區(qū)別在第一種方法會(huì)進(jìn)行用戶地址空間指針的有效性檢查。

    用戶空間與內(nèi)核空間的數(shù)據(jù)拷貝方法一:,設(shè)備驅(qū)動(dòng)模塊的安裝與卸載,安裝驅(qū)動(dòng)模塊,insmod driver_name.o,卸載驅(qū)動(dòng)模塊,rmmod driver_name,瀏覽系統(tǒng)中的模塊,lsmod,,設(shè)備驅(qū)動(dòng)模塊的安裝與卸載安裝驅(qū)動(dòng)模塊,驅(qū)動(dòng)程序?qū)嵗?---I,2,C,I2C,總線,用兩根線串接多個(gè)設(shè)備,支持多設(shè)備之間的隨機(jī)訪問,提供沖突檢測(cè)機(jī)制,實(shí)現(xiàn)對(duì)設(shè)備的管理,1992,年,1.0,版規(guī)定的快速模式的數(shù)據(jù)率達(dá)到,400Kbps,1998,年,2.0,版規(guī)定的高速模式數(shù)據(jù)率達(dá)到,3.4Mbps,,,驅(qū)動(dòng)程序?qū)嵗?--I2CI2C 總線,MC9328MX1 的I2C模塊特性,1.,符合,I2C,總線規(guī)范,2.,支持,3v/5v,兼容模式,3.,多重,Master,操作方式,4.,通過軟件編程,可支持,64,種不同的時(shí)鐘,5.,通過軟件控制應(yīng)答位的產(chǎn)生與否,6.,基于中斷的驅(qū)動(dòng)方式,逐字節(jié)傳輸數(shù)據(jù),7.,支持起始位和終止位的產(chǎn)生和探測(cè),8.,能夠產(chǎn)生重復(fù)起始位,9.,支持呼叫地址識(shí)別,10.,能夠獲知應(yīng)答位,11.,能夠獲知總線是否為“忙” 狀態(tài),MC9328MX1 的I2C模塊特性1.符合I2C總線規(guī)范,MC9328MX1 的I2C模塊結(jié)構(gòu),MC9328MX1 的I2C模塊結(jié)構(gòu),MC9328MX1 協(xié)議時(shí)序,起始信號(hào),當(dāng),SCL,為邏輯,1,時(shí),,SDA,由,1,到,0,的轉(zhuǎn)變表示了起始位,表示一次數(shù)據(jù)傳輸?shù)拈_始,并喚醒所有在,I2C,總線上的設(shè)備,數(shù)據(jù)源,/,目的地址,,Master,發(fā)出一個(gè),7,位的地址,即,Slave,設(shè)備的,I2C,總線地址,每個(gè),Slave,有一個(gè)唯一地址,這個(gè)地址不是,Master,的地址,數(shù)據(jù)傳輸方向位,表明是從,Slave,讀數(shù)據(jù)還是向,Slave,寫數(shù)據(jù),MC9328MX1 協(xié)議時(shí)序起始信號(hào),當(dāng)SCL為邏輯1時(shí),S,MC9328MX1 協(xié)議時(shí)序,D.,應(yīng)答位,被選址的,Slave,設(shè)備通過返回一個(gè)應(yīng)答位向,Master,告知其已經(jīng)接收到了數(shù)據(jù)。

    通過將,SDA,線在起始位之后第,9,個(gè)時(shí)鐘周期從邏輯,1,變?yōu)檫壿?0,來實(shí)現(xiàn)的此應(yīng)答位不受控制寄存器,I2CR,中,TXAK,或者狀態(tài)寄存器中,I2CSR,中,RXAK,的影響E.,數(shù)據(jù),,I2C,按照數(shù)據(jù)傳輸方向逐字節(jié)的完成數(shù)據(jù)傳輸在,SCL,時(shí)鐘周期的中,,SCL=0,時(shí)可以改變數(shù)據(jù),而,SCL=1,則必須保持?jǐn)?shù)據(jù)不變F.,應(yīng)答位,接收方接受到數(shù)據(jù)后將,SDA,線置,0,表示接收到數(shù)據(jù)的應(yīng)答信號(hào)在多字節(jié)傳輸中,如果不將,SDA,位置,0,,則表示所有數(shù)據(jù)已經(jīng)傳輸完成G.,終止位,表明一次數(shù)據(jù)傳輸?shù)慕Y(jié)束或,Master,設(shè)備中止通信SCL,為邏輯,1,時(shí),,SDA,從,0,到,1,的一次變化表示了中止位的發(fā)出H.,重復(fù)起始位,,Master,在結(jié)束位周期可以不發(fā)中止信號(hào),而重復(fù)發(fā)起始位信號(hào)如果起始位信號(hào)產(chǎn)生先于中止位信號(hào)的產(chǎn)生,稱為重復(fù)起始位這時(shí),Master,設(shè)備可以不釋放總線,而重新開始一次獨(dú)立的數(shù)據(jù)傳輸過程MC9328MX1 協(xié)議時(shí)序D.應(yīng)答位,被選址的Slave設(shè),MC9328MX1 I2C 寄存器,MC9328MX1 I2C 寄存器,MC9328MX1 I2C 寄存器,1.I2C,地址寄存器,IADR,,如果,MC9328,是,I2C,總線上的,Slave,設(shè)備,則此寄存器中存放相應(yīng)的地址。

    2.I2C,分頻寄存器,IFDR,,用來控制,I2C,總線的時(shí)鐘頻率,支持多達(dá),64,種的頻率,最快數(shù)據(jù)率為,400Kbps,3.I2C,控制寄存器,控制,I2C,的中斷,設(shè)置,Maser/Slave,模式、接收,/,傳輸模式、傳輸應(yīng)答使能等位等,4.I2C,狀態(tài)寄存器,I2CSR,,表明當(dāng)前,I2C,總線的狀態(tài),如有無中斷產(chǎn)生,是否接收到了應(yīng)答信號(hào),總線是否忙等,5.I2C,數(shù)據(jù),I/O,寄存器,I2DR,,存放需要發(fā)送的數(shù)據(jù)或接收到的數(shù)據(jù)在傳輸模式下,接收方發(fā)回的地址選中應(yīng)答位信號(hào),觸發(fā),I2C,模塊發(fā)送本寄存器中的數(shù)據(jù)在接收模式下,對(duì)該寄存器的讀操作可以觸發(fā)下一個(gè)數(shù)據(jù)傳輸過程MC9328MX1 I2C 寄存器1.I2C地址寄存器IAD,I2C 模塊初始化,1.設(shè)定頻率,2.如果工作在Slave模式,則將地址寫入IADR寄存器中,3.通過設(shè)置I2CR寄存器中的IEN位,使能I2C模塊4.修改I2CR中的模式位,選擇Master或Slave模式,傳輸或者接收模式,設(shè)置中斷使能位等,I2C 模塊初始化1.設(shè)定頻率,I2C 總線操作流程,1.模塊初始化,2.產(chǎn)生起始位,總線空閑,通過對(duì)I2DR寄存器的讀/寫來發(fā)出START信號(hào),3.數(shù)據(jù)傳輸,中斷方式,檢測(cè)ICF位來確定當(dāng)前字節(jié)是否被傳輸完,檢測(cè)IIF位檢測(cè)是否接收到一個(gè)字節(jié),輪詢方式,禁用中斷使能位,輪詢IIF位,查看是否完成傳輸,I2C 總線操作流程1.模塊初始化,I2C 總線操作流程,4.產(chǎn)生停止位,如果Master處于接收狀態(tài),接收來自Slave的數(shù)據(jù),如果Master要結(jié)束本次傳輸,必須保證不在最后一個(gè)數(shù)據(jù)字節(jié)傳輸完后的第9個(gè)SCL時(shí)鐘產(chǎn)生應(yīng)答信號(hào);,在讀取倒數(shù)第2個(gè)字節(jié)之前將I2CR寄存器的TXAK位置位來實(shí)現(xiàn);,在讀取最后一個(gè)字節(jié)之前必須產(chǎn)生一個(gè)中止位信號(hào)。

    I2C 總線操作流程4.產(chǎn)生停止位,I2C 總線操作流程,5.,產(chǎn)生重復(fù)起始位,如果,Master,要繼續(xù)占用總線,可以發(fā)出一個(gè)重復(fù)起始位,開啟一個(gè)新的數(shù)據(jù)傳輸,6.Slave,模式,檢測(cè),I2CSR,寄存器的,IAAS,位判斷是否被選中在,Slave,數(shù)據(jù)傳輸周期中,,IAAS=0,在定址周期通過,SRW,可以確定,Slave,是發(fā)送還是接受,并且要相應(yīng)設(shè)置,MTX,位在數(shù)據(jù)傳輸周期中,,IAAS=0,,,SRW,位無效釋放總線的方式:如果是,Slave,發(fā)送模式,則將,Slave,設(shè)置為接收模式,進(jìn)行一次啞讀操作如果是,Slave,接受模式,則將,Slave,設(shè)置為發(fā)送模式,進(jìn)行一次啞寫操作I2C 總線操作流程5.產(chǎn)生重復(fù)起始位,I2C 總線操作流程,7.仲裁淘汰,如果一個(gè)設(shè)備試圖占用總線而失敗,則該設(shè)備將被設(shè)為Slave模式,而且IAL被置位Slave程序首先要檢測(cè)IAL位以判斷,本設(shè)備進(jìn)入Slave狀態(tài)是否是由于仲裁淘汰引起的I2C 總線操作流程7.仲裁淘汰,嵌入式Linux設(shè)備驅(qū)動(dòng)程序開發(fā)ppt課件,I2C總線驅(qū)動(dòng)程序分析,1.I2C總線驅(qū)動(dòng)程序,實(shí)現(xiàn)I2C的時(shí)序,2.I2C設(shè)備驅(qū)動(dòng)程序,調(diào)用I2C總線驅(qū)動(dòng)提供的接口,實(shí)現(xiàn)對(duì)設(shè)備的操作;首先實(shí)現(xiàn)I2C總線驅(qū)動(dòng),對(duì)于每一個(gè)具體的I2C設(shè)備,需要單獨(dú)實(shí)現(xiàn)其驅(qū)動(dòng)。

    I2C總線驅(qū)動(dòng)程序分析1.I2C總線驅(qū)動(dòng)程序,I2C總線驅(qū)動(dòng)程序分析,1.,關(guān)鍵結(jié)構(gòu)體,: i2c_adapter,提供,I2C,總線驅(qū)動(dòng)接口的模版,對(duì)每一個(gè)具體的總線設(shè)備,要根據(jù)這個(gè)模版定義自己的相應(yīng)結(jié)構(gòu)體及接口,I2C總線驅(qū)動(dòng)程序分析1.關(guān)鍵結(jié)構(gòu)體: i2c_adapte,I2C總線驅(qū)動(dòng)程序分析,2.,關(guān)鍵結(jié)構(gòu)體,i2c_algorithm,定義訪問總線的函數(shù)接口,I2C總線驅(qū)動(dòng)程序分析2.關(guān)鍵結(jié)構(gòu)體 i2c_algorit,I2C總線驅(qū)動(dòng)程序分析,3.核心函數(shù):i2c_aa_init(void),I2C總線驅(qū)動(dòng)程序分析3.核心函數(shù):i2c_aa_init(,4.,關(guān)鍵函數(shù):,i2c_aa_xfer,4.關(guān)鍵函數(shù):i2c_aa_xfer,I2C總線驅(qū)動(dòng)程序分析,5.其他關(guān)鍵函數(shù):,i2c_aa_ioctl:,設(shè)置總線頻率,讀取總線狀態(tài),I2c_aa_cleanup:,釋放中斷,從設(shè)備列表數(shù)組中刪除當(dāng)前i2c設(shè)備,I2C總線驅(qū)動(dòng)程序分析5.其他關(guān)鍵函數(shù):,I2C設(shè)備驅(qū)動(dòng)程序分析,1.關(guān)鍵結(jié)構(gòu)體:i2c_client,,I2C設(shè)備驅(qū)動(dòng)程序分析1.關(guān)鍵結(jié)構(gòu)體:i2c_client,I2C設(shè)備驅(qū)動(dòng)程序分析,2.,關(guān)鍵結(jié)構(gòu)體:,i2c_driver,,I2C設(shè)備驅(qū)動(dòng)程序分析2.關(guān)鍵結(jié)構(gòu)體:i2c_driver,I2C設(shè)備驅(qū)動(dòng)程序分析,3.,關(guān)鍵函數(shù),: i2c_klcd_init(void),I2C設(shè)備驅(qū)動(dòng)程序分析3.關(guān)鍵函數(shù): i2c_klcd_i,I2C設(shè)備驅(qū)動(dòng)程序分析,4.關(guān)鍵函數(shù):i2c_klcd_attach_adapter,I2C設(shè)備驅(qū)動(dòng)程序分析4.關(guān)鍵函數(shù):i2c_klcd_att,I2C設(shè)備驅(qū)動(dòng)程序分析,接口函數(shù)映射:,函數(shù)調(diào)用路徑:,I2c_control(&i2c_klcd_client,…),?,i2c_client,?,i2c_adapter,?,i2c_algorithm,?,i2c_ioctl,I2c_transfer(&i2c_klcd_client.adapter,&msg,1),?,i2c_adapter,?,i2c_algorithm,?,i2c_xfer,I2C設(shè)備驅(qū)動(dòng)程序分析接口函數(shù)映射:,I2C設(shè)備驅(qū)動(dòng)程序分析,本例驅(qū)動(dòng)程序沒有提供通用的文件操作接口,不是一般意義上的驅(qū)動(dòng);,但體現(xiàn)了驅(qū)動(dòng)程序中最重要的兩個(gè)概念:設(shè)備信息結(jié)構(gòu)體,底層訪問接口結(jié)構(gòu)體,本例的驅(qū)動(dòng)同時(shí)也體現(xiàn)了一種常見的驅(qū)動(dòng)開發(fā)模式:總線驅(qū)動(dòng)與具體掛載設(shè)備的驅(qū)動(dòng)分別單獨(dú)實(shí)現(xiàn);類似的驅(qū)動(dòng)包括串口驅(qū)動(dòng)與串口設(shè)備驅(qū)動(dòng)等。

    I2C設(shè)備驅(qū)動(dòng)程序分析本例驅(qū)動(dòng)程序沒有提供通用的文件操作接口,。

    點(diǎn)擊閱讀更多內(nèi)容
    最新文檔
    傳統(tǒng)文化道德不是高懸的明月而是腳下的星光.pptx
    世界無煙日關(guān)注青少年成長(zhǎng)健康無煙為成長(zhǎng)護(hù)航.pptx
    五四青年節(jié)詩(shī)詞贊歌五四青年自強(qiáng)不息.pptx
    XX學(xué)校班主任培訓(xùn)用心管理慧做班主任.pptx
    拒絕熬夜健康養(yǎng)生規(guī)律作息遠(yuǎn)離亞健康.pptx
    兒童成長(zhǎng)手冊(cè)時(shí)光里的童真印記.pptx
    幼兒園夏季傳染病預(yù)防指南預(yù)見夏天健康童行夏季傳染病預(yù)防科普.pptx
    高中生心理健康教育主題班會(huì)快樂學(xué)習(xí)高效學(xué)習(xí)正視壓力學(xué)會(huì)減壓.pptx
    員工職業(yè)道德與職業(yè)素養(yǎng)培訓(xùn)遵守職業(yè)道德提高職業(yè)修養(yǎng).pptx
    2025職業(yè)病防治法宣傳周健康守護(hù)職防同行.pptx
    XX幼兒園防災(zāi)減災(zāi)安全教育臨災(zāi)不亂安全童行學(xué)會(huì)保護(hù)自己.pptx
    在2025年縣教育工作大會(huì)暨高考備考工作推進(jìn)會(huì)上的講話發(fā)言材料.docx
    在2025年縣全面從嚴(yán)治黨和黨風(fēng)廉政會(huì)議上的講話發(fā)言材料.docx
    在2025年全市慶?!拔逡弧濒邉趧?dòng)模范表彰大會(huì)上的講話發(fā)言材料多篇.docx
    2025年稅務(wù)局青年代表在五四青年座談會(huì)上的發(fā)言材料3篇.docx
    在2025年市委全體會(huì)議上的主持講話發(fā)言材料.docx
    2025年黨風(fēng)廉政建設(shè)工作要點(diǎn)材料.docx
    在2025年全市青年干部慶祝五四青年節(jié)大會(huì)上的講話發(fā)言材料多篇.docx
    在入黨積極分子培訓(xùn)班上的講話發(fā)言材料.docx
    縣文旅局黨組書記在五一假期及夏季旅游安全生產(chǎn)工作部署會(huì)議上的講話發(fā)言材料.docx
    賣家[上傳人]:212751380547735770658
    資質(zhì):實(shí)名認(rèn)證