打印

新唐M487SIDAE SPI从机模式接收数据异常

[复制链接]
1032|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jzywing|  楼主 | 2025-6-10 10:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jzywing 于 2025-6-10 10:51 编辑

新唐M487SIDAE SPI从机模式接收数据异常SPI配置代码如下
                //SPI0 to 192Mhz
                CLK->CLKSEL2 =
                        (CLK->CLKSEL2 & ~(0
                                | CLK_CLKSEL2_SPI0SEL_Msk
                        ))
                        | CLK_CLKSEL2_SPI0SEL_PLL
                        ;
                CLK->APBCLK0 |= CLK_APBCLK0_SPI0CKEN_Msk;

                //SPI0 slave config
                SPI0->CLKDIV |= 0x4C;                                        //2.5M
                SPI0->CTL = 0
                        | 8 << SPI_CTL_DWIDTH_Pos                //8 bits        
                        | 0 << SPI_CTL_SUSPITV_Pos                //2 SPICLOCK delay                        
                        | 1 << SPI_CTL_CLKPOL_Pos                //CLK IDLE Hight               
                        | SPI_CTL_SPIEN_Msk                                //SPI Enable                                
                        | SPI_CTL_SLAVE_Msk                                //SLAVE Mode        
                        | SPI_CTL_TXNEG_Msk
//                        | SPI_CTL_RXNEG_Msk        
                        | SPI_CTL_UNITIEN_Msk
                        ;

仿真接收数据异常段如图所示:

SPI异常数据.png (386.32 KB )

SPI异常数据.png

使用特权

评论回复

相关帖子

沙发
jzywing|  楼主 | 2025-6-10 10:53 | 只看该作者
补充一点,已经关闭了所有其它中断,只开了SPI传输中断

使用特权

评论回复
板凳
dffzh| | 2025-6-10 13:51 | 只看该作者
具体是什么异常?是有时候接收到的帧数据(一次9个字节)不对?

使用特权

评论回复
地板
WJdemo| | 2025-6-10 14:42 | 只看该作者
是顺序不对吗?理想值应该是什么?

使用特权

评论回复
5
jzywing|  楼主 | 2025-6-10 15:10 | 只看该作者
dffzh 发表于 2025-6-10 13:51
具体是什么异常?是有时候接收到的帧数据(一次9个字节)不对?

我主机发送的是固定9字节数据,但从机接收到的红圈内的数据是异常的

使用特权

评论回复
6
jzywing|  楼主 | 2025-6-10 15:12 | 只看该作者
WJdemo 发表于 2025-6-10 14:42
是顺序不对吗?理想值应该是什么?

我主机发送的是固定9字节数据,0xC1,0x3C,0x4D,0x5E,0x09,0x1A,0x2B,0x18,0x00。红圈处是偶发的异常数据。

使用特权

评论回复
7
dffzh| | 2025-6-10 15:19 | 只看该作者
jzywing 发表于 2025-6-10 15:10
我主机发送的是固定9字节数据,但从机接收到的红圈内的数据是异常的

是已经确定主机发来的数据(MOSI信号)每次都是对的了?有用逻辑分析仪测试一下MOSI的数据吗?

使用特权

评论回复
8
jzywing|  楼主 | 2025-6-10 15:25 | 只看该作者
dffzh 发表于 2025-6-10 15:19
是已经确定主机发来的数据(MOSI信号)每次都是对的了?有用逻辑分析仪测试一下MOSI的数据吗? ...

用示波器测试的,波形没问题。实际上是用2路485跑的CLK和DATA,主机那边接收到的数据一直都是对的

使用特权

评论回复
9
dffzh| | 2025-6-10 15:32 | 只看该作者
jzywing 发表于 2025-6-10 15:25
用示波器测试的,波形没问题。实际上是用2路485跑的CLK和DATA,主机那边接收到的数据一直都是对的 ...

主机给从机发送固定数据的时间间隔呢?延长发送时间间隔或者降低CLK频率呢?

使用特权

评论回复
10
jzywing|  楼主 | 2025-6-10 15:49 | 只看该作者
dffzh 发表于 2025-6-10 15:32
主机给从机发送固定数据的时间间隔呢?延长发送时间间隔或者降低CLK频率呢? ...

发送频率是200hz,降低也不行。目前用的Clk频率是2.5M,低的没有试过。

使用特权

评论回复
11
dffzh| | 2025-6-10 15:52 | 只看该作者
本帖最后由 dffzh 于 2025-6-10 16:01 编辑
jzywing 发表于 2025-6-10 15:49
发送频率是200hz,降低也不行。目前用的Clk频率是2.5M,低的没有试过。

1、如果CLK和MOSI的波形没有失真,2.5Mhz应该问题不大,可以降低试一下;
2、从机接收代码和SPI中断处理代码发来看下。

