一句话

SA47301 的 SPI 是 16 位定长帧:1 位读写命令 + 6 位地址 + 8 位数据 + 1 位奇偶校验。格式错、位数错、校验错都会被抓住并报中断——车规芯片连通信都要防比特翻转。

SPI 时序

帧结构

SDI(MCU→芯片): [CMD][A5~A0][D7~D0][T]
SDO(芯片→MCU): [ 1 ][S5~S0][D7~D0][T]
  • CMD:0=读,1=写
  • A5~A0:寄存器地址(0x00~0x3F)
  • D7~D0:数据(读命令时建议填 0)
  • T(奇偶位):对自己那 15 位里「1 的个数」做偶校验——1 的个数为奇则 T=1,否则 T=0
  • 采样规则:SCL 上升沿采样、下降沿翻转;SCS 拉低选中、拉高结束

写寄存器 读寄存器

写操作回环

写命令时,SDI 收到的内容会原样从 SDO 回读出来——MCU 可以借此实时校验「芯片到底收到了什么」。

三种 SPI 错误(都会置标志 + 报中断)

  1. 帧超时:SCS 拉低超过 tSPI_fl——写数据作废
  2. 时钟数错误:一帧不是 16 个 SCL 周期——写数据作废
  3. 奇偶校验错:T 位对不上——写数据作废

铁律

所有三类错误都只「拒收」而不「执行一半」——写操作要么完整生效要么完全忽略,不存在写错一个 bit 的中间态。这是功能安全通信设计的基本要求。

SLEEP 态注意

SLEEP 下 SPI 仍可通信(用于唤醒后交互),但最大时钟频率降低——驱动里要按状态切换 SPI 速率。