请协助我定位当前 STM32F103 读取 SPI Flash 时偶发超时的问题,并用逻辑分析仪采集证据验证结论。
你可以检查工程代码、构建并烧录固件;只有在已接入逻辑分析仪或已有采集文件时,才对真实波形做协议解码和结论。不要根据猜测编造波形结果。
信号:PA5=SCLK,PA6=MISO,PA7=MOSI,PB0=CS
目标器件:W25Q64,SPI mode 0,最高 18MHz
逻辑分析仪通道:CH0=SCLK,CH1=MOSI,CH2=MISO,CH3=CS
目标事务:0x9F 读取 JEDEC ID,以及 0x03 读取地址 0x000000 的 16 字节数据。
应用启动后大部分时候可读出正确 JEDEC ID,但偶发返回全 0xFF 或在等待 RXNE/BSY 时超时。
- 找到 SPI 初始化、CS 控制、发送接收、超时与重试相关代码;
- 核对 CPOL/CPHA、数据位宽、MSB/LSB、时钟分频、CS 建立/保持时间,以及发送后读取 MISO 的顺序;
- 对采集波形按事务切分,逐帧列出 CS 边界、命令、地址、MOSI、MISO 和异常位置;
- 将异常帧与正常帧对比,判断是 MCU 时序、器件状态、供电/接线,还是采样率不足;
- 只在代码证据与波形证据一致时修改驱动,随后重新构建、烧录并复测;
- 验证连续 1,000 次 JEDEC ID 读取和 100 次固定地址读取,记录失败次数。
最终输出应包含:协议参数、正常/异常帧的差异、根因判断依据、修改内容、复测统计,以及无法由当前波形确认的硬件风险。