SPI接口协议

news2024/11/20 6:31:29

SPI接口协议

        SPI(Serial Peripheral Interface)是由Motorola公司定义的接口协议标准,串行外设接口(SPI)是微控制器和外围IC(如传感器、 ADC、 DAC、移位寄存器、 SRAM等)之间使用最广泛的接口之一。SPI是一种同步、全双工、主从式接口,来自主机或从机的数据在时钟上升沿或下降沿同步,主机和从机可以同时传输数据, SPI接口可以是3线式或4线式。

一、SPI接口协议简介

        串行外设接口 (SPI) 总线是一个工作在全双工模式下的同步串行数据链路。它可用于在单个主控制器和一个或多个从设备之间交换数据。其简单的实施方案只使用四条支持数据与控制的信号线。

        1、接口定义:

        4线SPI接口信号:

        虽然SPI接口协议标准已经是事实上的标准,但它并非官方法律上的标准,因此不同的厂家的集成电路SPI端口名称经常不同,但通常含义相同:

        (1)时钟(CLK, SCLK,SCK,and so on...)

        (2)片选(CS,SS,NSS,and so on...)

        (3)主机输出、从机输入(MOSI,DO,and so on...)

        (4)主机输入、从机输出(MISO,DI,and so on...)

图 1 基本的四线SPI总线接口

        产生时钟信号的器件称为主机,主机和从机之间传输的数据与主机产生的时钟同步。同I2C接口相比, SPI器件支持更高的时钟频率。用户可以查阅产品数据手册以了解SPI接口的时钟频率规格。SPI接口只能有一个主机,但可以有一个或多个从机。图1显示了主机和从机之间的SPI连接。

        来自主机的片选信号用于选择从机。这通常是一个低电平有效信号,拉高时从机与SPI总线断开连接。当使用多个从机时,主机需要为每个从机提供单独的片选信号。本文中的片选信号始终是低电平有效信号,也有部分厂家器件的SPI接口片选信号支持高电平有效,用户需根据产品数据手册使用。

        MOSI和MISO是数据线, MOSI将数据从主机发送到从机, MISO将数据从从机发送到主机。如AD5683RBRMZ-3,此类器件的SPI接口SDI/SDO仅支持输入/输出,均为单向接口。也有部分器件的4线SPI接口中MISO(SDI)输入接口可以配置为双向接口(SDIO),针对此类器件可以通过配置器件相关寄存器使用4线通信,也可以根据需要配置为3线通信。

        3线SPI接口信号:

        有时候主从器件在信号传输时只需要三根线,例如:

        (1)从机器件SPI接口有3个信号线:部分DAC器件可能没有必要回读数据或者仅需要对ADC发送数据,在这种场景下器件的SPI接口被定义为3线接口(此时器件仅支持三线SPI:SCLK/CS/MISO(SDI),只有三根线),其中MISO(SDI)仅作为输入接口,如AD5683RBRMZ。

图2 从机三线SPI接口,SDI单向

        (2)从机器件SPI接口有3个信号线:器件支持SPI读写,SPI物理接口由三根线组成(此时器件仅支持三线SPI:SCLK/CS/SDIO,只有三根线),其中SDIO作为输入/输出双向接口,可写可读,如AD9629BCPZ-40。

图3 从机三线SPI接口,SDIO双向

        (3)从机器件SPI接口有4个信号线(SCLK/CS/MOSI/MISO,参考图1),但是器件可根据需要配置为四线或三线通信。一般情况下器件默认为4线通信,配置为四线通信时通过对相关寄存器特定bit位写入相关值实现,主机的MOSI和MISO分别接从机器件的MISO和MOSI,支持全双工双向通信;当配置为三线通信时,通过对相关寄存器特定bit位写入相关值实现三线通信,此时从机MOSI(SDO)为高阻态,MISO(SDI)配置为双向通信SDIO,通过从机SDIO写入数据时,接口时序和四线SPI接口时序相同,通过从机SDIO读出数据时,在写入要读的地址后,对应地址的数据,本应通过MOSI(SDO)输出,此时数据输出顺序移位到SDIO接口上输出。可参考AD9361/AD6676/AD9163等器件的手册。

