3. 时钟频率概念

说实话,刚开始做嵌入式那会儿,一提“SPI时钟频率”我就有点懵。什么是比特率?什么是波特率?这两个东西和时钟周期又是什么关系?我被这个问题坑过不止一次——有一次调一个 SPI 屏,算错了时钟周期,结果画面抖得像心电图。今天咱就一次性把这些概念理清楚。

3.1 SPI时钟频率的定义

SPI 时钟频率,通俗地说就是 SCK 引脚上脉冲跳变的快慢。单位是 Hz(赫兹),比如 10 MHz 表示每秒有 10,000,000 个时钟脉冲。

每个时钟脉冲对应一次数据采样。主设备输出时钟,从设备在上升沿或下降沿锁存数据。所以时钟频率直接决定了数据吞吐的上限。

经验之谈: 我习惯先把主控的 SPI 时钟设成不超过从设备手册标称的最大值,然后一点点往上试。有一次从设备标称 20 MHz,实际跑到 18 MHz 就开始丢位,最后稳定在 16 MHz。手册上的数字是理想值,实际 PCB 走线、负载电容都会拉低它。

3.2 比特率与波特率的关系

这两个词经常被混用,但它们在 SPI 里其实是一回事——对我这种嵌入式工程师来说,记住一条就够了:

  • 比特率:每秒传输的比特数,单位 bps(bits per second)。
  • 波特率:每秒传输的符号数,单位 baud。每个符号可携带多个比特。

SPI 使用 NRZ 编码,一个符号恰好代表一个比特。此时比特率 = 波特率。所以当你听到“SPI 波特率 10 Mbps”时,其实说的就是 10 Mbaud,也是 10 MHz 时钟频率(因为每时钟传输 1 位数据)。

但注意:在多 bit 调制(比如 QPSK)里,波特率会小于比特率。不过 SPI 不玩这个花活,所以放心算。

我整理了一个小表格,方便对比:

概念 定义 SPI 中关系
比特率 每秒传输的比特数量 等于时钟频率 × 数据位宽 / 总时钟周期数
波特率 每秒传输的符号数量 等于比特率(NRZ 编码下)
时钟频率 SCK 引脚的振荡频率 等于比特率(全双工单 bit 传输)

3.3 时钟周期与数据传输速度

时钟周期是时钟频率的倒数:

T_clk = 1 / f_clk

比如 10 MHz 时钟,周期就是 100 ns。每个周期传输 1 位(假设 CPOL=0, CPHA=0),那么传输 8 位需要 8 个时钟周期,也就是 800 ns。

数据传输速度(吞吐量)不仅取决于时钟频率,还受限于 SPI 帧格式、片选间隔、DMA 搬运延迟等。纯理论速度 = 时钟频率 × 每时钟传输位数。但对于多字节传输,实际速度会低 10%~30%,因为帧间有 CS 拉高时间。

我曾经踩过的坑: 以为 SPI 时钟 20 MHz 就能跑出 20 Mbps 的吞吐,结果开了双线模式(Dual SPI)之后,同一时钟下每次传输 2 位,理论吞吐变成 40 Mbps。但 DMA 带宽没跟上,导致 FIFO 溢出。所以算速度时要连 DMA 带宽一起看——这恰恰是咱们这门课的终极考点。

做个简单的估算:

  • 单线 SPI,10 MHz → 理论 10 Mbps,实际约 7~8 Mbps。
  • 双线 SPI,10 MHz → 理论 20 Mbps,实际约 15~18 Mbps。
  • 四线 QSPI,10 MHz → 理论 40 Mbps,实际约 30~35 Mbps。

为什么实际总比理论低? 因为每帧之间有帧间隔,准备数据需要时间,DMA 响应也有延迟。但选芯片时看理论值就够了——留 30% 的余量,出不了大问题。

3.4 知识结构一览

下面这张图把这几个核心概念串起来了。你看一眼就能明白它们之间的换算和依赖关系。

SPI 时钟频率与数据传输速度概念关系 时钟频率 (SCK) f_clk (Hz) 时钟周期 T = 1 / f 比特率 bps (bits/s) 波特率 baud (symbols/s) 数据传输速度 吞吐量 (Mbps) 位宽 & 模式 单线/双线/QSPI 倒数 单线相等 NRZ相等 乘以位宽 影响吞吐 说明: 时钟频率是起点,它决定了时钟周期和单线比特率;位宽和模式决定了实际吞吐;比特率与波特率在 SPI 中数值相等。 实际项目需结合 DMA 带宽计算有效吞吐,留出余量。

3.5 归纳总结

  • SPI 时钟频率是 SCK 每秒跳变次数,单位 Hz。它直接制约数据传输速率。
  • 比特率与波特率在 SPI 中数值相等(NRZ 编码),都是每秒传输位数/符号数。
  • 时钟周期是频率的倒数,决定了每一位传输的时间窗。例如 10 MHz → 100 ns/bit。
  • 数据传输速度 = 时钟频率 × 每时钟传输位数。实际会因为帧间隔、DMA 延迟而打折扣。

我的个人原则: 查手册时看最大时钟频率,选芯片时留 30% 余量。做 PCB 时注意 SCK 走线尽量短,别靠近高频噪声源。归根结底,时钟频率是 SPi 通信的“心跳”——跳快了会丢数据,跳慢了浪费带宽。搞懂它,后面算 DMA 带宽就顺了。