SPI技术系列 13 · SPI 调试与排查

📚 SPI 技术系列 · 持续更新中

本系列从推挽电气层一路打到 Linux spi 子系统,把"四根线"背后的电气/协议/控制器/驱动/实战全拧成一根线。

👉 想系统追更,戳这里查看完整专栏:

【SPI 技术系列】

👉 其他技术系列专栏,欢迎关注、交流、共同成长:

【I2C 技术系列】 【串口技术系列】【RISC-V 架构系列】【Linux内核系列】


本篇定位:SPI 比 I2C 难调------没有 ACK,全双工双向,高速 SI。本篇讲 SPI 调试工具链(逻辑分析仪/示波器/spidev/dmesg/ftrace)、典型故障定位(CPOL/CPHA 错配/CS 时序/首末字节错/速度不稳)、降速调试法。读完你能独立排查 SPI 现场问题。
SPI 调试核心:逻辑分析仪 + 模式对比

I2C 调试靠 i2c-tools 一条命令验证。SPI 没有等效工具,核心是逻辑分析仪抓波形 + 示波器看 SI + spidev 验证 。SPI 最常见故障是 CPOL/CPHA 错配(数据全错但无标志),靠逻辑分析仪解码一眼看出。对照 【I2C 技术系列 13】I2C 调试与排查 看,理解调试方法论的共通。