图4 从机四线SPI接口,SDIO双向

        2、数据传输:

        SPI 数据速率一般在 1 到 70MHz 的范围内,字长原则上可以根据需要定义任意多bit的字长(例如7bit,9bit and so on...),但通常主从机SPI的字长为从 8 位及 12 位到这两个值的倍数,在使用时可根据数据手册中的参数灵活配置。

        要开始SPI通信,主机必须发送时钟信号,并通过使能CS信号选择从机。片选通常是低电平有效信号,因此,主机必须在该信号上发送逻辑0以选择从机。 SPI是全双工接口,主机和从机可以分别通过MOSI和MISO线路同时发送数据。在SPI通信期间,数据的发送(串行移出到MOSI/SDO总线上)和接收(采样或读入总线(MISO/SDI)上的数据)同时进行,在串行时钟沿同步数据的移位和采样。 SPI接口允许用户灵活选择时钟的上升沿或下降沿来采样和/或移位数据。

        SPI通信包括四种不同的模式,模式取决于时钟极性CPOL(polarity)和启动数据传输时(CS拉低)的采样边沿,即相位CPHA(phase),根据配置时钟极性(CPOL)和相位(CPHA)的不同,可实现时钟信号 180 度的相移以及半个时钟周期的数据延迟移位输出和采样。

        时钟极性是指时钟线空闲时的状态,相位是指设备从数据线采样的时刻,组合如下:

图5 CPOL/CPHA不同组合表示含义

图6 CPOL/CPHA不同组合时的时钟采样边沿

        SPI模式通过CPOL和CPHA决定:

图7 SPI不同模式说明

图8 SPI接口CPOL/CPHA对应的时序图

        不同模式下,SPI数据传输时序图如下图所示:

        (1)Mode 0: CPOL = 0,CPHA = 0,数据在CS有效时CLK的第一个时钟沿(上升沿)采样读取,在下降沿移位输出(变化)。

图9 SPI Mode 0时序图

        (2)Mode 1: CPOL = 0,CPHA = 1,数据在CS有效时CLK的第二个时钟沿(下降沿)采样读取,在上升沿移位输出(变化)。

图10 SPI Mode 1时序图

        (3)Mode 2: CPOL = 1,CPHA = 0,数据在CS有效时CLK的第一个时钟沿(下降沿)采样读取,在上升沿移位输出(变化)。

图11 SPI Mode 2时序图

        (4)Mode 3: CPOL = 1,CPHA = 1,数据在CS有效时CLK的第二个时钟沿(上升沿)采样读取,在上升沿移位输出(变化)。

图12 SPI Mode 3时序图

        上图(图9~图12时序图)中,在传输协议上,MSB为一帧数据bit中第一个采样时钟沿输出的bit,LSB为一帧数据bit中最后一个采样沿输出bit。在器件的实际配置使用时,SPI通信需根据器件的数据手册灵活配置,对相应的数据bit根据实际要求做相应的拼接或其他处理,然后通过SPI接口输入输出。

        在SPI通信时,主机必须根据从机的要求选择时钟极性和时钟相位,配置相同的模式。在时钟空闲状态期间(空闲状态是指传输开始时CS为高电平且在向低电平转变的期间,以及传输结束时CS为低电平且在向高电平转变的期间),对寄存器中CPOL位设置时钟信号的极性,对CPHA位设置时钟相位,根据CPHA位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。如:配置主机和从机在时钟上升沿移位输出数据,在下降沿采样数据,主机MOSI在上升沿移位输出数据,将数据输出到MOSI线上,从机的MISO(和主机MOSI相连)在下降沿时采样数据(写入从机),从机MOSI(和主机MISO相连)在上升沿移位输出数据,主机MISO在下降沿采样数据(写入主机)。

