0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

串行外围设备接口应用及设计详解

wFVr_Hardware_1 来源:互联网 作者:佚名 2017-10-16 08:58 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1、 SPI简介

SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。

2、 SPI特点

2.1采用主-从模式(Master-Slave) 的控制方式

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

2.2采用同步方式(Synchronous)传输数据

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

2.3数据交换(Data Exchanges)

SPI 设备间的数据传输之所以又被称为数据交换, 是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一个 "发送者(Transmitter)" 或者 "接收者(Receiver)". 在每个 Clock 周期内, SPI 设备都会发送并接收一个 bit 大小的数据, 相当于该设备有一个 bit 大小的数据被交换了. 一个 Slave 设备要想能够接收到 Master 发过来的控制信号, 必须在此之前能够被 Master 设备进行访问 (Access). 所以, Master 设备必须首先通过 SS/CS pin 对 Slave 设备进行片选, 把想要访问的 Slave 设备选上. 在数据传输的过程中, 每次接收到的数据必须在下一次数据传输之前被采样. 如果之前接收到的数据没有被读取, 那么这些已经接收完成的数据将有可能会被丢弃, 导致 SPI 物理模块最终失效. 因此, 在程序中一般都会在 SPI 传输完数据后, 去读取 SPI 设备里的数据, 即使这些数据(Dummy Data)在我们的程序里是无用的。

2.4 SPI有四种传输模式

上升沿、下降沿、前沿、后沿触发。当然也有MSB和LSB传输方式.

2.5 SPI只有主模式和从模式之分。

没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。

3、 工作机制

3.1概述

3.2 Timing

3.2.1 SPI相关的缩写或说法

