首页 > 编程知识 正文

嵌入式开发面试题库(嵌入式面试经验)

时间:2023-05-03 10:15:23 阅读:101576 作者:4789

今日头条/西瓜视频/颤音同名短视频:正点原子兄弟

感谢您的关注和支持。您的支持是原子兄弟取得无限进步的动力。

一、SPI概述SPI(串行外设接口)顾名思义就是串行外设接口。SPI是一种高速、全双工、同步的通信总线,在芯片的引脚上只占用四根线,节省了芯片的引脚,节省了空间,为PCB的布局提供了便利。主要用于EEPROM、FLASH、实时时钟和AD转换器。打开STM32F103手册,找到SPI的结构框图,了解其一般功能,如下图所示:

关于SPI协议,那么我们可以理解一句话。SPI的写和读操作同步完成。如果只执行写操作,主机只需忽略收到的字节;相反,如果主机想要读取从机的一个字节,它必须发送一个空字节来触发从机的传输。主从连接图:

一个GIF描述了关于SPI的传输过程:SPI可以指定数据传输是从MSB位开始还是从LSB位:开始,例如,数据传输从MSB位开始:

(动态图演示)

上面的GIF显示,当上升沿到来时,MOSI发送主机的MSB为1,而MISO由从机发送为1,然后等价交换。注:上述SPI的GIF使用SPI模式1。SPI不一定按上升沿采样,而是由SPI模式决定。上述GIF的MSB代表移位寄存器的最高位,以此类推,我们得到下表:

注:上图中的颜色和MSB是串行缓冲器的最高位。2.SPI引脚信息MISO:主机数据输入,从机数据输出,简而言之:从机到串行总线的数据或主机接收总线的数据。MOSI:从主设备输出的数据和从设备输入的数据。简单地说,主机向串行总线发送数据,或者从机从总线接收数据。SCLK:时钟信号,由主设备产生。数据发送时,必须有方波输出;当没有数据时,就不会有方波输出。CS:从芯片选择信号,由主设备控制。简单来说:主机向从机发送数据,如果CS为低电平,则从机使能,否则,从机禁用。三.SPI工作模式SPI的工作模式与CPOL(时钟极性)和CPHA(时钟相位)有关。时钟极性(CPOL):指通信设备空闲时(SPI开始通信,nSS线路无效前)的SCK状态。CPOL=0:SCK空闲时很低。CPOL=1:SCK空闲时很高。边肖之前说过,如果没有来自从机或主机的数据传输,那么SCK就不会有方波输出,SCK在空闲状态下是处于低电平还是高电平是由时钟极性(CPOL)决定的。相位(CPHA):指数据的采样时间是在SCK的偶边采样还是奇边采样。CPHA=0:在SCK的奇数边采样。CPHA=1:在SCK的偶数边缘采样。根据上面的CPOL(时钟极性)和CPHA(时钟相位),有四种SPI模式,如下图所示:

注:上图红色部分:SPI模式为0时,空闲状态下SCLK处于低电平。如果需要数据采样,SCLK会输出一个方波,那么方波就是奇边缘矩,采样边缘就是上升沿。在SPI模式1下,当处于空闲状态时,SCLK处于低电平。如果需要数据采样,SCLK输出一个方波,那么方波就是偶边矩,采样沿就是下降沿。在SPI模式2下,当处于空闲状态时,SCLK处于高电平。如果需要数据采样,SCLK输出一个方波,那么方波就是奇数沿矩,采样沿就是下降沿。在SPI模式3下,当处于空闲状态时,SCLK处于高电平。如果需要数据采样,SCLK输出一个方波,那么方波就是偶数沿矩,采样沿就是上升沿。

四.以SPI实验为例:以CPOL=0和CPHA=0为例,其他模式相同。

原理,SCL空闲时候为低电平,奇数边沿上升沿采样,那么下降沿接收数据,如果两块STM32的SPI1相连,如以下图所示:

主机和从机都有一个串行移位寄存器,主机通过想它的SPI串行寄存器写入一个字节来发起一次传输。主机的串行移位寄存器通过MOSI线将字节传输给从机,同时从机也将自己的串行移位寄存器中的内容通过MISO线传输给主机。这样两个移位寄存器的内容就被交换了。外设的写操作和读操作是同步完成的。如果只想进行写操作,主机只需忽略接收的字节。如果只想进行读操作,也必须发送一个字节(可以是空字节)来引发从机传输。 那么它们都具有一个串行移位寄存器,例如主机串行缓冲区数据为0xAA,那么发送从机的数据为0xaa就是10101010二进制,如果从机的串行缓冲区数据的数据为0x9F,转成二进制为10011111,所以我们得到下图所示:

总结前面我们已经说了CPOL设置为0,所以SCLK空闲状态为低电平,如果没有数据发送,那么SCLK一直为低电平。当主机发送数据时,SCLK一直为低电平转为输出一个方波,注意是八个脉冲,由于CPHA 设置为 0,所以奇数边沿,上升沿有效,所以数据采样在上升沿,当发送完成时,MOSI转成高电平。NSS为低电平有效,主要使能从机。主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输串行移位寄存器通过MOSI信号线将字节传送给从机,同时从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。