二、SPI数据传输实现原理

        SPI主从数据传输框图如图13所示。

        (1)SSPSR 泛指 SPI 设备内部的移位寄存器(Shift Register)。它的作用是根据设置好的数据位宽(bit-width) 及SPI 时钟信号状态把数据移入或者移出 SSPBUF,每次移动的数据大小由 Bus-Width 以及 Channel-Width 所决定。

        Bus-Width 的作用是指定地址总线到 Master(主)设备之间数据传输的单位。例如, 我们想要往 Master(主)设备里面的 SSPBUF 写入 16 Byte 大小的数据:首先,给 Master(主)设备的配置寄存器设置 Bus-Width 为 Byte;然后往 Master 设备的 Tx-Data 移位寄存器在地址总线的入口写入数据,每次写入 1 Byte 大小的数据;写完 1 Byte 数据之后,Master 设备里面的 Tx-Data 移位寄存器会自动把从地址总线传来的1 Byte 数据移入 SSPBUF 里;上述动作一共需要重复执行 16 次。

        Channel-Width 的作用是指定 Master(主)设备与 Slave(从)设备之间数据传输的单位。与 Bus-Width 相似,Master(主)设备内部的移位寄存器会依据 Channel-Width 自动地把数据从 Master-SSPBUF 里通过 Master-SDO 管脚搬运到 Slave(从)设备里的 Slave-SDI 引脚, Slave-SSPSR 再把每次接收的数据移入 Slave-SSPBUF里。通常情况下,Bus-Width 总是会大于或等于 Channel-Width,这样能保证不会出现因 Master 与 Slave 之间数据交换的频率比地址总线与 Master 之间的数据交换频率要快,导致 SSPBUF 里面存放的数据为无效数据这样的情况。

        (2)SSPBUF:泛指 SPI 设备里面的内部缓冲区,一般在物理上是以 FIFO 的形式,保存传输过程中的临时数据。Master(主)与 Slave(从)之间交换的数据其实都是 SPI 内部移位寄存器从 SSPBUF 里面拷贝的。可以通过往 SSPBUF 对应的寄存器 (Tx-Data / Rx-Data register) 里读写数据,间接地操控 SPI 设备内部的 SSPBUF。

        例如,在发送数据之前,应该先往 Master(主)的 Tx-Data 寄存器写入将要发送出去的数据,这些数据会被 Master-SSPSR 移位寄存器根据 Bus-Width 自动移入 Master-SSPBUF 里,然后这些数据又会被 Master-SSPSR 根据 Channel-Width 从 Master-SSPBUF 中移出, 通过 Master-SDO 管脚传给 Slave-SDI 管脚,Slave-SSPSR 则把从 Slave-SDI 接收到的数据移入 Slave-SSPBUF 里。与此同时,Slave-SSPBUF 里面的数据根据每次接收数据的大小(Channel-Width),通过 Slave-SDO 发往 Master-SDI,Master-SSPSR 再把从 Master-SDI 接收的数据移入 Master-SSPBUF。在单次数据传输完成之后,用户程序可以通过从 Master 设备的 Rx-Data 寄存器读取 Master 设备数据交换得到的数据。

        (3)Controller:泛指 SPI 设备里面的控制寄存器,可以通过配置它们来设置 SPI 总线的传输模式。通过时钟信号(Clock Signal)以及片选信号(Slave Select Signal)来控制 Slave(从)设备。Slave 设备会一直等待,直到接收到 Master 设备发过来的片选信号,然后根据时钟信号来工作。

        Master(主)设备的片选操作必须由程序所实现,例如: 由程序把 SS/CS 管脚的时钟信号拉低电平,完成 SPI 设备数据通信的前期工作,当程序想让 SPI 设备结束数据通信时,再把 SS/CS 管脚上的时钟信号拉高电平。

图13 SPI主从数据传输框图

三、SPI多从机配置

        多个从机可与单个SPI主机一起使用,从机可以采用常规模式连接或采用菊花链模式连接。

        1、常规SPI模式:

        在常规模式下,主机需要为每个从机提供单独的片选信号。一旦主机使能(拉低)片选信号, MOSI/MISO线上的时钟和数据便可用于所选的从机。如果使能多个片选信号,则MISO线上的数据会被破坏,因为主机无法识别哪个从机正在传输数据。从图xxx可以看出,随着从机数量的增加,来自主机的片选线的数量也增加,这会快速增加主机需要提供的输入和出数量,并限制可以使用的从机数量。该配置通常用于必须单独访问多个模数转换器 (ADC) 及数模转换器 (DAC) 的数据采集系统中。

图14 多从机SPI配置

        2、菊花链模式:

        在菊花链模式下,所有从机的片选信号连接在一起,因为这种配置要求所有从设备同时启用,以确保数据不间断地流经该链路中的所有移位寄存器,数据从一个从机传播到下一个从机。在此配置中,所有从机同时接收同一SPI时钟。来自主机的数据直接送到第一个从机,该从机将数据提供给下一个从机,依此类推。使用该方法时,由于数据是从一个从机传播到下一个从机,所以传输数据所需的时钟周期数与菊花链中的从机位置成比例,所需时钟周期参考器件数据手册查阅。典型应用是工业 I/O 模块中的级联多通道输入串行器与输出驱动器,但并非所有SPI器件都支持菊花链模式,使用时参阅产品数据手册以确认菊花链是否可用。

