一个Linux下基于电话线路的数据通信程序的设计与实现
摘 要
本设计基于Linux操作系统,控制本地MODEM通过电话线网向异地终端机所带MODEM拨号,并实现两台MODEM之间数据传输,达到两台计算机之间数据通信的目的。 MODEM与计算机RS-232串行端口相连,Linux通过POSIX termios接口控制计算机串行端口,方便实现了对计算机串行端口的设置和数据读写。计算机(DTE)与MODEM(DCE)之间数据交换,以及计算机对MODEM的控制,就是计算机对串行端口的读写。http://www.16sheji8.cn/
本文作者完成了对RS-232串行端的设置和读写操作,利用AT命令控制MODEM拨号,和一个文件传输协议,实现了两台PC机利用MODEM通过公用电话网,传送和接收文件。本设计旨在使没有安装网络的用户,利用56K MODEM,通过电话线网方便和对方传输数据。相比较Internet网络,电话线网更安全,分布更广泛。本设计就是利用了电话线网的广泛性和安全性。
关键词:Linux;串行端口;MODEM
The Design and Implementation of Data Transportation through Telephone Line in Linux
Abstract
The purpose of the design is to control the local MODEM to dial remote terminal by telephone line base on Linux operating system. At the same time,it can make the data transmit between two MODEMs to achieve the purpose of data transportation. the MODEM is connected to the computer through the serial port RS-232. Linux can control the serial port of the computer by POSIX termios interface. That can carry out the setting and data reading/writing of the serial port, the data transmit between computers (DTE) and MODEM (DCE), and the control from the computer to the MODEM, namely, the reading/writing of the serial port from the computer.
The author of this paper accomplishes the setting and reading/writing operation, using the AT commands to control the MODEM dialing, and a transport protocols for files. All of these make two PCs send and receive files from the public telephone line by using the MODEM. The design is intended to make the user who has not installed the network to transmit data with others by telephone lines using the 56k MODEM. Compared with the Internet, the telephone line is safer and widely distributed. The design makes use of the universality and the safety of the telephone line.
Key words: Linux; serial port; MODEM
目 录
论文总页数:24页
1 引 言 2
1.1 设计背景 2
1.2 本设计的意义 2
1.3 设计方法 2
1.4 理论依据 2
2 设计理论依据 2http://www.16sheji8.cn/
2.1 Linux 2
2.2 串行端口简介 2
2.2.1 串行通迅 2
2.2.2 RS-232-C 2
2.2.3 异步通迅 3
2.3 MODEM简介 4
2.3.1 MODEM 4
2.3.2 AT命令 4
3 系统开发环境 5
3.1 系统开发环境 5
3.2 gcc简介 5
4 程序的设计 6
4.1 设计概要 6
4.2 RS-232-C建立与打开 7
4.3 串口设置与读写 8
4.3.1 c_cflag控制项设置 8
4.3.2 c_iflag、c_lflag和c_oflag设置 9
4.3.3 c_cc控制字符设置 10
4.3.4 读写串口 11
4.4 MODEM的控制 12
4.4.1 MODEM的两种工作状态 12
4.4.2 DTE与DCE的握手 12
4.4.3 MODEM拨号连接 13
4.5 文件传输协议的设计 14
5 编码实现 16
5.1 串口初始化实现 16
5.2 串口读写的实现 17
5.3 MODEM初始化的实现 18
5.4 MODEM状态读取的实现 20
6 程序测试 20
6.1 串口传输文件测试 20
6.2 MODEM拨号连接并传输数据测试 21
结 论 21
参考文献 22
致 谢 23
声 明 24 http://www.16sheji8.cn/
1 引 言
1.1 设计背景
现在,随着计算机网络技术的发展,国民收入的提高,互联网走进了千家万户,但仍有很多计算机用户并没有安装宽带或其它网络设备。电话已经发展了一百多年,但互联网只出现了不到五十年,英特网所分布的范围远远比不上公用电话网。
1.2 本设计的意义
如果想传送份文件给对方,却苦恼于无法上互联网,那么用MODEM通过电话线发送文件就变得非常有用处了。还有些特殊情况,当单位或工厂需要几台计算机之间数据共享时,进入互联网有安全隐患,配置局域网费用又很高,而且需要共享的数据很小,仅按字节计算,这时候利用MODEM通过公用电话网或电话专线传输数据,既经济,又安全,维护也非常简单。
1.3 设计方法
本设计基于Linux操作系统,用POSIX termios函数控制计算机串口,使用AT指令操作MODEM进行初始化及拨号连接,最后用一个自编的文件传输协议传输文件。
整个程序使用C语言实现。此次设计之所以选择Linux,是因为Linux有着丰富的应用程序和开发工具,可以支持各种硬件平台和外部设备;Linux又是完全开放的操作系统,很大程度上,Linux的开放性,赋予了其无穷的生命力。GCC的发展与Linux发展息息相关,相辅相承。所以在Linux平台的基础上,选用GCC编绎代码。AT指令做为MODEM的标准化语言,提供了丰富的MODEM初始化、拨号、挂机等等命令,AT命令简单的操作方式,使MODEM控制变得很方便。
1.4 理论依据
本次设计所需要的开发环境的搭建并不复杂,可是因为程序直接对计算机硬件进行操作,需要对RS-232串行端口有比较深入的了解,必须清楚各引脚电信号的作用,串口的工作方式,针对不同工作的方式,进行不同的设置。MODEM的功能非常丰富,这给程序的实现也带来一定难度。通过完成本设计,既有助于深入了解计算机接口,又为硬件控制编程打下了一定基础,而且还能熟悉Linux程序设计。
2 设计理论依据
2.1 Linux
Linux操作系统核心最早是由芬兰的Linus Torvalds 1991年8月在芬兰赫尔辛基大学上学时发布的[那年Torvals 25岁],后来经过众多世界顶尖的软件工程师的不断修改和完善,Linux得以在全球普及开来,在服务器领域及个人桌面版得到越来越多的应用,在嵌入式开发方面更是具有其它操作系统无可比拟的优势,并以每年100%的用户递增数量显示了Linux强大的力量。
本设计中使用的POSIX(UNIX可移植标准)终端控制函数,少量修改就可以运行于IRIX®, HP-UX, SunOS®, Solaris®, Digital UNIX®, Linux®,和许多其它的类UNIX操作系统。在不同的类UNIX操作系统之间的最大差别是串口设备和锁定文件的名字。并且Linux支持各种体系结构的计算机,所以本设计虽然仅在个人PC机上实现,但它对于不同体系结构的计算机,或者不同的类UNIX操作系统,都有很好的可移植性。http://www.16sheji8.cn/
2.2 串行端口简介
2.2.1 串行通迅
计算机一次传输一位或多位的信息(数据),串行是指一次传输一位数据。串行通讯包括了大多数的网络设备、键盘、 麦克风,调制解调器和终端。当进行串行通讯时,传送或接收的每个字(例如:字节或字符)是以每次一位传输的。 每位或者为on 或者 off。有时也能听到以mark 表示 on 状态和 space 表示 off 状态。
串行数据的速度常表示为比特每秒 ("bps") 或波特率 ("波特")。这只是用于表示每秒能够传送的1和0的数量。追溯到计算机时代的早期,300波特被认为是很快的速度,但今天的计算机能够控制RS-232速度高达115,200波特!当波特率超过1,000,通常将看到速度被表示为千波特,或kbps (例如9.6k, 19.2k等等)。对于超过1,000,000的速度表示为兆波特,或者Mbps (例如1.5Mbps)。
2.2.2 RS-232-C
RS-232-C是标准的串行通讯电气接口,是由美国EIA(电子工业联合会)与BELL等公司一起开发并于1969年公布的通信协议,这个标准对串行通信接口的有关问题,如信号线功能、电器特性都作了明确规定,它适合于数据传输速率在0~20 000bit/s范围内的通信。由于通信设备厂商都生产与RS-232-C制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信中广泛采用,它不仅已被内置于每一台计算机,同时也已被内置于从微控制器到主机的多种类型的计算机及其相连接的设备。RS-232-C常用于连接到一个MODEM,其他拥有RS-232接口的设备包括打印机、数据采模块、测试装置和控制回路。另外,RS-232也可以直接应用于任何类型计算机之间的简单连接。
EIA-RS-232-C对电器特性、逻辑电平和各种信号线功能都作了规定。
在TxD和RxD上:
•逻辑1(MARK) = -3V~-15V。
•逻辑0(SPACE) = +3V~+15V。
在RTS、CTS、DSR、DTR和DCD等控制线上:
•信号有效(接通,ON状态,正电压) = +3V~+15V。
•信号无效(断开,OFF状态,负电压) = -3V~-15V。
由于RS-232-C并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同,现在最常见的是DB-9连接器。
DB-9的信号引脚说明如表1所示:
表1 RS-232 各引脚含义
RS-232 Signals
Pin 描述 Pin 描述
1 DCD - Data Carrier Detect 6 DSR - Data Set Ready
2 RXD - Received Data 7 RTS - Request To Send
3 TXD - Transmitted Data 8 CTS - Clear To Sendhttp://www.16sheji8.cn/
4 DTR - Data Terminal Ready 9 RI - Ring Detect
5 GND - Logic Ground
还有其它两种常见的串行接口标准是RS-422和RS-574。RS-422使用低电压和微分信号,允许线缆长度到 1000英尺 (300米)。RS-574定义了9-pin PC串行接口和电压。
2.2.3 异步通迅
为使计算机理解进入它的串行数据,它需要一些途径决定哪里是字符的开始和结束。这里仅讨论异步串行数据。
在异步模式下,串行数据线保持在mark (1)状态,直到有字符传送。一位起始start 位、字符内容的每一位、一位可选的校验位、以及一位或一位半的终止位。起始位始终是一个 space (0),从而告诉计算机新的串行数据到来。数据能够在任何时候传送或接受,所以称做异步。