串口通信基础

来源:互联网 发布:acrobat xi pro mac版 编辑:程序博客网 时间:2024/05/01 20:47

做嵌入式开发,天天都要用到串口,所以今天晚上又认真学习了串口通信方面的基础知识:  

    串口是计算机和仪器仪表的一种通信协议,大多数计算机包含两个基于RS232的串口。串口通信协议可以用于获取远程采集设备的数据。
    1.串口按位bit发送和接收数据(比按字节byte的并行通信慢);
    2.串口可以使用一根线同时发送和接收数据(并行不能),是异步通信;
    3.串口通信的距离长度可达1200M(并行设备任意两个设备长度不能够超过2M;
串口通信使用3根线:地线、发送线、接收线
串口通信最重要的参数是波特率、数据位、停止位、奇偶校验位。
    1.波特率:可称为时钟周期n HZ,衡量通信速度的参数,表示每秒钟传送的bit的个数。波特率和距离成反比,高波特率放在近距离的仪器

间通信(如GPIB)
    2.数据位(5、7、8):衡量通信中实际数据位的参数,标准的ASCII码是0~127(7位),扩展的ASCII码是0~255(8位)对应标准的ASCII

码,每个数据包使用7位数据,是指一个字节。包括开始/停止为,数据位,奇偶校验位。
    3.停止位:单个包的最后一位。典型的值为1、1.5、2,不仅仅表示传输的结束,并且提供计算机校正时钟同步的机会。停止位越多,不同

时钟同步的容忍程度越大。
    4.奇偶校验位(偶、奇、高、低):串口通信中的一种简单的检错方式。通信中可以没有校验位。对于奇偶校验,串口设置校验位(数据

位后面的一位),用一个值确保传输的数据有偶个或奇个逻辑高位。如011,对于偶校验,校验位为0,保证逻辑高位数为偶数个。如果是奇校

验,则校验位为1,这样有三个逻辑高位。
    RS-232是IBM-PC及其兼容机上的串行连接标准。可连接鼠标、打印机或Modem。RS-232只限于pc串口和设备间点对点的通信。最远距离是50

英尺。
DB-9针连接头
-------------
/ 1 2 3 4 5 / 
 / 6 7 8 9 / 
  ---------
从计算机连出的线的截面。
RS-232针脚的功能:

数据: 
TXD(pin 3):串口数据输出
RXD(pin 2):串口数据输入

地线GND(pin5):地线

握手:
RTS(pin 7):发送数据请求
CTS(pin 8):清除发送
DSR(pin 6):数据发送就绪
DCD(pin 1):数据载波检测
DTR(pin 4):数据终端就绪

其他:
RI(pin9):铃声指示
RS-232通信方式允许简单连接三根线:Tx、Rx和地线。但是,对于数据传输,双方必须对数据定时使用相同的波特率。

握手:
RS-232通信方式允许简单连接三线:Tx、Rx和地线。但是对于数据传输,双方必须对数据定时采用使用相同的波特率。尽管这种方法对于大多

数应用已经足够,但是对于接收方过载的情况这种使用受到限制。这时需要串口的握手功能。在这一部分,我们讨论三种最常用的RS-232握手

形式:软件握手、硬件握手和Xmodem。

a,软件握手:我们讨论的第一种握手是软件握手。通常用在实际数据是控制字符的情况,类似于GPIB使用命令字符串的方式。必须的线仍然是

三根:Tx,Rx和地线,因为控制字符在传输线上和普通字符没有区别,函数SetXModem允许用户使能或者禁止用户使用两个控制字符XON和OXFF

。这些字符在通信中由接收方发送,使发送方暂停。
例如:假设发送方以高波特率发送数据。在传输中,接收方发现由于CPU忙于其他工作,输入buffer已经满了。为了暂时停止传输,接收方发送

XOFF,典型的值是十进制19,即十六进制13,直到输入buffer空了。一旦接收方准备好接收,它发送XON,典型的值是十进制17,即十六进制11

,继续通信。输入buffer半满时,LabWindows发送XOFF。此外,如果XOFF传输被打断,LabWindows会在buffer达到75%和90%时发送XOFF。显

然,发送方必须遵循此守则以保证传输继续。

b,硬件握手:第二种是使用硬件线握手。和Tx和Rx线一样,RTS/CTS和DTR/DSR一起工作,一个作为输出,另一个作为输入。第一组线是RTS

(Request to Send)和CTS(Clear to Send)。当接收方准备好接收数据,它置高RTS线表示它准备好了,如果发送方也就绪,它置高CTS,表

示它即将发送数据。另一组线是DTR(Data Terminal Ready)和DSR(Data Set Ready)。这些现主要用于Modem通信。使得串口和Modem通信他

们的状态。例如:当Modem已经准备好接收来自PC的数据,它置高DTR线,表示和电话线的连接已经建立。读取DSR线置高,PC机开始发送数据。

一个简单的规则是DTR/DSR用于表示系统通信就绪,而RTS/CTS用于单个数据包的传输。

在LabWindows,函数SetCTSMode使能或者禁止使用硬件握手。如果CTS模式使能,LabWindows使用如下规则:
当PC发送数据:
RS-232库必须检测CTS线高后才能发送数据。

当PC接收数据:
如果端口打开,且输入队列有空接收数据,库函数置高RTS和DTR。
如果输入队列90%满,库函数置低RTS,但使DTR维持高电平。
如果端口队列近乎空了,哭喊数置高RTS,但使DRT维持高电平。
如果端口关闭,库函数置低RTS和DTR。

c,XModem握手:最后讨论的握手叫做XModem文件传输协议。这个协议在Modem通信中非常通用。尽管它通常使用在Modem通信中,XModem协议能

够直接在其他遵循这个协议的设备通信中使用。在LabWindows中,实际的XModem应用对用户隐藏了。只要PC和其他设备使用XModem协议,在文

件传输中就使用LabWindows的XModem函数。函数是XModemConfig,XModemSend和XModemReceive。

XModem使用介于如下参数的协议:start_of_data、end_of_data、neg_ack、wait_delay、start_delay、max_tries、packet_size。这些参数

需要通信双方认定,标准的XModem有一个标准的定义:然而,可以通过XModemConfig函数修改,以满足具体需要。这些参数的使用方法由接收

方发送的字符neg_ack确定。这通知发送方其准备接收数据。它开始尝试发送,有一个超时参数start_delay;当超时的尝试超过max_ties次数

,或者收到接收方发送的start_of_data,发送方停止尝试。如果从发送方收到start_of_data,接收方将读取后继信息数据包。包中含有包的

数目、包数目的补码作为错误校验、packet_size字节大小的实际数据包,和进一步错误检查的求和校验值。在读取数据后,接收方会调用

wait_delay,然后想发送方发送响应。如果发送方没有收到响应,它会重新发送数据包,直到收到响应或者超过重发次数的最大值max_tries。

如果一直没有收到响应,发送方通知用户传输数据失败。
由于数据必须以pack_size个字节按包发送,当最后一个数据包发送时,如果数据不够放满一个数据包,后面会填充ASCII码NULL(0)字节。这

导致接收的数据比原数据多。在XModem情况下一定不要使用XON/XOFF,因为XModem发送方发出包的数目很可能增加到XON/OFF控制字符的值,从

而导致通信故障。

原创粉丝点击