21ic问答首页 - 新唐M487SIDAE SPI从机模式接收数据异常
新唐M487SIDAE SPI从机模式接收数据异常
本帖最后由 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
;
仿真接收数据异常段如图所示:
新唐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
;
仿真接收数据异常段如图所示:
赞0
好的,那硬件电路没有滤波,主机和从机的CLK信号是直连的了,没有接下拉电容,对吧?
评论
2025-06-11
赞0
可以用GPIO 输出个触发示波器脉冲。发现异常时触发一下示波器。
评论
2025-06-10
赞0
硬件没有滤波,我是在GPIO处抓的CLK和data波形,下降沿采集,没发现相位上的明显异常。示波器解码也没问题,示波器目前没在身边,明天贴下波形图吧,但是看上去没啥异常。数据整体是对的,就是那个偶发的异常,即使真的是波形异常了,也不太好抓。
实际上新塘这个使用SPI的从机做了一个数据监听的功能,总线基于485。主机那边返回的数据一直都是正常的。所以我怀疑并非是硬件问题。将CLK降到115200,还是那个现象。
评论
2025-06-10
赞0
降低CLK频率是一样的,在从机的SPI引脚处直接抓的电平,波形没有留,但是没有发现明显的波形畸变异常。如果是CLK和MOSI的时序采集问题,下降沿采集接收数据,波形上没发现异常,因为大部分数据都是正常的,只有偶发的那么几个字节,异常处的波形很不好抓。
评论
2025-06-10
赞0
如果软件本身没什么问题,那就看下硬件;
硬件电路在信号线上有木有加RC滤波?截止频率是多少?示波器测试出来的CLK波形有吗?发来看下。可能是CLK和MOSI的时序要求处在临界位置导致的。只要降低CLK频率测试一下就知道是不是这个问题了。
评论
2025-06-10
赞0
笔误,实际是SPI_STATUS_UNITIF_Msk。硬件电路上没有滤波,是直连的。
评论
2025-06-10
赞0
DMA也用过了,差不多是一样的现象,传几组之后发生错位。之前一直以为是DMA触发的问题。但是现在关闭所有其它中断,只开SPI的接收中断,一个字节一个字节的收,还会发生这个异常,就很疑惑了
评论
2025-06-10
还有就是clk 的相位配置错了。得用双踪示波器看 clk 和mosi
赞0
降低CLK频率也是一样效果吗?硬件电路在信号线上有木有加RC滤波?截止频率是多少?示波测试出来的CLK波形有吗?发来看下。可能是CLK和MOSI的时序要求处在临界位置导致的。
SPI0->STATUS |=QSPI_STATUS_UNITIF_Msk; 这个掩码值是QSPI_STATUS_UNITIF_Msk?应该是一样的,他们的bit值一样。
评论
2025-06-10
赞0
手册我看过了,主要配置我对照看过了。主要是他可以收到数据,只是会出现偶发的错误,这种就很麻烦
评论
2025-06-10
您需要登录后才可以回复 登录 | 注册