基于嵌入式系統的串口網(wǎng)絡(luò )服務(wù)器的設計
2.3 SDRAM接口電路
SDRAM是高速的動(dòng)態(tài)隨機存取存儲器,它的同步接口和完全流水線(xiàn)的內部結構使其擁有極大的數據速率。目前SDRAM時(shí)鐘頻率已達100MHz以上。另外他們的行、列地址線(xiàn)共用。由行地址選通(CAS)、列地址選通(RAS)信號分時(shí)控制。SDRAM內部以bank位組織,可由行、列地址尋址。另外為了保持內部數據還必須進(jìn)行刷新。
與Flash存儲器相比較,SDRAM不具有掉電保持數據的特性,但其存取速度大大高于Flash存儲器,且具有讀/寫(xiě)的屬性。因此,SDRAM在系統中主要用作程序的運行空間、數據及堆棧區。當系統啟動(dòng)時(shí),CPU首先從復位地址0x0處讀取啟動(dòng)代碼,在完成系統的初始化后,程序代碼一般應調入SDRAM中運行,以提供系統的運行速度。同時(shí),系統及用戶(hù)堆棧、運行數據也都存放在SDRAM中。與Flash存儲器相比,SDRAM的控制信號較多,其連接電路也相對復雜。
本系統采用兩片HY57V641620并聯(lián)構成32位的SDRAM存儲系統,其中一片為高16位,另一片為低16位。兩片HY57V641620的CLK端接的SDCLK端。兩片HY57V641620的CLE端接S3C4510B CLE端。兩片HY57V641620的A11~A0接S3C4510B ADDR11>~ADDR0>;高16位片的DQ15~DQ0接S3C4510B 的數據總線(xiàn)的高16位XDATA31>~XDATA16>;低16位片的DQ15~DQ0接S3C4510B的數據總線(xiàn)的低16位XDATA15>~XDATA0>。
2.4 RTL8201接口電路
RTL8201是Realtek公司生產(chǎn)的一種全雙工以太網(wǎng)控制器,由于其優(yōu)良的性能、廉價(jià)的價(jià)格,使其在市場(chǎng)上10MbpsiISA總線(xiàn)網(wǎng)卡中占有相當的比例。按數據鏈路的不同,可以將RTL8201內部劃分為遠程DMA(remote,DMA)通道和本地DMA(local DMA)通道兩部分。本地DMA完成控制器與網(wǎng)線(xiàn)的數據交換,主處理器收發(fā)數據只需對遠程DMA操作。當主處理器要向網(wǎng)上發(fā)送數據時(shí),先將一幀數據通過(guò)遠程DMA通道送到RTL8201中的發(fā)送緩存區,然后發(fā)出傳送數據命令。RTL8201在完成了上一幀的發(fā)送后,再完成此幀的發(fā)送。RTL8201接收到的數據通過(guò)MAC比較,CRC校驗后,由FIFO存到接收緩沖區,收滿(mǎn)一幀后,以中斷的方式通知主處理器。
由于S3C4510B片內已有帶MII接口的MAC控制器,而RTL8201也提供了MII接口,各種信號的定義也很明確,因此RTL8201與S3C4510B的連接也比較簡(jiǎn)單。直接將兩者的同名端連接即可。
2.5 MAX232接口電路
MAX232芯片時(shí)MAXIM公司生產(chǎn)的低功耗、單電源雙RS232發(fā)送/接收器。適用于各種EIA-232E和V.28/V.24的通信接口。MAX232芯片內部有一個(gè)電源電壓變換器,可以把輸入的+5V電源變換城RS-232C輸出電平所需10V電壓,所以采用此芯片接口的串行通信系統只要單一的+5V電源就可以。
現選用其中一路發(fā)送/接受。T1I接S3C4510B的TXD0端,R1O接S3C4510B的RXD0端。因為MAX232具有驅動(dòng)能力,所以不需要外加驅動(dòng)電路。本文引用地址:http://dyxdggzs.com/article/152360.htm
3 軟件設計
本系統采用uClinux作為操作系統。與一般全靠硬件實(shí)現的串口服務(wù)器比較起來(lái),配置要復雜,需要用戶(hù)具有一定的技術(shù)背景,不過(guò)因為帶有操作系統,其靈活性也是硬件串口服務(wù)器所不能比擬的。用戶(hù)可以通過(guò)編寫(xiě)應用程序,來(lái)隨意擴展所需的功能。
Uclinux是一個(gè)完全符合GNU/GPL公約的操作系統,完全開(kāi)發(fā)代碼,并且免費。Uclinux即“微控制領(lǐng)域中的Linux系統”,具有以下優(yōu)點(diǎn):
(1) Linux是開(kāi)放源代碼的,不存在黑箱技術(shù),遍布全球的眾多Linux愛(ài)好者都是Linux開(kāi)發(fā)者的強大技術(shù)支持者。
(2) Linux源代碼隨處可見(jiàn),注釋豐富,文檔齊全,易于解決各種問(wèn)題。
(3) Linux的內核小,效率高。
(4) Linux內核的結構在網(wǎng)絡(luò )方面是非常完整的,它提供了對包括十兆位、百兆位及千兆位的以太網(wǎng)絡(luò ),還有無(wú)線(xiàn)網(wǎng)絡(luò ),以及光纖等的支持。
(5) Linux在內核結構的設計中考慮適應系統的可裁減性的要求??蓪o(wú)用的代碼去除掉,近一步減少內核規模。
3.1 串口程序的設計
Linux對所有各類(lèi)設備文件的輸入輸出擦作看上去就像對普通文件的輸入輸出一樣。所以L(fǎng)inux對串口的操作,也是通過(guò)設備文件訪(fǎng)問(wèn)的。為了訪(fǎng)問(wèn)串口,只需打開(kāi)相應的設備文件即可。在Linux下,默認串行口COM1和COM2對應的設備分別為/dev/ttyS0 和/dev/ttyS1。
(1) 打開(kāi)串口是通過(guò)使用標準的文件打開(kāi)函數操作:
int fd;
/*以讀寫(xiě)方式打開(kāi)串口*/
fd = open( /dev/ttyS0, O_RDWR);
if (-1 == fd){
/* 不能打開(kāi)串口一*/
perror( 提示錯誤!);
}
(2) 設置串口
最基本的設置串口包括波特率設置,效驗位和停止位設置。串口的設置主要是設置 struct termios 結構體的各成員值。
struct termio
{ unsigned short c_iflag; /* 輸入模式標志 */
unsigned short c_oflag; /* 輸出模式標志 */
unsigned short c_cflag; /* 控制模式標志*/
unsigned short c_lflag; /* local mode flags */
unsigned char c_line; /* line discipline */
unsigned char c_cc[NCC]; /* control characters */
};
(3) 發(fā)送數據
char buffer[1024];int Length;int nByte;nByte = write(fd, buffer ,Length)
(4) 讀取串口數據
使用文件操作read函數讀取,如果設置為原始模式(Raw Mode)傳輸數據,那么read函數返回的字符數是實(shí)際串口收到的字符數??梢允褂貌僮魑募暮瘮祦?lái)實(shí)現異步讀取,如fcntl,或者select等來(lái)操作。
評論