当前位置: 首页 > news >正文

硬件(十四)SPI通信协议

一、SPI 基本概念与四线制信号线作用

SPI(Serial Peripheral Interface,串行外设接口)是一种高速、全双工、同步的串行通信总线,广泛应用于 EEPROM、FLASH、实时时钟、AD 转换器、数字信号处理器与解码器等设备间的通信,仅需占用芯片四根管脚(四线制)。

四线制 SPI 的四根信号线及作用如下:

  • SCLK(Serial Clock):时钟信号线,由主机提供,用于同步所有设备的数据传输。
  • MOSI(Master Out Slave In):主出从入线,是主机向从机发送数据的通道。
  • MISO(Master In Slave Out):主入从出线,是从机向主机返回数据的通道。
  • CS(Chip Select):片选信号线,用于选择总线上的目标从机(低电平有效)。与 I2C 不同,SPI 无从机地址概念,同一时刻总线仅能通过 CS 选中一个外设;若仅保留 MOSI 或 MISO,还可实现单工通信。

二、时钟极性(CPOL)与时钟相位(CPHA)

1. 时钟极性(Clock Polarity 简称CPOL)

规定时钟信号线(SCLK)在空闲状态(无数据传输时)的电平

  • CPOL = 0:空闲时 SCLK 为低电平;
  • CPOL = 1:空闲时 SCLK 为高电平。

2. 时钟相位(Clock Phase简称CPHA)

决定数据在 SCLK 的哪个边沿(上升沿 / 下降沿)被采样

  • CPHA = 0:在 SCLK 信号变化的第一个边沿(空闲态 → 活跃态的跳变沿)采样;
  • CPHA = 1:在 SCLK 信号变化的第二个边沿(活跃态 → 空闲态的跳变沿)采样。

三、SPI 的四种时序模式

由于 CPOL(2 种取值)和 CPHA(2 种取值)的组合方式共有 2×2=4 种,因此 SPI 时序分为四种模式,具体如下:

模式(Mode)CPOL(时钟极性)CPHA(时钟相位)空闲时 SCLK 电平数据采样边沿
000低电平上升沿(低→高)
101低电平下降沿(高→低)
210高电平下降沿(高→低)
311高电平上升沿(低→高)

注意:SPI 通信时,主机与从机必须工作在相同的时序模式,否则会因采样时机不匹配导致数据错误。

四、I.MX6ULL 的 ECSPI 外设

I.MX6ULL 自带的 SPI 外设称为 ECSPI(Enhanced Configurable Serial Peripheral Interface),本质仍是 SPI,具备以下特性:

1. 基本能力

  • 支持主模式 / 从模式,通常使用主模式;
  • 有 4 个 ECSPI 外设,每个 ECSPI 支持4 个硬件片选信号,可连接 4 个外设;
  • 配备 64×32 位的接收 FIFO(RXFIFO)和发送 FIFO(TXFIFO),提升数据吞吐效率。

2. 重要寄存器

(1)ECSPIx_CONREG(控制寄存器)
  • BURST LENGTH(bit31:20):设置 SPI 突发传输数据长度,范围 1∼212 bit,通常设为 8 bit(即 BURST_LENGTH = 7)。
  • CHANNEL SELECT(bit19:18):选择 SPI 通道(如连接 ADXL345 时选通道 0)。
  • PRE_DIVIDER(bit15:12)POST_DIVIDER(bit11:8):两步分频设置,用于调整 SPI 时钟频率(时钟源为 pll3_sw_clk = 480MHz,经静态 8 分频后为 60MHz)。
  • CHANNEL MODE(bit7:4):设置通道为主 / 从模式(0 为从模式,1 为主模式)。
  • EN(bit0):SPI 使能位(0 关闭,1 使能)。
(2)ECSPIx_CONFIGREG(配置寄存器)
  • SCLK_CTL(bit23:20):设置 SCLK 空闲电平(0 为低电平,1 为高电平)。
  • SCLK_POL(bit7:4):设置时钟极性(即 CPOL,对应通道 3~0)。
  • SCLK_PHA(bit3:0):设置时钟相位(即 CPHA,对应通道 3~0)。
  • SS_POL(bit15:12):设置片选信号极性(0 低电平有效,1 高电平有效)。
