SPI总结

1.前言

1.1 SPI简介

        SPI全称Serial Peripheral Interface,串行外设接口,是一种用于连接外设的全双工通信总线。主机和从机支持一对一或一对多通讯连接。

图1 SPI物理层通讯连接 

表1 Signal description

1.2 SPI特征

        串行,每个时钟周期只传输1bit数据;

        同步,同步时钟由主机提供,SPI总线上的数据读写使用该时钟同步;

        全双工,主机和从机之间数据通信使用两根独立的数据线。

2. SPI的用途

        主要用于ADC、 LCD 等设备与 MCU 间的通讯,常用来传递MCU的控制信息。

3. SPI原理

        从起始信号/停止信号数据有效性(采样点,读数据时机)的角度出发,可以将SPI通讯分为4种通讯模式,即其区别在于总线空闲时的时钟状态或数据采样时机。由此,衍生出以下定义:

(1)时钟极性(CPOL):空闲状态时,SCK (Serial Clock)的电平状态;

(2)时钟相位(CPHA):定义可以在时钟边沿进行采样,并区分奇数边沿采样偶数边沿采样两种情况。

表2 SPI通讯模式

模式CPOLCPHASCK空闲状态(触发)写数据时机采样(读)时机
000低电平下降沿奇数边沿,上升沿
101低电平上升沿偶数边沿,下降沿
210高电平上升沿奇数边沿,下降沿
311高电平下降沿偶数边沿,上升沿

(1)Mode 0 (CPOL=0, CPHA=0):在SCLK的上升沿采样数据,数据在SCLK的下降沿改变;

(2)Mode 1 (CPOL=0, CPHA=1):在SCLK的下降沿采样数据,数据在SCLK的上升沿改变;

(3)Mode 2 (CPOL=1, CPHA=0):在SCLK的下降沿采样数据,数据在SCLK的上升沿改变;

(4)Mode 3 (CPOL=1, CPHA=1):在SCLK的上升沿采样数据,数据在SCLK的下降沿改变;

 (a)

(b)

图3 CPOL/CPHA示例

        从图3(a)可以看出,CPHA = 0的模式,主要用于开始信号发出后,数据线上的数据已准备好,从机必须立即(第一个时钟边沿)读取的情况。也就是说,片选信号拉低后,总线上的数据是有效的,即作为发送出去的第一个bit数据。而且,最后一次时钟边沿(编号16),其数据并没有被采样,即是一个无效值。

        反过来,(b)中为CPHA = 1的情形,片选信号拉低后,总线上的数据是无效数据,需要在第一个时钟边沿先写入数据后,并在下一个时钟边沿进行采样。

        在实际应用中,主设备和从设备必须配置为相同的模式才能正确通信。例如,如果主设备配置为Mode 0,那么从设备也必须配置为Mode 0,以确保数据在正确的时钟边沿被采样。

4. SPI规格

       图4 tircore queued SPI概览

(1)可配置的时钟频率范围(时钟分频);

(2)主从设备通讯时,通讯速率受限于低速率设备,即CLK = min(clk_master,clk_slave);

(3)CS引脚数量,限制了作为主机时最大可连接的从机数量;

(4)可配置的数据宽度,通常支持8bit,16bit,32bit,tricore甚至支持2~32bit全范围;

(5)收发缓冲区深度,大于1时通常为队列模式(queue,fifo);

(6)中断配置;

       ① 接收缓冲区有新数据,可配触发中断;

       ② 发送缓冲区不满,即有可用空间,可写入新数据时,可触发中断;

        ③ 错误上报中断:

                - 接收缓冲区上溢出中断(错误处理,数据overflow);

                - 接收缓冲区下溢出中断(错误处理,读空);

                - 数据校验错误(ecc,奇偶校验等);

                - 波特率错误,传输错误等;

(7)可配置数据收发方式

        ① 轮询模式;

        ② 中断模式;

        ③ DMA模式;

(8)回环模式(loop back);

(9)复位模式

        (1)复位SPI状态机;

        (2)复位整个SPI模块(both FIFOs, all registers and the state machine);

