linux驱动开发----SPI驱动(一)

注:本文针对xilinx的zynqMP系列芯片讲解SPI驱动

一、引言

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

二、SPI总线结构

spi总线结构

三、SPI接口

        SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。

                                          https://img-blog.csdnimg.cn/20200527080942986.png

MOSI

主器件数据输出,从器件数据输入

MISO

主器件数据输入,从器件数据输出

SCLK

时钟信号,由主器件产生

SS

从器件使能信号,由主器件控制

 四、SPI工作原理      

        SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的下降沿上数据改变,上升沿一位数据被存入移位寄存器。

spi时序图

在一个SPI时钟周期内,会完成如下操作:

  1. 主机通过MOSI线发送1位数据,从机通过该线读取这1位数据;
  2. 从机通过MISO线发送1位数据,主机通过该线读取这1位数据。这是通过移位寄存器来实现的。如下图所示,主机和从机各有一个移位寄存器,且二者连接成环。随着时钟脉冲,数据按照从高位到低位的方式依次移出主机寄存器和从机寄存器,并且依次移入从机寄存器和主机寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。

spi寄存器交换

五、SPI接口的优缺点

  • 优点:
  1. 支持全双工操作;
  2. 操作简单;
  3. 数据传输速率较高(相对的)。
  • 缺点:
  1. 多个spi设备需要占用主机较多的管脚(每个从机都需要一根片选线);
  2. 只支持单个主机;
  3. 没有指定的流控制,没有应答机制确认是否接收到数据。

六、SPI工作模式

SPI有四种工作模式,具体由CPOL(Clock Polarity 时钟极性),CPHA(Clock Phase时钟相位)决定

MODE0 CPOL=0,CPHA=0
MODE1 CPOL=0,CPHA=1
MODE2 CPOL=1,CPHA=0
MODE3 CPOL=1,CPHA=1
  • 当CPOL为0时,空闲的时候SCLK电平是低电平;
  • 当CPOL为1时,空闲的时候SCLK电平是高电平;
  • 当CPHA为0时,采集数据发生在时钟周期的前边缘(第一个边缘,可能是上升缘也可能是下降缘,由CPOL决定),这同时意味着输出数据发生在后边缘;
  • 当CPHA为1时,采集数据发生在时钟周期的后边缘(第二个边缘,可能是上升缘也可能是下降缘,由CPOL决定),这同时意味着输出数据发生在前边缘;

摘抄一张网上的图:


        我们编写spi接口的设备驱动程序的时候,最需要关心的就是spi控制器的部分是spi设备采用的是那种模式,确定模式后,我们得将spi控制器配置成一样的模式才能正常工作。所以说如何选择SPI控制器的工作模式,是根据从设备的工作模式来定的,一般从设备是FLASH、eeprom之类的存储介质,其工作模式是在出厂时就确定的,所以只能通过修改SPI控制器的工作模式,来适应从设备,从而实现SPI通信流程。

二、zynqMP芯片的SPI控制器

详见https://download.csdn.net/download/m0_37765662/12414895

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章