SPI 驱动

1、SPI 协议介绍

  • 概述
    同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它允许 MCU 以全双工的同步串行方式, 与各种外围设备进行高速数据通信.

优点:支持全双工通信、通信简单、数据传输速率快
缺点:没有指定的流控制,没有应答机制确认是否接收到数据,所以跟 IIC 总线协议比较在数据可靠性上有一定的缺陷。

特点
采用主-从模式(Master-Slave) 的控制方式
SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设备 (Slave). 一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备, SPI 协议还规定 Slave 设备的Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备, Slave 设备本身不能产生或控制 Clock, 没有 Clock 则 Slave 设备不能正常工作.

采用同步方式(Synchronous)传输数据
Master 设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse), 时钟脉冲组成了时钟信号(Clock Signal) , 时钟信号通过时钟极性 (CPOL) 和 时钟相位 (CPHA) 控制着两个 SPI 设备间何时数据交换以及何时对接收到的数据进行采样, 来保证数据在两个设备之间是同步传输的.

数据交换(Data Exchanges)
SPI 设备间的数据传输之所以又被称为数据交换, 是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一个 “发送者(Transmitter)” 或者 “接收者(Receiver)”.在每个 Clock 周期内, SPI 设备都会发送并接收一个 bit 大小的数据, 相当于该设备有一个 bit 大小的数据被交换了.

  • 协议通信时序详解
    (1)SPI 的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少 4 根线,事实上 3 根也可以(单向传输时)。也是所有基于 SPI 的设备共有的,它们是 SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。
    (2)SDO/MOSI – 主设备数据输出,从设备数据输入;
    (3)SDI/MISO – 主设备数据输入,从设备数据输出;
    (4)SCLK – 时钟信号,由主设备产生;
    (5)CS/SS – 从设备使能信号,由主设备控制。当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低或者是拉高。

SPI 驱动架构

软件抽象
1、spi_master:对 SoC 的 SPI 控制器的抽象

2、spi_bus_type:spi 的 bus_type,代表了硬件上的 SPI Bus

3、spi_device:spi 从设备

4、spi_driver:spi 具体设备的驱动

SPI 框架简介

在这里插入图片描述
对于SPI的大框架分为两层
控制器驱动层 spi_master ,主要提供transfer函数,进行spi协议的收发。spi_master 也是基于 Platform 模型的,注册 spi_master 时会扫描一个链表进行注册设备
设备驱动层,基于 spi_bus_type,在driver里则使用spi_read、spi_writer 等函数,最终也会调用到 master->transfer 函数进行发送接收。


版权声明:本文为qq_26690505原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。