【嵌入式工程师面试高频问题】你知道SPI吗

面试中关于SPI常见问题

什么是SPI?

SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master。时钟由Master控制,在时钟移位脉冲下,数据按位(bit)传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。

SPI一般使用4条线通信分别是?

答:
1、 MISO ————— 主设备数据输入、从设备数据输出
2、 MOSI ————— 主设备数据输出、从设备数据输入
3、 SCLK ————— 时钟信号、由主设备产生
4、 NSS(CS) ————– 从设备片选信号,由主设备控制

SPI有四种操作模式,模式0、模式1、模式2、模式3。它们的区别是?

答:SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。

如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。

时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。

SPI主模块和与之通信的外设音时钟相位和极性应该一致。

硬件SPI和软件模拟SPI的区别有哪些?

答:硬件SPI的效率要比软件模拟SPI高,写程序的时候只要把要发的数据写在寄存器里,硬件就会自动给你发了,软件模拟SPI则需要器实现时钟的拉高拉低,数据串行输出等等。硬件SPI必须要处理器支持才可以用,软件SPI就不需要特定的要求了,一般IO口就可用。

简单手撕程序

从下面这个图分析循环移位寄存器,从高位开始发送,接收到寄存器的低位,然后通过每次移位,完成master和slave的8bit数据交换,也就完成数据的读写。
在这里插入图片描述

//GPIO模拟SPI(同时读写,写一个数据,通过返回一个数据)
uchar SPI_RW(uchar byte)//byte是写的数据,返回值是需要读的数据  
{
    
      
uchar bit_ctr;  
for(bit_ctr=;bit_ctr<8;bit_ctr++)  
{
    
      
MOSI=(byte&0x80);//写,移动最高有效位到MOSI线上   
byte=(byte<<1);//左移一位   
SCK=1; //时钟线置高   
byte|=MISO;//读,取当前MISO线上的值,放在byte最低位上   
SCK=0;//时钟线置低   
}  
return(byte);  
}  

猜你喜欢

转载自blog.csdn.net/freee12/article/details/109556954