记SPI问题排查
SPI电路挂载了2个从设备,S1和S2,其中S2前加了一个隔离器g,电路结构如下图:
问题发现:
其它同事已经开发了S2驱动,我在开发S1驱动时发现S1无响应。
排查是软件问题还是硬件问题:
检查代码SPI初始化(时钟等)片选信号的处理(多从设备做冲突处理)没有问题后S1还是无响应。所以初步判断是硬件问题。
硬件问题排查:
首先确认S1供电是否正常,使用万用表测量供电,都是正常,初步确认是SPI传输出了问题。
先在软件屏蔽了S2,单独循环驱动S1,使用示波器测量:
1.首先检查片选和时钟信号,看起来是可用的,波形如下图:
2.然后测量MOSI引脚,查看mcu有没有成功输出信号,测量成功输出了信号,波形也没有问题:
这个波形显示SPI以模式0输出信号。
3.然后测量S1响应信号miso;发现miso脚上没有信号;
问题排查:按照SPI协议挂多个从设备是可行的,只要片选控制好即可,但电路中多了一个隔离器,怀疑是隔离器的影响。
4.在硬件上把隔离器断开后(s2也断开了)观察,S1果然可以正常通信了。确认是隔离器拉低了S1 MISO信号(选择带片选的隔离器可以避免这个问题)。
问题解决方案:
在S1 MISO和隔离器间加一个电阻。
先是加了一个10k电阻,发现S1正常但S2的MISO信号被弄的畸形了:
多次调试后将电阻更换到750欧后S1和S2波形都比较完美,解决了问题。
后续问题:
后续过认证,发现S2 SPI信号在升温到40度以上的情况下容易出问题,导致读取到的信息错误。通过将SPI波特率调整到原来的一半(波特率低的相对于高的有更高的稳定性)后解决(15M->7.5M).
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1