搜索
bottom↓
回复: 20

请教各位大佬,关于SPICLK错位的问题怎么搞好?

[复制链接]

出0入14汤圆

发表于 2022-11-30 19:28:31 | 显示全部楼层 |阅读模式

现在调试SPI从机,碰到数据错位的问题,表现如下,

每个数据的CLK都移位了,上面--CLK      中间--数据      下面--自己做的测试信号(每收到一个数据翻转下)

想知道有什么好办法能解决这种问题,

前置条件,1、只有 CLK和data两根数据线,没有CS线;
                2、两个设备不是同时上电;(相当于即插即用)


自己的想法,1、通过BYS标志,判断异常

但在实际中测试,超时结束后BSY位为0,Spi2ErrFlag1 = SPI2->SR;  读取到的值为0x02,所以无法判断异常。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入14汤圆

 楼主| 发表于 2022-11-30 19:30:57 | 显示全部楼层
本来按照自己的理解,要是数据错位了,在空闲时间的时候SPI应该还是在接收数据的过程中,BSY应该是置1的,结果居然不是。

出280入168汤圆

发表于 2022-11-30 20:33:45 | 显示全部楼层
工作模式切换一下,有四种模式,都试试。

出15入178汤圆

发表于 2022-11-30 23:12:00 | 显示全部楼层
楼主的需求是这样:SPI不带CS,他考虑插拔或异常时,主从的时钟会错位。

出0入14汤圆

 楼主| 发表于 2022-12-1 00:49:53 | 显示全部楼层
2nd 发表于 2022-11-30 23:12
楼主的需求是这样:SPI不带CS,他考虑插拔或异常时,主从的时钟会错位。
(引用自4楼)

是的,感觉设计的很不方便,看网上有人提了个建议,要是有直接清除计数移位的操作就好了

我现在只能考虑识别到异常就复位芯片

出0入0汤圆

发表于 2022-12-1 08:49:32 来自手机 | 显示全部楼层
错位情况用示波器也看看波形,另外逻辑分析仪检测电压合适不?开发阶段先查为什么有错位情况

出0入4汤圆

发表于 2022-12-1 09:16:12 | 显示全部楼层
用定时器监控一下clk高电平宽度,超过一定的时间后从机就认为是下一个数据开始

出0入30汤圆

发表于 2022-12-1 09:17:36 | 显示全部楼层
有点像IIC,

出0入8汤圆

发表于 2022-12-1 10:59:32 | 显示全部楼层
加16位以上同步帧头,帧尾加crc校验,以此判断数据接收是否合法。

出0入14汤圆

 楼主| 发表于 2022-12-1 11:24:00 | 显示全部楼层
liufabing 发表于 2022-12-1 08:49
错位情况用示波器也看看波形,另外逻辑分析仪检测电压合适不?开发阶段先查为什么有错位情况 ...
(引用自6楼)

不是电平问题,就是由于不是同时上电,拔插之类的造成数据错位

出0入14汤圆

 楼主| 发表于 2022-12-1 11:29:32 | 显示全部楼层
chxzh123 发表于 2022-12-1 09:16
用定时器监控一下clk高电平宽度,超过一定的时间后从机就认为是下一个数据开始 ...
(引用自7楼)

这个就是类似于超时检测,这个也可行,

有两个问题,1、目前没有专门加上CLK的检测脚;
                    2、怎么复位SPI的,我没看到相关操作;

我现在做的是配置为双通道收发模式,通过BSY位检测异常,然后复位整个芯片;
(一个数据帧的间隔最低有2~3ms,超时检测是没问题的)

作为产品,我还加上超时10ms没有收到完整帧的情况下,复位整个芯片(防止BSY检测不成功);

但是我还做了了个SPI监测数据的工具,就不能加上帧判断了

出0入14汤圆

 楼主| 发表于 2022-12-1 11:31:03 | 显示全部楼层
siguo 发表于 2022-12-1 10:59
加16位以上同步帧头,帧尾加crc校验,以此判断数据接收是否合法。
(引用自9楼)

数据通讯结构没办法改变,这个是改装产品,得配合着别的东西来调,只能在现有条件下做稳定

出0入309汤圆

发表于 2022-12-1 11:44:42 来自手机 | 显示全部楼层
能不能尝试使用软件模拟来做超时判定? 或者是用定时器模块来在从机那里生成cs信号?

出0入224汤圆

发表于 2022-12-1 11:53:18 | 显示全部楼层
SPI不是一直操作的吧,如果中间有停顿,就自己判断一下,自己复位一下。

出0入0汤圆

发表于 2022-12-1 12:01:10 | 显示全部楼层
看clk脉宽有区别,可以以这个脉宽的来判断clk头?

出15入70汤圆

发表于 2022-12-1 14:37:08 | 显示全部楼层
https://www.byteparadigm.com/fil ... tocol-at-100MHz.pdf
希望有帮助

出0入14汤圆

 楼主| 发表于 2022-12-1 15:20:36 | 显示全部楼层
cl1cl1cl1cl1 发表于 2022-12-1 12:01
看clk脉宽有区别,可以以这个脉宽的来判断clk头?
(引用自15楼)

CLK-5us的脉宽,时间太短不太可行

出0入14汤圆

 楼主| 发表于 2022-12-1 15:21:00 | 显示全部楼层
yyts 发表于 2022-12-1 11:53
SPI不是一直操作的吧,如果中间有停顿,就自己判断一下,自己复位一下。
(引用自14楼)

我现在就是想办法做超时判断,复位整个芯片

出0入309汤圆

发表于 2022-12-1 23:46:27 来自手机 | 显示全部楼层
isakura 发表于 2022-12-1 15:21
我现在就是想办法做超时判断,复位整个芯片
(引用自18楼)

为啥不直接拿另一个io控制cs实现spi的复位?

出0入475汤圆

发表于 2022-12-3 11:29:47 来自手机 | 显示全部楼层
不知道你那个spi速度是多少,然后spi的传输是不是一直都在传不停,以及你要给它反馈些什么数据回去,处理时间是不是要很多

如果spi时钟在1M以内,又不是一直在传(比如传50个自己,停一会),那么随便弄个51,PIC,AVR什么的8位机就能搞定,时序那里抠汇编指令(抱歉我只会8位机的汇编哈哈)。空闲时间处理j反馈的数据,初次时钟触发时候先看spi那个宽的正脉冲作为同步条件,因为看波形那里明显比其它正常bit宽很多,
提供一个思路而已。当然也可以用其他高级方法:
比如还是用那个宽脉冲,使用高级mcu的脉宽捕获/比较功能?能不能区别出来?符合条件的中断里面立马启动spi

出0入475汤圆

发表于 2022-12-3 11:52:38 来自手机 | 显示全部楼层
如果实际波形就是顶楼那样的话,看你说宽度都5us了,这么宽,bit脉冲估计就是1us-2us,真的太多方法来判断同步了,因为那个宽脉冲太明显,实际上你要做的就是一个可重触发的单稳态电路,甚至就用额外的硬件电路都可以实现:就是外挂一个单稳态触发器,其输入就是上升沿,稳态时间稍微比那个宽脉冲小一点点,比bit脉冲大一倍左右,这样其稳态输出就是CS片选信号了,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 11:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表