GD32F103C8T6的SPI波形异常问题

[复制链接]
 楼主| 萌德不萌 发表于 2025-7-23 14:53 | 显示全部楼层 |阅读模式
本帖最后由 萌德不萌 于 2025-7-23 15:00 编辑

我在使用逻辑分析仪测试SPI波形时,发现只要在调用spi_i2s_data_transmit(SPI1,data)之前增加了“等待SPI发送缓冲为空”的while循环,CS的波形就被提前拉高了
只要我注释掉该while循环,CS波形就恢复正常


为什么会这样呢

新建 DOC 文档.pdf

416.31 KB, 下载次数: 5

评论

[url=home.php?mod=space&uid=3554844]@萌德不萌[/url] :代码上也确实没有明显问题,软件控制CS应该是代码控制的,你将frame_size改为SPI_FRAMESIZE_8BIT试试,或者想尽快解决,只能发我V信,我帮你线下指导一下排查。  发表于 2025-7-25 14:22
[url=home.php?mod=space&uid=2728380]@dffzh[/url] :平台有文件大小限制,发不了工程压缩包。我把程序复制到PDF发在下面评论区了,老哥请看  发表于 2025-7-24 16:51
[url=home.php?mod=space&uid=676939]@cooldog123pp[/url] :波形在附件里  发表于 2025-7-24 16:37
看看啥波形  发表于 2025-7-24 14:35
xch
spi_i2s_data_transmit(SPI1,data)之前禁止全局中断看看。  发表于 2025-7-24 14:35
[url=home.php?mod=space&uid=3554844]@萌德不萌[/url] :看了,排查问题时,尽量不要加入太多未知代码,比如不要加入定时器什么的,越简单越好,把不加定时器的代码工程发一份。  发表于 2025-7-24 11:03
[url=home.php?mod=space&uid=2728380]@dffzh[/url] :老哥你看我给你的回复  发表于 2025-7-24 10:52
找到原因没?  发表于 2025-7-24 08:56
probedog 发表于 2025-7-23 15:56 | 显示全部楼层
CS控制逻辑与SPI传输状态不同步,可能是代码中CS拉高位置错误,或硬件自动控制配置不当。
probedog 发表于 2025-7-23 15:56 | 显示全部楼层
CS在数据发送完成后再拉高。
probedog 发表于 2025-7-23 15:56 | 显示全部楼层
避免冗余的 TXE 等待,优先使用 spi_i2s_data_transmit() 的阻塞特性。
flycamelaaa 发表于 2025-7-23 16:57 | 显示全部楼层
检查SPI模式配置。
dffzh 发表于 2025-7-23 17:09 | 显示全部楼层
本帖最后由 dffzh 于 2025-7-23 17:31 编辑

你把CS的控制代码屏蔽后测试看下是什么效果,有问题回复我,再帮你看下:
368596880a6b0dd892.png
官网上的这个SPI demo程序,我大致扫了一下代码,CS配置为软件控制,但实际貌似代码上没有操作CS,不知道为什么可以通信成功,有点神奇: 324766880a91e32a39.png

可能是其评估板上的硬件一直拉低CS了。
xch 发表于 2025-7-23 18:37 | 显示全部楼层
在拉高CS 之前,给SPI 状态寄存器拍个快照。拉高后设个断点,回头看快照。
看波形像是判断发送 FIFO空了就拉高了CS,实际上位移寄存器还在工作。
powerantone 发表于 2025-7-23 18:58 | 显示全部楼层
spi_i2s_data_transmit() 函数本身会阻塞,直到发送缓冲区可用(即 TXE=1),因此显式等待 TXE 通常是多余的。
stormwind123 发表于 2025-7-23 19:59 | 显示全部楼层
需要正确控制CS信号的时序。
 楼主| 萌德不萌 发表于 2025-7-24 10:50 | 显示全部楼层
dffzh 发表于 2025-7-23 17:09
你把CS的控制代码屏蔽后测试看下是什么效果,有问题回复我,再帮你看下:

官网上的这个SPI demo程序,我大 ...

老哥,屏蔽掉后就是CS一直维持拉高状态了。
还有一个问题,就是原本屏蔽掉“等待发送缓冲区清空”的while循环后,不是SPI发送和CS时序就正常了么,但是我现在只要把SPI1_SendData函数再放入定时器Timer2的中断里定时发送,就又会出现CS提前拉高的情况

2.pdf

180.47 KB, 下载次数: 1

3.pdf

386.32 KB, 下载次数: 2

评论

我觉得根本原因不在于等待发送缓冲区清空”这个while,可能是其他地方的代码存在比较隐秘的问题,方便的话,把V信发我,我帮你看下吧。  发表于 2025-7-24 10:57
cooldog123pp 发表于 2025-7-24 14:35 | 显示全部楼层
你这是硬件SPI?你用逻辑分析仪抓一下看下,一般硬件SPI不会有很大问题。

评论

硬件SPI但是软件控制NSS,MOSI和SCLK波形都正常,就是NSS总是在数据还没传输完成时就拉高了。波形在附件中  发表于 2025-7-24 16:53
 楼主| 萌德不萌 发表于 2025-7-24 16:49 | 显示全部楼层
未加定时器的代码。包含spi.f   spi.c   main.c

4.pdf

82.06 KB, 下载次数: 2

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部