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