ST意法半导体
直播中

爱与友人

10年用户 1065经验值
擅长:可编程逻辑 模拟技术 存储技术
私信 关注
[问答]

SPI TX期间丢失字节+示波器上出现奇怪的MOSI线是什么原因?

问题描述:
~30 字节消息中的 1-2 个字节(通常在消息中的同一位置)有时会丢失。通常是第 13 个字节。
如果我通过 SPI 发送更短的消息,比如 10 个字节,对方会正确接收它们。
如果我在将 NSS 拉低后等待 50us,对方甚至可以正确接收到长消息。
让我们假设,在将 NSS 拉低后,传输开始得太早。为什么 msg 中间的一个字节会丢失,而不是在开头?
也许这是一个振荡的 NSS 引脚,它变高/变低,但我在示波器上看不到任何东西。我知道探头会增加走线的电容,因此任何信号上升都会变慢,并且只需连接探头即可抑制任何振荡。
暂时修复:
将 NSS 拉低后等待 50us。
问题一:
但我不明白为什么修复有效......这对我来说毫无意义。NSS 在大约 200ns 内变高/变低(使用探头测量,超短 GND 连接)。不同的测量显示 1300ns(探头上有长引线)。
数据表规定 50pF 电容为 320ns。所以第一次测量应该没问题。200ns 大约是 3 个时钟周期。
我初始化一个 60 字节的数组,并在将 NSS 拉低后执行一个 30 字节的 memcpy。这应该足以让 NSS 变低。
为什么等待会修复它?为什么中间少了一个字节?一开始不是吗?
问题2:
为什么示波器上的MOSI这么坏?为什么我什至可以用这样的 MOSI 图发送正确的消息?见附图。MOSI 的上升时间约为 2.5us。这太长了。为什么?如果是示波器的原因,我会在 SCK、NSS 或 MISO 上看到同样的现象。但我没有。
环境:
SPI 速度:8 MHz
SPI 模式:主机,全双工
时钟速度:16 MHz
单片机STM32L0
电源电压:1V8
SCK 迹线:~33mm,800 万
MOSI 迹线:~43 毫米,800 万
SPI GPIO 速度设置:最高速度
NSS 速度设置:低
示波器
输入电容:15pF
探头电容:18-22pF
探头补偿:10-35pF
探头设置:10x



回帖(1)

余小娟

2022-12-1 14:59:10
通信是在 STM32 和无线电 MCU 之间进行的。有时失败的命令是填充无线电 MCU 的 FIFO 的命令。
可能只有当我在 NSS 被拉低后 MCU 等待时它才起作用的原因可能是,无线电 MCU 需要时间将其模式从 RX 更改为 STANDBY。等待发生在 NSS 被拉低之前还是之后都没有区别。所以 NSS 不是问题所在。
很可能 SPI 通信完好无损,但 FIFO 未正确填充,因为它恰好在接收器模式从 RX 切换到 STANDBY 的那个时间点完成。
尽管如此,我已经将 SPI 速度从非常高降低到很高并保持这种变化,因为它以较低的速度工作,我想避免任何 EMI 或过冲/下冲。
我已经删除了所有等待代码/周期,现在只等待无线电 MCU 的模式更改完成。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分