




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第7章章嵌入式Linux下的通信應(yīng)用第七章第七章 嵌入式嵌入式LinuxLinux下的通信應(yīng)用下的通信應(yīng)用伴隨著嵌入式系統(tǒng)技術(shù)的發(fā)展,純單機(jī)工作已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足用戶的需求,因此各個系統(tǒng)之間的信息交互由于具有廣泛的應(yīng)用價值而成為嵌入式技術(shù)更深層次的應(yīng)用。本章將介紹嵌入式Linux系統(tǒng)下的各種通信應(yīng)用,串口通信、網(wǎng)絡(luò)通信、藍(lán)牙通信以及CAN總線通信。讀者可以嘗試把通信編程和之前的各種例子結(jié)合起來,完成功能更加完善的應(yīng)用系統(tǒng)。 主要內(nèi)容主要內(nèi)容 第一節(jié) 嵌入式嵌入式Linux下的串口通信下的串口通信 第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 第三節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 第四節(jié) CA
2、N總線總線 主要內(nèi)容:主要內(nèi)容:一、串口簡介一、串口簡介 二、串口編程二、串口編程 第一節(jié)第一節(jié) 嵌入式嵌入式Linux下的串口通信下的串口通信 隨著計算機(jī)系統(tǒng)的應(yīng)用和微機(jī)網(wǎng)絡(luò)的發(fā)展,通信功能顯得越來越重要。串口作為計算機(jī)一種常用的接口,具有連接線少、通信簡單的優(yōu)點,因此得到廣泛應(yīng)用。特別是在嵌入式系統(tǒng)的開發(fā)和應(yīng)用中,經(jīng)常需要使用宿主機(jī)實現(xiàn)目標(biāo)機(jī)的調(diào)試及現(xiàn)場數(shù)據(jù)的采集和控制,從而通過串口線連接宿主機(jī)和目標(biāo)機(jī),達(dá)到通信的目的。 現(xiàn)在的PC機(jī)一般有兩個串行口:COM1和COM2,我們可以選擇任何一個進(jìn)行連接,然后在操作系統(tǒng)上面進(jìn)行正確的配置。Windows操作系統(tǒng)和Linux操作系統(tǒng)都能夠很好地支
3、持串口,特別是在Linux環(huán)境下可以對串口通信簡單地進(jìn)行編程,下面就來介紹串口編程。 第一節(jié)第一節(jié) 嵌入式嵌入式Linux下的串口通信下的串口通信 一、串口簡介一、串口簡介 在Linux系統(tǒng)環(huán)境下的所有設(shè)備都提供了相應(yīng)的設(shè)備文件供用戶訪問,設(shè)備文件都位于/dev目錄下。COM1和COM2對應(yīng)的文件分別為/dev目錄下的ttyS0和ttyS1,我們可以通過打開并讀寫這兩個文件來對串口進(jìn)行操作。使用open()函數(shù)打開串口的例子如下:int fd;/*以讀寫方式打開串口以讀寫方式打開串口*/ fd = open( /dev/ttyS0, O_RDWR);if (-1 = fd) /* 不能打開串口
4、一不能打開串口一*/ perror( 提示錯誤!提示錯誤!); 對串口進(jìn)行設(shè)置是一種常見的操作,一般的設(shè)置包括波特率設(shè)置、校驗位和停止位設(shè)置??梢酝ㄟ^POSIX標(biāo)準(zhǔn)終端接口(POSIX是Portable Operation System Interface of Unix的縮寫,它制定了具有移植性操作系統(tǒng)所應(yīng)具備的條件)進(jìn)行相關(guān)操作,此接口稱為termios,并在內(nèi)核目錄下的include/asm/termios.h文件中定義第一節(jié)第一節(jié) 嵌入式嵌入式Linux下的串口通信下的串口通信 二、串口編程二、串口編程 Termios的結(jié)構(gòu)如下:Struct termiostcflag_t c_ifl
5、ag; /輸入模式輸入模式tcflag_t c_oiflag; /輸出模式輸出模式tcflag_t c_cflag; /控制模式控制模式tcflag_t c_lflag; /局部模式局部模式cc_t c_ccNCCS; /特殊控制字符特殊控制字符 在上面的結(jié)構(gòu)體成員中,c_cflag是最常用的,它用于控制串口的波特率、奇偶校驗、停止位等。 在c_cflag成員中,選項 CLOCAL和CREAD是必須的,即本地和接收使能。例如,下面的代碼將波特率設(shè)為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下的串口通信下的串口通信 二、串口編程二、串口編程 所有對串口的操作都是通過結(jié)構(gòu)體termios和幾個函數(shù)實現(xiàn)的,其中最常用的兩個函數(shù)是tcgetattr()和tcsetattr()。在一般情況下,程序通過tcgetattr()函數(shù)獲取設(shè)備當(dāng)前的設(shè)置,然后修改這些設(shè)置,最后用tcsetattr()使這些設(shè)置生效。我們也可以用tcgetattr()函數(shù)保存設(shè)備的配置,最后在程序結(jié)束前用函數(shù)tcsetattr()恢復(fù)設(shè)備的配置。 常用的操
7、作結(jié)構(gòu)體termios的函數(shù)如下:int tcgetattr(int fd ,struct termios *t) 該函數(shù)用于獲得文件描述符fd所表示設(shè)備的當(dāng)前設(shè)置值,并將此設(shè)置值寫入指針t內(nèi)。若成功,函數(shù)返回0,否則返回-1。int tcsetattr(int fd, int options ,struct termios *t) tcsetattr()函數(shù)用來將termios結(jié)構(gòu)指針t內(nèi)的設(shè)置值賦給當(dāng)前用文件描述符fd表示的設(shè)備終端。參數(shù)options決定什么時候改變生效 第一節(jié)第一節(jié) 嵌入式嵌入式Linux下的串口通信下的串口通信 二、串口編程二、串口編程 int cfsetispeed
8、(struct termios *t ,speed_t speed);int cfsetospeed(struct termios *t ,speed_t speed)上面的兩個函數(shù)分別用來設(shè)置設(shè)備的輸入和輸出速度,通過結(jié)構(gòu)體t分別將設(shè)備的輸入輸出速度設(shè)為speed。它們只是設(shè)置了termios結(jié)構(gòu)體的速度,若要修改設(shè)備的速度還需要調(diào)用tcsetattr()函數(shù)。int cfgetispeed(struct termios *t);int cfgetospeed(struct termios *t);上面兩個函數(shù)分別用來獲得設(shè)備的輸入和輸出速度。int tcflush(int fd,int q
9、ueue);丟棄寫入要引用的對象,其中參數(shù)fd為要處理的串口。第一節(jié)第一節(jié) 嵌入式嵌入式Linux下的串口通信下的串口通信 二、串口編程二、串口編程 主要內(nèi)容:主要內(nèi)容:一、網(wǎng)絡(luò)通信一、網(wǎng)絡(luò)通信 二、二、Socket簡介簡介 三、網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 隨著網(wǎng)絡(luò)的發(fā)展,需要解決網(wǎng)絡(luò)間不同主機(jī)進(jìn)程間的相互通信問題。為此,首先要解決網(wǎng)絡(luò)上不同進(jìn)程的標(biāo)識問題。在同一主機(jī)上,采用唯一的進(jìn)程號(process ID)來標(biāo)識不同的進(jìn)程,但是對于網(wǎng)絡(luò)上的不同主機(jī),可以用相同的進(jìn)程號來表示沒有任何關(guān)系的兩個進(jìn)程。同時,操作系統(tǒng)支持的網(wǎng)絡(luò)協(xié)議眾多,不同協(xié)議的工作方
10、式不同,地址格式也不同。為了解決這些問題,TCP/IP協(xié)議引入了地址和端口的概念。 地址用來區(qū)分網(wǎng)絡(luò)上不同的主機(jī),即我們常說的IP地址;端口用來區(qū)分同一主機(jī)上不同的運用程序,由于TCP/IP傳輸層的兩個協(xié)議TCP和UDP是相互獨立的,因此不同協(xié)議的相同端口號并不沖突。第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 一、網(wǎng)絡(luò)通信一、網(wǎng)絡(luò)通信 在UNIX系統(tǒng)中,網(wǎng)絡(luò)應(yīng)用編程界面有兩類:UNIX BSD的Socket和UNIX System V的TLI 。由于Sun公司采用了支持TCP/IP的UNIX BSD操作系統(tǒng),使TCP/IP的應(yīng)用有了更大的發(fā)展,其網(wǎng)絡(luò)應(yīng)用編程界面Socket在網(wǎng)絡(luò)軟件
11、中被廣泛應(yīng)用,至今已引進(jìn)到Windows和VxWorks等操作系統(tǒng)中,成為開發(fā)網(wǎng)絡(luò)應(yīng)用軟件的強(qiáng)大工具。 Socket相當(dāng)于網(wǎng)絡(luò)上的通信節(jié)點,即IP地址加上端口號。應(yīng)用程序使用了Socket之后,就可以和網(wǎng)絡(luò)上的任何一個通信節(jié)點連接。Socket之間的通信就如同一臺PC機(jī)上兩個進(jìn)程間的通信一樣。 在Linux操作系統(tǒng)中,可以將Socket看成是一種設(shè)備,即一種可作雙向傳輸?shù)男诺?,Linux程序可以經(jīng)過此設(shè)備與本地或是遠(yuǎn)程的程序進(jìn)行通信。第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 二、二、Socket簡介簡介 目前,Internet仍使用IPv4作為尋址模式。在Socket中,尋址模式的
12、結(jié)構(gòu)為sockadd_in,定義如下:struct sockadd_insa_family_t sin_family; /*addressing mode*/unsigned short int sin_port; /*port number*/struct in_addr sin_addr; /*Internet address*/ 其中結(jié)構(gòu)成員sin_family用來說明Socket所使用的尋址模式,在網(wǎng)絡(luò)編程中,其值只能是AF_INET;成員sin_port表示TCP/IP的端口號;成員sin_addr是in_addr結(jié)構(gòu),用來表示IP地址;而in_addr的結(jié)構(gòu)很簡單,只有一個unsi
13、gned long型的成員變量。 由于IP地址的形式是xxx.xxx.xxx.xxx,它是字符型的數(shù)據(jù),要將一個用字符型表示的IP地址轉(zhuǎn)換為unsigned long型的成員,需要使用如下函數(shù):unsigned long inet_addr(const char *string);第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 三、網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 端口號的獲取需要使用下面兩個函數(shù)。因為一般的Intel架構(gòu)的CPU采用的是小端模式,而Motorola和Sun公司的機(jī)器則使用的是大端模式,為了消除這個差別,必須使用下面兩個位排序函數(shù)來設(shè)置端口號:unsigned long htonl(un
14、signed long 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)絡(luò)程序的設(shè)計可以采用兩種協(xié)議:TCP和UDP。TCP是一種可靠的、面向連接的協(xié)議,而UDP則是不可靠的、無連接
15、的。 第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 三、網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 1,采用,采用TCP協(xié)議的網(wǎng)絡(luò)程序設(shè)計協(xié)議的網(wǎng)絡(luò)程序設(shè)計在設(shè)計網(wǎng)絡(luò)程序時,一般按照客戶端和服務(wù)器端進(jìn)行設(shè)計,客戶端和服務(wù)器端的設(shè)計流程是不一樣的。 第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 三、網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 因為TCP協(xié)議是面向連接的,所以在建立連接之前,經(jīng)歷的過程比較多。網(wǎng)絡(luò)程序無論是使用TCP還是UDP協(xié)議,要通過Socket傳輸數(shù)據(jù),都必須建立Socket,可以使用socket()函數(shù)建立一個Socket。該函數(shù)的原型如下:int socket(int domain,int type,int
16、 protocal); 參數(shù)domain的值在網(wǎng)絡(luò)程序中只能為AF_INET,表示使用Internet協(xié)議;參數(shù)type為連接的類型,這里的值應(yīng)為SOCK_STREAM,表示采用TCP建立連接;參數(shù)protocal代表通信協(xié)議,一般設(shè)為0,表示自動選擇。 bind()函數(shù)用于將IPv4 Socket尋址結(jié)構(gòu)綁定到其所建立的Socket,這樣當(dāng)有數(shù)據(jù)包到達(dá)時,Linux內(nèi)核會將這個數(shù)據(jù)包讓給其綁定的Socket來處理。bind()函數(shù)的原型如下:int bind(int sockfd,const struct sockaddr_in *my_addr,int adr_len); 參數(shù)sockfd
17、是調(diào)用函數(shù)socket()的返回值;參數(shù)my_addr用來存放綁定的IPv4尋址結(jié)構(gòu);參數(shù)adr_len為結(jié)構(gòu)sockaddr_in的長度。第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 三、網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 使用listen()函數(shù)來監(jiān)聽、等待客戶端的連接請求。該函數(shù)的原型如下:int listen(int sockfd,int backlog);參數(shù)sockfd為socket()函數(shù)的返回值;參數(shù)backlog用來指定最大連接數(shù),一般設(shè)為5。 當(dāng)服務(wù)器端接收到客戶端的連接請求時,會把連接請求放在連接隊列中,接著用accept()函數(shù)處理并接受隊列中的請求。int accept( in
18、t sockfd,struct sockadd_in *addr,int addrlen);參數(shù)addr用來存放客戶端的IP地址,其他兩個參數(shù)的設(shè)置同bind()函數(shù)的這兩個參數(shù)。 connect()函數(shù)是客戶端使用的函數(shù)。當(dāng)客戶端建立好Socket后,會調(diào)用這個函數(shù)向服務(wù)器端請求連接。該函數(shù)的原型如下:int connect( int sockfd,struct sockaddr_in *serv_addr,int addrlen);參數(shù)serv_addr用來存放服務(wù)器端的IP地址,其他兩個函數(shù)的設(shè)置方法同上。 使用close()函數(shù)終止客戶端與服務(wù)器端的連接。函數(shù)運行成功返回0,否則返回-
19、1。該函數(shù)的原型如下:int close(int sockfd);第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 三、網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 2,采用,采用UDP協(xié)議的網(wǎng)絡(luò)程序設(shè)計協(xié)議的網(wǎng)絡(luò)程序設(shè)計采用UDP協(xié)議進(jìn)行網(wǎng)絡(luò)程序設(shè)計 第二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 三、網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 下面主要介紹這個過程中用到的兩個特別函數(shù)recvfrom()和sendto()。recvfrom()函數(shù)的原型如下:int recvfrom(int sockfd,void *buf,int len,unsigned flags,struct sockadd_in *from, int fro
20、mlen);參數(shù)sockfd為函數(shù)socket()的返回值;參數(shù)buf用來存放接收的信息;參數(shù)len表示接收信息的長度,一般設(shè)為sizeof(buf);參數(shù)flags一般設(shè)為0;參數(shù)from為發(fā)送端的IP地址;參數(shù)fromlen為發(fā)送端IP地址的長度,一般設(shè)為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ù)。第
21、二節(jié)第二節(jié) 嵌入式嵌入式Linux網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 三、網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 主要內(nèi)容:主要內(nèi)容:一、藍(lán)牙技術(shù)一、藍(lán)牙技術(shù) 二、藍(lán)牙體系結(jié)構(gòu)二、藍(lán)牙體系結(jié)構(gòu) 三、藍(lán)牙通信網(wǎng)絡(luò)三、藍(lán)牙通信網(wǎng)絡(luò) 四、四、Linux Bluetooth 軟件層軟件層 五、五、USB適配器適配器 第三節(jié)第三節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 藍(lán)牙(bluetooth)技術(shù)是由愛立信、Intel、諾基亞、東芝和IBM五家公司于1998年5月共同提出開發(fā)的。它是一種用于替代便攜或固定電子設(shè)備上使用的電纜或連線的短距離無線連接技術(shù)。在辦公室、家庭和旅途中,通過藍(lán)牙遙控裝置可以形成一點到多點的連接,即在該裝置周圍組成一個“微網(wǎng)”,
22、網(wǎng)內(nèi)任何藍(lán)牙收發(fā)器都可與該裝置互通信號。 藍(lán)牙計劃主要面向網(wǎng)絡(luò)中各類數(shù)據(jù)及語音設(shè)備,如PC機(jī)、筆記本電腦、打印機(jī)、傳真機(jī)、數(shù)碼相機(jī)、移動電話、家電設(shè)備等,使用無線微波的方式將它們連成一個微網(wǎng),多個微網(wǎng)之間也可以互連,從而方便快速地實現(xiàn)各類設(shè)備之間的通信。第三節(jié)第三節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 一、藍(lán)牙技術(shù)一、藍(lán)牙技術(shù) 藍(lán)牙協(xié)議體系結(jié)構(gòu)同樣采用分層方式,包括藍(lán)牙專用協(xié)議和一些通用協(xié)議。專用協(xié)議位于協(xié)議棧的底部,從底到上依次是藍(lán)牙無線層(Bluetooth Radio)、基帶層(Baseband)、LMP 層(Link Manager Protocol)、L2CAP 層(Logical lin
23、k Control and Adaptation Protocol)、RFCOMM(serial cable emulation)、SDP 層(Service Discovery Protocol)。另外,RFCOMM 層以ETSI TS07.10 為基礎(chǔ),目的是取代電纜連接;TCS(Telephony Control Protocol Specification)以ITU-T的Q.931 為基礎(chǔ),目的是進(jìn)行呼叫控制。在藍(lán)牙專用協(xié)議之上可以承載PPP、TCP/IP、UDP/IP、WAP等通用高層協(xié)議。 無線層規(guī)范物理層無線傳輸技術(shù)。藍(lán)牙工作在2.4GHz 的ISM 頻段,大部分國家采用2400
24、2483.5MHz,f2402kMHz,k=078,即將該頻段劃分為79個帶寬為1MHz的信道;在低頻端留有2MHz 的保護(hù)帶,在高頻端留有3.5MHz 的保護(hù)帶。調(diào)制方式采用GFSK,BT=0.5,正頻偏表示“1”,負(fù)頻偏表示“0”。系統(tǒng)采用跳頻擴(kuò)頻技術(shù),抗干擾能力強(qiáng)、保密性好。第三節(jié)第三節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 二、藍(lán)牙體系結(jié)構(gòu)二、藍(lán)牙體系結(jié)構(gòu) 基帶層采用查詢和尋呼方式,使調(diào)頻時鐘及調(diào)頻頻率同步,為數(shù)據(jù)分組提供對稱連接(SCO)和非對稱連接(ASL)并完成數(shù)據(jù)包的定義、前向糾錯、循環(huán)冗余校驗、邏輯通道選擇、信號噪化、加密、編碼和解碼等功能。它采用混合電路交換和分組交換方式,既適合語
25、言傳送,也適合一般的數(shù)據(jù)傳送。每一個語音通道支持64kb/s同步語音,異步通道支持最大速率723.kb/s(反向57.6kb/s)的非對稱連接或433.9kb/s的對稱連接。 LMP負(fù)責(zé)藍(lán)牙設(shè)備之間的鏈路建立,包括鑒權(quán)、加密等安全技術(shù)及基帶層分組大小的控制和協(xié)商。它還控制無線設(shè)備的功率以及藍(lán)牙節(jié)點的連接狀態(tài)。 L2CAP與LMP平行工作,共同實現(xiàn)OSI的數(shù)據(jù)鏈路層的功能,它可提供對稱連接和非對稱連接的數(shù)據(jù)服務(wù)。 RFCOMM在藍(lán)牙的基帶上仿真RS-232的功能,實現(xiàn)設(shè)備串行通信。例如,在撥號網(wǎng)絡(luò)中,主機(jī)將AT命令發(fā)送到調(diào)制解調(diào)器,再傳送到局域網(wǎng),建立連接后,應(yīng)用程序就可以通過RFCOMM提供的
26、串口發(fā)送和接收數(shù)據(jù)。 SDP是藍(lán)牙體系中非常關(guān)鍵的部分,只有通過SDP了解通信雙方的設(shè)備信息、業(yè)務(wù)類型、業(yè)務(wù)特征,然后才能在藍(lán)牙設(shè)備之間建立通信連接。 第三節(jié)第三節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 二、藍(lán)牙體系結(jié)構(gòu)二、藍(lán)牙體系結(jié)構(gòu) 個人通信的目標(biāo)就是利用各種可能的網(wǎng)絡(luò)技術(shù),實現(xiàn)人與人之間在任何時間、任何地點進(jìn)行任何種類的通信。在近距離通信中,藍(lán)牙無線接入技術(shù)使無線單元間的通信變得十分容易,將計算機(jī)技術(shù)與通信技術(shù)更緊密地結(jié)合在一起,人們可隨時隨地進(jìn)行信息的交換與傳輸。除此之外,藍(lán)牙移動終端還能通過無線方式訪問局域網(wǎng)以及Internet等網(wǎng)絡(luò),例如:實現(xiàn)藍(lán)牙協(xié)議與TCP/IP協(xié)議的轉(zhuǎn)換。在安全的基礎(chǔ)
27、上實現(xiàn)藍(lán)牙地址與IP地址之間的地址解析。通過路由表對網(wǎng)絡(luò)內(nèi)部的藍(lán)牙移動終端進(jìn)行跟蹤、定位。在兩個不同的piconet(匹克網(wǎng))的藍(lán)牙移動終端之間交換路由信息。 如果目的端位于單位內(nèi)部的局域網(wǎng)或者Internet,則需要通過藍(lán)牙網(wǎng)關(guān)進(jìn)行藍(lán)牙協(xié)議與TCP/IP 協(xié)議的轉(zhuǎn)換,如果沒有IP 地址,則由藍(lán)牙網(wǎng)關(guān)來提供IP 地址,其通信方式為T-BGMT。如果目的端位于辦公網(wǎng)絡(luò)內(nèi)部的另一個匹克網(wǎng),則通過藍(lán)牙網(wǎng)關(guān)來建立路由連接,從而完成整個通信過程的漫游其通信方式為MT-BG-M_MT(為主移動終端)-MT。 第三節(jié)第三節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 三、藍(lán)牙通信網(wǎng)絡(luò)三、藍(lán)牙通信網(wǎng)絡(luò) BlueZ是官方Li
28、nux Bluetooth棧,由HCI(Host Control Interface)層、Bluetooth 協(xié)議核心、L2CAP(Logical Link Control and Adaptation Protocol)、SCO音頻層、其他Bluetooth 服務(wù)、用戶空間后臺進(jìn)程以及配置工具組成。 Bluetooth 規(guī)范支持針對Bluetooth HCI數(shù)據(jù)分組的UART(通用異步接收器/傳送器)和USB傳輸機(jī)制。BlueZ棧對這兩個傳輸機(jī)制(drivers/Bluetooth/)都支持。BlueZ BNEP(Bluetooth 網(wǎng)絡(luò)封裝協(xié)議)實現(xiàn)了 Bluetooth 上的以太網(wǎng)仿真,
29、這使 TCP/IP可以直接運行于Bluetooth之上。BNEP模塊(net/bluetooth/bnep/)和用戶模式pand后臺進(jìn)程實現(xiàn)了 Bluetooth 個人區(qū)域網(wǎng)(PAN)。BNEP使用register_netdev將自己作為以太網(wǎng)設(shè)備注冊到 Linux網(wǎng)絡(luò)層,并使用上面為WLAN驅(qū)動程序描述的netif_rx來填充sk_buffs并將其發(fā)送到協(xié)議棧。BlueZ RFCOMM(net/bluetooth/rfcomm/)提供Bluetooth上的串行仿真,這使得串行端口應(yīng)用程序(如minicom)和協(xié)議(如點對點協(xié)議PPP)不加更改地在Bluetooth上運行。RFCOMM 模塊和
30、用戶模式dund后臺進(jìn)程實現(xiàn)了Bluetooth 撥號網(wǎng)絡(luò)。 第三節(jié)第三節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 四、四、Linux Bluetooth 軟件層軟件層 Bluetooth USB適配器擁有一個Bluetooth CSR芯片組,并使用USB傳輸器來傳輸HCI數(shù)據(jù)分組。因此,Linux USB層、BlueZ USB傳輸器驅(qū)動程序以及BlueZ協(xié)議棧是使設(shè)備工作的主要內(nèi)核層。 Linux USB子系統(tǒng)類似于PCMCIA子系統(tǒng),它們都有與移動設(shè)備交互的主機(jī)控制器設(shè)備驅(qū)動程序,并且都包含一個向主機(jī)控制器和單個設(shè)備的設(shè)備驅(qū)動程序提供服務(wù)的核心層。USB主機(jī)控制器遵循兩個標(biāo)準(zhǔn)之一:UHCI(Univ
31、ersal Host Control Interface)或OHCI(Open Host Control Interface)。由于具有PCMCIA,單個USB設(shè)備的Linux設(shè)備驅(qū)動程序不依賴于主機(jī)控制器。經(jīng)由USB設(shè)備傳輸?shù)臄?shù)據(jù)分為四種類型(或管道):Control、Interrupt、Bulk和Isochronous。前兩種類型通常用于小型消息,而后兩種類型則用于較大型的消息。USB設(shè)備插入時,主機(jī)控制器使用控制管道來枚舉它并給它分配設(shè)備地址(1127)。主機(jī)控制器設(shè)備驅(qū)動程序讀取的設(shè)備描述符包含關(guān)于設(shè)備的信息。Linux的usbcore內(nèi)核模塊支持USB主機(jī)控制器和USB設(shè)備,并包含U
32、SB設(shè)備驅(qū)動程序可以使用的函數(shù)和數(shù)據(jù)結(jié)構(gòu)。第三節(jié)第三節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 五、五、USB適配器適配器 USB驅(qū)動程序利用usbcore及自己的class/subclass/protocol信息注冊了兩個入口點:probe和disconnect。當(dāng)附加相應(yīng)的USB設(shè)備時,usbcore 用枚舉期間從設(shè)備配置描述符中讀取的class信息來匹配已注冊的class信息,并將設(shè)備與相應(yīng)的驅(qū)動程序綁定。這個核心使用一種叫做URB(即USB Request Block,在include/linux/usb.h中定義)的數(shù)據(jù)結(jié)構(gòu)來異步地管理主機(jī)和設(shè)備之間的數(shù)據(jù)傳輸。設(shè)備驅(qū)動程序使用這些例程來請求各
33、種類型的數(shù)據(jù)傳輸。傳送請求完成后,核心會使用以前注冊的回調(diào)函數(shù)來通知驅(qū)動程序。 對Bluetooth USB設(shè)備而言,HCI命令使用Control管道傳輸,HCI事件使用Interrupt管道,Asynchronous(ACL)數(shù)據(jù)使用Bulk管道,而Synchronous(SCO)音頻數(shù)據(jù)使用Isochronous管道。Bluetooth 規(guī)范為Bluetooth USB設(shè)備定義了class/subclass/protocol代碼0 xE/0 x01/0 x01。BlueZ USB傳輸驅(qū)動程序(drivers/bluetooth/hci_usb.c)將該 class/subclass/pro
34、tocol信息注冊到Linux USB核心。Belkin USB適配器插入時,主機(jī)控制器設(shè)備驅(qū)動程序會枚舉它。因為在枚舉期間從適配器讀取的設(shè)備描述符與hci_usb驅(qū)動程序注冊到USB核心的信息相匹配,所以這個驅(qū)動程序可附加到Belkin USB設(shè)備。由hci_usb驅(qū)動程序從以上描述的各個端點讀取的HCI、ACL和SCO數(shù)據(jù)被透明傳送到BlueZ協(xié)議棧。一旦完成這些工作,通過使用以上描述的BlueZ服務(wù)和工具,Linux TCP/IP應(yīng)用程序就可以運行在BlueZ BNEP上,而串行應(yīng)用程序則可以運行在BlueZ RFCOMM上。 第三節(jié)第三節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 五、五、USB適
35、配器適配器 主要內(nèi)容:主要內(nèi)容:一、一、CAN總線簡介總線簡介 二、二、CAN總線硬件特征總線硬件特征 三、三、CAN控制器驅(qū)動控制器驅(qū)動 第四節(jié)第四節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 控制器局域網(wǎng) (Controller Area Net,CAN)是一種現(xiàn)場總線,主要用于檢測及控制各種過程。CAN最初是由德國BOSCH公司為汽車監(jiān)測和控制而設(shè)計的,目前已逐步應(yīng)用到其他工業(yè)控制中,現(xiàn)已成為ISO-11898國際標(biāo)準(zhǔn)。 CAN總線的優(yōu)點如下:低成本。極高的總線利用率。數(shù)據(jù)傳輸距離很長(長達(dá)10公里)。數(shù)據(jù)傳輸速率高(高達(dá)1Mbit/s)。可根據(jù)報文的ID決定接收或屏蔽該報文。可靠的錯誤處理和檢錯機(jī)
36、制。發(fā)送的信息遭到破壞后可自動重發(fā)。節(jié)點在錯誤嚴(yán)重的情況下具有自動退出總線的功能。報文不包含源地址或目標(biāo)地址,僅用標(biāo)識符來指示功能信息和優(yōu)先級信息。1.在一個由CAN總線構(gòu)成的單一網(wǎng)絡(luò)中,理論上可以掛接無數(shù)個節(jié)點。第四節(jié)第四節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 一、一、CAN總線簡介總線簡介 1.電氣特征電氣特征CAN能夠使用多種物理介質(zhì)進(jìn)行傳輸,例如,雙絞線、光纖等。最常用的是雙絞線。信號使用差分電壓傳送,兩條信號線被稱為CAN_H和CAN_L,靜態(tài)時均是2.5V左右,此時狀態(tài)表示為邏輯1(也可以叫做“隱性”)。用CAN_H比CAN_L高表示邏輯0(此時稱為“顯性”)。2.MAC幀結(jié)構(gòu)幀結(jié)構(gòu)第四
37、節(jié)第四節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 二、二、CAN總線硬件特征總線硬件特征 3.基本組成基本組成CAN總線的基本組成如圖7-17所示。它包含三個部分:節(jié)點控制器S3C2410微處理器、CAN控制器MCP2510或MCP2515芯片、CAN收發(fā)器-TJA1050或TJA1040芯片。第四節(jié)第四節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 二、二、CAN總線硬件特征總線硬件特征 驅(qū)動程序會根據(jù)module_init()函數(shù)所指定的參數(shù)作為入口函數(shù),在CAN控制器驅(qū)動中,這個入口函數(shù)為s3c2410_mcp2510_init(),它主要完成一些基本的初始化工作。CAN控制器驅(qū)動的初始化工作主要有:軟件復(fù)位,
38、進(jìn)入配置模式。設(shè)置CAN總線波特率。關(guān)閉中斷。設(shè)置ID過濾器。切換MCP2510到正常狀態(tài)(Normal)。清空接受和發(fā)送緩沖區(qū)。開啟接收緩沖區(qū),開啟中斷(可選)。初始化工作完成之后,會引入驅(qū)動程序的操作集。第四節(jié)第四節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 三、三、CAN控制器驅(qū)動控制器驅(qū)動 初始化工作完成之后,會引入驅(qū)動程序的操作集。CAN控制器驅(qū)動的操作集結(jié)構(gòu)如下:static struct file_operations s3c2410_fops = owner: THIS_MODULE,write:s3c2410_mcp2510_write,read:s3c2410_mcp2510_read
39、,ioctl:s3c2410_mcp2510_ioctl,open:s3c2410_mcp2510_open,release:s3c2410_mcp2510_release,;第四節(jié)第四節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 三、三、CAN控制器驅(qū)動控制器驅(qū)動 應(yīng)用層的read()函數(shù)首先調(diào)用s3c2410_mcp2510_read,該函數(shù)負(fù)責(zé)用戶區(qū)和內(nèi)核區(qū)之間的數(shù)據(jù)傳送。之后調(diào)用RevRead函數(shù)和s3c2410_isr_mcp2510函數(shù)對數(shù)據(jù)緩沖區(qū)進(jìn)行操作,在這個過程中會調(diào)用MCP2510_Read函數(shù),它的工作包括:在local處理器上關(guān)閉中斷。MCP2510片選ENABLE。CAN總線發(fā)送
40、流程。MCP2510片選DISABLE。打開中斷。其中, CAN總線發(fā)送流程的具體操作順序如下:1)在s3c2410_fops結(jié)構(gòu)中添加寫接口 。2)用戶程序使用CanData數(shù)據(jù)結(jié)構(gòu)給驅(qū)動模塊傳遞參數(shù)。3)從用戶空間讀取待發(fā)送的內(nèi)容 。4)對用戶空間傳遞的數(shù)據(jù)加以解析 。5)MCP2510通過SPI接口與處理器傳遞數(shù)據(jù)。第四節(jié)第四節(jié) 嵌入式藍(lán)牙技術(shù)嵌入式藍(lán)牙技術(shù) 三、三、CAN控制器驅(qū)動控制器驅(qū)動 對于寫操作,應(yīng)用層的write()函數(shù)首先調(diào)用s3c2410_mcp2510_write,該函數(shù)負(fù)責(zé)用戶區(qū)和內(nèi)核區(qū)之間數(shù)據(jù)傳送。之后調(diào)用MCP2510_canWrite函數(shù)和MCP2510_Write_Can函數(shù)。在該函數(shù)中完成CAN的數(shù)據(jù)結(jié)構(gòu)之后,調(diào)用MCP2510_Write函數(shù),它的工作包括:在local處理器上關(guān)閉中斷。MCP2510片選ENABLE。CAN總線單字節(jié)寫入操作。MCP2510片選DISABLE。打開中斷。其中,CAN總線單字
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游管理案例研究練習(xí)題
- 學(xué)科交叉融合促進(jìn)應(yīng)用型人才綜合素質(zhì)發(fā)展
- 零售電商行業(yè)銷售趨勢統(tǒng)計表
- 汽車工程維修技術(shù)知識點解析
- 2025年文化傳播與互聯(lián)網(wǎng)的綜合能力考核考試卷及答案
- 2025年現(xiàn)代詩歌鑒賞能力考試試卷及答案
- 2025年數(shù)理邏輯與數(shù)學(xué)思維考試試題及答案
- 2025年審計學(xué)基礎(chǔ)理論與實務(wù)能力提高測試卷及答案
- 2025年人工智能倫理與社會影響知識測試卷及答案
- 2025年綠色經(jīng)濟(jì)與可持續(xù)發(fā)展考試卷及答案
- 建筑材料(東北農(nóng)業(yè)大學(xué))智慧樹知到期末考試答案2024年
- 腦機(jī)接口技術(shù)在康復(fù)醫(yī)學(xué)中的應(yīng)用與創(chuàng)新
- 電力施工現(xiàn)場安全交底
- 加油站防范反恐評估報告
- 《真空系統(tǒng)設(shè)計》課件
- 家庭語言環(huán)境與兒童語言發(fā)展
- 短視頻起號運營全攻略
- 清華人工骨成人顱骨修補(bǔ)首選課件
- 班主任微創(chuàng)意:59招讓班級管理腦洞大開
- 水工渡槽課程設(shè)計
- 《統(tǒng)計學(xué)》 課件 廖穎文 1. 緒 論
評論
0/150
提交評論