3. 时钟频率概念
说实话,刚开始做嵌入式那会儿,一提“SPI时钟频率”我就有点懵。什么是比特率?什么是波特率?这两个东西和时钟周期又是什么关系?我被这个问题坑过不止一次——有一次调一个 SPI 屏,算错了时钟周期,结果画面抖得像心电图。今天咱就一次性把这些概念理清楚。
3.1 SPI时钟频率的定义
SPI 时钟频率,通俗地说就是 SCK 引脚上脉冲跳变的快慢。单位是 Hz(赫兹),比如 10 MHz 表示每秒有 10,000,000 个时钟脉冲。
每个时钟脉冲对应一次数据采样。主设备输出时钟,从设备在上升沿或下降沿锁存数据。所以时钟频率直接决定了数据吞吐的上限。
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,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 知识结构一览
下面这张图把这几个核心概念串起来了。你看一眼就能明白它们之间的换算和依赖关系。
3.5 归纳总结
- SPI 时钟频率是 SCK 每秒跳变次数,单位 Hz。它直接制约数据传输速率。
- 比特率与波特率在 SPI 中数值相等(NRZ 编码),都是每秒传输位数/符号数。
- 时钟周期是频率的倒数,决定了每一位传输的时间窗。例如 10 MHz → 100 ns/bit。
- 数据传输速度 = 时钟频率 × 每时钟传输位数。实际会因为帧间隔、DMA 延迟而打折扣。
我的个人原则: 查手册时看最大时钟频率,选芯片时留 30% 余量。做 PCB 时注意 SCK 走线尽量短,别靠近高频噪声源。归根结底,时钟频率是 SPi 通信的“心跳”——跳快了会丢数据,跳慢了浪费带宽。搞懂它,后面算 DMA 带宽就顺了。