1、问题描述

在测试诊断的时候发现L9945的故障不更新
查下来L9945_1 的初始化L9945_1_stOpUB = 1是通过的,报错是由于返回的奇偶校验不通过。L9945_2的初始化L9945_2_stOpUB = 1是通过的,报错是由于返回的CMD校验不通过。


2、排查思路

  • 检查SPI时序 CPOL = 0 (时钟初始为低)& CPHA = 1(数据在 SCLK 的第二个边沿采样,第一个边沿移位输出)

  • 检查时间参数是否是大于 600ns、100ns、400ns

  • 检查出现故障后,示波器观察返回参数和软件上读的一不一样

3、检查SPI时序和时间参数

这路SPI上带了一片2001、2片9945 ,先把2001和L9945_的spi发送屏蔽掉。

L9945_1的诊断spi命令屏蔽,做到总线上只有一个地方往外发

Pt2001的spi通讯屏蔽掉

周期发送函数做成可控制发送数据方便检查时序和时间参数

SPI时序 CPOL = 0 (时钟初始为低)& CPHA = 1(数据在 SCLK 的第二个边沿采样,第一个边沿移位输出)合格

片选到时钟的时间920ns大于手册的600ns合格

时钟到片选时间位160ns 时间感觉有点少

两个片选之间的时间2.56us 满足手册

4、示波器观察返回参数和软件上读的一不一样

正常情况下数据是对的

复现故障,需要9945连续发12条命令以上偶发1条故障,

发生故障时,软件读到错误数据,导致奇偶校验不通过

第一条指令

第二条指令 周围紧接着发送2001数据

第三条指令

第四条指令

第五条指令

第六条指令

第七条指令

第八条指令

第九条指令

第十条指令

第十一条指令 核对了数据收发都一样

第十二条指令

总线的数据都是对的,但是软件为啥是错的?尽力了搞不定

5、实力外援

引起这个问题的原因:是因为我得硬件结构是1路SPI带1片2001和2片9945 ,2001一发数据 9945就报spi错误

在咱们新版本的模板中1ms内也调用SPI接口

导致9945返回的数据中存在2001的数据,9945的奇偶校验不对

把1ms的SPI发送调用就注释掉就可以  1ms也不需要更新SPI控制的DO