项目知识复习1-----SPI

来源:互联网 发布:股票交易软件制作公司 编辑:程序博客网 时间:2024/05/21 01:53

          最近一段在找工作,因此面试时,肯定会被问到一些自己做过的项目,因此我打算用一个系列把之前做的项目里用到的一些知识列出来复习一下,也方便以后自己查阅吧。


     第一篇.    SPI

使用场景:无线数传NRF24L01


1.概念

     1.SPI,serial perripheral interface ,串行外围设备接口,所以是串行通信。同时,它允许全双工。
2.SPI通信需要4根线: MOSI,MISO,CLK,CS。
3.时钟和数据的相位没有特别严格的要求(而IIC中,数据的变化只能在SCL是低电平的时候发生),SPI数据的变化是一个时钟周期一次,这样的方法来传输数据就简单多了。我们可以根据需求对时钟的极性和相位做调整,看看是在时钟上升沿还是下降沿来发送数据,还有停止发送时时钟的极性,是保持高电平还是低电平。因此,spi就有
好几种工作模式。
4.另外在多机通信时,SPI只是简单的通过一个片选信号来选择哪个设备占用总线,但是IIC是通过发送从设备地址来自动选择的。
    5. 采用同步方式传输数据。Master 设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse), 时钟脉冲组成了时钟信号(Clock Signal) , 时钟信号通过时钟极性 (CPOL) 和 时钟相位 (CPHA) 控制着两个 SPI 设备间何时数据交换以及何时对接收到的数据进行采样, 来保证数据在两个设备之间是同步传输的.换句话说就是,CLK,跟CS都是主机发出的,对于从机来说,这两个引脚相当于输入引脚。
另外,SPI只有主模式跟从模式,没有读写的说法,即,每次通信,是SPI在主从设备上进行数据的交换,注意,是交换,意思就是说,你发送一个数据,你必然也会收到一个数据。这也设计到SPI的一个缺点,就是只可以是一个主机,多个从机。

  2.使用




上面这张图,是对SPI通信的一个简单的描述,里面有SSPBUF,这相当于一个FIFO。而SSPSR是设备里的移位寄存器。

然后还需要解释两个概念:

上面概述里说到,SPI有4种模式,那么这四种模式怎么来的,就是靠这个两个概念:

 CPOL: 时钟极性, 表示 SPI 在空闲时, 也就是不进行数据传输的时候,时钟信号是高电平还是低电平. 若 CPOL 被设为 1, 那么该设备在空闲时 SCK 管脚下的时钟信号为高电平. 当 CPOL 被设为 0 时则正好相反.

        CPHA: 时钟相位, 表示 SPI 设备是在 SCK 管脚上的时钟信号变为上升沿时触发数据采样, 还是在时钟信号变为下降沿时触发数据采样. 若 CPHA 被设置为 1, 则 SPI 设备在时钟信号变为下降沿时触发数据采样, 在上升沿时发送数据. 当 CPHA 被设为 0 时也正好相反.


好了,知道这两个概念,我来描述一下,SPI主机模式的工作流程:

        1.首先我们需要知道从机支持4种模式的哪一种,然后我们将上述的极性跟相位配置好。

2.在要进行数据传输时,现将cs片选使能。使能之后,从机就知道你主机要跟我通信了,这个时候,只要一有时钟信号就可以进行同行了。

3.SSBUF在cpu内会存在两个寄存器,假设为Tx-Data和Rx-Data,好,这时候,我们先将数据写到Tx-Data中,之后,这些数据会被 Master-SSPSR 移位寄存器根据 Bus-Width 自动移入 Master-SSPBUF 里, 然后这些数据又会被 Master-SSPSR 根据 Channel-Width 从 Master-SSPBUF 中移出, 通过 Master-SDO  管脚传给 Slave-SDI 管脚Slave-SSPSR 则把从  Slave-SDI 接收到的数据移入 Slave-SSPBUF 里.  与此同时, Slave-SSPBUF 里面的数据根据每次接收数据的大小(Channel-Width), 通过 Slave-SDO 发往 Master-SDI, Master-SSPSR 再把从 Master-SDI 接收的数据移入 Master-SSPBUF.在单次数据传输完成之后, 用户程序可以通过从 Master 设备的 Rx-Data 寄存器读取 Master 设备数据交换得到的数据.

1 0
原创粉丝点击