前言:

      计算机与计算机之间或者计算机与外部设备之间的信息交换称为通信。计算机的通信有两种方式:并行通信和串行通信。在通信的过程中,如果能够同时传送数据的所有位(位数由机器的字长决定),就称为并行通信;如果数据是逐位顺序传送,则称为串行通信。计算机与外设间的接口按照通信 方式的不同,相应地分为并行接口和串行接口。并行通信和串行通信是指接口与外部设备一侧的通信方式,与CPU之间的通信都是并行通信的。

    一、并行通信

            并行接口的特点:

        由于多数的I/O设备,特别是系统基本的I/O设备都采用并行数据传送,因此并行接口的应用十分普遍。一般来讲,并行接口有如下特点。

        (1)以数据字节或字为单位进行数据传输,两个功能模块间有多位数据同时进行数据传送,速度快、效率高。

         (2)适合近距离传送。由于并行通信需要的数据线路比较多,造价高,且容易产生干扰。因此并行通信通常都用于近距离、高速数据交换的场合。

          (3)并行传送中,8位、16位或4字节的数据是同时传输的,因此在并行接口与外部设备进行数据交换时,即使之需要传送一位,也是一次输入/输出8位、16位或4字节。

           (4)串行传送的信息有固定格式要求,并行传送的信息不要求固定格式。

二、串行通信

        串行通信是指两个功能模块只通过一条或两条数据线进行数据交换。发送方将数据分解为二进制位,一位接一位地顺序通过单条数据线发送,接收方则一位一位地从单条数据线上接收,并将其重新组装成一个数据。串行通信数据线路少,造价低,适合于远距离传送。但由于数据是一位一位传送的,故速度慢。

    1.串行数据传送方式

        串行通信是一位一位通过同一信号线进行数据传送的方式。按照数据流的方向可分为3种基本传送方式:全双工、半双工和单工。

    如果串行通信的通路只有一条,此时发送信息和接收信息就不能同时进行,只能采用分时使用线路的方法。比如A在发送信息时,B只能接收;而当B发送信息时,则A只能接收。这种串行通信的工作方式称为半双工通信方式。

    如果有两条通路,则发送信息和接收信息就可以同时进行,当A发送信息、b接收信息,b也能够同时利用另一条通路发送信息而由A接收。这种通信的方式称为全双工。

    除了半双工和全双工外,还有一种单工的通信方式,它只允许一个方向传送信息,而不允许反向传输。这种方式在实际应用中较少见。

    2.调制与解调

    计算机在通信时发送接收的信息均是数字信号,其占用的频带很宽,约为几MHZ甚至更高;但目前长距离通信时采用的传统电话线路频带很窄,大约仅有4KHZ。直接传送必然会造成信号的严重畸变,大大降低了通信的可靠性。所以在长距离通信时,为了确保数据的正常传送,一般都要在传送之前把信号转换成适合传送的形式,传送到目的地后再恢复成原始信号。这个转换工作可利用调制解调器(MODEM)来实现。

    在发送站,调制解调器把“1”和“0”的数字脉冲信号调制在载波信号上;承载了数字信号的载波信号在普通电话网络系统中传送;在目的站,调制解调器把承载了数字信息的载波信号再恢复成原来的“1”和“0”数字脉冲信号。

    信号的调制方法主要有三种:调频、调幅和调相。当调制信号为数字信号时,这三种调制方法又分别称为频移键控法FSK(frequency shift keying)、幅度键控法ASK(Amplitude shift keying)和相移键控法PSK(phase shift keying)。

        (1)调频就是把数字信号的“1”和”0“调制成不同频率的模拟信号,例如用1200HZ的信号表示”0“,用2400HZ的信号表示”1“。接收方根据载波信号的频率就可知道传输的信息是”1“还是”0“。

        (2)调幅就是把数字信号的“1”和“0”调制成不同幅度的模拟信号,但频率保持不变。例如把载波信号的幅度大于8V时表示“0”,载波信号的幅度小于3V时表示“1”。

        (3)调相就是把数字信号的“1”和“0”调制成不同相位的模拟信号,但频率和幅度均保持不变。例如把载波信号的相位为0°时表示“0”,载波信号的相位为180°时表示“1”。

    3.同步通信和异步通信

        串行通信的数据是逐位传送的,发送方发送的每一位都具有固定的时间间隔,这就要求接收方也要按照发送方同样的时间间隔来接收每一位。不仅如此,接收方还要确定一个信息组的开始和结束。为此,串行通信对数据格式做了严格的规定。不同的串行通信方式具有不同的数据格式。

    1)同步通信

    所谓同步通信,是指在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持一致(同步)。这就保证了通信双方在发送和接收数据时具有完全一致的定时关系。

    

    2)异步通信

    异步通信是指通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。

    异步通信规定字符有 起始位(start bit)、数据位(data bit)、奇偶校验位(parity)、停止位(stop bits)组成。

    由于CPU与接口之间按并行方式传输,接口与外设之间按串行方式传输,因此,在串行接口中,必须要有“接收移位寄存器”(串→并)和“发送移位寄存器”(并→串)。

 

 