(3)ECSPIx_PERIODREG(周期寄存器)
  • CSD_CTL(bit21:16):设置片选信号与第一个 SCLK 信号的延时(范围 0~63)。
  • CSRC(bit15):选择时钟源(0 选 SPI CLK,1 选 32.768KHz 晶振,通常选 SPI CLK)。
(4)ECSPIx_STATREG(状态寄存器)
  • TC(bit7):传输完成标志(0 传输中,1 传输完成)。
  • RF(bit5):RXFIFO 空标志(0 不为空,1 为空)。
  • TF(bit2):TXFIFO 满标志(0 不为满,1 为满)。
(5)数据寄存器
  • ECSPIx_TXDATA:32 位发送数据寄存器,向其写入数据可发起 SPI 传输。
  • ECSPIx_RXDATA:32 位接收数据寄存器,读取其值可获取 SPI 接收的数据。

五、ADXL345 三轴加速度传感器与 SPI 通信

ADXL345 是一款支持 SPI(3 线 / 4 线模式)与 I2C 接口的三轴加速度传感器,特性如下:

1. 核心参数

  • 测量范围:±2g、±4g、±8g、±16g 可选;
  • 分辨率:最高 13 位(3.9mg/LSB);
  • 工作电压:2.0V ~ 3.6V;
  • 低功耗:测量模式仅 0.23mA,待机模式 40μA。

2. 核心功能

  • 三轴加速度(X、Y、Z 轴)测量;
  • 静态重力加速度、动态加速度(震动、运动)测量;
  • 自由落体、单击 / 双击、活动 / 非活动监测。

3. SPI 通信细节(四线制模式)

ADXL345 采用 SPI 模式 3(CPOL=1,CPHA=1),且寄存器读写有特殊规则:

  • 写寄存器:寄存器地址最高位为 0,例如写 0x20 寄存器时,先发送 0x20,再发送写入数据。
  • 读寄存器:寄存器地址最高位为 1,例如读 0x20 寄存器时,先发送 0xA00x20 | 0x80),再进入读取时序获取数据。
http://www.dtcms.com/a/390095.html

相关文章:

  • 大模型学习:使用FastText工具进行文本分类
  • pip 指令大全
  • 计算机基础·MySQL
  • 22-29、深度学习知识手册:从全连接到生成模型的融会贯通指南
  • 【FastCAEFlow案例分享】软件在汽车场景中的应用
  • Python二进制数据读取与可变缓冲区操作详解:从基础到高阶应用
  • 面向对象编程(OOP):Java 的核心思想(详细笔记)
  • I2C 通信、AT24C02 EEPROM及LM75温度传感器的配置
  • Halcon中的并行编程(二)
  • Gin框架参数绑定完全指南:从基础到实战最佳实践
  • TF 坐标旋转的方向如何确定
  • C++基础(16)——用红黑树封装出map和set
  • 前端编程工具有哪些?常用前端编程工具推荐、前端编程工具对比与最佳实践分享
  • 换网络这事, Comcast 销户了
  • Day26_【深度学习(6)—神经网络NN(1.2)前向传播的搭建案例】
  • 河南省 ERA5 气象数据处理教程(2020–2025 每月均值)
  • IIS短文件漏洞修复全攻略
  • jdk-7u25-linux-x64.tar.gz 安装教程(Linux下JDK 7 64位解压配置详细步骤附安装包)
  • 边界值分析法的测试用例数量:一般边界值分析(4n+1)和健壮性测试(6n+1)计算依据
  • 基于飞算AI的图书管理系统设计与实现
  • Day26_【深度学习(6)—神经网络NN(1)重点概念浓缩、前向传播】
  • 软考 系统架构设计师系列知识点之杂项集萃(151)
  • Python基础 2》运算符
  • docker 部署 sftp
  • 数字ic笔试
  • 武汉火影数字|数字展厅设计制作:多媒体数字内容打造
  • LLM模型的参数量估计
  • STM32H743-学习HAL库
  • 一键防范假票入账-发票识别接口-发票查验接口-信息提取
  • RTEMS 控制台驱动