数据通讯的两种方式:web
并行通讯:利用多根传输线并行传输。短距离、快速、通讯效率高。编程
串行通讯:一条传输线逐位顺序传输。远距离、低速、线路简单、低成本。数组
串口通讯的概念很是简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通讯慢,可是串口能够在使用一根线发送数据的同时用另外一根线接收数据。它很简单而且可以实现远距离通讯。好比IEEE488定义并行通行状态时,规定设备线总长不得超过20米,而且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。异步
UART(Universal Asynchronous Receiver/Transmitter),通用异步收发传输器。函数
串口通讯协议oop
通讯协议是指通讯双方约定的一些规则。对于两个进行通讯的端口,这些参数必须匹配:测试
a,比特率:这是一个衡量通讯速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当咱们提到时钟周期时,就是指比特率,例如若是协议须要4800波特率,那么时钟是4800Hz。这意味着串口通讯在数据线上的采样率为4800Hz。一般电话线的比特率为14400,28800和36600。比特率能够远远大于这些值,可是波特率和距离成反比。高比特率经常用于放置的很近的仪器间的通讯。编码
b,数据位:通讯中实际传输数据的位数。一般是 五、六、七、8 。url
c,中止位:用于表示单个包/帧的最后一位。典型的值为1,1.5和2位。因为数据是在传输线上定时的,而且每个设备有其本身的时钟,极可能在通讯中两台设备间出现了小小的不一样步。所以中止位不只仅是表示传输的结束,而且提供计算机校订时钟同步的机会。适用于中止位的位数越多,不一样时钟同步的容忍程度越大,可是数据传输率同时也越慢。spa
d,奇偶校验位:在串口通讯中一种简单的检错方式。有四种检错方式:偶、奇、高和低。固然没有校验位也是能够的。对于偶和奇校验的状况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,若是数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。若是是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备可以知道一个位的状态,有机会判断是否有噪声干扰了通讯或者是否传输和接收数据是否不一样步。
UART基本结构
⑴输出缓冲寄存器,它接收CPU从数据总线上送来的并行数据,并加以保存。
⑵ 输出移位寄存器,它接收从输出缓冲器送来的并行数据,以发送时钟的速率把数据逐位移出,即将并行数据转换为串行数据输出。
⑶ 输入移位寄存器,它以接收时钟的速率把出如今串行数据输入线上的数据逐位移入,当数据装满后,并行送往输入缓冲寄存器,即将串行数据转换成并行数据。
⑷ 输入缓冲寄存器,它从输入移位寄存器中接收并行数据,而后由CPU取走。
⑸控制寄存器,它接收CPU送来的控制字,由控制字的内容,决定通讯时的传输方式以及数据格式等。例如采用异步方式仍是同步方式,数据字符的位数,有无奇偶校验,是奇校验仍是偶校验,中止位的位数等参数。
⑹状态寄存器。状态寄存器中存放着接口的各类状态信息,例如输出缓冲区是否空,输入字符是否准备好等。在通讯过程当中,当符合某种状态时,接口中的状态检测逻辑将状态寄存器的相应位置“1”,以便让CPU查询。
工做原理
发送接收
发送逻辑对从发送FIFO 读取的数据执行“并→串”转换。控制逻辑输出起始位在先的串行位流,而且根据控制寄存器中已编程的配置,后面紧跟着数据位(注意:最低位 LSB 先输出)、奇偶校验位和中止位。
在检测到一个有效的起始脉冲后,接收逻辑对接收到的位流执行“串→并”转换。此外还会对溢出错误、奇偶校验错误、帧错误和线停止(line-break)错误进行检测,并将检测到的状态附加到被写入接收FIFO 的数据中。
波特率产生
波特率除数(baud-rate divisor)是一个22 位数,它由16 位整数和6 位小数组成。波特率发生器使用这两个值组成的数字来决定位周期。经过带有小数波特率的除法器,在足够高的系统时钟速率下,UART 能够产生全部标准的波特率,而偏差很小。
数据收发
发送时,数据被写入发送FIFO。若是UART 被使能,则会按照预先设置好的参数(波特率、数据位、中止位、校验位等)开始发送数据,一直到发送FIFO 中没有数据。一旦向发送FIFO 写数据(若是FIFO 未空)
UART 的忙标志位BUSY 就有效,而且在发送数据期间一直保持有效。BUSY 位仅在发送FIFO 为空,且已从移位寄存器发送最后一个字符,包括中止位时才变无效。即 UART 再也不使能,它也能够指示忙状态。
中断控制
出现如下状况时,可以使UART 产生中断:
FIFO 溢出错误
线停止错误(line-break,即Rx 信号一直为0 的状态,包括校验位和中止位在内)
奇偶校验错误
帧错误(中止位不为1)
接收超时(接收FIFO 已有数据但未满,然后续数据长时间不来)
发送
接收
因为全部中断事件在发送到中断控制器以前会一块儿进行“或运算”操做,因此任意时刻 UART 只能向中断产生一个中断请求。经过查询中断状态函数UARTIntStatus( ),软件能够在同一个中断服务函数里处理多个中断事件(多个并列的if 语句)。
FIFO 操做
发送FIFO的基本工做过程: 只要有数据填充到发送FIFO 里,就会当即启动发送过程。因为发送自己是个相对缓慢的过程,所以在发送的同时其它须要发送的数据还能够继续填充到发送 FIFO 里。当发送 FIFO 被填满时就不能再继续填充了,不然会形成数据丢失,此时只能等待。已发送完毕的数据会被自动清除,在发送FIFO 里同时会多出一个空位。
接收FIFO的基本工做过程: 当硬件逻辑接收到数据时,就会往接收FIFO 里填充接收到的数据。程序应当及时取走这些数据,数据被取走也是在接收FIFO 里被自动删除的过程,所以在接收 FIFO 里同时会多出一个空位。若是在接收 FIFO 里的数据未被及时取走而形成接收FIFO 已满,则之后再接收到数据时因无空位能够填充而形成数据丢失。
收发FIFO 主要是为了解决UART 收发中断过于频繁而致使CPU 效率不高的问题而引入的。在进行 UART 通讯时,中断方式比轮询方式要简便且效率高。可是,若是没有收发 FIFO,则每收发一个数据都要中断处理一次,效率仍然不够高。若是有了收发FIFO,则能够在连续收发若干个数据后才产生一次中断而后一并处理,这就大大提升了收发效率。
彻底没必要要担忧FIFO 机制可能带来的数据丢失或得不到及时处理的问题,由于它已经帮你想到了收发过程当中存在的任何问题,只要在初始化配置UART 后,就能够放心收发了, FIFO 和中断例程会自动搞定一切。
回环操做
UART 能够进入一个内部回环(Loopback)模式,用于诊断或调试。在回环模式下,从Tx 上发送的数据将被Rx 输入端接收。在设计系统时,为了判断通讯故障是外部的数据链路的故障,仍是CPU内部驱动或者CPU自己的问题,就要采用Loopback模式来测试。
串行红外协议
在某些 ARM 芯片里,UART 还包含一个 IrDA 串行红外(SIR)编码器/ 解码器模块。IrDA SIR 模块的做用是在异步UART数据流和半双工串行SIR 接口之间进行转换。片上不会执行任何模拟处理操做。SIR 模块的任务就是要给UART 提供一个数字编码输出和一个解码输入。UART 信号管脚能够和一个红外收发器链接以实现IrDA SIR物理层链接。
串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。因此当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。所以串并转换是串行接口电路的重要任务。所以,在串行接口中,必需要有 " 接收移位寄存器 " (串→并)和 " 发送移位寄存器 " (并→串). 在数据输入过程当中,数据 1 位 1 位地从外设进入接口的 " 接收移位寄存器 " ,当 " 接收移位寄存器 " 中已接收完 1 个字符的各位后,数据就从 " 接收移位寄存器 " 进入 " 数据输入寄存器 " . CPU 从 " 数据输入寄存器 " 中读取接收到的字符.(并行读取,即 D7~D0 同时被读至累加器中). " 接收移位寄存器 " 的移位速度由 " 接收时钟 " 肯定.
在数据输出过程当中, CPU 把要输出的字符(并行地)送入 " 数据输出寄存器 " , " 数据输出寄存器 " 的内容传输到 " 发送移位寄存器 " ,而后由 " 发送移位寄存器 " 移位,把数据 1 位 1 位地送到外设. " 发送移位寄存器 " 的移位速度由 " 发送时钟 " 肯定.
接口中的 " 控制寄存器 " 用来容纳 CPU 送给此接口的各类控制信息,这些控制信息决定接口的工做方式.
" 状态寄存器 " 的各位称为 " 状态位 " ,每个状态位均可以用来指示数据传输过程当中的状态或某种错误.例如,用状态寄存器的 D5 位为 "1" 表示 " 数据输出寄存器 " 空,用 D0 位表示 " 数据输入寄存器满 " ,用 D2 位表示 " 奇偶检验错 " 等.
可以完成上述 " 串 <- -> 并 " 转换功能的电路,一般称为 " 通用异步收发器 " ( UART : Universal Asynchronous Receiver and Transmitter )。
握手协议
RS-232通行方式容许简单链接三线:Tx、Rx和地线。可是对于数据传输,双方必须对数据定时采用使用相同的波特率。尽管这种方法对于大多数应用已经足够,可是对于接收方过载的状况这种使用受到限制。这时须要串口的握手功能。在这一部分,咱们讨论三种最经常使用的RS-232握手形式:软件握手、硬件握手和Xmodem。
a,软件握手:一般用在实际数据是控制字符的状况,相似于GPIB使用命令字符串的方式。必须的线仍然是三根:Tx,Rx和地线,由于控制字符在传输线上和普通字符没有区别,函数SetXModem容许用户使用或者禁止用户使用两个控制字符XON和XOFF。这些字符在通讯中由接收方发送,使发送方暂停。 例如:假设发送方以高波特率发送数据。在传输中,接收方发现因为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 toSend)。当接收方准备好接收数据,它置高RTS线表示它准备好了,若是发送方也就绪,它置高CTS,表示它即将发送数据。另外一组线是DTR(DataTerminal Ready)和DSR(Data SetReady)。这些线主要用于Modem通讯。使得串口和Modem通讯他们的状态。
c,XModem握手:XModem文件传输协议。这个协议在Modem通讯中很是通用。尽管它一般使用在Modem通讯中,XModem协议可以直接在其余遵循这个协议的设备通讯中使用。
(1)实现数据格式化:由于来自CPU的是普通的并行数据,因此,接口电路应具备实现不一样串行通讯方式下的数据格式化的任务。在异步通讯方式下,接口自动生成起止式的帧数据格式。在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。
(2)进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。因此当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。所以串并转换是串行接口电路的重要任务。
(3)控制数据传输速率:串行通讯接口电路应具备对数据传输速率——波特率进行选择和控制的能力。
(4)进行错误检测:在发送时接口电路对传送的字符数据自动生成奇偶校验位或其余校验码。在接收时,接口电路检查字符的奇偶校验或其余校验码,肯定是否发生传送错误。
(5)进行TTL与EIA电平转换:CPU和终端均采用TTL电平及正逻辑,它们与EIA采用的电平及负逻辑不兼容,需在接口电路中进行转换。
(6)提供EIA-RS-232C接口标准所要求的信号线:远距离通讯采用MODEM时,须要9根信号线;近距离零MODEM方式,只须要3根信号线。这些信号线由接口电路提供,以便与MODEM或终端进行联络与控制。
MODEM
调制解调器,是一种计算机硬件,它能把计算机的数字信号(低频的数字基带信号)翻译成可沿普通电话线传送的脉冲信号(高频),而这些脉冲信号又可被线路另外一端的另外一个调制解调器接收,并译成计算机可懂的语言。这一简单过程完成了两台计算机间的通讯。
Modem,实际上是Modulator(调制器)与Demodulator(解调器)的简称,中文称为调制解调器。根据Modem的谐音,亲昵地称之为“猫”。所谓调制,就是把数字信号(离散信号)转换成电话线上传输的模拟信号(连续信号);解调,即把模拟信号转换成数字信号。
UART: http://baike.baidu.com/link?url=pxxv99v0IeNfkzGZ1QAQW28jFI9o4fM_jUJ_6a3hzLBF8EhLqf8q9g-jjj80LEBY