图15 多从机SPI菊花链配置

        注:

        TI的SPI接口是由TI公司定义的接口协议标准SSI/SSP,和SPI类似,但有部分差别,在使用时注意阅读数据手册,看接口协议是否和Motorola的SPI接口标准相同。

参考文献:

Motorola SPI Protocol:SPI-DirectC v2021.1 User Guide (microchip.com)

ADI:AN-1248,SPI Interface,AN-1248: SPI Interface | 亚德诺半导体 (analog.com)

ADI:introduction-to-spi-interface_cn.pdf(文档有错误),SPI接口简介 | 亚德诺半导体 (analog.com)

TI:数字接口(续)— SPI 总线 - 模拟 - 技术文章 - E2E™ 设计支持 (ti.com)

SPI通信协议详解(spi总线) - 知乎 (zhihu.com)

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

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

相关文章

智慧农庄电商小程序(商城系统)

文章目录 项目简介商城功能项目结构技术选型后端使用的技术前端使用的技术 程序体验 项目简介 基于当前流行技术组合的前后端分离商城系统: SpringBoot2JpaMybatisPlusSpringSecurityjwtredisVue的前后端分离的商城系统, 包含商城、拼团、砍价、商户管理…

redis stream restTemplate消息监听队列框架搭建

整体思路 1. pom增加redis依赖&#xff1b; 2. 消息监听器&#xff0c;实现StreamListener接口&#xff0c;处理消息到达逻辑&#xff1b; 3. 将消息订阅bean及监听器注册到配置中&#xff1b; 1. pom <?xml version"1.0" encoding"UTF-8"?> <…

【MySQL】锁机制

文章目录 一、表级锁和行级锁二、排他锁和共享锁三、InnoDB行级锁行级锁间隙锁意向共享锁和意向排他锁 四、InnoDB表级锁五、死锁六、锁的优化建议 一、表级锁和行级锁 表级锁&#xff1a; 对整张表加锁。开销小&#xff0c;加锁快&#xff0c;不会出现死锁&#xff1b;锁粒度…

c++学习笔记-STL案例-机房预约系统1-准备工作

前言 准备工作包括&#xff1a;需求分析、项目创建、主菜单实现、退出功能实现 目录 1 机房预约系统需求 1.1 简单介绍 1.2 身份介绍 1.3 机房介绍 1.4 申请介绍 1.5 系统具体要求 1.6 预约系统-主界面思维导图 2 创建项目 2.1 创建项目 2.2 添加文件 ​编辑 3 创建…

VTK开发调试环境下载(VTK开发环境一步到位直接开发,无需自己配置编译 VS2017+Qt5.12.10+VTK)

一、无与伦比的优势 直接下载代码就可以调试的VTK代码仓库。 二、资源制作原理 这个资源根据VTK源码 编译出动态库文件 pdb lib dll 文件&#xff08; x64 debug &#xff09; 并将这两者同时放在一个代码仓库里&#xff0c;下载就能用。 三、使用方法&#xff08;vtk-so…

【hyperledger-fabric】部署Java应用远程访问智能合约

简介 首先是根据b站的视频 hyperledger-fabric【3】在 java 应用中访问合约 以及hyperledger-fabric【5】Java应用和私有数据&#xff0c;本文章主要讲述的是视频中我遇到的问题&#xff0c;以及相关知识点的总结。 遇到的问题 问题1&#xff1a;git clone下载下来的代码发现…

Unity Meta Quest 一体机开发(十三):【手势追踪】自定义交互事件 EventWrapper

文章目录 &#x1f4d5;教程说明&#x1f4d5;交互事件概述&#x1f4d5;自定义交互逻辑⭐方法一&#xff1a;Inspector 面板赋值⭐方法二&#xff1a;纯代码处理 此教程相关的详细教案&#xff0c;文档&#xff0c;思维导图和工程文件会放入 Spatial XR 社区。这是一个高质量…

XCTF:CatCatCat[WriteUP]

从题目中下载到一张图片和一个txt文件 编码的开头是&#xff1a;U2FsdGVkX1所以是rabbit加密 尝试使用密钥&#xff1a;91 密码不对&#xff0c;无法解密所以从图片下手 使用010Editor搜索图片文本内容 尝试搜索password、flag等敏感字体 直接拿到rabbit解密需要的密钥是&am…

【AI视野·今日Sound 声学论文速览 第四十四期】Tue, 9 Jan 2024

