spi的基本知识、软件spi、硬件spi(ADXL362为测试对象)

news/2024/7/23 11:37:11 标签: 1024程序员节

一、spi基础知识     

1.1、spi基础知识一

        SPI(Serial Peripheral Interface,串行外设接口)是由摩托罗拉(Motorola)在1980前后提出的一种全双工同步串行通信接口,它用于MCU与各种外围设备以串行方式进行通信以交换信息,通信速度最高可达25MHz以上。

        SPI接口主要应用在EEPROM、FLASH、实时时钟、网络控制器、OLED显示驱动器、AD转换器,数字信号处理器、数字信号解码器等设备之间。

        SPI通常由四条线组成,一条主设备输出与从设备输入(Master Output Slave Input,MOSI),一条主设备输入与从设备输出(Master Input Slave Output,MISO),一条时钟信号(Serial Clock,SCLK),一条从设备使能选择(Chip Select,CS)。与I²C类似,协议都比较简单,也可以使用GPIO模拟SPI时序。

        SPI和I²C对比如表 21.1.1 所示。SPI可以同时发出和接收数据,因此SPI的理论传输速度比I²C更快。SPI通过片选引脚选择从机,一个片选一个从机,因此在多从机结构中,需要占用较多引脚,而I²C通过设备地址选择从机,只要设备地址不冲突,始终只需要两个引脚。

物理拓扑结构

        SPI可以一个主机连接单个或多个从机,每个从机都使用一个引脚进行片选,物理连接示意图如图21.1.1 和 图 21.1.2 所示。

传输模式
        SPI有四种传输模式,如表 21.1.2 所示,主要差别在于CPOL和CPHA的不同。

        CPOL(Clock Polarity,时钟极性)表示SCK在空闲时为高电平还是低电平。当CPOL=0,SCK空闲时为低电平,当CPOL=1,SCK空闲时为高电平。

        CPHA(Clock Phase,时钟相位)表示SCK在第几个时钟边缘采样数据。当CPHA=0,在SCK第一个边沿采样数据,当CPHA=1,在SCK第二个边沿采样数据。

 1.2、spi的四种模式

         spi一般都是四线的(SCLKMOSIMISOCS),一般还会有DC引脚,用来控制SPI通讯是发送命令还是发送数据。但是DC引脚是不一定需要的。下面将介绍spi的四种模式的时序。

1.2.1、模式0 (CPOL=0 CPHA=0)

CPOL = 0:时钟线空闲时是低电平,第1个跳变沿是上升沿,第2个跳变沿是下降沿。

CPHA = 0:数据在第1个跳变沿(上升沿)采样。

时序图如下:

       (1)在clk方波信号的第一个上升沿对MOSI(发送数据)或者MISO(接收数据)的电平信号进行检测。

        (2)在clk方波的第一个上升沿的前后一段时间内,DATA数据引脚的电平一定要保持稳定。 

       (3) 在每次数据传输完成之后,必须保证CLK的电平处于空闲状态,clk的空闲状态与CPOL相关。

1.2.2、模式1 (CPOL=0 CPHA=0)

CPOL = 0:时钟线空闲时是低电平,第1个跳变沿是上升沿,第2个跳变沿是下降沿

CPHA = 0:数据在第1个跳变沿(上升沿)采样

时序图如下:

1.2.3、模式2 (CPOL=1 CPHA=0)

CPOL = 1:空闲时是高电平,第1个跳变沿是下降沿,第2个跳变沿是上升沿

CPHA = 0:数据在第1个跳变沿(下降沿)采样

时序图如下:

1.2.4、模式3 (CPOL=1 CPHA=1)

CPOL = 1:空闲时是高电平,第1个跳变沿是下降沿,第2个跳变沿是上升沿

CPHA = 1:数据在第2个跳变沿(上升沿)采样

时序图如下:

        spi比较重要参数就是四种模式,以及clk的频率,传输的电平之间延时的时间。

二、软件spi的使用(ADXL362为例)

        软件spi的时序是比较简单的,没有IIC的时序复杂,并没有起始信号,停止信号,以及ACK和NACK应答信号。只需要在CLK的跳变沿利用MOSI发送数据,利用MISO接收数据就可以了。数据电平需要在CLK的跳变沿前后保持稳定。

        不同的模式对应的时序不同,软件SPI的代码也是不同的,下面以ADXL362姿态传感器芯片为例,进行软件SPI的设计。

