基于S3C2410的CDMA無線數據傳輸方法
1 引言
本文引用地址:http://cafeforensic.com/article/201612/341121.htmLinux嵌入式系統(tǒng),具有高性能、低功耗、體積小、可靠性高、源代碼開放等優(yōu)點,逐漸被越來越多的人認可并使用,原先只有在PC機上實現的功能,如今也被移植到了更加方便的嵌入式系統(tǒng)上。近些年嵌入式系統(tǒng)已經應用十分廣泛,而隨著網絡特別是無線網絡的興起和發(fā)展,將更加快捷方便的無線網絡與嵌入式系統(tǒng)相結合更成為了當前研究的熱點。CDMA(碼分多址)無線網絡具有覆蓋面廣、速度穩(wěn)定、效率高、成本低等優(yōu)點,CDMA的網絡速度最大可達200k/s。本文著重介紹了ARM9與CDMA無線網絡相結合的,進行無線數據傳輸的方法。
2 軟硬件平臺設計
這里采用的是三星公司的基于S3C2410的高端ARM9處理器芯片,適用于高端手持設備和微型智能控制設備的開發(fā)。它的主頻可以達到203MHz,內建有MMU(內存管理單元),擴展總線最大頻率100MHz。S3C2410具有3個UART、4個DMA通道、1個RTC和觸摸屏接口,還具有IIC總線、一個USB Host,可以掛接圖片采集終端設備。
Linux為嵌入式系統(tǒng)提供了一個極有價值的選擇,它與Unix相似,是一個多任務多進程操作系統(tǒng),支持非常廣泛的硬件,并且源碼完全公開,可以方便的根據需要修改,而且Linux提供了強大的網絡功能,使其具有了同其他操作系統(tǒng)相同的地位。Linux可以用于多種硬件平臺,并且受開銷和時間限制小,通過剪裁、編譯后的Linux內核文件非常小,只有2MB左右,可以方便地燒寫入FLASH中,適合嵌入式系統(tǒng)的應用。最重要的是可以在PC機上開發(fā),然后移植到硬件平臺上運行。因此,這里我們選擇Linux2.4作為嵌入式的操作系統(tǒng)。
2.1 系統(tǒng)結構設計
該系統(tǒng)為實時監(jiān)控系統(tǒng),也就是說當發(fā)生異常情況的是時候,圖片采集終端自動拍攝圖片后,將圖片存儲到系統(tǒng)SDRAM中,并通過無線CDMA模塊,將采集到的圖片上傳至Internet,也就是發(fā)送到指定的Email地址中。
2.2 硬件結構設計
本嵌入式系統(tǒng)自帶32MB SDRAM和8MB FLASH,將編譯好的Linux內核文件和ramdisk文件系統(tǒng)分別燒寫入FALSH中,運行時再由系統(tǒng)自動調入到SDRAM中。S3C2410引出一個USB Host連接USB攝像頭用于圖片采集,通過一個UART接口連接CDMA無線Modem,另一個UART連接PC主機
3 軟件設計
3.1 Linux內核編譯
嵌入式系統(tǒng)資源有限,因此不可能在嵌入式系統(tǒng)之上進行程序的編譯,需要在PC機上將程序編譯成嵌入式系統(tǒng)識別的二進制代碼,然后再移植到其上。交叉編譯環(huán)境就是用來在PC機上編譯嵌入式系統(tǒng)可識別代碼的工具。這里用到的交叉編譯環(huán)境是ARM-Linux。把對PPP的支持編譯進Linux內核的方法為:在kernel目錄,終端下輸入make menuconfig,選擇Network device support,[*]選擇所有關于PPP的選項,然后保存退出編譯即可。
3.2 PPP移植[1]
PPP(Point-to-Point Protocol)點到點,是為在點對點連接上傳輸多協(xié)議數據包提供了一個標準方法。本文用到的CDMA無線連網方法,就需要PPP協(xié)議的支持,這里用的版本是PPP-2.4.1和rp-PPPoE-3.7。其編譯方法就是在建立的交叉編譯環(huán)境下編譯,生成pppd和chat等可執(zhí)行文件,并寫入文件系統(tǒng)ramdisk的/bin目錄中。編寫三個撥號腳本文件放在文件系統(tǒng)/ppp目錄下。
第一個腳本文件為chap-secrets:
“card” * “card”
其中card分別為用戶名和密碼,*表示對服務器沒有限制。
第二個腳本文件為cdma1:
ttyS0 #CDMA Modem連接到串口1上
19200 #CDMA波特率
nocrtscts #不采用modem的rts和cts信號線流控
connect ‘/bin/chat –v –f /etc/ppp/chat/cdma2’ #用chat程序完成連接建立的會話過程,會話要通過/etc/ppp/chat/cdma2文件控制
debuf #表示pppd工作在調試模式
nodetach #表示不讓pppd轉入后臺工作
ipcp-accept-local #表示接受服務器分配的本機IP地址
ipcp-accept-remote #表示接受服務器指定的服務器IP地址
defaultroute #表示把服務器指定的IP地址設定為默認的路由
user card #表示認證時用戶名card,pppd根據該用戶名,從chat-secrets文件中取得密碼
第三個腳本文件為cdma2:
ABORT “NO CARRIER”
ABORT “NO DIALTONE”
ABORT “ERROR”
ABORT “NO ANSWER”
ABORT “BUSY”
TIMEOUT 120
“”at
OK atdt#777
connect
以上幾行代碼的意思是如果modem撥號過程中出現了例如NO CARRIER之類的返回信息,則取消chat過程,連接失敗,TIMEOUT 120則表示為連接超時,atdt#777表示撥號至#777。
設置好后,在開發(fā)板環(huán)境下輸入pppd,如果出現亂碼,則說明ppp移植正確。鍵入撥號命令pppd call cdma1,生成一個新的網絡接口ppp0,服務器自動分配一個IP地址。此時PPP的移植及設置結束,也就是說現在已經創(chuàng)造好了一個可以上網的嵌入式系統(tǒng)。
3.3 Email發(fā)送程序設計[2]
圖片采集終端采集的圖片要發(fā)送到Email中,需要以附件的形式發(fā)送。郵件發(fā)送過程中,需要對郵件地址、用戶密碼和附件內容進行加密處理,這里采用了Base64加密法。Base64算法就是以3個字節(jié)為單位,當剩下的字符數量不足3個字節(jié)時,則應使用0進行填充,依次取6位數據并在前面補上兩個0形成新的8位編碼,由于3*8=4*6,這樣3個字節(jié)的輸入會變成4個字節(jié)的輸出,長度上增加了1/3。相應地,輸出字符則使用‘=’占位,因此編碼后輸出的文本末尾可能會出現1至2個‘=’。
郵件發(fā)送程序經過了以下幾個過程[3]:
(1)socket(int domain,int type,int protocol);
該函數建立新的socket,以建立一個新的通信端口并獲得文件描述符。函數中的參數domain確定一個協(xié)議族,這里定義為AF_INET,type指定套接字類型,該處使用SOCK_STREAM,protocol一般為0,使用默認協(xié)議。
(2)connect(int sockfd,struct sockaddr *address,size_t address_len);
當調用socket建立傳輸端口后,調用connect函數建立與遠程服務器相連的連接線路。
(3) recv(int sockfd,void *buf,int len,unsigned int flags);
該函數用于接收從套接口傳來的信息,socket用connect連接的套接口,buf是指向內存塊的指針,用于存儲接受的消息,len指明內存塊的大小,flags是一個操作標志。
(4)Base64_Code();//對登陸信息或附件內容進行加密
(5)send(int sockfd,const void *msg,int len,unsigned int flags);
該函數是用來通過套接口向其它程序傳遞數據的。sockfd是用來傳輸數據的socked描述符,msg是一個指向要發(fā)送數據的指針,len是以字節(jié)為單位的數據的長度,flags一般情況下設置為0。
4 總結
實驗證明用CDMA無線網絡發(fā)送數據,速度比較穩(wěn)定,有時會由于網絡原因發(fā)送失敗,但是成功率較高,收到的圖片數據丟幀現象不明顯。該方法可用于工業(yè)現場的監(jiān)視以及家庭監(jiān)控系統(tǒng)以及遠程的數據采集。由于圖片是發(fā)送到Email中的,因此運行成本較低,有較大的推廣空間。
本文創(chuàng)新點:目前基于GPRS的無線數據傳輸方法研究的較多,而CDMA網絡的高性能特性,逐漸引起了研究者的注意,本文就結合CDMA網絡設計了一套與嵌入式相結合的系統(tǒng),,將采集的現場圖片,以附件的形式發(fā)送到Email中。
評論