AI视野今日CS.Sound 声学论文速览 Tue, 9 Jan 2024 Totally 27 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers DJCM: A Deep Joint Cascade Model for Singing Voice Separation and Vocal Pitch Estimation Authors Haojie Wei, Xueke Cao, Wenbo Xu…

移动光缆使用规定

移动光缆使用的规定&#xff1a; 1.1在移动光缆的施工过程中&#xff0c;其弯曲半径应该是移动光缆外径的15倍&#xff0c;并且不能小于20倍。 1.2在进行移动光缆敷设时&#xff0c;需要确保施加的拉力不超过移动光缆所允许的张力的80%。移动光缆的最大张力允许达到100%的限制…

Appium 自动化测试

1.Appium介绍 1&#xff0c;appium是开源的移动端自动化测试框架&#xff1b; 2&#xff0c;appium可以测试原生的、混合的、以及移动端的web项目&#xff1b; 3&#xff0c;appium可以测试ios&#xff0c;android应用&#xff08;当然了&#xff0c;还有firefoxos&#xff09;…

比亚迪:从低谷中涅槃,内功造就辉煌

修炼内功才能绽放光芒吗? 比亚迪用自己的奋斗史证明~ 只有经历低谷的洗礼&#xff0c;才能铸就属于自己的辉煌。 比亚迪这家公司的发展历程可谓是一部从战略转型到今天这个行业翘楚的奋斗史&#xff0c;真是跌宕起伏令人唏嘘。早期比亚迪从一个传统企业转型到汽车行业&#xf…

【Kafka-3.x-教程】-【五】Kafka-监控-Eagle

【Kafka-3.x-教程】专栏&#xff1a; 【Kafka-3.x-教程】-【一】Kafka 概述、Kafka 快速入门 【Kafka-3.x-教程】-【二】Kafka-生产者-Producer 【Kafka-3.x-教程】-【三】Kafka-Broker、Kafka-Kraft 【Kafka-3.x-教程】-【四】Kafka-消费者-Consumer 【Kafka-3.x-教程】-【五…

《ORANGE’S:一个操作系统的实现》读书笔记(二十八)文件系统(三)

上一篇文章记录了文件系统&#xff0c;我们将硬盘映像进行了分区&#xff0c;并且清楚了如何获取分区信息。但是硬盘驱动程序目前只能处理DEV_OPEN消息&#xff0c;这显然是不够的&#xff0c;这篇文章记录对硬盘驱动的完善&#xff0c;让它能够处理更多的消息&#xff0c;并且…

C++力扣题目110--平衡二叉树

给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;t…

YOLOv8 + openVINO 多线程数据读写顺序处理

多线程数据读写顺序处理 一个典型的生产者-消费者模型&#xff0c;在这个模型中&#xff0c;多个工作线程并行处理从共享队列中获取的数据&#xff0c;并将处理结果以保持原始顺序的方式放入另一个队列。 多线程处理模型&#xff0c;具体细节如下&#xff1a; 1.数据:数据里必…

第三站:C/C++基础-二维数组

二维数组的概念 一维数组本身是多个大小相同的内存块,从0开始逐渐递增所组成的在横向上的有序"组合", 二维数组就是很多个一维数组在纵向上的组合,每一个一维数组就是二维数组在纵向上的从0开始的逐渐递增的一个单位,(所以一维数组在二维数组的基础上,每一个内存块…

AcWing1210-连号区间

文章目录 题目输入格式输出格式数据范围样例输入样例1输出样例1输入样例2输出样例2样例解释 思路代码 题目 输入格式 输出格式 数据范围 样例 输入样例1 4 3 2 4 1 输出样例1 7 输入样例2 5 3 4 2 5 1 输出样例2 9 样例解释 思路 固定L&#xff0c;遍历R在[L,R]区域中找到最大…

Java并发之互斥一:管程

1、简单聊聊什么是管程模型 &#xff08;共享资源&#xff09;&#xff1a;定义一个共享变量&#xff0c;可以理解锁&#xff0c;令牌这类的东西&#xff08;互斥访问共享资源&#xff09;&#xff1a;获取这个锁、令牌的时候是排好队的&#xff0c;只允许单线程访问&#xff…

《射雕三部曲》人物关系可视化及问答系统

背景&#xff1a; 该项目旨在构建一个基于图数据库和知识图谱的《射雕三部曲》人物关系可视化及问答系统。通过分析小说中的人物关系&#xff0c;将其构建成图数据库&#xff0c;并结合问答系统和数据分析技术&#xff0c;提供用户可视化的人物关系展示和相关问题的回答。 介绍…