(10)调试支持(主从分开讨论)

        ① 调试模式模块挂起位,即调试暂停程序运行时(例如断点命中),应可配置SPI是否停止运行;

        ② 调试模式下的读操作,应保证不影响任何状态位(包括正常工作模式下的读清零标志位,FIFO的内容及读写指针等),即不给程序正常执行带来副作用;

        ③ 调试期间的写操作;

5. SPI部分主要时序参数

表3 SPI时序参数描述

参数描述
SckHighPulseDuration SCK高电平脉冲时长;
SckLowPulseDurationSCK低电平脉冲时长
SckPeriodSckHighPulseDuration + SckLowPulseDuration;
DinSetupTime接收数据采样时刻前数据已有效(stable)时长;
DinHoldTime接收数据采用时刻后数据保持有效的时长;
DoutHoldTime发送数据写数据时刻后数据保持有效的时长;

6. SPI错误处理

(1)overflow

        ① 写满

        接收缓冲区发生数据覆写,即旧数据尚未读出(软件读取完成标志位未清零),新数据已到达,则新数据不应写入接受缓冲区,并触发接收缓冲区溢出中断。

        ② 总线阻塞或频率太低(用于与CPU通信)

        SPI波特率很高,总线速度较慢或者阻塞,导致数据丢失;

(2)读空(underflow)

        数据缓冲区中无有效数据,而发生了读取操作。

(3) 检测到波特率不匹配时,自动停止数据收发;

(4)移位寄存器溢出或收发缓冲区溢出时,自动停止通讯;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/54901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日论文6—16ISCAS一种新型低电流失配和变化电流转向电荷泵

《A Novel Current Steering Charge Pump with Low Current Mismatch and Variation》16ISCAS 本文首先介绍了传统的current steering charge pump,如下图: 比起最简单的电荷泵,主要好处是UP和DN开关离输出节点较远,因此一定程度…

echarts 导出pdf空白原因

问题阐述 页面样式: 导出pdf: 导出pdf,统计图部分为空白。 问题原因 由于代码中进行了dom字符串的复制,而echarts用canvas绘制,canvas内部内容不会进行复制,只会复制canvas节点,因此导出pdf空白。 解决…

C语言VS实用调试技巧

文章目录 一、什么是bug?二、什么是调试?三、Debug和Release四、VS调试快捷键4.1环境准备4.2调试快捷键 五、监视和内存观察5.1监视5.2内存 六、调试举例七、编程常见错误归类7.1编译型错误7.2链接型错误7.3运行时错误 一、什么是bug? 🍎bug本意是 “…

【珠海一号卫星】

珠海一号卫星 珠海一号卫星星座是由珠海欧比特宇航科技股份有限公司发射并运营的商业遥感微纳卫星星座,是中国首家由民营上市公司建设并运营的卫星星座。以下是对珠海一号卫星的详细介绍: 一、基本概况 组成:整个星座由34颗卫星组成&…

Solidity——抽象合约和接口详解

🚀本系列文章为个人学习笔记,目的是巩固知识并记录我的学习过程及理解。文笔和排版可能拙劣,望见谅。 Solidity中的抽象合约和接口详解 目录 什么是抽象合约?抽象合约的语法接口(Interface)的定义接口的语…

通过 OBD Demo 体验 OceanBase 4.3 社区版

本文作者:马顺华 引言 OceanBase 4.3 是一个专为实时分析 AP 业务设计的重大更新版本。它基于LSM-Tree架构,引入了列存引擎,实现了行存与列存数据存储的无缝整合。这一版本不仅显著提升了AP场景的查询性能,同时也确保了TP业务场景…

uniapp云打包

ios打包 没有mac电脑,使用香蕉云编 先登录香蕉云编这个工具,新建csr文件——把csr文件下载到你电脑本地: 然后,登录苹果开发者中心 生成p12证书 1、点击+号创建证书 创建证书的时候一定要选择ios distribution app store and ad hoc类型的证书 2、上传刚才从本站生成的…

【设计模式-策略】

