SPI I2C UART(即串口)

SPI总线

SPI(串行外设接口):是Motorola公司提出的一种同步串行数据传输标准。

I2C(IC之间总线):是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。

UART(通用异步收发器):是电脑硬件的一部分,他把将要传输的资料在串行通信与并行通信之间加以转换,UART通常被集成与其他通信接口的连接上。UART即我们通常说的“串口”。

SPI总线特点:

1)四条信号线:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)、片选线(SS)。

2)SPI总线可以实现SPI设备相互连接。其中提供时钟的SPI设备为主设备(Master),而其他的设备为从设备(Slave)。SCLK信号线只能由主设备控制,从设备不能控制信号线。

3)在SPI总线上,可以出现多个从设备,但只能有一个主设备。在这时主机通过片选线来选择通信的从设备。在硬件上,这就要求MISO具有三态的特性,使得该接口线在器件未被选中时,表现为高阻抗。

4)使用SPI,主从设备之间可以实现全双工通信,收发独立,操作简单,数据传输速率较高,但需要占用主机较多的串口线(每个主机都需要一根片选线),只支持单个主机,没有指定的流控制,没有应答机制确认是否接收到数据。

5)数据输出通过SDO线,数据在时钟上沿或下沿时改变(即发送),在紧接着的下沿或上沿被读取,从而完成一位数据传输。因此8位数据的传输,至少需要8次时钟信号的改变(上沿或下沿为一次)。

6)对于普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控制器控制,当没有时钟跳变时,从设备不采集或传送数据。即主设备通过对SCK时钟线的控制可以完成对通讯的控制。

7)SPI接口现在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据依据大端方式按位传输,即高位数据先传输,低位数据后传输。

SPI数据传输:

SPI在数据传输时,需要确定两件事:

其一:数据是在时钟的上升沿采集还是在下降沿采集;

其二:时钟的初始(空闲)状态是为高电平还是低电平;

而I2C空闲状态时,时钟线为高电平;数据采集时,时钟线为高电平,时指定的不可选择。SPI的数据采集方式多样化,可以选择。

CPOL:时钟极性,表示SPI在空闲时,时钟信号是高电平还是低电平。

CPHA:时钟相位,表示SPI设备是在时钟的上升沿采集还是下降沿采集。

根据CPOL和CPHA这两种信号的关系选择,SPI数据传输就有四种模式。

SPI读写:

SPI在硬件设计上,采用的是双数据线制,根据设计,在SPI通信过程中,主从设备之间会形成一个数据环形链路——即主设备向从设备写一次数据,从设备就会回一次数据(至于从设备回复的数据是否有效则有两种方式,有效,主设备就将它读入,否则丢弃)

 

I2C总线

1)

由两条信号线组成:串行数据线(SDA)、串行时钟线(SCL);

I2C器件内部采用开漏的方法,总线被上拉;

当MOS管输入0的时候,总线状态只能被下拉为0;

只要有一方下拉了总线,总线状态必定为0。

2)任何一个设备都能像主控器一样工作,并控制总线,但同一时刻只能有一个主控设备。

3)总线上的每一个设备都有一个独一无二的地址,根据设备的能力,作为发射器或接收器工作。

4)在它的协议体系中,传输数据时都会带上,目的设备的设备地址,因此可以实现设备组网。

5)连接到相同总线的IC数量只受到总线的最大电容限制。

6)SDA传输数据是大端传输(高位先传输,低位后传输),输出的数据是以字节为单位的。

UART

1

1)UART由波特率产生器、UART接收器、UART发送器组成;

2)由三条信号线组成:RX、TX、GND

3)UART包括RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范。它们的主要区别在于其各自的电平范围不同,嵌入式设备中经常使用到的是TTL、TTL转RS232的这种方式。

2 通信协议

 

1)起始位:先发出一个逻辑“0”的信号,表示传输字符的开始。

2)数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8、等,构成一个字符。通常采用ASCII码。

3)奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。

4)停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。

5)空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。

6)波特率:数据传输的速率。有以下几个档位:300、 600、 1200、 2400、 4800、 9600、 19200、 38400、 43000、 56000、 57600、 115200 。在数据传输和接收双方,需要预先统一波特率,这样可以正确的传输数据。

UART的串口控制器工作原理图:

1)串口控制器包含:transmitter和receiver,这两部分功能彼此是独立的。

transmitter负责向外部发送消息,receiver负责从外部接收消息到210内部。

2)总线角度来讲,串口控制器是接在APB总线上的。

在编程时,计算串口控制器的源时钟是以APB总线来计算的。

3)transmitter由发送缓冲区和发送移位器构成。

主板要发送信息时,首先将信息进行编码(一般用ASCII码)转换成二进制流,然后将一帧数据写入发送缓冲区,发送移位器会自动从发送缓冲区中读取一帧数据。然后自动移位(移位的目的是将一帧数据的各个位分别拿出来)将其发送到Tx通信线上。

4)receiver由接收缓冲区和接收移位器构成。

当通过串口线向主板发送信息时,信息通过Rx通信线进入移位器,然后接收移位器自动移位将该二进制位存入接收缓冲区,接收完一帧数据后receiver会产生一个中断给CPU,CPU收到中断后即可知道receiver接收满了一帧数据,就会来读取这帧数据。

5)发送缓冲区和接收缓冲区是关键。

发送移位器和接收移位器的工作都是自动的,不同编程控制。

串口程序的编程:1、首先初始化(初始化的实质是读写寄存器)好串口控制器(包括发送控制器和接收控制器);2、然后将要发送的信息直接写入缓冲区,要接收信息时直接去接收缓冲区读取。

串口底层的工作(如何移位、起始位怎么定义)对于编程人员来说是隐藏的,软件工程师对串口操作的接口就是发送/接收缓冲区(实质为寄存器,操作方式为读写内存)。

6)波特率发生器,作用是产生串口发送/接收的节拍时钟。

波特率发生器是一个时钟分频器。它的工作需要源时钟(APB总线),然后内部将源时钟进行分频(软件设置寄存器来配置)得到目标时钟,然后用将这个时钟产生波特率(这是硬件实现的,对于软件编程人员说透明的)。

自动控流

控流的原因:

控流是为了让串口通信变得非常可靠,当发送方的速率比接收方快的时候控制流速可以保证发送和接收不会遗漏数据。

 

现在计算机通用的接口为USB,internet等通信方式,串口基本用不到了。

串口更多的是使用在SOC用来输出调试信息的。调试的信息不是关键信息,由于硬件的发展,串口本身速度已经相对很慢,硬件本身可以协调发送和接收速率,控流基本用不到。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值