420 likes | 637 Views
第 10 章 串行通信 10.1 串行通信概述 10.1.1 串行通信的特点 所谓串行,是指串行接口与外设之间有通信是串行的, CPU 与串行接口之间的通信总是并行的。串行通信与并行通信的对比如图 10-1 所示。. 图 10-1 串行通信与并行通信的对比.
E N D
第10章 串行通信10.1 串行通信概述10.1.1 串行通信的特点所谓串行,是指串行接口与外设之间有通信是串行的,CPU与串行接口之间的通信总是并行的。串行通信与并行通信的对比如图10-1所示。第10章 串行通信10.1 串行通信概述10.1.1 串行通信的特点所谓串行,是指串行接口与外设之间有通信是串行的,CPU与串行接口之间的通信总是并行的。串行通信与并行通信的对比如图10-1所示。 图10-1 串行通信与并行通信的对比
在串行通信中,只用一根通信线在一个方向上传输信息,这根线上既要传送数据信息又要传送联络信息,这是串行通信的首要特点。为了能够识别在一根线上串行传送的信息流中,哪一部分是联络信息,哪一部分是数据信息,就需要通信双方事先作出一系列的通信约定,这就是协议。因此,串行通信的第二个特点是它的信息格式必须事先用协议约定。10.1.2 串行通信的基本概念1.数据通信方式 按照同一时刻数据流的方向可分成三种基本传送模式:全双工、双工和单工传送。
2 .串行通信方式 (1)异步通信方式 异步通信方式的特点是每发送一个字符前先发送起始位,发送完字符后再发送结束位,以此作为双方同步的依据。这种方式对硬件要求较宽松,电路简单,但传输效率不高。 (2)同步串行通信方式 同步串行通信方式中一次连续传输一块数据,开始前使用同步信号作为同步的依据。由于连续传输一个数据块,故收发双方时钟必须相当一致,否则时钟漂移会造成接收方数据辨认错误。这种方式下往往是发送方在发送数据的同时也通过一根专门的时钟信号线同时发送时钟信息,接收方使用发送方的时钟来接由数据。同步串行通信方式传输效率高,但对硬件要求高,电路结构复杂。
3.串行通信协议 常采用的通信协议有两类:异步协议和同步协议。 (1)起止式异步协议起止式异步协议一帧数据的格式如图10-3所示。 图10-3 异步串行通信协议字符格式
起止式异步协议的特点是一个字符一个字符地传输,而且每传送一个字符都是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。每一个字符的前面都有1位起始位(低电平,逻辑值0),字符本身由5~8位数据位组成,数据有效位后面是1位校验位,也可以无校验位,最后是停止位,停止位宽度为1位、1.5位或2位,停止位后面是不定长度的空闲位。停止位和空闲位都规定为高电平(逻辑1),这样就保证起始位开始处一定有一个下跳沿。这种格式是靠起始位和停止位来实现字符的界定或同步的,故称为起止式协议。 起止式异步协议的特点是一个字符一个字符地传输,而且每传送一个字符都是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。每一个字符的前面都有1位起始位(低电平,逻辑值0),字符本身由5~8位数据位组成,数据有效位后面是1位校验位,也可以无校验位,最后是停止位,停止位宽度为1位、1.5位或2位,停止位后面是不定长度的空闲位。停止位和空闲位都规定为高电平(逻辑1),这样就保证起始位开始处一定有一个下跳沿。这种格式是靠起始位和停止位来实现字符的界定或同步的,故称为起止式协议。 异步通信协议在每个字符的前后加上起始位和停止位这样一些附加位,降低了传输效率,大约只有80 %。因此,异步协议一般用在数据传输速率较低的场合(小于19.2 Kbit/s)。在高速传送时,一般要采用同步协议。
(2) 同步协议 同步协议又有面向字符和面向比特两种。本处主要介绍面向字符的同步协议。 同步通信中用一个或两个特定的字符(同步字符)来标识一次通信的开始。通信过程中数据连续发送,数据间不留空隙,数据信息后是两个错误校验字符。同步通信中一帧信息的格式如图10-4所示。 图10-4同步通信帧格式同步通信中同步的手段除靠数据之前加同步字符外,也可以靠在发送和接收方之间另用一根时钟信号线单独传送同步信号来实现。这种情况称为外同步。外同步帧格式如图10-4(c)所示。相应地,通过同步字符实现同步的方法称为内同步,对应的帧格式分别如图10-4(a),10-4(b)所示。
4.信息的校验方式(1)奇偶校验 奇偶校验硬件电路简单,但只能发现奇数位错误且不能纠错。 (2)循环冗余码校验CRC CRC校验硬件电路复杂,但检错率极高,且具有纠错能力。5.波特率 并行通信中,传输速率是以每秒传送多少字节(Byte/s)来表示。而在串行通信中,是用每秒传送的位数即波特率(bps,Bit/s)来表示。因此,1bps=1位/秒。6.信号的调制与解调 进行长距离传输时,需要在发送端将数字信号转换成适合电话网传输的模拟信号,这一过程称为“调制”,在接收端将电话网上传输的模拟信号还原成原来的数字信号,这一过程称为“解调”。
10.2RS-232C串行接口标准10.2.1 电气特性1.电平规定 对于数据发送TxD和数据接收RxD线上的信号电平规定为:逻辑1(MARK)=-3~-15V,典型值为-12V;逻辑0(SPACE)=+3~+15V,典型值为+12V。 对于RTS、CTS、DTR和DCD等控制和状态信号电平规定为:信号有效(接通,ON状态)=+3~+15V,典型值为+12V;信号无效(断开,OFF状态)=-3~-15V,典型值为-12V。2.电平转换 图10-5为RS-232C与TTL电路之间进行电平转换的示意图。
图10-5 TTL与RS-232C之间的电平转换 3.传输距离及通信速率RS-232C标准规定:DTE和DCE之间最大传输距离为15m。 传输数据速率不能高于20Kbps。
10.2.2 接口信号功能1.连接器 最常用的RS-232C连接器是DB-9型连接器,如图10-6所示。 图10-6 DB-9型连接器 2.信号含义 请求发送RTS:此信号表示DTE请求DCE发送数据。允许发送CTS:此信号表示DCE准备好接收DTE发来的数据。
数据装置准备好DSR:此信号有效(ON状态)时表明 MODEM处于可以使用的状态。数据装置准备好DSR:此信号有效(ON状态)时表明 MODEM处于可以使用的状态。 数据终端准备好DTR:此信号有效(ON状态)时表明数 据终端可以使用。载波检出DCD:此信号用来表示DCE已接通通信信道, 通知DTE准备接收数据。振铃指示RI:当MODEM检测到线路上有振铃呼叫信号时, 使该信号有效(ON状态)。发送数据TxD:通过TxD线计算机将串行数据发送到DCE。接收数据RxD:通过RxD线计算机接收从DCE送来的串行数 据。GND:地。10.2.3 通信连接1.远距离连接远距离连接需要加调制解调器MODEM,如图10-7所示。
图10-7 远距离连接 2.近距离连接近距离连接不用MODEM,如图10-8所示。 图10-8 近距离连接
10.3 串行通信接口芯片8251A 10.3.1 8251A的内部结构和引脚 8251A的引脚如图10-9所示. 图10-9 8251A的引脚
内部结构如图10-10所示。 图10-10 8251A的内部结构
8251A的内部结构8251A的内部分为数据总线缓冲器、读/写控制逻辑、发送器、接收器和调制解调器控制几部分。下面分别予以说明。8251A的内部结构8251A的内部分为数据总线缓冲器、读/写控制逻辑、发送器、接收器和调制解调器控制几部分。下面分别予以说明。 1 . 数据总线缓冲器 数据总线缓冲器是与CPU交换数据信息的通道。与数据总线缓冲器有关的引脚有D7~D0。 D7~D0: 双向三态数据总线,和CPU系统数据总线相连。 2 . 读/写控制逻辑 读/写控制逻辑用来配合数据总线缓冲器工作,接收各类读/写控制信号。与读/写控制逻辑相连的引脚有以下几个。
RD: 读信号,输入,低电平有效。有效时表示CPU正从8251A读数据或状态信息。 WR: 写信号,输入,低电平有效。有效时表示CPU正把控制字或数据写入8251A。 CS: 片选信号,输入,低电平有效。有效时表示8251A已被选中,可进行读/写操作; CS无效则数据总线处于高阻状态,此时8251A 不接收RD和WR信号。 C/D: 控制/数据信号,输入。此信号决定当前数据总线上信息流是控制字还是数据。C/D=1,传送的是命令、控制、状态等控制字;C/D=0,传送的是数据。
RESET: 复位信号,输入,高电平有效。在此引脚上加上宽度为时钟6倍的高电平信号后,8251A即复位,复位后各寄存器处于复位状态,收、发线路均处于空闲状态。通常该信号与系统的复位线相连。 CLK: 工作时钟,输入,由外部时钟源提供,为芯片内部电路提供定时,并非发送或接收数据的时钟。在同步方式下,CLK的频率要大于接收器或发送器输入时钟(TxC或RxC)频率的30倍;在异步方式下,CLK的频率要大于接收器或发送器输入时钟频率的4.5倍。另外,CLK的周期要在0.4~1.35 μs范围内。
3 .接收器 接收器负责从串行通信线上接收数据,并完成相关的错误检测、串并转换等。与接收器有关的引脚有以下几个。 RxD: 数据接收端,输入。接收由外设发来的串行数据。 RxRDY: 接收器准备好信号,输出,高电平有效。RxRDY=1表示8251A已接收到一个数据,正等待CPU取走。在中断方式下,此引脚可作为中断请求信号;在查询方式下,此引脚可作为联系信号。当CPU从8251A读取一个字符后,此引脚变为无效,直到再接收到一个新字符为止。
SYNDET/BRKDET: 双功能检测信号,高电平有效。 对于同步方式,此引脚为同步检测信号SYNDET。当8251A在内同步方式下工作时,此引脚为输出引脚。当8251A检测到同步字符(双同步情况下检测到了第二个同步字符)后,SYNDET变为高电平,用来表明8251A当前已经达到了同步。当8251A在外同步方式下工作时,此引脚为输入引脚。外同步方式下有专门的外部电路处理同步问题,此电路检测到同步信号后通过SYNDET端向8251A输入一个高电平信号,8251A的接收控制电路会立即脱离对同步字符的搜索过程,开始接收数据。 对于异步方式,此引脚为间断检出信号BRKDET,用来表示RxD端处于工作状态还是接收到断缺字符。BRKDET=1表示接收到对方发来的间断码。
RxC: 接收时钟信号,输入。在同步方式下,RxC的时钟频率应等于接收波特率;在异步方式下,RxC的时钟频率可是接收波特率的1倍、16倍或64倍,取决于工作方式控制字的设置。 接收器的工作过程: 接收时,8251A检测RxD信号线,当从RxD线上检测到起始位(异步方式下)或同步字符(同步方式下,但若是外同步方式,则同步信号由外电路通过SYNDET引脚提供)后,8251A即开始接收数据,每接收完一个字符后,接收电路完成错误校验并进行串并格式转换,然后将转换好的并行数据放入接收缓冲器中,同时置RxRDY引脚为有效电平,以通知CPU取走数据。
4 .发送器 发送器负责将并行数据转换为串行数据并加上起始、结束、校验信息后从串行通信线上发送出去。与发送器有关的引脚有以下几个。 TxC: 发送时钟信号,输入。对于同步方式,TxC的时钟频率应等于发送数据的波特率。对于异步方式,TxC的时钟频率可是发送波特率的1倍、16倍或64倍,取决于工作方式控制字的设置。 TxD: 数据发送引脚,输出,由CPU送来的并行数据在这条线上被串行地发送出去。 TxRDY: 发送器准备好信号,输出,高电平有效。TxRDY=1表示
8251A已可以接收CPU的数据(发送字符)写入。中断方式下,此引脚可作为中断请求信号,通知CPU写入下一个待发送字符;查询方式下,此引脚可作为联络信号。不论是中断方式还是查询方式,当8251A从CPU处得到一个字符后,TxRDY引脚便变为低电平。8251A已可以接收CPU的数据(发送字符)写入。中断方式下,此引脚可作为中断请求信号,通知CPU写入下一个待发送字符;查询方式下,此引脚可作为联络信号。不论是中断方式还是查询方式,当8251A从CPU处得到一个字符后,TxRDY引脚便变为低电平。 TxEMPTY: 发送器空信号,输出,高电平有效。TxEMPTY有效,表示一个发送动作的完成。 发送器的工作过程如下: 8251A发送数据的前提是CTS引脚有效且TxEN(命令字中的发送允许位)有效。 CPU首先向8251A写入发送数据,数据以并行格式存于8251A的发送器内,然后并串转换电路从发送器中取出数据并将其转变为串行格式,最后沿TxD引脚发送出去。
当数据从发送器移入并串转换电路后,8251A即可以接收下一个发送数据,此时TxRDY引脚变为有效。当数据真正从TxD引脚上发送出去后,TxEMPTY引脚变为有效。当数据从发送器移入并串转换电路后,8251A即可以接收下一个发送数据,此时TxRDY引脚变为有效。当数据真正从TxD引脚上发送出去后,TxEMPTY引脚变为有效。 在异步方式下,8251A在发送一个字符时自动添加一个起始位,并按软件要求添加奇偶校验位和结束位。在同步方式下,8251A会按软件要求先发送一个或两个同步字符,然后再发送数据块。在发送完数据块后,若程序要求添加奇偶校验位;8251A会在数据后添加奇偶校验位;若程序不要求添加,则8251A不会添加任何附加位。同步发送时,会遇到这样的情况,8251A正在发送数据,而CPU却来不及提供新的数据给8251A,这时,8251A的发送器会自动插入同步字符,以满足同步发送时不允许数据间存在间隙的要求。
5 .调制解调器控制电路 调制解调器控制电路用来控制8251A和调制解调器的连接。8251A不支持全部的RS232C信号,它只是提供了下面一些信号。 DTR: 数据终端准备好,输出,低电平有效。 DSR: 数据装置准备好,输入,低电平有效。 RTS: 发送方请求发送信号,输出,低电平有效。 CTS: 清除发送信号,输入,低电平有效。 以上四个信号与RS232C中的同名信号含义完全相同,只是电平极性不同。
8251A发送数据时要求CTS引脚必须有效。实际应用时,DTR,DSR和RTS这3个引脚可以悬空不用,CTS引脚必须为低电平,当8251A仅工作在接收状态而不要求发送数据时,CTS也可以悬空。8251A发送数据时要求CTS引脚必须有效。实际应用时,DTR,DSR和RTS这3个引脚可以悬空不用,CTS引脚必须为低电平,当8251A仅工作在接收状态而不要求发送数据时,CTS也可以悬空。 10.3.2 8251A的连接使用 8251A,CPU与外设(Modem)间的典型连接如图10-11所示。
10.3.38251A的控制字 8251A有三种控制字,分别为工作方式字、工作命令字和状态字。 1 .工作方式控制字 此控制字决定8251A是工作在异步方式还是同步方式,同时还要指定帧的格式。工作方式字的格式如图10-12所示。 D1D0: 确定工作于同步方式还是异步方式。D1D0=00为同步方式。D1D0=01,10或11为异步方式,同时,这三个取值还分别指定波特率因子为1,16或64。 波特率因子为输入时钟(RxC或TxC引脚)频率与通信波特率之比值。
D3D2: 确定每个字符的位数。D3D2=00~11分别对应字符位数为5~8位。 D5D4: 确定是否需要奇偶校验及校验方式。 D7D6: 此两位含义因同步方式还是异步方式而异,异步方式(D1D0≠00)时用于确定停止位的位数;同步方式时D6用来确定是内同步还是外同步,D7用来确定同步字符的个数。外同步方式时,同步字符只用于发送,接收时不起作用。 2 .工作命令控制字 工作命令字的作用是确定8251A的实际操作。只有写入工作命令字后才能使8251A处于相应的运行状态:接收或发送数据。工作命令控制字的格式如图10-13所示。
D0: 允许发送。D0=1,允许8251A向外发送数据;D0=0,禁止8251A发送数据。 D1: 数据终端准备就绪。此位控制8251A的DTR引脚,D1=1,置DTR引脚为有效电平;D1=0,置DTR引脚为无效电平。 D2: 允许接收。D2=1,允许8251A接收数据;D2=0,禁止8251A接收数据。 D3: 发送中止字符SBRK。D3=1,TxD线上一直发送0信号,即输出连续的空号;D3=0,恢复正常工作。正常通信时,D3位应为0。 D4: 错误标志复位ER。D4=1,使状态控制字中的D3,D4和D5位进行复位,状态控制字的D3,D4,D5位分别表示奇偶错、帧错和溢出错。D4=0,错误标志位不复位。
D5: 请求发送位。此位控制8251A的RTS引脚,D5=1,置RTS引脚为有效电平;D5=0,置RTS引脚为无效电平。 D6: 内部复位IR。D6=1,进行内部复位,使8251A处于等待工作方式控制字状态。改变8251A的工作方式前,一定要进行内部复位。D6=0,不进行内部复位。 注: 只要包含D6=1的任何工作命令字都能实现内部复位。 D7: 进入搜索方式EH。D7=1,启动搜索同步字符;D7=0,不搜索同步字符。此位是针对同步方式而设置的。当采用同步工作方式时,除设置允许接收位RxE=1外,还必须设置EH=1,使接收器进入搜索状态,以监视由RxD引脚输入的同步字符。
3 .状态字 状态字的作用是报告8251A的当前状态。状态字是8251A在执行命令过程中自动产生的,并放在状态寄存器中,状态寄存器只能读取而不能写入。状态字的格式如图10-14所示。 D0: 发送缓冲器准备好TxRDY。D0=1,表示发送缓冲器准备好,CPU可以向8251A写入下一个字符。注意此位与引脚TxRDY的含义有所不同。引脚TxRDY输出高电平必须满足三个条件:发送缓冲器空、输入引脚CTS为低电平以及工作命令字中TxEN=1。而此状态位TxRDY则不受引脚CTS和工作命令字中TxEN位的影响。 当CPU向8251A输出字符后,此位自动清0。
D1: 接收器准备好RxRDY。D1位与RxRDY引脚的状态相同。D1=1,表示8251A已接收到一个字符,正等待CPU取走。当CPU从8251A中取走字符后,D1位自动清0。 实际工作时,CPU既可以测试8251A的TxRDY和RxRDY引脚的状态来获得8251A的状态,也可以通过读取状态字的D0,D1位来得到这一信息。一般中断方式下工作时常用TxRDY和RxRDY引脚的状态来产生中断请求信号;查询方式下工作时,常读状态字的D0,D1位来得到8251A的状态信息。 D2: 发送缓冲器空TxEMPTY。此位的状态与TxEMPTY引脚的状态完全相同。D2=1发送缓冲器空,D2=0发送缓冲器不空。
D3: 奇偶校验错PE。当接收器检测出奇偶校验错时,PE位置1,PE有效并不禁止8251A的工作。 D4: 溢出错OE。当前一个接收的字符尚未被CPU取走,后一个字符又到来时,产生溢出错,D4位置1。OE有效并不禁止8251A的工作,但被溢出的字符丢失了。 D5: 帧出错FE。当接收器在一个字符的后面没有检测到规定的停止位时,产生帧出错,D5位置1。此位只用于异步方式。 说明: D3,D4,D5这三个错误状态位,均可由工作命令字的ER位复位。 D6: 同步检出SYNDET。外同步时在SYNDET引脚上检测到同步信号或者内同步时检出了规定的同步字符时,此位置1。
D7: 数据装置准备好DSR。该位反映输入引脚DSR是否有效。当DSR引脚有效时,此位置1。 10.3.48251A的初始化与编程 1 . 8251A的初始化 在通信前要对8251A进行初始化,以确定通信协议。由于三个控制字共用一个端口地址,且三个控制字没有特征位,因而各控制字必须按一定顺序写入,不能颠倒。8251A的初始化顺序如下: ① 芯片复位后,第一次向控制端口写入的值作为工作方式字。 ② 如果工作方式字中规定了8251A工作在同步模式,那么,接着向控制端口输出1个或2个字节的同步字符。
③ 这之后,只要不是复位命令,不管是同步模式还是异步模式,向控制端口写入的值是工作命令字,向数据端口写入的值是发送数据。 8251A的初始化顺序如图10-15所示。
2 .8251A编程 例10.1 编写一段通过8251A采用查询方式接收数据的程序。将8251A定义为异步传送方式,波特率系数为16,采用偶校验,1位停止位,7位数据位。8251A端口地址为0400H,0401H。 10.2 编写接收数据的初始化程序。要求8251A采用同步传送方式、2个同步字符、内同步、偶校验、7位数据位和同步字符为16H。8251A端口地址为0400H,0401H。 例10.3 双机异步串行通信:两台微机之间进行串行通信,甲机发送,乙机接收,两机相距1 m以内。要求把甲机上1 KB的数据块传送到乙机中去。采用异步通信方式,字符长度为7位,2位停止位,波特率因子为64,无校验位。
CPU与8251A之间采用查询方式交换数据。两台微机中的8251A端口地址相同:320H为数据端口,321H为控制端口。CPU与8251A之间采用查询方式交换数据。两台微机中的8251A端口地址相同:320H为数据端口,321H为控制端口。 两机硬件连接如图10-16所示。 图10-16 双机异步串行通信连接图