在数据输入过程中,数据1位1位地从外设进入接口的“接收移位寄存器”,当“接收移位寄存器”中已接收完1个字符的各位后,数据就从“接收移位寄存器”进入 “数据输入寄存器”。CPU从“数据输入寄存器”中读取接收到的字符。(并行读取,即D7~D0同时被读至累加器中)。“接收移位寄存器”的移位速度由“ 接收时钟”确定。
在数据输出过程中,CPU把要输出的字符(并行地)送入“数据输出寄存器”,“数据输出寄存器”的内容传输到“发送移位寄存器”,然后由“发送移位寄存器”移位,把数据1位1位地送到外设。“发送移位寄存器”的移位速度由“发送时钟”确定。
接口中的“控制寄存器”用来容纳CPU送给此接口的各种控制信息,这些控制信息决定接口的工作方式。
“状态寄存器”的各位称为“状态位”,每一个状态位都可以用来指示数据传输过程中的状态或某种错误。例如,用状态寄存器的D5位为“1”表示“数据输出寄存器”空,用D0位表示“数据输入寄存器满”,用D2位表示“奇偶检验错”等。
能够完成上述“串<- ->并”转换功能的电路,通常称为“通用异步收发器”(UART:Universal Asynchronous Receiver and Transmitter),典型的芯片有:Intel 8250/8251,16550.
UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
    显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。
 SPI(serial peripheral interface)总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
 如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。
 
串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口。Motorola公司生产的绝大多数MCU(微控制器)都配有SPI硬件接口,如68系列MCU。SPI总线是一种三线同步总线,因其硬件功能很强,所以,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。
IIC总线是荷兰飞利浦PHILIPS开发的一种高效,实用,可靠的双向二线制(也有3线制,家电很少用)串行数据传输结构总线,该总线使各电路分割成各种功能的模块,并进行软件化设计,各个功能模块电路内都有集成一个IIC总线接口电路,因此都可以挂接在总线上,很好的解决了众多功能IC与CPU之间的输入输出接口,使其连接方式变得十分简单。
IIC总线上的器件分为主控器和被控器两大类它们之间只要在正常工作,总有一个IIC在总线上发送信息数据(一般是在开机后cpu首先像各个功能模块电路发出自检信号,得到各个功能模块电路正常反馈的数据信号后机器才进入正常工作状态)。

 串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口

 USART (Universial Serial Asynchronous Receive Transmit)通用串行异步接受/发送,其实它就是UART。
 两者都是串行口线。但不同的是,SPI总线似乎是分为SD(DATA)I和SC(CONTROL)I两种。SPI是同步的,需要额外的同步脉冲,速率可以很高,有些器件甚至超过20M。SDI有一条数据线,双向传输,方向靠命令字来区别,SPI为三线:SO、SI、SCK,SO、SI均为单向传输,其中SCK为同步时钟,其传输速率可变,可以软件模拟实现;而SCI,有两条数据线,分别是输入输出。SPI 均有一条时钟线。但是SPI如果应用与高速场合,只能在板级使用,不宜传输过远,我们平时看到的SPI和IIC一般都是芯片之间的接口,很少看到有长电缆使用。
 而USART是没有时钟线,数据线有两条。波特率在收发两端分别设置,51的串口就属于这一类。UART是异步的,不需要时钟,波特率相对不高;鉴于此,uart因为格式个波特率是双方协商好的,而且速率不高,所以可以在传输线上传输,加上其他的转换还可以变成差动的传输更远距离。
 而UART要达到某一固定波特率对晶振有要求,比如说24M的晶振可以用T2实现9600BAUD,但不能用T1来交替实现19200和9600BAUD。 

 

I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
 如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。

 wKiom1MlKfyD8SkGAACjQ_3o-6E649.jpg