使用特权

评论回复
12
jzywing|  楼主 | 2025-6-10 16:10 | 只看该作者
本帖最后由 jzywing 于 2025-6-10 17:24 编辑
dffzh 发表于 2025-6-10 15:52
1、如果CLK和MOSI的波形没有失真,2.5Mhz应该问题不大,可以降低试一下;
2、从机接收代码和SPI中断处理代 ...

void SPI0_IRQHandler_BISSCSSI(){
  SPI0->STATUS |=SPI_STATUS_UNITIF_Msk;        
        temp1[tempcnt1][tempcnt] = SPI0->RX;
        tempcnt++;
        if(tempcnt>=9)
        {
                tempcnt1++;
                tempcnt = 0;               
        }        
}
SPI0->SSCTL寄存器没配置,因为没有使用硬件CS脚,不知道这个有没有影响

使用特权

评论回复
13
xch| | 2025-6-10 16:26 | 只看该作者
是不是忙不过来了? 主机是主控不会忙不过来

使用特权

评论回复
14
xch| | 2025-6-10 16:36 | 只看该作者
192mhz 的MCU 处理2.5MBPS/8 的中断 大约仅有600周期跑对应接收函数。

我过去用600MHZ ARM9 中断模式接收4Mbps数据都掉渣卡壳。需要改用DMA接收。

使用特权

评论回复
15
dffzh| | 2025-6-10 16:42 | 只看该作者
我从新唐科技官网找了用户手册,超过10M,无法上传附件,需要的话发我V信,我发你,你看下SPI章节,我没用过这芯片,但看上去应该还是初始化配置代码有点问题,有以下内容:、




使用特权

评论回复
16
jzywing|  楼主 | 2025-6-10 17:05 | 只看该作者
dffzh 发表于 2025-6-10 16:42
我从新唐科技官网找了用户手册,超过10M,无法上传附件,需要的话发我V信,我发你,你看下SPI章节,我没用 ...

手册我看过了,主要配置我对照看过了。主要是他可以收到数据,只是会出现偶发的错误,这种就很麻烦

使用特权

评论回复
17
dffzh| | 2025-6-10 17:09 | 只看该作者
本帖最后由 dffzh 于 2025-6-10 17:23 编辑
jzywing 发表于 2025-6-10 17:05
手册我看过了,主要配置我对照看过了。主要是他可以收到数据,只是会出现偶发的错误,这种就很麻烦 ...

降低CLK频率也是一样效果吗?硬件电路在信号线上有木有加RC滤波?截止频率是多少?示波测试出来的CLK波形有吗?发来看下。可能是CLK和MOSI的时序要求处在临界位置导致的。
SPI0->STATUS |=QSPI_STATUS_UNITIF_Msk;  这个掩码值是QSPI_STATUS_UNITIF_Msk?应该是一样的,他们的bit值一样。

使用特权

评论回复
18
jzywing|  楼主 | 2025-6-10 17:18 | 只看该作者
xch 发表于 2025-6-10 16:36
192mhz 的MCU 处理2.5MBPS/8 的中断 大约仅有600周期跑对应接收函数。

我过去用600MHZ ARM9 中断模式接收4 ...

DMA也用过了,差不多是一样的现象,传几组之后发生错位。之前一直以为是DMA触发的问题。但是现在关闭所有其它中断,只开SPI的接收中断,一个字节一个字节的收,还会发生这个异常,就很疑惑了

使用特权

评论回复
评论
xch 2025-6-10 17:23 回复TA
还有就是clk 的相位配置错了。得用双踪示波器看 clk 和mosi 
19
jzywing|  楼主 | 2025-6-10 17:23 | 只看该作者
本帖最后由 jzywing 于 2025-6-10 17:34 编辑
dffzh 发表于 2025-6-10 17:09
降低CLK频率也是一样效果吗?硬件电路在信号线上有木有加RC滤波?截止频率是多少?
SPI0->STATUS |=QSPI_S ...

笔误,实际是SPI_STATUS_UNITIF_Msk。硬件电路上没有滤波,是直连的。

使用特权

评论回复
20
dffzh| | 2025-6-10 17:26 | 只看该作者
本帖最后由 dffzh 于 2025-6-10 17:28 编辑
jzywing 发表于 2025-6-10 17:23
笔误,实际是SPI_STATUS_UNITIF_Msk

如果软件本身没什么问题,那就看下硬件;
硬件电路在信号线上有木有加RC滤波?截止频率是多少?示波器测试出来的CLK波形有吗?发来看下。可能是CLK和MOSI的时序要求处在临界位置导致的。只要降低CLK频率测试一下就知道是不是这个问题了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

18

帖子

0

粉丝