新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于嵌入式系统的串口网络服务器的设计

基于嵌入式系统的串口网络服务器的设计

作者: 时间:2009-09-02 来源:网络 收藏

2.3 SDRAM接口电路
SDRAM是高速的动态随机存取存储器,它的同步接口和完全流水线的内部结构使其拥有极大的数据速率。目前SDRAM时钟频率已达100MHz以上。另外他们的行、列地址线共用。由行地址选通(CAS)、列地址选通(RAS)信号分时控制。SDRAM内部以bank位组织,可由行、列地址寻址。另外为了保持内部数据还必须进行刷新。
与Flash存储器相比较,SDRAM不具有掉电保持数据的特性,但其存取速度大大高于Flash存储器,且具有读/写的属性。因此,SDRAM在中主要用作程序的运行空间、数据及堆栈区。当启动时,CPU首先从复位地址0x0处读取启动代码,在完成的初始化后,程序代码一般应调入SDRAM中运行,以提供系统的运行速度。同时,系统及用户堆栈、运行数据也都存放在SDRAM中。与Flash存储器相比,SDRAM的控制信号较多,其连接电路也相对复杂。
本系统采用两片HY57V641620并联构成32位的SDRAM存储系统,其中一片为高16位,另一片为低16位。两片HY57V641620的CLK端接的SDCLK端。两片HY57V641620的CLE端接S3C4510B CLE端。两片HY57V641620的A11~A0接S3C4510B ADDR11>~ADDR0>;高16位片的DQ15~DQ0接S3C4510B 的数据总线的高16位XDATA31>~XDATA16>;低16位片的DQ15~DQ0接S3C4510B的数据总线的低16位XDATA15>~XDATA0>。
2.4 RTL8201接口电路
RTL8201是Realtek公司生产的一种全双工以太网控制器,由于其优良的性能、廉价的价格,使其在市场上10MbpsiISA总线网卡中占有相当的比例。按数据链路的不同,可以将RTL8201内部划分为远程DMA(remote,DMA)通道和本地DMA(local DMA)通道两部分。本地DMA完成控制器与网线的数据交换,主处理器收发数据只需对远程DMA操作。当主处理器要向网上发送数据时,先将一帧数据通过远程DMA通道送到RTL8201中的发送缓存区,然后发出传送数据命令。RTL8201在完成了上一帧的发送后,再完成此帧的发送。RTL8201接收到的数据通过MAC比较,CRC校验后,由FIFO存到接收缓冲区,收满一帧后,以中断的方式通知主处理器。
由于S3C4510B片内已有带MII接口的MAC控制器,而RTL8201也提供了MII接口,各种信号的定义也很明确,因此RTL8201与S3C4510B的连接也比较简单。直接将两者的同名端连接即可。
2.5 MAX232接口电路
MAX232芯片时MAXIM公司生产的低功耗、单电源双RS232发送/接收器。适用于各种EIA-232E和V.28/V.24的通信接口。MAX232芯片内部有一个电源电压变换器,可以把输入的+5V电源变换城RS-232C输出电平所需10V电压,所以采用此芯片接口的串行通信系统只要单一的+5V电源就可以。
现选用其中一路发送/接受。T1I接S3C4510B的TXD0端,R1O接S3C4510B的RXD0端。因为MAX232具有驱动能力,所以不需要外加驱动电路。

本文引用地址:https://www.eepw.com.cn/article/152360.htm

3 软件

本系统采用uClinux作为操作系统。与一般全靠硬件实现的服务器比较起来,配置要复杂,需要用户具有一定的技术背景,不过因为带有操作系统,其灵活性也是硬件服务器所不能比拟的。用户可以通过编写应用程序,来随意扩展所需的功能。
Uclinux是一个完全符合GNU/GPL公约的操作系统,完全开发代码,并且免费。Uclinux即“微控制领域中的Linux系统”,具有以下优点:
(1) Linux是开放源代码的,不存在黑箱技术,遍布全球的众多Linux爱好者都是Linux开发者的强大技术支持者。
(2) Linux源代码随处可见,注释丰富,文档齐全,易于解决各种问题。
(3) Linux的内核小,效率高。
(4) Linux内核的结构在网络方面是非常完整的,它提供了对包括十兆位、百兆位及千兆位的以太网络,还有无线网络,以及光纤等的支持。
(5) Linux在内核结构的中考虑适应系统的可裁减性的要求。可将无用的代码去除掉,近一步减少内核规模。
3.1 程序的
Linux对所有各类设备文件的输入输出擦作看上去就像对普通文件的输入输出一样。所以Linux对串口的操作,也是通过设备文件访问的。为了访问串口,只需打开相应的设备文件即可。在Linux下,默认串行口COM1和COM2对应的设备分别为/dev/ttyS0 和/dev/ttyS1。
(1) 打开串口是通过使用标准的文件打开函数操作:
int fd;
/*以读写方式打开串口*/
fd = open( /dev/ttyS0, O_RDWR);
if (-1 == fd){
/* 不能打开串口一*/
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) 发送数据
char buffer[1024];int Length;int nByte;nByte = write(fd, buffer ,Length)
(4) 读取串口数据
使用文件操作read函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read函数返回的字符数是实际串口收到的字符数。可以使用操作文件的函数来实现异步读取,如fcntl,或者select等来操作。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