定义 策略模式(Strategy Pattern)是一种行为型设计模式,定义了一系列算法,将每个算法封装起来,并使它们可以互相替换。策略模式让算法独立于使用它的客户端而变化,使得算法的变化不会影响到使用它的客户端…

Java读取YAML文件

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

Metasploit渗透测试之服务端漏洞利用

简介 在之前的文章中,我们学习了目标的IP地址,端口,服务,操作系统等信息的收集。信息收集过程中最大的收获是服务器或系统的操作系统信息。这些信息对后续的渗透目标机器非常有用,因为我们可以快速查找系统上运行的服…

乐鑫ESP32-S2高性能选择,家电中控屏联网通信应用,启明云端乐鑫代理商

在21世纪的今天,家电已经不再是简单的功能性产品,它们正在变得智能化,能够与我们的生活方式更加紧密地融合。 家电智能化正在改变我们与家庭环境的互动方式,它们不仅能够提高我们的生活效率,还能为我们带来更加舒适和…

计算机视觉综述

大家好,今天,我们将一起探讨计算机视觉的基本概念、发展历程、关键技术以及未来趋势。计算机视觉是人工智能的一个重要分支,旨在使计算机能够“看”懂图像和视频,从而完成各种复杂的任务。无论你是对这个领域感兴趣的新手&#xf…

【 EXCEL 数据处理 】000003 案列 标记涨跌,保姆级教程。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。

【 EXCEL 数据处理 】000003 案列 使用条件格式之大于和小于,标记涨跌,保姆级教程。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。 📚一、直接上案例 📖1.使用条件格式之大于和小…

ElasticSearch安装分词器与整合SpringBoot

ElasticSearch安装分词器与整合SpringBoot 如果还没安装的点击安装ElasticSearch查看怎么安装 分词器 1.分词器 在Elasticsearch中,分词器(Tokenizer)是分析器(Analyzer)的一部分,它的主要职责是将文本输入…

宝塔面板部署雷池社区版教程

宝塔面板部署雷池社区版教程 简单介绍一下宝塔面板,安全高效的服务器运维面板,使用宝塔面板的人非常多 在网站管理上,许多用户都是通过宝塔面板进行管理,宝塔面板的Nginx默认监听端口为80和443,这就导致共存部署时雷池…

K8s Calico替换为Cilium,以及安装Cilium过程(鲁莽版)

迁移CNI插件的3种办法: 1、创建一个新的集群,通过Gitops的方式迁移负载,然而,这可能涉及大量的准备工作和潜在的中断。 2、另一种方法是重新配置/etc/cni/net.d/指向Cilium。但是,现有的pod仍将由旧的…

【锁住精华】MySQL锁机制全攻略:从行锁到表锁,共享锁到排他锁,悲观锁到乐观锁

MySQL有哪些锁 1、按照锁的粒度划分 行锁 是最低粒度的的锁,锁住指定行的数据,加锁的开销较大,加锁较慢,可能会出现死锁的情况,锁的竞争度会较低,并发度相对较高。但是如果where条件里的字段没有加索引&…

Python | Leetcode Python题解之第432题全O(1)的数据结构

题目: 题解: class Node:def __init__(self, key"", count0):self.prev Noneself.next Noneself.keys {key}self.count countdef insert(self, node: Node) -> Node: # 在 self 后插入 nodenode.prev selfnode.next self.nextnode.…

解决Android中使用jdk 9以上中的某个类(AbstractProcessor)但是无法导入的问题

前景提要 今天在使用jdk中的AbstractProcessor类的时候,怎么都找不到,网上各种搜索,加什么依赖都没用,看了下依赖确实有这个类但是就是无法正常导入 然后翻了下android.jar,发现没有这个类 疑问 但是你尝试一下发…

Linux学习之路 -- 线程 -- 条件变量与生产消费模型

前面我们已经提过线程互斥的相关概念&#xff0c;但是我们在前文的抢票逻辑中&#xff0c;我们其实很容易发现一个问题。那就是票可能被一直被一个人抢&#xff0c;这里我们就需要引入条件变量的概念。 目录 1、条件变量 <1>线程同步 <2>相关概念 <3>相…