天天看点

【框架】SPI四种模式+通用设备驱动实现

目录

前言

笔录草稿

SPI介绍

SPI四种模式 **

SPI 驱动框架 **框架

SPI 介绍为搜集百度资料+个人理解

其余为原创(有误请指正)

集四种模式于一身

李柱明博客:https://www.cnblogs.com/lizhuming/

本文链接:https://www.cnblogs.com/lizhuming/p/13907267.html

SPI 协议简介

SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。

是一个环形总线结构

由 ss(cs)、sck、sdi、sdo 构成

其时序主要是在 sck 的控制下,两个双向移位寄存器进行数据交换。

物理线说明

SS

从设备选择信号线,常称为片选信号线,也称为NSS、CS。

用于选择从机。

SCK (Serial Clock)

时钟信号线

用于通讯数据同步。

MOSI (Master Output, Slave Input)

主设备输出/从设备输入引脚。

主机发出,从机接收。

MISO (Master Input,,Slave Output)

主设备输入/从设备输出引脚。

从机发出,主机接收。

SPI 四种模式

请移步到下面章节学习

SPI的协议层

SPI协议定义了通讯的起始和停止信号、数据有效性、时钟同步等环节。

基本通讯过程

图解

标号1:NSS信号线由高变低,是SPI通讯的起始信号。

标号6:NSS信号由低变高,是SPI通讯的停止信号。

简单时序图

【框架】SPI四种模式+通用设备驱动实现

模式时序图

【框架】SPI四种模式+通用设备驱动实现

四种模式由 CPOL 和 CPHA 组合区分

CPOL

时钟极性

是指SPI通讯设备处于空闲状态时,SCK信号线的电平信号

为 0 时

SCK 空闲状态为 低电平

为 1 时

SCK 空闲状态为 高电平

CPHA

时钟相位

是指数据的采样的时刻

MOSI或MISO数据线上的信号将会在SCK时钟线的“奇数边沿”被采样。(即是第一个边沿)

这种模式适合那种从设备一旦被片选后就输出数据到MISO线上。

数据线在SCK的“偶数边沿”采样。(即是第二个边沿)

这种模式适合那种从设备被片选后还需要一个时钟才能 输出数据到MISO线上。

四种模式(CPOL, CPHA)

模式 0:(0, 0)

SCK空闲为 低电平,数据在SCK的 上升沿 被采样

模式 1:(0, 1)

SCK空闲为 低电平,数据在SCK的 下降沿 被采样

模式 2:(1, 0)

SCK空闲为 高电平,数据在SCK的 下降沿 被采样

模式 3:(1, 1)

SCK空闲为 高电平,数据在SCK的 上升沿 被采样

实现方法参考 I2C设备驱动拆解

自己先在写出四种模式的读写时序,便会发现以下规律

读写的逻辑差不多都一样,只是 SCK 信号线出现的位置及高低电平会因不同模式而不同。(这里我就不分别写出4种模式的单独实现了,直接上规律表,然后实现统一的源码)

R/W

位置1-SCK

位置2-SCK

位置3-SCK

位置4-SCK

R

X

1

-

W

由上规律得出 支持四种模式的 SPI 读写源码

SPI 写函数

SPI 读函数

SPI 读写函数