目录

  • 一、调试工具链总览
    • [1.1 工具分层](#1.1 工具分层)
    • [1.2 SPI vs I2C 调试对比](#1.2 SPI vs I2C 调试对比)
    • [1.3 调试流程](#1.3 调试流程)
  • 二、逻辑分析仪解码
    • [2.1 为什么逻辑分析仪是 SPI 调试核心](#2.1 为什么逻辑分析仪是 SPI 调试核心)
    • [2.2 工具](#2.2 工具)
    • [2.3 采样率要求](#2.3 采样率要求)
    • [2.4 SPI 解码配置](#2.4 SPI 解码配置)
    • [2.5 解码示例](#2.5 解码示例)
    • [2.6 看什么](#2.6 看什么)
  • [三、示波器看 SI](#三、示波器看 SI)
    • [3.1 示波器看什么(逻辑分析仪看不到的)](#3.1 示波器看什么(逻辑分析仪看不到的))
    • [3.2 探头设置](#3.2 探头设置)
    • [3.3 关键测量](#3.3 关键测量)
    • [3.4 典型 SI 问题波形](#3.4 典型 SI 问题波形)
  • [四、spidev 用户态验证](#四、spidev 用户态验证)
    • [4.1 spidev_test(内核自带)](#4.1 spidev_test(内核自带))
    • [4.2 自定义测试程序](#4.2 自定义测试程序)
    • [4.3 spidev 调试流程](#4.3 spidev 调试流程)
    • [4.4 优势](#4.4 优势)
  • [五、dmesg 与内核日志](#五、dmesg 与内核日志)
      • [5.1 常见 SPI 错误码](#5.1 常见 SPI 错误码)
    • [5.2 dmesg 看 SPI](#5.2 dmesg 看 SPI)
    • [5.3 调试日志开大](#5.3 调试日志开大)
  • [六、ftrace 与 regmap debugfs](#六、ftrace 与 regmap debugfs)
    • [6.1 ftrace 抓 SPI 调用](#6.1 ftrace 抓 SPI 调用)
    • [6.2 spi debugfs](#6.2 spi debugfs)
    • [6.3 regmap debugfs(SPI 设备用 regmap 时)](#6.3 regmap debugfs(SPI 设备用 regmap 时))
  • 七、典型故障定位
    • [7.1 读不到器件(全 0xFF)](#7.1 读不到器件(全 0xFF))
    • [7.2 数据全错(CPOL/CPHA 错配)](#7.2 数据全错(CPOL/CPHA 错配))
    • [7.3 首字节错(CS 时序)](#7.3 首字节错(CS 时序))
    • [7.4 末字节错(CS 时序)](#7.4 末字节错(CS 时序))
    • [7.5 偶发数据错(SI/速度)](#7.5 偶发数据错(SI/速度))
    • [7.6 QSPI 首字节错(dummy)](#7.6 QSPI 首字节错(dummy))
    • [7.7 OVR 频发](#7.7 OVR 频发)
  • 八、降速调试法
    • [8.1 降速是 SPI 调试第一步](#8.1 降速是 SPI 调试第一步)
    • [8.2 降速流程](#8.2 降速流程)
    • [8.3 降速排查表](#8.3 降速排查表)
    • [8.4 逐步提速](#8.4 逐步提速)
  • [九、关键问题 Q&A](#九、关键问题 Q&A)
    • [Q1:SPI 数据全错,无错误标志,怎么定位?](#Q1:SPI 数据全错,无错误标志,怎么定位?)
    • Q2:逻辑分析仪采样率怎么选?
    • [Q3:spidev 调试和内核驱动结果不一致?](#Q3:spidev 调试和内核驱动结果不一致?)
    • [Q4:QSPI 读首字节错,常见原因?](#Q4:QSPI 读首字节错,常见原因?)
    • [Q5:SPI 高速偶发错,低速稳定,什么原因?](#Q5:SPI 高速偶发错,低速稳定,什么原因?)
    • [Q6:ftrace 抓 SPI 调用,看不到我的驱动函数?](#Q6:ftrace 抓 SPI 调用,看不到我的驱动函数?)
  • 十、实战案例
    • [案例 1:W25Q 读 ID 返回 0xFFFFFF](#案例 1:W25Q 读 ID 返回 0xFFFFFF)
    • [案例 2:Flash burst 读首字节错](#案例 2:Flash burst 读首字节错)
    • [案例 3:50MHz SPI 偶发数据错](#案例 3:50MHz SPI 偶发数据错)
    • [案例 4:QSPI 读首字节错](#案例 4:QSPI 读首字节错)
    • [案例 5:DMA 末字节丢](#案例 5:DMA 末字节丢)
    • [案例 6:多设备切换首字节错](#案例 6:多设备切换首字节错)
    • [案例 7:cache 一致性,DMA 数据偶发错](#案例 7:cache 一致性,DMA 数据偶发错)
    • [案例 8:SPI 传输超时,从机掉电](#案例 8:SPI 传输超时,从机掉电)
  • 十一、本篇小结与速查
  • 延伸阅读
  • 参考资料

一、调试工具链总览

1.1 工具分层

层 工具 看什么
协议层 逻辑分析仪 命令/数据/时序解码
信号层 示波器 波形/SI/边沿/电平
电气层 万用表 静态电平/通断/上拉
软件层 spidev 用户态收发验证
内核层 dmesg/ftrace 错误码/调用栈
寄存器层 debugfs/mem 寄存器值确认

1.2 SPI vs I2C 调试对比

维度 SPI I2C
协议验证 逻辑分析仪 i2c-tools(命令行)
硬件工具 示波器/逻辑分析仪 同
用户态 spidev i2c-tools
错误码 -EIO/-ETIMEDOUT -ENXIO/-EREMOTEIO
难点 CPOL/CPHA 错配(无标志) 地址错(NACK)

1.3 调试流程

复制代码
现象 → 软件层(spidev/dmesg)→ 协议层(逻辑分析仪)→ 信号层(示波器)→ 电气层(万用表)

二、逻辑分析仪解码

2.1 为什么逻辑分析仪是 SPI 调试核心

  • SPI 全双工 4 线(SCK/MOSI/MISO/CS),示波器 4 通道难同时看
  • 逻辑分析仪多通道(8/16)+ 协议解码,直接显示命令/数据
  • 采样率高(100MHz+),抓 ns 级时序

2.2 工具

  • Saleae Logic:商业,软件好用
  • sigrok/PulseView:开源,支持多种分析仪
  • DSLogic:国产开源

2.3 采样率要求

  • 10× 信号频率:50MHz SPI 用 500MHz 采样
  • 低了抓不到边沿,时序错

2.4 SPI 解码配置

PulseView 解码 SPI:

  1. 添加 SPI 协议解码器
  2. 分配通道:SCK/MOSI/MISO/CS
  3. 配 CPOL/CPHA/位序/字长
  4. 解码显示命令字节流

2.5 解码示例

抓 W25Q 读 ID(0x9F):

复制代码
CS:  ──\________________________/──
SCK:    /‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/...
MOSI:   1 0 0 1 1 1 1 1  ← 0x9F
MISO:   x x x x x x x x  ← 0xFF(dummy)
        1 1 1 0 1 1 1 1  ← 0xEF(ID高)
        0 1 0 0 0 0 0 0  ← 0x40(ID中)
        0 0 0 1 1 0 0 0  ← 0x18(ID低)
  • 解码后直接看 MOSI 发了 0x9F,MISO 回了 0xEF 40 18
  • 一眼看出命令对不对、回数据对不对

2.6 看什么

看点 判断
CS 时序 拉低到首 SCK(tCSS)、末 SCK 到拉高(tCST)
SCK 频率 实测频率 vs 配置
MOSI 数据 命令/地址对不对
MISO 数据 回数据对不对
CPOL/CPHA 空闲电平 + 采样沿
dummy 数量够不够(QSPI)

三、示波器看 SI

3.1 示波器看什么(逻辑分析仪看不到的)

  • 边沿质量:上升/下降时间,过冲,振铃
  • 电平:VIH/VIL 是否满足
  • SI 问题:反射、串扰、振铃
  • 占空比:DDR 模式关键

3.2 探头设置

  • ×10 档:减小探头电容(减小测量影响),高速必用
  • 接地线短:减小寄生电感(用接地弹簧)
  • 测 SCK + 数据线:双通道看时序

3.3 关键测量

测量 方法 判断
SCK 频率 测周期 vs 配置值
上升时间 tr 10%→90% < 1/10 周期
过冲 峰值-稳态 < 10% VDD
振铃 衰减振荡 越小越好
占空比 高/周期 45~55%(DDR 严)
串扰 邻线干扰 < 10% VDD

3.4 典型 SI 问题波形

复制代码
正常:    ┌────┐
         │    │
      ───┘    └───
      
过冲:    ┌─┐─┐
         │  │ │
      ───┘  └─└───
      (尖峰超出,终端匹配问题)

振铃:    ┌─┐─┐─┐
         │  │ │ │
      ───┘  └─└─└───
      (阻尼不足,反射)

边沿慢:  ┌─╲
         │   ╲
      ───┘    ╲___
      (驱动不足/负载重)

四、spidev 用户态验证

4.1 spidev_test(内核自带)

bash 复制代码
# 基本收发
spidev_test -D /dev/spidev0.0 -s 50000000 -b 8 -H -O

# -s 速度 -b 字长 -H CPHA=1 -O CPOL=1(Mode 3)
# 不加 -H -O 是 Mode 0

4.2 自定义测试程序

c 复制代码
#include <linux/spi/spidev.h>

int fd = open("/dev/spidev0.0", O_RDWR);

// 配 Mode 0, 50MHz, 8bit
int mode = SPI_MODE_0;
ioctl(fd, SPI_IOC_WR_MODE, &mode);
int speed = 50000000;
ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed);
int bits = 8;
ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);

// 读 Flash ID
uint8_t tx[4] = {0x9F, 0, 0, 0};
uint8_t rx[4] = {0};
struct spi_ioc_transfer tr = {
    .tx_buf = (unsigned long)tx,
    .rx_buf = (unsigned long)rx,
    .len = 4,
};
ioctl(fd, SPI_IOC_MESSAGE(1), &tr);

printf("ID: %02X %02X %02X\n", rx[1], rx[2], rx[3]);  // 期望 EF 40 18

4.3 spidev 调试流程

  1. 设备树配 compatible = "spidev"
  2. 加载,出现 /dev/spidevX.Y
  3. 用 spidev_test 或自写程序收发
  4. 看返回数据对不对

4.4 优势

  • 不用写内核驱动
  • 快速验证器件 + 控制器
  • 可调模式/速度/字长

五、dmesg 与内核日志

5.1 常见 SPI 错误码

错误码 值 含义
-EIO -5 I/O 错(OVR/MODF)
-ETIMEDOUT -110 超时(从机无响应)
-ENODEV -19 无设备
-ENOMEM -12 内存不足
-EBUSY -16 总线忙

5.2 dmesg 看 SPI

bash 复制代码
dmesg | grep -i spi

典型日志:

复制代码
spi-dw xxx: registered master spi0
spi-nor spi0.0: w25q128 (16384 Kbytes)
spi-nor spi0.0: JEDEC probe failed  ← 探测失败
spi-dw xxx: transfer timeout        ← 传输超时
spi-dw xxx: RX FIFO overrun         ← OVR

5.3 调试日志开大

bash 复制代码
echo 8 > /proc/sys/kernel/printk  # 内核日志级别最高
# 或动态调试
echo "file spi-dw.c +p" > /sys/kernel/debug/dynamic_debug/control

六、ftrace 与 regmap debugfs

6.1 ftrace 抓 SPI 调用

bash 复制代码
cd /sys/kernel/debug/tracing
echo function > current_tracer
echo "spi_*" > set_ftrace_filter
echo 1 > tracing_on
# 运行 SPI 操作
cat trace

输出:

复制代码
spi_sync
  spi_transfer_one_message
    dw_spi_transfer_one
      dw_spi_irq

6.2 spi debugfs

bash 复制代码
ls /sys/kernel/debug/spi/
# spi0/ 目录
cat /sys/kernel/debug/spi/spi0/registers  # 控制器寄存器(若驱动支持)

6.3 regmap debugfs(SPI 设备用 regmap 时)

bash 复制代码
ls /sys/kernel/kernel/debug/regmap/
# 0-0033/ (LIS3DH)
cat /sys/kernel/debug/regmap/0-0033/name
cat /sys/kernel/debug/regmap/0-0033/registers  # 所有寄存器值
echo "0x20 0x57" > /sys/kernel/debug/regmap/0-0033/registers  # 写

七、典型故障定位

7.1 读不到器件(全 0xFF)

复制代码
现象:SPI 读 Flash ID 返回 0xFFFFFF
排查:
1. 万用表:CS/SCK/MOSI/MISO 电平,上电?
2. spidev:发 0x9F + 3 dummy,看 MISO
3. 逻辑分析仪:CS 拉低了?SCK 有?MOSI 发了 0x9F?
4. MISO 全 1:① CS 没拉低 ② 模式错 ③ 器件没上电 ④ 接线错

7.2 数据全错(CPOL/CPHA 错配)

复制代码
现象:SPI 收发数据全错,但 CS/SCK 都有
排查:
1. 逻辑分析仪解码:配的 CPOL/CPHA 和实际波形对?
2. 看器件 datasheet 要求的 Mode
3. 改控制器 CPOL/CPHA,试 4 种模式
4. 典型:W25Q 要 Mode 0/3,配成 Mode 1/2 全错

7.3 首字节错(CS 时序)

复制代码
现象:burst 读,首字节错,后续对
排查:
1. 逻辑分析仪看 CS↓ 到首 SCK(tCSS)够不够
2. tCSS 太短(< 50ns):CS 拉低后 delay 再发 SCK
3. GPIO CS 软件延迟:tCSS 通常够(GPIO 操作 μs 级)
4. 硬件 CS 配置错:CSHT(CS 建立保持)配小了

7.4 末字节错(CS 时序)

复制代码
现象:burst 读,末字节错,前面都对
排查:
1. 逻辑分析仪看末 SCK 到 CS↑(tCST)够不够
2. tCST 太短:末 SCK 后 delay 再抬 CS
3. DMA 模式:TX DMA 完成立即抬 CS,但 SPI 还在移位,末字节丢
   → 等 SPI BSY=0 再抬 CS

7.5 偶发数据错(SI/速度)

复制代码
现象:高速偶发错,低速稳定
排查:
1. 示波器看 SI:边沿/过冲/振铃
2. 降速稳定说明 SI 问题(走线/负载/终端)
3. 逻辑分析仪看时序裕量(tSU/tHD)
4. 加终端(22~33Ω 串联)/降速/改走线

7.6 QSPI 首字节错(dummy)

复制代码
现象:QSPI 读 Flash,首字节错,后续对
排查:
1. 逻辑分析仪看 dummy 周期数
2. DCYC 配 0 或不够,Flash 没切换到 4 线输出
3. 查 Flash datasheet dummy 要求(W25Q 常需 6~8)
4. 配 DCYC=6/8

7.7 OVR 频发

复制代码
现象:高速 SPI,SR.OVR 频繁置位
排查:
1. dmesg 看 overrun 日志
2. 中断响应慢:CPU 读 DR 不及时
3. 改 DMA(自动搬)/降速/增 FIFO 阈值

八、降速调试法

8.1 降速是 SPI 调试第一步

SPI 出问题,先降到 1MHz 甚至 100kHz:

  • 低速 SI 不是瓶颈(边沿/反射影响小)
  • 低速时序裕量大(采样窗口宽)
  • 低速 CPU 响应跟得上(不 OVR)

8.2 降速流程

复制代码
1. 降到 1MHz,能通 → 问题在 SI/速度
   ↑ 示波器看高速 SI,加终端/改走线
2. 1MHz 不通,降到 100kHz
   ↑ 100kHz 不通 → 不是速度问题,是协议/接线/配置
3. 100kHz 通,1MHz 不通 → SI 问题
4. 100kHz 不通 → 查 CS/模式/接线/上电

8.3 降速排查表

速度 通? 判断
100kHz 否 协议/接线/配置错(非速度)
1MHz 通 基础通,提速看 SI
10MHz 通 SI 可以
50MHz 否 SI 瓶颈(走线/终端)

8.4 逐步提速

复制代码
100kHz → 1MHz → 10MHz → 25MHz → 50MHz → 100MHz
每步测稳定性,找到不稳定点,针对改善 SI

九、关键问题 Q&A

Q1:SPI 数据全错,无错误标志,怎么定位?

A :SPI 没 ACK,数据错硬件不报。逻辑分析仪解码:

  1. 看 CS/SCK/MOSI/MISO 波形
  2. 配 CPOL/CPHA 解码,看命令对不对
  3. 改 CPOL/CPHA 试 4 种模式
  4. 最常见:CPOL/CPHA 错配,改对就好

Q2:逻辑分析仪采样率怎么选?

A :10× 信号频率。50MHz SPI 用 500MHz 采样。低了抓不到边沿,时序测量不准。sigrok/Saleae 多数支持 100MHz~1GHz。

Q3:spidev 调试和内核驱动结果不一致?

A:

  • spidev:用户态,每次 ioctl 配模式,有开销
  • 内核驱动:核心层缓存配置,可能默认模式不同
  • 检查:spidev 配的 mode/speed/bits 和内核驱动设备树配置一致
  • spidev 能通,内核驱动不通:查设备树(spi-cpol/cpha/max-frequency)

Q4:QSPI 读首字节错,常见原因?

A:

  1. dummy 不够(最常见):DCYC 配 0 或太小,Flash 没切换 4 线输出。查 datasheet 配 6~8
  2. QE 位没置:DQ2/DQ3 不是数据线。先发 0x06+0x01 置 QE
  3. 采样延迟:高速 QSPI 配 RX_SAMPLE_DLY 调采样窗口
  4. CS 时序:tCSS 不够

Q5:SPI 高速偶发错,低速稳定,什么原因?

A :SI 问题(走线/终端/负载)。高速时:

  • 边沿反射(末端高阻全反射)→ 加 22~33Ω 源端串联
  • 负载电容大(多从共总线)→ 减从数或分总线
  • 走线不等长(Skew)→ 改等长
  • 示波器看波形,定位具体 SI 问题

Q6:ftrace 抓 SPI 调用,看不到我的驱动函数?

A:

  • 确认函数名:filter 用 spi_* 或具体驱动前缀(如 dw_spi_*)
  • 函数未导出:加 EXPORT_SYMBOL 或用 set_ftrace_notrace
  • 内核未开 ftrace:CONFIG_FUNCTION_TRACER

十、实战案例

案例 1:W25Q 读 ID 返回 0xFFFFFF

现象:W25Q 读 ID 返回 0xFFFFFF。

排查:

  1. 万用表:CS/SCK/MOSI/MISO 电平正常,Flash 上电
  2. spidev 发 0x9F + 3 dummy,MISO 全 FF
  3. 逻辑分析仪:CS 拉低了,SCK 有,MOSI 发了 0x9F,MISO 全高
  4. 看 Mode:配成 Mode 1,W25Q 要 Mode 0/3

解决:改 Mode 0,读到 0xEF 40 18。

案例 2:Flash burst 读首字节错

现象:Flash 读 256 字节,首字节错,后续对。

排查:

  1. 逻辑分析仪:CS↓ 到首 SCK 只有 20ns(tCSS 不够,W25Q 要 5ns+,但控制器 CSHT 配 0)
  2. 实际是 GPIO CS 软件太快,SCK 紧跟 CS↓

解决:CS 拉低后 delay 几 ns(或加 1 个 dummy SCK)再发命令。

案例 3:50MHz SPI 偶发数据错

现象:50MHz SPI 读 Flash 偶发字节错,25MHz 稳定。

排查:

  1. 示波器看 SCK:边沿有过冲 + 振铃
  2. 走线长 15cm,无终端,反射

解决:SCK 加 22Ω 源端串联,过冲振铃消失,50MHz 稳定。

案例 4:QSPI 读首字节错

现象:W25Q QSPI 0x6B 读,首字节错。

排查:

  1. 逻辑分析仪:dummy 周期 0
  2. DCYC 配 0,Flash 没切 4 线输出

解决:DCYC 配 6(W25Q datasheet),首字节正确。

案例 5:DMA 末字节丢

现象:DMA 读 Flash,末字节偶发错。

排查:

  1. TX DMA 完成就抬 CS,但 SPI 还在移位最后字节
  2. RX DMA 已关,末字节丢

解决:等 SPI BSY=0 + RX DMA 完成才算完成,再抬 CS。

案例 6:多设备切换首字节错

现象:Flash(Mode 0)→ OLED(Mode 3)切换后,OLED 首字节错。

排查:

  1. 逻辑分析仪:切换后第一个 SCK 空闲电平是低(Mode 0),但 OLED 要 Mode 3(空闲高)
  2. 切换没重配 CPOL

解决:每次切换设备前重配控制器 CPOL/CPHA/速度。

案例 7:cache 一致性,DMA 数据偶发错

现象:RISC-V N300 SPI DMA 收数据,偶发首块错。

排查:

  1. DMA 完成后 CPU 读到旧 cache,不是 DMA 写的新数据
  2. 控制器驱动没 invalidate cache

解决 :DMA 收后 dma_sync_single_for_cpu invalidate,或用 dma_alloc_coherent。

案例 8:SPI 传输超时,从机掉电

现象:SPI 读传感器,传感器掉电后 CPU 卡死。

排查:

  1. 无超时,while(!RXNE) 死等
  2. 从机不响应,CPU 永远等

解决:加超时计数,超时报错 + 清 FIFO + 复位控制器 + 重试。


十一、本篇小结与速查

核心要点

  • 调试分层:协议(逻辑分析仪)/信号(示波器)/电气(万用表)/软件(spidev)/内核(dmesg/ftrace)
  • 逻辑分析仪是 SPI 调试核心:10× 采样率,解码 CPOL/CPHA/命令/数据
  • 示波器看 SI:边沿/过冲/振铃/占空比,×10 档 + 短接地
  • spidev 用户态验证:不用写驱动,ioctl 收发
  • dmesg 看错误码:-EIO(OVR/MODF)/-ETIMEDOUT(超时)
  • 典型故障:全0xFF(模式/CS/上电)/首字节错(tCSS/dummy)/末字节错(tCST/DMA)/偶发错(SI/速度)
  • 降速调试第一步:100kHz→1MHz→10MHz→50MHz,找不稳定点
  • CPOL/CPHA 错配最常见:逻辑分析仪解码一眼看出,试 4 种模式
  • QSPI 首字节错:dummy/QE/采样延迟

工具速查

工具 用途
逻辑分析仪(sigrok/Saleae) 协议解码,10× 采样
示波器(×10) SI/边沿/电平
万用表 静态电平/通断
spidev_test 用户态收发
dmesg 内核日志/错误码
ftrace 函数调用栈
regmap debugfs 寄存器值

故障速查

现象 排查 常见原因
全 0xFF 万用表+逻辑分析仪 模式错/CS/上电
全错 逻辑分析仪解码 CPOL/CPHA 错配
首字节错 逻辑分析仪 tCSS CS 时序/dummy 不够
末字节错 逻辑分析仪 tCST CS 时序/DMA 提前关
偶发错 示波器 SI 反射/串扰/速度
OVR 频发 dmesg 中断慢/改 DMA
超时 dmesg 从机死/加超时

降速排查表

速度 通 判断
100kHz 否 协议/接线/配置
1MHz 通 基础通
50MHz 否 SI 瓶颈

延伸阅读

  • \[02-SPI信号完整性与时钟分布] ------ SI 故障定位
  • \[03-SPI速度与电气约束] ------ 降速原理
  • \[04-SPI协议与时序详解-CPOL-CPHA] ------ 模式错配
  • \[10-SPI错误处理与恢复] ------ 错误码含义
  • \[11-SPI Linux驱动框架] ------ spidev/debugfs
  • \[14-SPI排查手册与速查表] ------ 故障决策树
  • \[13-I2C调试与排查] ------ 对比 I2C 调试

参考资料

  • sigrok/PulseView 文档
  • Saleae Logic 文档
  • Linux Documentation/spi/spidev
  • Linux kernel debugging(ftrace/dynamic_debug)
  • 示波器探头应用指南

SPI 技术系列 00· 总目录 · 上一篇:\[12-SPI设备驱动实战] · 下一篇:\[14-SPI排查手册与速查表]


✨ 感谢你的阅读 ✨

技术之路漫漫,分享是为了更好地交流。

如果本文的内容对你有启发,希望能得到你的支持:

👍 点赞 | ⭐ 收藏 | 👀 关注

如果你在调试过程中遇到了其他问题,

欢迎在 评论区 💬 留言,我们一起探讨。

关注我,一起交流底层开发的那些事儿!🚀


相关推荐
我不管我就要叫小猪2 小时前
stm32——CAN总线通信
stm32·单片机·嵌入式硬件
溜达的大象2 小时前
飞牛NAS部署ONLYOFFICE Docs:把文档、表格和PPT的在线编辑能力放到自己的服务器上
运维·服务器·powerpoint
小兔子2 小时前
Linux 的 write 返回成功,数据到底落在哪了
linux
Sayai2 小时前
Kafka 磁盘空间治理实战:retention 保留策略、log.dirs 在线扩容、分区跨盘迁移与不停机整体换盘
大数据·运维·分布式·kafka·消息队列
我命由我123452 小时前
Python 开发 - Python 项目部署(Windows 与 Linux)
java·linux·windows·后端·python·java-ee·python3.11
erzong2312 小时前
Linux操作系统:基于环形队列&信号量实现多生产者多消费者的简易模型
linux·运维·服务器
小羊没烦恼!2 小时前
TypedSql:在 C# 类型系统上实现一个 SQL 查询引擎
java·linux·运维·服务器·开发语言·数据库·mysql
Yiran_G2 小时前
ZigBee通信正常,数据却是错的?嵌入式开发中的数据链路排查
网络·嵌入式硬件·物联网·智能家居
启博网络2 小时前
智慧档案库房工业组网:MR-1280 边缘大脑,实现温湿度、漏水、防火防盗设备智能联动教程
运维·网络·物联网·网络协议·网络安全·信息与通信·sdwan