天天看点

UART、I2C、SPI接口常见面试问题总结

UART

定义:Universal Asynchronous Receiver/Transmitter - 通用异步收发传输器。

特点:速率不快、可全双工、结构上一般由波特率产生器、UART发送器、UART接收器组成,硬件2-3线。

UART、I2C、SPI接口常见面试问题总结

线:RXD,TXD,GND,半双工的话就两根(地线必须有)。

空闲位:

UART协议规定,当总线处于空闲状态时信号线的状态为高电平。

起始位:

开始进行数据传输时发送方要先发出一个低电平来表示传输字符的开始(与空闲位相反)。

数据位:

数据可以是5、6、7、8、9位,一般为8位,先发送最低位。

奇偶校验位:

串口校验分为几种方式:

1.无校验(no parity)。

2.奇校验(odd parity):如果数据位中“1”的数目是偶数,则校验位为“1”,反之为“0”。

3.偶校验(even parity):如果数据位中“1”的数目是偶数,则校验位为“0”,反之为“1”。

4.mark parity:校验位始终为1。

5.space parity:校验位始终为0。

停止位:

数据结束标志,可以是1、1.5、2位的高电平。

即可设置的有数据位、校验位和停止位。

波特率:

数据传输速率使用波特率来表示,单位bps,如果串口波特率为9600bps,那么传输一个比特需要的时间是1/9600≈104.2us。

I2C

定义:Inter-Integrated Circuit - 集成电路总线。

特点:双向、双线、串行、多主控接口标准、速率不快、半双工、同步接口、具有总线仲裁机制。非常适用于器件之间近距离经常性数据通信,可实现设备组网。

线:SCL、SDA。

起始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 

结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

写操作:

主机发送起始信号后发送I2C从机地址(7位)和写操作0(1位),主机等待从机发送ACK,收到ACK后主机发送从机寄存器地址(8位),接着继续等待ACK,等到ACK后主机发送要写入寄存器的数据。主机发送data,从机发送ACK,重复多次可顺序写入多个寄存器直至主机产生结束信号。

读操作(随机读):

主机发送起始信号后,继续发送从机地址和写操作0,主机等待从机发送ACK,收到ACK后主机发送从机寄存器地址,接着继续等待ACK,等到ACK后主机再次发起起始信号,然后发送从机地址和读操作1,并等待ACK,从机发送ACK之后接着发送指定寄存器里的数据,主机发送ACK表示收到,从机继续发送数据即顺序读取下一个寄存器。当主机希望停止接收数据时就返回一个非应答信号NACK,数据传输将结束。

总线仲裁机制:

SDA线的仲裁是建立在总线具有线“与”逻辑功能的原理上的。节点在发送1位数据后,比较总线上所呈现的数据与自己发送的是否一致,是,继续发送;否则,退出竞争。SDA线的仲裁可以保证I2C总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失(因为仲裁结束之前各节点发送数据一致),总线系统通过仲裁只允许一个主节点可以继续占据总线。

最大从机数:

由I2C地址决定,7位地址,2^7=128,但是0x00不用,所以理论上可以挂127个从机。但是,虽然I2C协议没有规定总线上设备的最大数目,但是规定了总线的电容不能超过400pF。管脚都是有输入电容的,PCB上也会有寄生电容,所以会有一个限制,实际设计中经验值大概是不超过8个器件。

上拉电阻作用:

I2C的接口一般都是OD或者OC门,芯片内部无上拉电阻时,外部需要加上拉电阻才能输出高电平。

SPI

定义:Serial Peripheral Interface - 串行外设接口。

特点:同步、串行、高速、可全双工、可实现多个SPI设备互联、硬件2-4线。

线:MISO、MOSI、SCLK、CS。最少可以只用2根,单向通信的时候可以只使用一条数据线,只有一个从机的时候可以取消片选线。

传输模式:

通过设置控制寄存器SPICR1中的CPOL和CPHA位,将SPI可以分成四种传输模式。

UART、I2C、SPI接口常见面试问题总结
UART、I2C、SPI接口常见面试问题总结

CPOL=0,表示当SCLK=0时处于空闲态,SCLK=1有效。

CPOL=1,表示当SCLK=1时处于空闲态,SCLK=0有效。

CPHA=0,表示数据采样是在第一个跳变沿,数据发送在第二个跳变沿。

CPHA=1,表示数据采样是在第二个跳变沿,数据发送在第一个跳变沿。

UART、I2C、SPI接口常见面试问题总结

继续阅读