博創(chuàng)嵌入式培訓PPT第7章 嵌入式Linux下的通信應用(_第1頁
博創(chuàng)嵌入式培訓PPT第7章 嵌入式Linux下的通信應用(_第2頁
博創(chuàng)嵌入式培訓PPT第7章 嵌入式Linux下的通信應用(_第3頁
博創(chuàng)嵌入式培訓PPT第7章 嵌入式Linux下的通信應用(_第4頁
博創(chuàng)嵌入式培訓PPT第7章 嵌入式Linux下的通信應用(_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第7章章嵌入式Linux下的通信應用第七章第七章 嵌入式嵌入式LinuxLinux下的通信應用下的通信應用伴隨著嵌入式系統(tǒng)技術的發(fā)展,純單機工作已經(jīng)遠遠不能滿足用戶的需求,因此各個系統(tǒng)之間的信息交互由于具有廣泛的應用價值而成為嵌入式技術更深層次的應用。本章將介紹嵌入式Linux系統(tǒng)下的各種通信應用,串口通信、網(wǎng)絡通信、藍牙通信以及CAN總線通信。讀者可以嘗試把通信編程和之前的各種例子結合起來,完成功能更加完善的應用系統(tǒng)。 主要內容主要內容 第一節(jié) 嵌入式嵌入式Linux下的串口通信下的串口通信 第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡編程網(wǎng)絡編程 第三節(jié) 嵌入式藍牙技術嵌入式藍牙技術 第四節(jié) CA

2、N總線總線 主要內容:主要內容:一、串口簡介一、串口簡介 二、串口編程二、串口編程 第一節(jié)第一節(jié) 嵌入式嵌入式Linux下的串口通信下的串口通信 隨著計算機系統(tǒng)的應用和微機網(wǎng)絡的發(fā)展,通信功能顯得越來越重要。串口作為計算機一種常用的接口,具有連接線少、通信簡單的優(yōu)點,因此得到廣泛應用。特別是在嵌入式系統(tǒng)的開發(fā)和應用中,經(jīng)常需要使用宿主機實現(xiàn)目標機的調試及現(xiàn)場數(shù)據(jù)的采集和控制,從而通過串口線連接宿主機和目標機,達到通信的目的。 現(xiàn)在的PC機一般有兩個串行口:COM1和COM2,我們可以選擇任何一個進行連接,然后在操作系統(tǒng)上面進行正確的配置。Windows操作系統(tǒng)和Linux操作系統(tǒng)都能夠很好地支

3、持串口,特別是在Linux環(huán)境下可以對串口通信簡單地進行編程,下面就來介紹串口編程。 第一節(jié)第一節(jié) 嵌入式嵌入式Linux下的串口通信下的串口通信 一、串口簡介一、串口簡介 在Linux系統(tǒng)環(huán)境下的所有設備都提供了相應的設備文件供用戶訪問,設備文件都位于/dev目錄下。COM1和COM2對應的文件分別為/dev目錄下的ttyS0和ttyS1,我們可以通過打開并讀寫這兩個文件來對串口進行操作。使用open()函數(shù)打開串口的例子如下:int fd;/*以讀寫方式打開串口以讀寫方式打開串口*/ fd = open( /dev/ttyS0, O_RDWR);if (-1 = fd) /* 不能打開串口

4、一不能打開串口一*/ perror( 提示錯誤!提示錯誤!); 對串口進行設置是一種常見的操作,一般的設置包括波特率設置、校驗位和停止位設置??梢酝ㄟ^POSIX標準終端接口(POSIX是Portable Operation System Interface of Unix的縮寫,它制定了具有移植性操作系統(tǒng)所應具備的條件)進行相關操作,此接口稱為termios,并在內核目錄下的include/asm/termios.h文件中定義第一節(jié)第一節(jié) 嵌入式嵌入式Linux下的串口通信下的串口通信 二、串口編程二、串口編程 Termios的結構如下:Struct termiostcflag_t c_ifl

5、ag; /輸入模式輸入模式tcflag_t c_oiflag; /輸出模式輸出模式tcflag_t c_cflag; /控制模式控制模式tcflag_t c_lflag; /局部模式局部模式cc_t c_ccNCCS; /特殊控制字符特殊控制字符 在上面的結構體成員中,c_cflag是最常用的,它用于控制串口的波特率、奇偶校驗、停止位等。 在c_cflag成員中,選項 CLOCAL和CREAD是必須的,即本地和接收使能。例如,下面的代碼將波特率設為115200、數(shù)據(jù)位為8位、偶校驗并且停止位為1位:options.c_cflag |= B115200|CLOCAL|CREAD|CS8| PAR

6、ENB;options.c_cflag &=PARODD;options.c_cflag &=CSTOPB; 第一節(jié)第一節(jié) 嵌入式嵌入式Linux下的串口通信下的串口通信 二、串口編程二、串口編程 所有對串口的操作都是通過結構體termios和幾個函數(shù)實現(xiàn)的,其中最常用的兩個函數(shù)是tcgetattr()和tcsetattr()。在一般情況下,程序通過tcgetattr()函數(shù)獲取設備當前的設置,然后修改這些設置,最后用tcsetattr()使這些設置生效。我們也可以用tcgetattr()函數(shù)保存設備的配置,最后在程序結束前用函數(shù)tcsetattr()恢復設備的配置。 常用的操作結構體term

7、ios的函數(shù)如下:int tcgetattr(int fd ,struct termios *t) 該函數(shù)用于獲得文件描述符fd所表示設備的當前設置值,并將此設置值寫入指針t內。若成功,函數(shù)返回0,否則返回-1。int tcsetattr(int fd, int options ,struct termios *t) tcsetattr()函數(shù)用來將termios結構指針t內的設置值賦給當前用文件描述符fd表示的設備終端。參數(shù)options決定什么時候改變生效 第一節(jié)第一節(jié) 嵌入式嵌入式Linux下的串口通信下的串口通信 二、串口編程二、串口編程 int cfsetispeed(struct

8、termios *t ,speed_t speed);int cfsetospeed(struct termios *t ,speed_t speed)上面的兩個函數(shù)分別用來設置設備的輸入和輸出速度,通過結構體t分別將設備的輸入輸出速度設為speed。它們只是設置了termios結構體的速度,若要修改設備的速度還需要調用tcsetattr()函數(shù)。int cfgetispeed(struct termios *t);int cfgetospeed(struct termios *t);上面兩個函數(shù)分別用來獲得設備的輸入和輸出速度。int tcflush(int fd,int queue);丟棄

9、寫入要引用的對象,其中參數(shù)fd為要處理的串口。第一節(jié)第一節(jié) 嵌入式嵌入式Linux下的串口通信下的串口通信 二、串口編程二、串口編程 主要內容:主要內容:一、網(wǎng)絡通信一、網(wǎng)絡通信 二、二、Socket簡介簡介 三、網(wǎng)絡編程網(wǎng)絡編程 第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡編程網(wǎng)絡編程 隨著網(wǎng)絡的發(fā)展,需要解決網(wǎng)絡間不同主機進程間的相互通信問題。為此,首先要解決網(wǎng)絡上不同進程的標識問題。在同一主機上,采用唯一的進程號(process ID)來標識不同的進程,但是對于網(wǎng)絡上的不同主機,可以用相同的進程號來表示沒有任何關系的兩個進程。同時,操作系統(tǒng)支持的網(wǎng)絡協(xié)議眾多,不同協(xié)議的工作方式不同,地址格式

10、也不同。為了解決這些問題,TCP/IP協(xié)議引入了地址和端口的概念。 地址用來區(qū)分網(wǎng)絡上不同的主機,即我們常說的IP地址;端口用來區(qū)分同一主機上不同的運用程序,由于TCP/IP傳輸層的兩個協(xié)議TCP和UDP是相互獨立的,因此不同協(xié)議的相同端口號并不沖突。第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡編程網(wǎng)絡編程 一、網(wǎng)絡通信一、網(wǎng)絡通信 在UNIX系統(tǒng)中,網(wǎng)絡應用編程界面有兩類:UNIX BSD的Socket和UNIX System V的TLI 。由于Sun公司采用了支持TCP/IP的UNIX BSD操作系統(tǒng),使TCP/IP的應用有了更大的發(fā)展,其網(wǎng)絡應用編程界面Socket在網(wǎng)絡軟件中被廣泛應用,至

11、今已引進到Windows和VxWorks等操作系統(tǒng)中,成為開發(fā)網(wǎng)絡應用軟件的強大工具。 Socket相當于網(wǎng)絡上的通信節(jié)點,即IP地址加上端口號。應用程序使用了Socket之后,就可以和網(wǎng)絡上的任何一個通信節(jié)點連接。Socket之間的通信就如同一臺PC機上兩個進程間的通信一樣。 在Linux操作系統(tǒng)中,可以將Socket看成是一種設備,即一種可作雙向傳輸?shù)男诺?,Linux程序可以經(jīng)過此設備與本地或是遠程的程序進行通信。第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡編程網(wǎng)絡編程 二、二、Socket簡介簡介 目前,Internet仍使用IPv4作為尋址模式。在Socket中,尋址模式的結構為socka

12、dd_in,定義如下:struct sockadd_insa_family_t sin_family; /*addressing mode*/unsigned short int sin_port; /*port number*/struct in_addr sin_addr; /*Internet address*/ 其中結構成員sin_family用來說明Socket所使用的尋址模式,在網(wǎng)絡編程中,其值只能是AF_INET;成員sin_port表示TCP/IP的端口號;成員sin_addr是in_addr結構,用來表示IP地址;而in_addr的結構很簡單,只有一個unsigned lon

13、g型的成員變量。 由于IP地址的形式是xxx.xxx.xxx.xxx,它是字符型的數(shù)據(jù),要將一個用字符型表示的IP地址轉換為unsigned long型的成員,需要使用如下函數(shù):unsigned long inet_addr(const char *string);第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡編程網(wǎng)絡編程 三、網(wǎng)絡編程網(wǎng)絡編程 端口號的獲取需要使用下面兩個函數(shù)。因為一般的Intel架構的CPU采用的是小端模式,而Motorola和Sun公司的機器則使用的是大端模式,為了消除這個差別,必須使用下面兩個位排序函數(shù)來設置端口號:unsigned long htonl(unsigned l

14、ong hostlong);unsigned short htons(unsigned short hostshort); 其中,函數(shù)htonl()處理長整型的數(shù)據(jù),而函數(shù)htons()用于處理短整型的數(shù)據(jù)。用于獲取IP地址和端口號的一段代碼如下:strunt sockaddr_in adr_srvr;adr_srvr.sin_addr.s_addr = inet_addr(192.168.1.10);adr_srvr.sin_port = htons(8000); 網(wǎng)絡程序的設計可以采用兩種協(xié)議:TCP和UDP。TCP是一種可靠的、面向連接的協(xié)議,而UDP則是不可靠的、無連接的。 第二節(jié)第二

15、節(jié) 嵌入式嵌入式Linux網(wǎng)絡編程網(wǎng)絡編程 三、網(wǎng)絡編程網(wǎng)絡編程 1,采用,采用TCP協(xié)議的網(wǎng)絡程序設計協(xié)議的網(wǎng)絡程序設計在設計網(wǎng)絡程序時,一般按照客戶端和服務器端進行設計,客戶端和服務器端的設計流程是不一樣的。 第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡編程網(wǎng)絡編程 三、網(wǎng)絡編程網(wǎng)絡編程 因為TCP協(xié)議是面向連接的,所以在建立連接之前,經(jīng)歷的過程比較多。網(wǎng)絡程序無論是使用TCP還是UDP協(xié)議,要通過Socket傳輸數(shù)據(jù),都必須建立Socket,可以使用socket()函數(shù)建立一個Socket。該函數(shù)的原型如下:int socket(int domain,int type,int protoca

16、l); 參數(shù)domain的值在網(wǎng)絡程序中只能為AF_INET,表示使用Internet協(xié)議;參數(shù)type為連接的類型,這里的值應為SOCK_STREAM,表示采用TCP建立連接;參數(shù)protocal代表通信協(xié)議,一般設為0,表示自動選擇。 bind()函數(shù)用于將IPv4 Socket尋址結構綁定到其所建立的Socket,這樣當有數(shù)據(jù)包到達時,Linux內核會將這個數(shù)據(jù)包讓給其綁定的Socket來處理。bind()函數(shù)的原型如下:int bind(int sockfd,const struct sockaddr_in *my_addr,int adr_len); 參數(shù)sockfd是調用函數(shù)soc

17、ket()的返回值;參數(shù)my_addr用來存放綁定的IPv4尋址結構;參數(shù)adr_len為結構sockaddr_in的長度。第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡編程網(wǎng)絡編程 三、網(wǎng)絡編程網(wǎng)絡編程 使用listen()函數(shù)來監(jiān)聽、等待客戶端的連接請求。該函數(shù)的原型如下:int listen(int sockfd,int backlog);參數(shù)sockfd為socket()函數(shù)的返回值;參數(shù)backlog用來指定最大連接數(shù),一般設為5。 當服務器端接收到客戶端的連接請求時,會把連接請求放在連接隊列中,接著用accept()函數(shù)處理并接受隊列中的請求。int accept( int sockfd

18、,struct sockadd_in *addr,int addrlen);參數(shù)addr用來存放客戶端的IP地址,其他兩個參數(shù)的設置同bind()函數(shù)的這兩個參數(shù)。 connect()函數(shù)是客戶端使用的函數(shù)。當客戶端建立好Socket后,會調用這個函數(shù)向服務器端請求連接。該函數(shù)的原型如下:int connect( int sockfd,struct sockaddr_in *serv_addr,int addrlen);參數(shù)serv_addr用來存放服務器端的IP地址,其他兩個函數(shù)的設置方法同上。 使用close()函數(shù)終止客戶端與服務器端的連接。函數(shù)運行成功返回0,否則返回-1。該函數(shù)的原型

19、如下:int close(int sockfd);第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡編程網(wǎng)絡編程 三、網(wǎng)絡編程網(wǎng)絡編程 2,采用,采用UDP協(xié)議的網(wǎng)絡程序設計協(xié)議的網(wǎng)絡程序設計采用UDP協(xié)議進行網(wǎng)絡程序設計 第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡編程網(wǎng)絡編程 三、網(wǎng)絡編程網(wǎng)絡編程 下面主要介紹這個過程中用到的兩個特別函數(shù)recvfrom()和sendto()。recvfrom()函數(shù)的原型如下:int recvfrom(int sockfd,void *buf,int len,unsigned flags,struct sockadd_in *from, int fromlen);參數(shù)

20、sockfd為函數(shù)socket()的返回值;參數(shù)buf用來存放接收的信息;參數(shù)len表示接收信息的長度,一般設為sizeof(buf);參數(shù)flags一般設為0;參數(shù)from為發(fā)送端的IP地址;參數(shù)fromlen為發(fā)送端IP地址的長度,一般設為sizeof(from)。sendto()函數(shù)的原型如下:int sendto(int sockfd,void *buf,int len,unsigned flags,struct sockaddr_in *to,int tolen);參數(shù)buf用來存放要發(fā)送的信息;參數(shù)to為接收端的IP地址;其余參數(shù)的用法同recvfrom()函數(shù)。第二節(jié)第二節(jié) 嵌入

21、式嵌入式Linux網(wǎng)絡編程網(wǎng)絡編程 三、網(wǎng)絡編程網(wǎng)絡編程 主要內容:主要內容:一、藍牙技術一、藍牙技術 二、藍牙體系結構二、藍牙體系結構 三、藍牙通信網(wǎng)絡三、藍牙通信網(wǎng)絡 四、四、Linux Bluetooth 軟件層軟件層 五、五、USB適配器適配器 第三節(jié)第三節(jié) 嵌入式藍牙技術嵌入式藍牙技術 藍牙(bluetooth)技術是由愛立信、Intel、諾基亞、東芝和IBM五家公司于1998年5月共同提出開發(fā)的。它是一種用于替代便攜或固定電子設備上使用的電纜或連線的短距離無線連接技術。在辦公室、家庭和旅途中,通過藍牙遙控裝置可以形成一點到多點的連接,即在該裝置周圍組成一個“微網(wǎng)”,網(wǎng)內任何藍牙收發(fā)

22、器都可與該裝置互通信號。 藍牙計劃主要面向網(wǎng)絡中各類數(shù)據(jù)及語音設備,如PC機、筆記本電腦、打印機、傳真機、數(shù)碼相機、移動電話、家電設備等,使用無線微波的方式將它們連成一個微網(wǎng),多個微網(wǎng)之間也可以互連,從而方便快速地實現(xiàn)各類設備之間的通信。第三節(jié)第三節(jié) 嵌入式藍牙技術嵌入式藍牙技術 一、藍牙技術一、藍牙技術 藍牙協(xié)議體系結構同樣采用分層方式,包括藍牙專用協(xié)議和一些通用協(xié)議。專用協(xié)議位于協(xié)議棧的底部,從底到上依次是藍牙無線層(Bluetooth Radio)、基帶層(Baseband)、LMP 層(Link Manager Protocol)、L2CAP 層(Logical link Contro

23、l and Adaptation Protocol)、RFCOMM(serial cable emulation)、SDP 層(Service Discovery Protocol)。另外,RFCOMM 層以ETSI TS07.10 為基礎,目的是取代電纜連接;TCS(Telephony Control Protocol Specification)以ITU-T的Q.931 為基礎,目的是進行呼叫控制。在藍牙專用協(xié)議之上可以承載PPP、TCP/IP、UDP/IP、WAP等通用高層協(xié)議。 無線層規(guī)范物理層無線傳輸技術。藍牙工作在2.4GHz 的ISM 頻段,大部分國家采用24002483.5MH

24、z,f2402kMHz,k=078,即將該頻段劃分為79個帶寬為1MHz的信道;在低頻端留有2MHz 的保護帶,在高頻端留有3.5MHz 的保護帶。調制方式采用GFSK,BT=0.5,正頻偏表示“1”,負頻偏表示“0”。系統(tǒng)采用跳頻擴頻技術,抗干擾能力強、保密性好。第三節(jié)第三節(jié) 嵌入式藍牙技術嵌入式藍牙技術 二、藍牙體系結構二、藍牙體系結構 基帶層采用查詢和尋呼方式,使調頻時鐘及調頻頻率同步,為數(shù)據(jù)分組提供對稱連接(SCO)和非對稱連接(ASL)并完成數(shù)據(jù)包的定義、前向糾錯、循環(huán)冗余校驗、邏輯通道選擇、信號噪化、加密、編碼和解碼等功能。它采用混合電路交換和分組交換方式,既適合語言傳送,也適合一

25、般的數(shù)據(jù)傳送。每一個語音通道支持64kb/s同步語音,異步通道支持最大速率723.kb/s(反向57.6kb/s)的非對稱連接或433.9kb/s的對稱連接。 LMP負責藍牙設備之間的鏈路建立,包括鑒權、加密等安全技術及基帶層分組大小的控制和協(xié)商。它還控制無線設備的功率以及藍牙節(jié)點的連接狀態(tài)。 L2CAP與LMP平行工作,共同實現(xiàn)OSI的數(shù)據(jù)鏈路層的功能,它可提供對稱連接和非對稱連接的數(shù)據(jù)服務。 RFCOMM在藍牙的基帶上仿真RS-232的功能,實現(xiàn)設備串行通信。例如,在撥號網(wǎng)絡中,主機將AT命令發(fā)送到調制解調器,再傳送到局域網(wǎng),建立連接后,應用程序就可以通過RFCOMM提供的串口發(fā)送和接收數(shù)

26、據(jù)。 SDP是藍牙體系中非常關鍵的部分,只有通過SDP了解通信雙方的設備信息、業(yè)務類型、業(yè)務特征,然后才能在藍牙設備之間建立通信連接。 第三節(jié)第三節(jié) 嵌入式藍牙技術嵌入式藍牙技術 二、藍牙體系結構二、藍牙體系結構 個人通信的目標就是利用各種可能的網(wǎng)絡技術,實現(xiàn)人與人之間在任何時間、任何地點進行任何種類的通信。在近距離通信中,藍牙無線接入技術使無線單元間的通信變得十分容易,將計算機技術與通信技術更緊密地結合在一起,人們可隨時隨地進行信息的交換與傳輸。除此之外,藍牙移動終端還能通過無線方式訪問局域網(wǎng)以及Internet等網(wǎng)絡,例如:1.實現(xiàn)藍牙協(xié)議與TCP/IP協(xié)議的轉換。2.在安全的基礎上實現(xiàn)藍

27、牙地址與IP地址之間的地址解析。3.通過路由表對網(wǎng)絡內部的藍牙移動終端進行跟蹤、定位。4.在兩個不同的piconet(匹克網(wǎng))的藍牙移動終端之間交換路由信息。 如果目的端位于單位內部的局域網(wǎng)或者Internet,則需要通過藍牙網(wǎng)關進行藍牙協(xié)議與TCP/IP 協(xié)議的轉換,如果沒有IP 地址,則由藍牙網(wǎng)關來提供IP 地址,其通信方式為T-BGMT。如果目的端位于辦公網(wǎng)絡內部的另一個匹克網(wǎng),則通過藍牙網(wǎng)關來建立路由連接,從而完成整個通信過程的漫游其通信方式為MT-BG-M_MT(為主移動終端)-MT。 第三節(jié)第三節(jié) 嵌入式藍牙技術嵌入式藍牙技術 三、藍牙通信網(wǎng)絡三、藍牙通信網(wǎng)絡 BlueZ是官方Li

28、nux Bluetooth棧,由HCI(Host Control Interface)層、Bluetooth 協(xié)議核心、L2CAP(Logical Link Control and Adaptation Protocol)、SCO音頻層、其他Bluetooth 服務、用戶空間后臺進程以及配置工具組成。 Bluetooth 規(guī)范支持針對Bluetooth HCI數(shù)據(jù)分組的UART(通用異步接收器/傳送器)和USB傳輸機制。BlueZ棧對這兩個傳輸機制(drivers/Bluetooth/)都支持。BlueZ BNEP(Bluetooth 網(wǎng)絡封裝協(xié)議)實現(xiàn)了 Bluetooth 上的以太網(wǎng)仿真,

29、這使 TCP/IP可以直接運行于Bluetooth之上。BNEP模塊(net/bluetooth/bnep/)和用戶模式pand后臺進程實現(xiàn)了 Bluetooth 個人區(qū)域網(wǎng)(PAN)。BNEP使用register_netdev將自己作為以太網(wǎng)設備注冊到 Linux網(wǎng)絡層,并使用上面為WLAN驅動程序描述的netif_rx來填充sk_buffs并將其發(fā)送到協(xié)議棧。BlueZ RFCOMM(net/bluetooth/rfcomm/)提供Bluetooth上的串行仿真,這使得串行端口應用程序(如minicom)和協(xié)議(如點對點協(xié)議PPP)不加更改地在Bluetooth上運行。RFCOMM 模塊和

30、用戶模式dund后臺進程實現(xiàn)了Bluetooth 撥號網(wǎng)絡。 第三節(jié)第三節(jié) 嵌入式藍牙技術嵌入式藍牙技術 四、四、Linux Bluetooth 軟件層軟件層 Bluetooth USB適配器擁有一個Bluetooth CSR芯片組,并使用USB傳輸器來傳輸HCI數(shù)據(jù)分組。因此,Linux USB層、BlueZ USB傳輸器驅動程序以及BlueZ協(xié)議棧是使設備工作的主要內核層。 Linux USB子系統(tǒng)類似于PCMCIA子系統(tǒng),它們都有與移動設備交互的主機控制器設備驅動程序,并且都包含一個向主機控制器和單個設備的設備驅動程序提供服務的核心層。USB主機控制器遵循兩個標準之一:UHCI(Univ

31、ersal Host Control Interface)或OHCI(Open Host Control Interface)。由于具有PCMCIA,單個USB設備的Linux設備驅動程序不依賴于主機控制器。經(jīng)由USB設備傳輸?shù)臄?shù)據(jù)分為四種類型(或管道):Control、Interrupt、Bulk和Isochronous。前兩種類型通常用于小型消息,而后兩種類型則用于較大型的消息。USB設備插入時,主機控制器使用控制管道來枚舉它并給它分配設備地址(1127)。主機控制器設備驅動程序讀取的設備描述符包含關于設備的信息。Linux的usbcore內核模塊支持USB主機控制器和USB設備,并包含U

32、SB設備驅動程序可以使用的函數(shù)和數(shù)據(jù)結構。第三節(jié)第三節(jié) 嵌入式藍牙技術嵌入式藍牙技術 五、五、USB適配器適配器 USB驅動程序利用usbcore及自己的class/subclass/protocol信息注冊了兩個入口點:probe和disconnect。當附加相應的USB設備時,usbcore 用枚舉期間從設備配置描述符中讀取的class信息來匹配已注冊的class信息,并將設備與相應的驅動程序綁定。這個核心使用一種叫做URB(即USB Request Block,在include/linux/usb.h中定義)的數(shù)據(jù)結構來異步地管理主機和設備之間的數(shù)據(jù)傳輸。設備驅動程序使用這些例程來請求各

33、種類型的數(shù)據(jù)傳輸。傳送請求完成后,核心會使用以前注冊的回調函數(shù)來通知驅動程序。 對Bluetooth USB設備而言,HCI命令使用Control管道傳輸,HCI事件使用Interrupt管道,Asynchronous(ACL)數(shù)據(jù)使用Bulk管道,而Synchronous(SCO)音頻數(shù)據(jù)使用Isochronous管道。Bluetooth 規(guī)范為Bluetooth USB設備定義了class/subclass/protocol代碼0 xE/0 x01/0 x01。BlueZ USB傳輸驅動程序(drivers/bluetooth/hci_usb.c)將該 class/subclass/pro

34、tocol信息注冊到Linux USB核心。Belkin USB適配器插入時,主機控制器設備驅動程序會枚舉它。因為在枚舉期間從適配器讀取的設備描述符與hci_usb驅動程序注冊到USB核心的信息相匹配,所以這個驅動程序可附加到Belkin USB設備。由hci_usb驅動程序從以上描述的各個端點讀取的HCI、ACL和SCO數(shù)據(jù)被透明傳送到BlueZ協(xié)議棧。一旦完成這些工作,通過使用以上描述的BlueZ服務和工具,Linux TCP/IP應用程序就可以運行在BlueZ BNEP上,而串行應用程序則可以運行在BlueZ RFCOMM上。 第三節(jié)第三節(jié) 嵌入式藍牙技術嵌入式藍牙技術 五、五、USB適

35、配器適配器 主要內容:主要內容:一、一、CAN總線簡介總線簡介 二、二、CAN總線硬件特征總線硬件特征 三、三、CAN控制器驅動控制器驅動 第四節(jié)第四節(jié) 嵌入式藍牙技術嵌入式藍牙技術 控制器局域網(wǎng) (Controller Area Net,CAN)是一種現(xiàn)場總線,主要用于檢測及控制各種過程。CAN最初是由德國BOSCH公司為汽車監(jiān)測和控制而設計的,目前已逐步應用到其他工業(yè)控制中,現(xiàn)已成為ISO-11898國際標準。 CAN總線的優(yōu)點如下:1.低成本。2.極高的總線利用率。3.數(shù)據(jù)傳輸距離很長(長達10公里)。4.數(shù)據(jù)傳輸速率高(高達1Mbit/s)。5.可根據(jù)報文的ID決定接收或屏蔽該報文。6

36、.可靠的錯誤處理和檢錯機制。7.發(fā)送的信息遭到破壞后可自動重發(fā)。8.節(jié)點在錯誤嚴重的情況下具有自動退出總線的功能。9.報文不包含源地址或目標地址,僅用標識符來指示功能信息和優(yōu)先級信息。10.在一個由CAN總線構成的單一網(wǎng)絡中,理論上可以掛接無數(shù)個節(jié)點。第四節(jié)第四節(jié) 嵌入式藍牙技術嵌入式藍牙技術 一、一、CAN總線簡介總線簡介 1.電氣特征電氣特征CAN能夠使用多種物理介質進行傳輸,例如,雙絞線、光纖等。最常用的是雙絞線。信號使用差分電壓傳送,兩條信號線被稱為CAN_H和CAN_L,靜態(tài)時均是2.5V左右,此時狀態(tài)表示為邏輯1(也可以叫做“隱性”)。用CAN_H比CAN_L高表示邏輯0(此時稱為

37、“顯性”)。2.MAC幀結構幀結構第四節(jié)第四節(jié) 嵌入式藍牙技術嵌入式藍牙技術 二、二、CAN總線硬件特征總線硬件特征 3.基本組成基本組成CAN總線的基本組成如圖7-17所示。它包含三個部分:節(jié)點控制器S3C2410微處理器、CAN控制器MCP2510或MCP2515芯片、CAN收發(fā)器-TJA1050或TJA1040芯片。第四節(jié)第四節(jié) 嵌入式藍牙技術嵌入式藍牙技術 二、二、CAN總線硬件特征總線硬件特征 驅動程序會根據(jù)module_init()函數(shù)所指定的參數(shù)作為入口函數(shù),在CAN控制器驅動中,這個入口函數(shù)為s3c2410_mcp2510_init(),它主要完成一些基本的初始化工作。CAN控

38、制器驅動的初始化工作主要有:1.軟件復位,進入配置模式。2.設置CAN總線波特率。3.關閉中斷。4.設置ID過濾器。5.切換MCP2510到正常狀態(tài)(Normal)。6.清空接受和發(fā)送緩沖區(qū)。7.開啟接收緩沖區(qū),開啟中斷(可選)。初始化工作完成之后,會引入驅動程序的操作集。第四節(jié)第四節(jié) 嵌入式藍牙技術嵌入式藍牙技術 三、三、CAN控制器驅動控制器驅動 初始化工作完成之后,會引入驅動程序的操作集。CAN控制器驅動的操作集結構如下:static struct file_operations s3c2410_fops = owner: THIS_MODULE,write:s3c2410_mcp251

39、0_write,read:s3c2410_mcp2510_read,ioctl:s3c2410_mcp2510_ioctl,open:s3c2410_mcp2510_open,release:s3c2410_mcp2510_release,;第四節(jié)第四節(jié) 嵌入式藍牙技術嵌入式藍牙技術 三、三、CAN控制器驅動控制器驅動 應用層的read()函數(shù)首先調用s3c2410_mcp2510_read,該函數(shù)負責用戶區(qū)和內核區(qū)之間的數(shù)據(jù)傳送。之后調用RevRead函數(shù)和s3c2410_isr_mcp2510函數(shù)對數(shù)據(jù)緩沖區(qū)進行操作,在這個過程中會調用MCP2510_Read函數(shù),它的工作包括:1.在lo

40、cal處理器上關閉中斷。2.MCP2510片選ENABLE。3.CAN總線發(fā)送流程。4.MCP2510片選DISABLE。5.打開中斷。其中, CAN總線發(fā)送流程的具體操作順序如下:1)在s3c2410_fops結構中添加寫接口 。2)用戶程序使用CanData數(shù)據(jù)結構給驅動模塊傳遞參數(shù)。3)從用戶空間讀取待發(fā)送的內容 。4)對用戶空間傳遞的數(shù)據(jù)加以解析 。5)MCP2510通過SPI接口與處理器傳遞數(shù)據(jù)。第四節(jié)第四節(jié) 嵌入式藍牙技術嵌入式藍牙技術 三、三、CAN控制器驅動控制器驅動 對于寫操作,應用層的write()函數(shù)首先調用s3c2410_mcp2510_write,該函數(shù)負責用戶區(qū)和內核區(qū)之間數(shù)據(jù)傳送。之后調用MCP2510_canWrite函數(shù)和M

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論