问答

汇集网友智慧,解决技术难题

21ic问答首页 - 新唐M487SIDAE SPI从机模式接收数据异常

DA AE SPI从机 ID 接收 M487

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

jzywing2025-06-10
本帖最后由 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
                        ;

仿真接收数据异常段如图所示:
回答 +关注 1
671人浏览 23人回答问题 分享 举报
23 个回答
  • jzywing 发表于 2025-6-10 17:44
    硬件没有滤波,我是在GPIO处抓的CLK和data波形,下降沿采集,没发现相位上的明显异常。示波器解码也没问 ...

    好的,那硬件电路没有滤波,主机和从机的CLK信号是直连的了,没有接下拉电容,对吧?
  • jzywing 发表于 2025-6-10 17:44
    硬件没有滤波,我是在GPIO处抓的CLK和data波形,下降沿采集,没发现相位上的明显异常。示波器解码也没问 ...

    可以用GPIO 输出个触发示波器脉冲。发现异常时触发一下示波器。
  • dffzh 发表于 2025-6-10 17:26
    如果软件本身没什么问题,那就看下硬件;
    硬件电路在信号线上有木有加RC滤波?截止频率是多少?示波器测试 ...

    硬件没有滤波,我是在GPIO处抓的CLK和data波形,下降沿采集,没发现相位上的明显异常。示波器解码也没问题,示波器目前没在身边,明天贴下波形图吧,但是看上去没啥异常。数据整体是对的,就是那个偶发的异常,即使真的是波形异常了,也不太好抓。
    实际上新塘这个使用SPI的从机做了一个数据监听的功能,总线基于485。主机那边返回的数据一直都是正常的。所以我怀疑并非是硬件问题。将CLK降到115200,还是那个现象。
  • dffzh 发表于 2025-6-10 17:09
    降低CLK频率也是一样效果吗?硬件电路在信号线上有木有加RC滤波?截止频率是多少?示波测试出来的CLK波形 ...

    降低CLK频率是一样的,在从机的SPI引脚处直接抓的电平,波形没有留,但是没有发现明显的波形畸变异常。如果是CLK和MOSI的时序采集问题,下降沿采集接收数据,波形上没发现异常,因为大部分数据都是正常的,只有偶发的那么几个字节,异常处的波形很不好抓。
  • 本帖最后由 dffzh 于 2025-6-10 17:28 编辑
    jzywing 发表于 2025-6-10 17:23
    笔误,实际是SPI_STATUS_UNITIF_Msk

    如果软件本身没什么问题,那就看下硬件;
    硬件电路在信号线上有木有加RC滤波?截止频率是多少?示波器测试出来的CLK波形有吗?发来看下。可能是CLK和MOSI的时序要求处在临界位置导致的。只要降低CLK频率测试一下就知道是不是这个问题了。
  • 本帖最后由 jzywing 于 2025-6-10 17:34 编辑
    dffzh 发表于 2025-6-10 17:09
    降低CLK频率也是一样效果吗?硬件电路在信号线上有木有加RC滤波?截止频率是多少?
    SPI0->STATUS |=QSPI_S ...

    笔误,实际是SPI_STATUS_UNITIF_Msk。硬件电路上没有滤波,是直连的。
  • 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 
  • 本帖最后由 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值一样。

  • dffzh 发表于 2025-6-10 16:42
    我从新唐科技官网找了用户手册,超过10M,无法上传附件,需要的话发我V信,我发你,你看下SPI章节,我没用 ...

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

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