SPI的极性Polarity和相位Phase,最常见的写法是CPOL和CPHA,不过也有一些其他写法,简单总结如下:(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity = (时钟)极性(2) CKPHA (Clock Phase) = CPHA = PHA = Phase = (时钟)相位(3) SCK=SCLK=SPI的时钟(4) Edge=边沿,即时钟电平变化的时刻,即上升沿(rising edge)或者下降沿(falling edge)对于一个时钟周期内,有两个edge,分别称为:Leading edge=前一个边沿=第一个边沿,对于开始电压是1,那么就是1变成0的时候,对于开始电压是0,那么就是0变成1的时候;Trailing edge=后一个边沿=第二个边沿,对于开始电压是1,那么就是0变成1的时候(即在第一次1变成0之后,才可能有后面的0变成1),对于开始电压是0,那么就是1变成0的时候;

3.2.2 SPI的相位和极性

CPOL和CPHA,分别都可以是0或时1,对应的四种组合就是:Mode 0 CPOL=0, CPHA=0Mode 1 CPOL=0, CPHA=1Mode 2 CPOL=1, CPHA=0Mode 3 CPOL=1, CPHA=1

3.2.3 CPOL极性

先说什么是SCLK时钟的空闲时刻,其就是当SCLK在数发送8个bit比特数据之前和之后的状态,于此对应的,SCLK在发送数据的时候,就是正常的工作的时候,有效active的时刻了。先说英文,其精简解释为:Clock Polarity = IDLE state of SCK。再用中文详解:SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high;CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low;

3.2.4 CPHA相位

首先说明一点,capture strobe = latch = read = sample,都是表示数据采样,数据有效的时刻。相位,对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿。对于:CPHA=0,表示第一个边沿:对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;CPHA=1,表示第二个边沿:对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;对于CPOL=1,idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;还是上图大家更容易看懂

3.2.5 软件中如何设置SPI的极性和相位

SPI分主设备和从设备,两者通过SPI协议通讯。而设置SPI的模式,是从设备的模式,决定了主设备的模式。所以要先去搞懂从设备的SPI是何种模式,然后再将主设备的SPI的模式,设置和从设备相同的模式,即可正常通讯。对于从设备的SPI是什么模式,有两种:

3.2.5.1固定的,有SPI从设备硬件决定的

SPI从设备,具体是什么模式,相关的datasheet中会有描述,需要自己去datasheet中找到相关的描述,即:关于SPI从设备,在空闲的时候,是高电平还是低电平,即决定了CPOL是0还是1;然后再找到关于设备是在上升沿还是下降沿去采样数据,这样就是,在定了CPOL的值的前提下,对应着可以推算出CPHA是0还是1了。

3.2.5.2 可配置的,由软件自己设定

从设备也是一个SPI控制器,4种模式都支持,此时只要自己设置为某种模式即可。然后知道了从设备的模式后,再去将SPI主设备的模式,设置为和从设备模式一样,即可。对于如何配置SPI的CPOL和CPHA的话,不多细说,多数都是直接去写对应的SPI控制器中对应寄存器中的CPOL和CPHA那两位,写0或写1即可。3.3 SSPSR

3.4 SSPBUF

3.5 Controller

4. SPI举例

上面说了那么多,在这里我来举一个例子帮助大家理解。SPI是一个环形总线结构,由ss(cs)、sck、sdisdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。那么第一个上升沿来的时候 数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在 8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。举例:假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi的8个时钟周期的数据情况演示一遍:假设上升沿发送数据

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 实时时钟
    +关注

    关注

    4

    文章

    365

    浏览量

    68577
  • 总线
    +关注

    关注

    10

    文章

    3065

    浏览量

    91966
  • 时钟信号
    +关注

    关注

    4

    文章

    511

    浏览量

    30171

原文标题:SPI详解

文章出处:【微信号:Hardware_10W,微信公众号:硬件十万个为什么】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用瑞萨EK-RA2L2评估板加速USB Type-C接口原型开发

    USB接口有助于符合USB标准的数据通信和电力传输。它提供卓越的多功能性,适用PC外围设备、电视、笔记本电脑和显示器等各种应用,其中USB Power Delivery可实现高达100W或更高的功率水平,以实现更快的充电,以及高效灵活的工作。
    的头像 发表于 04-08 14:44 333次阅读
    使用瑞萨EK-RA2L2评估板加速USB Type-C<b class='flag-5'>接口</b>原型开发

    USB转串行接口适配器 可编程USB转UART/I2C/SMBus/SPI/CAN/1-Wire

    串行接口
    稳控自动化
    发布于 :2026年04月01日 10:55:39

    Everspin四路串行外设接口MRAM芯片

    MR25H40VDF是Everspin公司推出的一款基于四路串行外设接口(SPI)的MRAM芯片,隶属于MR2xH40系列。MRAM芯片MR2xH40系列是SPI接口MRAM系列,其存储器阵列逻辑
    的头像 发表于 03-26 15:56 264次阅读
    Everspin四路<b class='flag-5'>串行</b>外设<b class='flag-5'>接口</b>MRAM芯片

    变频器主电路外围设备如何正确去选择

    变频器作为现代工业自动化控制系统的核心部件,其主电路外围设备的正确选择直接影响系统稳定性、能效比和设备寿命。本文将围绕主回路断路器、接触器、电抗器、滤波器等关键外围设备的选择要点展开分析,并提供实际应用中的配置建议。
    的头像 发表于 03-02 17:29 786次阅读
    变频器主电路<b class='flag-5'>外围设备</b>如何正确去选择

    中科芯CKS32F107XX系列MCU的串行外设接口介绍

    SPI协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它在芯片的管脚上只占用四根线,节约了芯片的管脚
    的头像 发表于 01-27 06:04 1w次阅读
    中科芯CKS32F107XX系列MCU的<b class='flag-5'>串行</b>外设<b class='flag-5'>接口</b>介绍

    Air8000 BLE外围模式全解析:数据收发实战指南!

    Air8000的BLE外围设备模式(peripheral)是实现低功耗蓝牙通信的关键功能,它既能主动向中心设备发送通知数据,也能接收中心设备传回的信息。本文将通过具体示例,详细拆解这一模式的操作流程
    的头像 发表于 11-24 14:26 2234次阅读
    Air8000 BLE<b class='flag-5'>外围</b>模式全解析:数据收发实战指南!

    可编程多协议串行接口适配器 串行接口测试与转换 USB转UARTI2CSPICAN1-Wire

    串行接口
    稳控自动化
    发布于 :2025年10月30日 11:14:27

    深入剖析SPI协议

    SPI,全称(Serial Peripheral interface)是由摩托罗拉公司首先定义的协议,中文名为串型外围设备接口。SPI是一种高速全双工的总线协议。
    的头像 发表于 08-21 15:04 4359次阅读
    深入剖析SPI协议

    ElfBoard嵌入式教育科普|USB接口全面解析

    USB的全称是Universal Serial Bus,译为通用串行总线,是一种用于连接计算机及其外部设备的标准接口,它的设计旨在标准化连接计算机与外部设备之间的通信,到现在它已经是一
    的头像 发表于 07-16 11:38 6076次阅读
    ElfBoard嵌入式教育科普|USB<b class='flag-5'>接口</b>全面解析

    【HarmonyOS 5】鸿蒙星闪NearLink详解

    是 HarmonyOS 提供的短距离通信服务,支持星闪设备间的连接、数据交互。例如,手机可作为中心设备外围设备(如鼠标、手写笔、智能家电、车钥匙等)通过星闪进行连接。 二、NearLink Kit 的接入
    的头像 发表于 07-11 18:24 2165次阅读
    【HarmonyOS 5】鸿蒙星闪NearLink<b class='flag-5'>详解</b>

    外围设备通过手机连接到BLE应用程序,为什么不能连接到Infineaon BLE?

    使用 ch06_ex01_periab \" le 项目创建了外围设备。\" \" 使用像 LightBlue 这样的移动应用程序,我能够连接到这个外围设备并更改特征值。 我已经使用 \"
    发表于 07-07 08:06

    是否有可能使用CYSPP配置文件连接到外围设备

    我们的现有系统使用中央和外围设备,使用基于 Microchip RN4020 的中央和外围设备。 由于供应限制的原因,我们希望将英飞凌 CYBT-483056 SoC 用于 BLE central。 我们想知道是否有可能使用CYSPP配置文件连接到
    发表于 07-07 06:17

    求助,关于PSOC6与4343W蓝牙配对问题求解

    我有一块带有 PSOC6(6247)的定制电路板,连接到 CYC4343W。 该开发板充当蓝牙中央设备。 它正在通过蓝牙(BT)MAC 地址扫描特定外围设备。 成功找到外围设备并启动配对过程。 初始
    发表于 06-27 06:43

    HarmonyOS 5 makeObserved接口详解

    【HarmonyOS 5】makeObserved接口详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、makeObserved接口
    的头像 发表于 06-16 17:58 844次阅读

    MAX9249多媒体串行链路串行器,带有LVDS系统接口技术手册

    MAX9249串行器带有LVDS系统接口,采用Maxim吉比特多媒体串行链路(GMSL)技术。MAX9249串行器与GMSL解串器配合使用,构成完整的数字
    的头像 发表于 05-28 16:43 1386次阅读
    MAX9249多媒体<b class='flag-5'>串行</b>链路<b class='flag-5'>串行</b>器,带有LVDS系统<b class='flag-5'>接口</b>技术手册