高通字库
版本 V1.0 · 更新于 2026-11-03

2. 读不到数据:完全没反应或读回全 FF

"读不到数据"是出现频率最高的一类问题:有的完全没反应,有的能通信但读回的值不对。这一章按"先硬件、再通信"的顺序排查。

2.1 动手前先查:上电与硬件检查清单

先用万用表和目检过一遍这 8 项,很多"读不到"在这一步就解决了:

序号检查项正常要求常见问题
1供电按手册,常见 3.3V5V 直供、纹波大
2去耦VCC 就近 0.1μF无去耦、走线长
3CS 上拉典型 10kΩ 至 VCC悬空,上电被误选中
4SO/SI/CLK不悬空,长线加串阻杜邦线、排线过长
5共地地线短而粗只连一根细地线
6焊接无虚焊、连锡、错位QFN/DFN 底部虚焊
7电平3.3V 器件,5V 需转换5V GPIO 直连
8上电时序CS 上电为高MCU 先上电、IO 倒灌

2.2 读不到数据五步排查法

第一步:确认 MCU 有没有发波形

  • 四根线都无波形 → 软件 / 引脚复用 / SPI 未使能 / 程序未执行。
  • MCU 端有、芯片端没有 → 断线、虚焊、排线。
  • 幅度不对 → 供电、上拉、短路、电平匹配。

第二步:确认 CS 是否选中

  • CS 空闲必须为高,读操作期间为低。
  • CS 常高 → 片选未调用 / 映射错 / 被占用。
  • CS 常低 → 上电默认低 / 上拉缺失 / 多从设备争用。

第三步:确认 SPI 模式、位序、速率

  • 多为 Mode 0 或 Mode 3,MSB first,以手册为准。
  • 先 ≤1MHz 验证。
  • 数据整体移位 → 改 CPHA;全错 → 改 CPOL / 位序。

第四步:确认指令、地址、dummy

  • 读操作:CS 低 → 读指令 → 地址(通常 3 字节,MSB)→(dummy)→ 读 N 字节 → CS 高。
  • 少发 / 多发字节、地址序反、dummy 数错,都会读回 0xFF 或错位。

第五步:确认库与型号匹配

  • 库必须按实际型号生成;换型号沿用旧库,可能初始化"成功"但取模全 0(见第 4 章)。

抓到波形后,按下面的要点逐项核对:

观察点正常表现异常含义
CS 保持时间最后一个 CLK 后 CS 才拉高末字节可能丢失
CLK 空闲电平与 CPOL 一致模式配错
CLK 边沿单调、无振铃反射导致误采样
MISO 采样沿稳定、幅度接近 VCC未选中 / 未供电 / 未接
帧长度指令 + 地址 + dummy + 数据完整少一位后续全错
字节间 CS保持低中途拉高会终止读

完整的读操作驱动代码(硬件 SPI / 软件模拟两种)见字库芯片开发资料 · SPI 驱动。

2.3 Q03 四根线都没有波形,从哪里查

现象

字库读不出数据、出现乱码;用示波器看 CS、DI(MOSI)、DO(MISO)、CLK 四根线都没有波形。

原因分析

四根线都无波形,说明 MCU 根本没有发起 SPI 传输——问题通常在软件、引脚配置或供电,而不是字库芯片。(如果波形正常但数据错乱,直接看 2.4 Q04。)

解决办法

  1. 程序是否执行到读函数:在读函数入口翻转空闲 GPIO,用示波器确认。
  2. SPI 外设是否使能:时钟、初始化、SPI_Enable。
  3. 引脚复用:AF 编号、复用推挽、上下拉。
  4. 片选:CS 引脚映射、片选函数是否调用。
  5. 外设占用:同一组 SPI 是否已分配给 Flash / 屏幕。
  6. 硬件通路:排线断线、虚焊、芯片未供电。
  7. 测量方法:探头地、量程、触发、是否测错引脚。
  8. 断开芯片测 MCU 端波形;用万用表测通断;确认 VCC/GND。

验证方法

写一个只做"读 ID"的最小测试:拉低 CS → 发一个 0x9F → 读回 8 字节 → 拉高 CS,用逻辑分析仪看四根线。最小测试通过后再接库函数。

spi_id_min_test.c
// 最小读 ID 测试:绕开字库库文件,直接验证 SPI 底层
uint8_t tmp_buf[8] = {0};
tmp_buf[0] = 0x9F;
gt_read_data(tmp_buf, 1, tmp_buf, 8); // 发送 1 字节指令,读回 8 字节

for (int i = 0; i < 8; i++)
{
    printf("tmp_buf:%x\r\n", tmp_buf[i]); // 打印返回的值
}

gt_read_data 的实现与移植说明见字库芯片开发资料 · SPI 驱动;读回值的判读见下一节。

2.4 Q04 发 0x9F 读回的数据异常

现象

发 0x9F 读 ID,读回的数据是 FF 0B 40 17… 这样的异常值。

原因分析

  • 全 FF:MISO 未被驱动(未选中、未供电、MISO 未接、CS 时序错)。
  • 部分字节"有值"但顺序不对:地址字节数、dummy、位序、CPHA 错。
  • 数据整体移位:SPI 模式或位序错。
  • 偶发错:速率过高、干扰、上拉缺失。

解决办法

  1. 确认 CS 整帧保持低,最后才拉高。
  2. 对照手册确认:指令码、地址字节数、字节序、dummy 数、读长度。
  3. 确认 SPI 模式和位序(MSB first)。
  4. 降速到 1MHz 以下重试。
  5. 逻辑分析仪抓完整帧,逐位对照时序图。
  6. 确认该型号是否支持 0x9F,以及 ID 定义(见字库芯片规格书)。
  7. 读 ID 正确、读字模错误 → 查地址和排置(Q15)。
  8. 读 ID 也错 → 通信层问题(Q03)。

对照帧结构检查每一部分是否完整:

SPI 读操作帧结构示意(Mode 0,具体指令、地址字节数、dummy 以型号数据手册为准)SPI 读操作帧结构示意(Mode 0,具体指令、地址字节数、dummy 以型号数据手册为准)

验证方法

读手册中明确给出初值的地址(版本 / 头信息),再读字母 A 的 8×16 点阵(16 字节)。各型号 A 的期望点阵数据与调用代码见各型号字库芯片数据验证表,逐字节比对即可定位是"读错"还是"用错"。

相关资源