完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题描述:
~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个回答
|
|
通信是在 STM32 和无线电 MCU 之间进行的。有时失败的命令是填充无线电 MCU 的 FIFO 的命令。
可能只有当我在 NSS 被拉低后 MCU 等待时它才起作用的原因可能是,无线电 MCU 需要时间将其模式从 RX 更改为 STANDBY。等待发生在 NSS 被拉低之前还是之后都没有区别。所以 NSS 不是问题所在。 很可能 SPI 通信完好无损,但 FIFO 未正确填充,因为它恰好在接收器模式从 RX 切换到 STANDBY 的那个时间点完成。 尽管如此,我已经将 SPI 速度从非常高降低到很高并保持这种变化,因为它以较低的速度工作,我想避免任何 EMI 或过冲/下冲。 我已经删除了所有等待代码/周期,现在只等待无线电 MCU 的模式更改完成。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2642 浏览 1 评论
3208 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1783 浏览 1 评论
3611 浏览 6 评论
5988 浏览 21 评论
939浏览 4评论
1316浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
584浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1303浏览 3评论
1360浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 10:24 , Processed in 1.154425 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号