3.I/O接口(17道)

3.1 GPIO口一般有哪三个寄存器?

以S3C2410为例,有控制寄存器、数据寄存器、上拉寄存器。


3.2 GPIO的输入输出模式有哪些?

答案:

(1)输入模式:浮空输入、带上拉输入、带下拉输入、模拟输入。

(2)输出模式:开漏输出、推挽输出、开漏复用输出、推挽复用输出。

解读:

浮空输入_IN_FLOATING

浮空输入,可以做KEY识别。

带上拉输入_IPU

IO内部上拉电阻输入。

带下拉输入_IPD

IO内部下拉电阻输入。

模拟输入_AIN

应用ADC模拟输入,或者低功耗下省电。

开漏输出_OUT_OD

IO输出0GNDIO输出1则悬空,需要外接上拉电阻才能输出高电平。当输出为1时,IO口的状态由上拉电阻拉高,但同时IO口也可由外部电路拉低,可以通过输入数据寄存器读取电平变化,实现C51IO双向功能。

推挽输出_OUT_PP

IO输出0GND IO输出1VCC,读输入值是未知的。

复用功能的推挽输出_AF_PP

片内外设功能(I2CSCL,SDA)。

复用功能的开漏输出_AF_OD

片内外设功能(TX1,MOSI,MISO.SCK.SS


3.3请说明总线接口UARTUSBSPIIIC的异同点。

总线接口

/

同步/异步

工作方式

速率

线路

距离

大小端

UART

串行

异步

全双工

慢,最快只有1.5Mbps

3线:RXTXGND

远,RS-485可达1200m

小端模式

USB

串行

同步

半双工

快,USB3.0可达5Gbps

4线:VbusGNDD+D-

近,不超过5m

小端模式

SPI

串行

同步

全双工

快,可达50Mbps

3线或4线:SCLKSIMOSOMISS

远,可达10m

大端模式

IIC

串行

同步

半双工

慢,最快只有3.4Mbps

2线:SCLSDA

近,不超过30cm

大端模式


3.4什么是异步串行?什么是同步串行?

(1)异步串行方式的特点:

①以字符为单位传送信息,相邻两个字符间的间隔是任意长;即字符内部各位同步,字符间异步;

②因为一个字符中的比特位长度有限,所以接收时钟和发送时钟只要相近就可以了。

(2)同步串行方式的特点:

①以数据块为单位传送信息,在一个数据块内,字符与字符之间无间隔;即字符内部各位同步,字符间也同步;

②因为一次传输的数据块中包含的数据较多,所以接收时钟与发送时钟需要严格同步。

3.5 IIC总线时序图?
(1)时序总结:

总线空闲状态

SCLSDA均为高电平,接上拉电阻。

启动信号(START

SCL保持高电平期间,SDA由高电平被拉低。由主控器发出。

数据位传送(DATA

SCL保持高电平期间,SDA上的电平保持稳定,低电平为数据0、高电平为数据1。用法:主控器和被控器都可发出。

应答信号(ACK

SCL保持高电平期间,SDA保持低电平。IIC总线上所有数据都是以8位字节传送的,发送器每发送一个字节,就在第9个时钟脉冲期间释放SDA(高电平),由接收器反馈一个ACK

非应答信号(NACK

SCL保持高电平期间,SDA保持高电平。如果接收器是主控器,则它在收到最后一个字节后,发送一个NACK,通知被控器结束数据发送,并释放SDA(高电平),以便主控器发送一个STOP

停止信号(STOP

SCL保持高电平时间,SDA由低电平被释放(拉高)。由主控器发出。

(2)写数据步骤:
①主机发起一个启动信号(START)。
②主机发送7bit从机地址+1bit读写选择位,1表示读、0表示写。
③从机产生应答信号(ACK)。
④主机发送8bit从机寄存器地址。
⑤从机产生应答信号(ACK)。
⑥主机发送一个字节数据。
⑦从机产生应答信号(ACK)。
⑧主机发送一个停止信号(STOP)。
(3)读数据步骤
①主机发送一个启动信号(START)。
②主机发送7bit从机地址+1bit读写选择位,1表示读、0表示写。
③从机产生一个应答信号(ACK)。
④主机发送8bit从机寄存器地址。
⑤从机产生一个应答信号。
⑥主机再次发送一个启动信号(START)。
⑦主机再次发送7bit从机地址+1bit读写选择位,1表示读、0表示写。
⑧从机产生一个应答信号(ACK)。
⑨主机读取一个字节数据。
⑩主机产生一个非应答信号(NACK)。之后产生一个停止信号(STOP)。

3.6 SPI的四种操作时序分别是什么?

SPI的时钟极性CPOL和时钟相位CPHA可以分别为0或1,由此构成了四种组合:

①CPOL = 0,CPHA = 0:空闲时SCLK为低电平,在第一个边沿开始采样。

②CPOL = 0,CPHA = 1:空闲时SCLK为低电平,在第二个边沿开始采样。

③CPOL = 1,CPHA = 0:空闲时SCLK为高电平,在第一个边沿开始采样。

④CPOL = 1,CPHA = 1:空闲时SCLK为高电平,在第二个边沿开始采样。


3.7哪种总线方式是全双工类型?哪种总线方式的传输距离较短?

(1)UART、SPI是全双工类型。

(2)IIC、USB的传输距离较短。


3.8编写一个通用型串口接收程序,如何实现判断未知设备的端口号和波特率?

(1)判断端口号:首先搜索计算机可用端口,然后逐个打开,分别定时1.5秒,有数据进来则认为是目标端口。

(2)波特率判断:将本机波特率分别设置为2400、4800、9600、19200、38600、57600、115200,每个波特率定时1.5秒,对收到的ASCII码进行分析,将小于等于127的认为是正常的字符,将大于127的认为是乱码,当正常字符数目大于等于10倍乱码数目则认为当前波特率为正确波特率,并终止往后搜索。另外,也可以通过示波器判断。


3.9串口如何发送浮点型数据?

可将多字节的浮点型数据分解成单字节逐个发送,接收后组合还原。

(1)使用共用体来分解

union  
{  
    float f;  
    unsigned long l;  
}data_TX;  
data_TX.f = 123.456;  

(2)发送时发送4字节(小端模式,低位先发)

TX = (unsigned char)data_TX.l;       // 低8位  
TX = (unsigned char)(data_TX.l >> 8);  
TX = (unsigned char)(data_TX.l >> 16);  
TX = (unsigned char)(data_TX.l >> 24);  // 高8位  

(3)接收端也定义同样的结构体,并接收4字节数据

union  
{  
    float f;  
    unsigned long l;  
}data_RX;  
data_RX.l = RX;      // 低8位  
data_RX.l |= RX << 8;  
data_RX.l |= RX << 16;  
data_RX.l |= RX << 24; // 高8位  

(4)最后data_RX.f == data_TX.f。


3.10 UARTTTLRS-232RS-485的关系?

答案:

(1)UART是一种具有协议特征的收发器/接口/总线,也就是说它是一个按照特定协议来收发数据的硬件,它规定了数据按照什么格式和时序来传输。

(2)而TTL、RS-232、RS-485是三种不同的电气协议,是对电气特性的规定,作用于数据传输通路,但它并不包含对数据的处理方式。UART可以使用TTL电平,也可以使用RS-232、RS-485电平。

解读:三种电气协议的区别:

TTL(晶体管-晶体管逻辑电平)

规定+5V(或>=2.4V)等于逻辑“1”,0V(或<=0.4V)等于逻辑“0”,噪声容限为0.4V

RS-232

采用负逻辑传输,规定-5V ~ -15V等于逻辑“1”,+5V ~ + 15V为逻辑“0”,噪声容限为2V

RS-485

采用差分传输,规定A线电平比B线电平高200mV以上时为逻辑“1”,A线电平比B线电平低200mV以上时为逻辑“0”。


3.11 RS-232RS-485的区别和联系?

(1)区别:

①抗干扰性:RS-485接口的抗干扰性比RS-232接口强,因为RS-485采用差分传输。

②传输距离:RS-485接口(1200m)的传输距离比RS-232接口(50m)远。

③通信能力:RS485接口在总线上允许连接多达128个收发器,而RS-232接口只允许一对一通信。

④传输速率:RS-485接口的最高传输速率为10Mbps,而RS-232接口为20Kbps。

⑤信号线:RS-485接口组成半双工网络需要两根信号线,组成全双工网络需要四根信号线;RS-232接口一般使用RXD、TXD、GND三根线组成全双工网络。

⑥电气电平值:RS-485接口规定A线电平比B线电平高200mV以上时为逻辑“1”,A线电平比B线电平低200mV以上时为逻辑“0”。RS-232接口规定-5V ~ -15V等于逻辑“1”,+5V ~ + 15V为逻辑“0”,噪声容限为2V。

(2)联系:

①都可通过DB-9连接器连接。

②均可采用屏蔽双绞线传输。

③都是串行通信。

④通信方式都是全双工(一般RS-485是半双工)。


3.12 uart如何保证数据传输的正确性?

(1)在数据位的两端添加了起始位、奇偶校验位、停止位等用于数据的同步和纠错。

(2)在接收端用16倍波特率对数据进行采样,取中间的采样值,很大程度上确保了采样数据的正确性。


3.13保证数据无串扰,参数设置正确,但是串口A传输float类型给串口B,总是出现错误,请问可能是什么原因?

可能是发送端和接收端的大小端不一致。


3.14什么是MSB,什么是LSB

(1)MSB(Most Significant Bit):最高有效位,是指二进制中最高值的比特。

(2)LSB(Least Significant Bit):最低有效位,是指二进制中最低值的比特。


3.15 UART一帧可以传5/6/7/8位,IIC必须是8位,SPI可以8/16位。


3.16请列举常用的串行通信方式(两种以上),并简述串行通信和并行通信不同之处、优缺    点。

(1)异步通信(UART)和同步通信(SPI、IIC、USB等)。

(2)串行速度慢但占用资源少、线间干扰小;并行速度快但占用资源多、线间干扰相对大。


3.17 CAN总线接口相对于RS-232接口、RS-485接口的优点是什么?

(1)CAN总线接口相对于RS-232接口的优点是抗干扰能力强、传输距离远。它采用差分传输,内置CRC校验,传输可靠性强。

(2)CAN总线接口相对于RS-485接口的优点是能构成多主系统,同一时刻可以有两个或两个以上的设备处于发送状态,适用于实时性要求高的工控领域。