你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G070挂载4个设备,切换SPI极性和相位之后,发现第一个字节SCLK,只有7个,MOSI数据也不对

[复制链接]
feiling4 提问时间:2023-7-7 15:29 / 未解决

大家下午好,我是用的逻辑分析仪来分析这个SPI传输

设备极性是:【哪个沿取数据,空闲电平】 【0,0】 【0,1】 【1,1】

正常的数据,是有8个沿,不正常的数据,只有7个。

2023-06-30_11-33-04正常数据.jpg

不正常的数据,只有7个SCLK。一字节8个,每个字节之间的空隙比正常的clk间隔大一些,所以第一个字节是少了一个SCLK,而且MOSI上发送的数据的也不对

2023-06-30_11-33-14异常数据,7个clk.jpg

image.png

请问这是什么原因导致的?大家有遇到类似的吗?或者有什么排查是思路吗

收藏 评论4 发布时间:2023-7-7 15:29

举报

4个回答
xmshao 回答时间:2023-7-7 16:05:49
你所说的少一个时钟是偶尔还是确定的?


发生在哪种模式下或情形下? 你目前4个SPI器件的配置不一样?


在切换不同器件的通信时,稍做下延时先让时钟空闲一会,然后开启通信会怎么样?
butterflyspring 回答时间:2023-7-7 17:01:40
从逻辑上讲,第一次发出数据后,数据正常,那么修改配置再发送也应该正常,不应该缺失个数。
那么很大的可能来自于中间切换。 SPI重新配置时或者停止时需要注意当前状态,不要在数据没发送完时去停止或修改SPI。 楼主可以注意一下这点。
feiling4 回答时间:2023-7-7 17:11:40

xmshao 发表于 2023-7-7 16:05
你所说的少一个时钟是偶尔还是确定的?</p>
<p>

谢谢回复

程序跑的裸机,没有操作系统。

少一个时钟和发送的数据异常是每次都这样的。程序主要是会在2中SPI模式中切换,例如每个9秒和FPGA通信【0,0】,设置DAC的时候,这个控制一次的时间大概4ms执行一次【0,1】,每一次都会进行SPI的极性切换。其他的极性【1,1】切换不经常执行,有需要才会执行一次。

例如我每次执行设置DAC,就会去切换一次极性,函数封装为:(切换极性,发送数据)。所以极性一直在被重新配置。

数据异常的情况:

因为DAC使用频率更高,所以大部分是从DAC【0,1】切换成FPGA【0,0】,按照逻辑分析仪抓出来的波形,极性切换时序(cs,SCLK是符合SPI对应的模式要求的)没有问题。

数据异常且备注说明.jpg

数据正常:

如果上一次的极性就是配置为【0,0】,那么我和FPGA通信的时候,再次把极性配置成【0,0】,那数据发送也是正常的。

正常的数据且加了说明.jpg

如果单纯的配置完极性和相位,延时10ms,问题还是存在,

我现在的处理方式:

函数封装:(先关闭spi外设使能,延时10us,配置极性和相位,延时10us,使能SPI外设。再配置一遍极性和相位。最后发送数据)

目前这样看的话,是可以使用,但是不确定是否可靠,我想知道具体的原因是什么,为什么在切换的时候会有这个问题

feiling4 回答时间:2023-7-10 11:06:18

butterflyspring 发表于 2023-7-7 17:01
从逻辑上讲,第一次发出数据后,数据正常,那么修改配置再发送也应该正常,不应该缺失个数。
那么很大的可 ...

是在重新配置之前,检查数据寄存器是否为空吗?上一次数据发送完成之后,为空,在来做重新配置?

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版