2.1、ADXL362姿态传感器介绍

        对ADXL362的软件SPI的测试,(1)首先的通过软件SPI读取芯片的id。(2)利用ADXL362的可读可写寄存器,向寄存器中写入数据之后,在读出写入寄存器的数据,观察是否相同。

       下图所示的是ADXL362芯片需要使用的SPI的模式。CPHA=CPOL=0。

        下面是SPI的相关的读写指令的使用。操作寄存器前,需要先写入SPI命令。

       下面是SPI的时序,模拟SPI就需要根据下面的时序来写。

        下面是对SPI时序中的延时的规定,其他基本都符合要求,需要注意的是时钟频率,也就是CLK的跳变的频率。例如使用STM32f103zet6进行控制,时钟频率为72Mhz,clk的频率至少是AHB的72Mhz时钟的72分频才能够满足ADXL362的最低通讯时钟频率的要求。

        下面是ADXL362芯片的ID读取的寄存器。

2.2、模式0的模拟SPI的软件设计(基于ADXL362)

        模式0的spi是在CLK的第一个跳变沿(上升沿)进行信号的检测。


http://www.niftyadmin.cn/n/5119615.html

相关文章

性能测试 - 微服务架构

1、微服务架构和单体应用架构有什么区别? 微服务架构和单体应用架构的最大区别在于应用的拆分方式。单体应用是将所有功能模块都打包在一起,而微服务架构则是将一个巨大的单体应用拆分为很多小的互相连接的微服务(比如项目中,将整…

tomcat的负载均衡、动静分离(nginx联动)

动静分离: 访问静态页面和动态页面分开 实现动态和静态页面负载均衡 实验5台虚拟机 一、动态负载均衡 3台虚拟机模拟: 代理服务器:30 tomcat动态页面:21、22 代理服务器: proxy_pass http://tomcat; proxy_set_h…

zabbix6自动化配置监控项监控GPU

zabbix6监控GPU运行状态 部署配置开发GPU监控服务配置扩展参考链接: 关键词: zabbix 监控 GPU 监控项自动化注册 脚本监控服务 部署 部署具体细节就不详细展开了,我这里有三台机器,其中一台部署docker版的zabbix server 然后在这…

Postman环境配置

Postman环境配置 安装Postman安装node.js安装newman安装htmlextra安装git注册163邮箱用163邮箱注册gitee在pycharm中安装gitee详细文档 安装Postman 网址:https://www.postman.com/downloads/ 注册一个账号即可 安装node.js 安装newman npm install -g newman …

矢量图形编辑软件 illustrator 2023 mac 中文软件特点

illustrator 2023 mac是一款矢量图形编辑软件,用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator 2023 mac软件特点 矢量图形:illustrator创建的图形是矢量图形,可以无限放大而不失真,这与像素图形编辑软…

【K8S】常用的 Kubernetes(K8S)指令

常用的 Kubernetes&#xff08;K8s&#xff09;指令&#xff1a; 创建一个资源&#xff1a;kubectl create <资源类型> <资源名称> 例如&#xff1a;kubectl create deployment my-deployment 获取资源列表&#xff1a;kubectl get <资源类型> 例如&#xf…

如何从单体架构迁移到微服务架构:挑战和最佳实践

当单体架构成为项目增长的瓶颈时&#xff0c;迁移到微服务架构就成了必然的选择。 微服务虽然具有明显的优点&#xff0c;但由于其内在复杂性和缺乏一种通用的迁移方案&#xff0c;实施过程中可能会遇到不少挑战。本文旨在分享解决方案架构师在单体架构向微服务迁移过程中的专…

django建站过程(3)定义模型与管理页

定义模型与管理页 定义模型[models.py]迁移模型向管理注册模型[admin.py]注册模型使用Admin.site.register(模型名)修改Django后台管理的名称定义管理列表页面应用名称修改管理列表添加查询功能 django shell交互式shell会话 认证和授权 定义模型[models.py] 模仿博客形式&…