串行通信接口的基本任务
实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不同串行通信方式下的数据格式化的任务.在异步通信方式下,接口自动生成起止式的帧数据格式.在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符;进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据.所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理.因此串并转换是串行接口电路的重要任务;控制数据传输速率:串行通信接口电路应具有对数据传输速率——波特率进行选择和控制的能力;进行错误检测:在发送时接口电路对传送的字符数据自动生成奇偶校验位或其他校验码.在接收时,接口电路检查字符的奇偶校验或其他校验码,确定是否发生传送错误;进行TTL与EIA电平转换:CPU和终端均采用TTL电平及正逻辑,它们与EIA采用的电平及负逻辑不兼容,需在接口电路中进行转换;提供EIA-RS-232C接口标准所要求的信号线:远距离通信采用MODEM时,需要9根信号线;近距离零MODEM方式,只需要3根信号线.这些信号线由接口电路提供,以便与MODEM或终端进行联络与控制;串行通信接口电路的组成
为了完成上述串行接口的任务,串行通信接口电路一般由可编程的串行接口芯片,波特率发生器,EIA与TTL电平转换器以及地址译码电路组成.其中,串行接口芯片,随着大规模继承电路技术的发展,通用的同步(USRT)和异步(UART)接口芯片种类越来越多,如下表所示.标准定义
传输率,电特性,信号名称和接口标准是定义串口的几个基本要素。 传输率,是指每秒传输多少位,传输率也常叫波特率.国际上规定了一个标准波特率系列,标准波特率也是最常用的波特率,标准波特率系列为110,300,600,1200,4800,9600等。RS-232-C标准,RS-232-C标准对两个方面作了规定,即信号电平标准和控制信号线的定义.RS-232-C采用负逻辑规定逻辑电平,信号电平与通常的TTL电平也不兼容,RS-232-C将-5V~-15V规定为”1”,+5V~+15V规定为”0”。起止式异步协议
面向字符的同步协议
这种协议可参考IBM公司的二进制同步通信协议(BSC)。在此不再赘述。面向比特的同步协议
可参考IBM的同步数据链路控制规程SDLC(Synchronous Data Link Control),国际标准化组织ISO(International Standard Organization)的高级数据链路控制规程HDLC(High Level Data link Control),美国国家标准协会(Americal National Standard Institute)的先进数据通信规程ADCCP(Advanced Data Communication Control Procedure)。其协议帧格式通常如下:输入模式的配置(c_iflag)
输入模式的常量定义 IGNBRK——忽略BREAK条件 BRKINT——IGNBRK如果设置了,则BRKINT将会被忽略;如果IGNBRK没设置,BRKINT设置了,有BREAK产生的时候,输入输出队列将会被冲掉,前台进程组会收到SIGINT信号。 IGNPAR——忽略帧错误和奇偶校验错误 PARMRK——如果IGNPAR没有设置,将得到\377\0开头的错误字符,否则将得到\0 INPCK——开启奇偶校验检查 ISTRIP——去掉第8位 INLCR——在输入流中将NL转换成CR IGNCR——在输入流中的传输返回 ICRNL——将传输返回转换到新的一行 IUCLC——将输入流中的大写字母映射到小写字母 IXON——当输出时开启XON/XOFF流控 IXANY——键入任何字符时将重启停止的输出流 IXOFF——当输入时开启XON/XOFF流控 IMAXBEL——输入队列满一直响铃,Linux未实现 IUTF8——输入字符为UTF8字符,这个可以允许擦除字符在缓存模式下正常工作输出模式的配置(c_oflag)
输出模式的常量定义 OPOST——开启定义的输出流处理 OLCUC(not in POSIX)——在输出流中将小写字母映射到大写字符 ONLCR——在输出流中将CR映射到CR-NL OCRNL——在输出流中将CR映射到NL ONOCR——在第0列不输出CR ONLRET——不输出CR OFILL——发送填充字符作为时间延时 OFDEL(not in POSIX)——填充字符设置位DEL(0177),如果未设置,填充字符位NUL('\0') NLDLY——新行延迟掩码,值为NL0与NL1.[requires _BSD_SOURCE or _SVID_SOURCE or _XOPEN_SOURCE] CRDLY——传输返回延迟掩码,值为CR0,CR1,CR2,CR3.[requires _BSD_SOURCE or _SVID_SOURCE or _XOPEN_SOURCE] TABDLY——水平tab延迟掩码,值为TAB0,TAB1,TAB2,TAB3 BSDLY——退格延迟掩码,值为BS0,BS1 VTDLY——垂直tab延迟掩码,值为VT0,VT1 FFDLY——换页符(form feed)延迟掩码,值为FF0,FF1控制模式的配置(c_cflag)
控制模式的常量定义 CBAUD——(not in POSIX)波特率掩码(4+1位) CBAUDEX——(not in POSIX)额外的波特率掩码(1位) CSIZE——字符大小掩码,值为CS5,CS6,CS7或CS8 CSTOPB——设置两个停止位 CREAD——使能接收数据 PARENB——使能奇偶校验,在输出数据时生成奇偶校验,接收数据时检查奇偶校验 PARODD——奇数校验 HUPCL——挂起modem控制线,当上一个设备关闭后 CLOCAL——忽略modem控制线 CMSPAR——如果PARODD被设置,奇偶校验位一直是1,否则一直是0 CRTSCTS——使能RTS/CTS流控本地模式配置
本地模式的常量定义 ISIG——当INTR, QUIT, SUSP或DSUSP这些字符被接收到时,将产生相应信号 ICANON——使能标准模式 ECHO——回显输入字符 ECHOE——如果标准模式开启,ERASE字符将可以删除当前输入字符 ECHOK——如果标准模式开启,KILL字符将擦除当前的数据线 ECHONL——如果标准模式开启,NL字符将回显,即使ECHO没设置 ECHOCTL——入股ECHO被设置,终端的特殊字符将回显成^X,X是特殊字符的ASCII码的值加上0x40后的字符 ECHOPRT——如果标准模式和回显都开启,字符将被打印,即使它们被擦除 ECHOKE——如果标准模式开启,KILL将被回显,就像指定ECHOE和ECHOPRT一样 NOFLSH——关闭在收到INT,QUIT,SUSP时冲洗输入输出队列的功能 TOSTOP——当对一个后台进程组的控制终端进行写操作时,发送一个SIGTTOU信号到该进程组 IEXTEN——使能预定义输入处理特殊字符定义
VDISCARD——(not in POSIX; not supported under Linux; 017, SI, Ctrl-O) VDSUSP——(not in POSIX; not supported under Linux; 031, EM, Ctrl-Y) VEOF——(004, EOT, Ctrl-D),文件结束符(EOF) VEOL——(0, NUL),行结束符(EOL) VERASE——(0177, DEL, rubout, or 010, BS, Ctrl-H, or also #),擦除字符(ERASE) VINTR——(003, ETX, Ctrl-C, or also 0177, DEL, rubout),中断字符(INTR),产生一个SIGINT信号 VKILL——(025, NAK, Ctrl-U, or Ctrl-X, or also @),KILL字符 VLNEXT——(not in POSIX; 026, SYN, Ctrl-V) VMIN——非标准模式下可读的最小字符数(MIN) VQUIT——(034, FS, Ctrl-\),产生一个SIGQUIT信号 VREPRINT——(not in POSIX; 022, DC2, Ctrl-R),重复打印未读字符,在ICANON与IEXTEN设置后有效 VSTART——(021, DC1, Ctrl-Q),开始字符(START),IXON设置后有效 VSTOP——(023, DC3, Ctrl-S),停止字符(STOP),IXON设置后有效 VSUSP——(032, SUB, Ctrl-Z),暂停字符(SUSP),ISIG设置后有效,产生一个SIGTSTP信号 VTIME——非标准模式下读的超时时间(TIME),单位1/10s VWERASE—— (not in POSIX; 027, ETB, Ctrl-W)