打印
[产品应用]

Cw32l010 SPI 软件片选有多余脉冲

[复制链接]
176|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fox1|  楼主 | 2024-11-10 23:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
cw32 SPI用全双工通信,软件控制SPI,引脚发送任意一个字节,按理来说只有开始发送时拉低片选,接受完毕拉高片选这样的波形,逻辑分析仪在中间捕捉到了好几次多余脉冲,导致通信失败,好几个引脚都是这样,是什么问题呢?下面是逻辑分析仪的截图,端口3是CS,可以看到有好几个脉冲

Image_1731253287562.png (30.86 KB )

Image_1731253287562.png

使用特权

评论回复
沙发
fox1|  楼主 | 2024-11-10 23:44 | 只看该作者
代码如下,SSI是之前硬件片选,实际已经注释掉了

Image_1731253421520.png (91.62 KB )

Image_1731253421520.png

使用特权

评论回复
板凳
fox1|  楼主 | 2024-11-11 07:57 | 只看该作者
逻辑分析仪采样率降到4M毛刺没了,数据有一二个时钟对不上,这个怎么解决呢,我发的0x03 0x02

3129c190-019c-435e-a63d-4722ed271d04.png (50 KB )

3129c190-019c-435e-a63d-4722ed271d04.png

使用特权

评论回复
地板
pssyx| | 2024-11-11 10:34 | 只看该作者
fox1 发表于 2024-11-11 07:57
逻辑分析仪采样率降到4M毛刺没了,数据有一二个时钟对不上,这个怎么解决呢,我发的0x03 0x02 ...

请检查代码!
试试直接在CW32L010F8T6 StartKit上运行LIB中的SPI 例程。

使用特权

评论回复
5
WoodData| | 2024-11-11 14:11 | 只看该作者
要等待SPI发送完成才能操作cs高

使用特权

评论回复
6
fox1|  楼主 | 2024-11-11 16:37 | 只看该作者
本帖最后由 fox1 于 2024-11-11 16:40 编辑
pssyx 发表于 2024-11-11 10:34
请检查代码!
试试直接在CW32L010F8T6 StartKit上运行LIB中的SPI 例程。
试了下官方全双工的demo,解析出来也有问题,按那个代码发送出去应该是0x01,0x02.。。。这样子

使用特权

评论回复
7
fox1|  楼主 | 2024-11-11 16:40 | 只看该作者
WoodData 发表于 2024-11-11 14:11
要等待SPI发送完成才能操作cs高

发送寄存器置1了才转读取的

使用特权

评论回复
8
qqaa123| | 2024-11-11 16:53 | 只看该作者

使用特权

评论回复
9
15871815411| | 2024-11-12 11:23 | 只看该作者
fox1 发表于 2024-11-11 16:37
试了下官方全双工的demo,解析出来也有问题,按那个代码发送出去应该是0x01,0x02.。。。这样子 ...

硬件连接:
          SPI_MASTER SCK  (PA05)-- SPI_SLAVE SCK  (PA05)
          SPI_MASTER MISO (PA03)-- SPI_SLAVE MISO (PA03)
          SPI_MASTER MOSI (PA04)-- SPI_SLAVE MOSI (PA04)
          SPI_MASTER CS   (PA02)-- SPI_SLAVE CS   (PA02)
主机与从机代码分别下到主机板、从机板中。先按下SPI从机板子的复位按键,让从机代码跑起来,接着点击逻辑分析仪采样,最后按下主机板的复位按键,运行SPI主机代码,主从机代码运行先后顺序不能变


屏幕截图 2024-11-12 111401.png (410.16 KB )

屏幕截图 2024-11-12 111401.png

使用特权

评论回复
10
fox1|  楼主 | 2024-11-12 12:45 | 只看该作者
15871815411 发表于 2024-11-12 11:23
硬件连接:
          SPI_MASTER SCK  (PA05)-- SPI_SLAVE SCK  (PA05)
          SPI_MASTER MISO (PA0 ...

手上只有一个板子,我直接接的逻辑分析仪,采样速度调到4M就没问题,采样率高了就有问题,那应该是我代码有问题,发0x01就收到0x02,
这段代码我也是按照手册写的呀,能帮我看下吗,感谢
                SPI_CS_HIGH();    SPI_InitTypeDef SPI_InitStructure = {0};
    /************************SPI Configuration***********************/
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // 双线全双工
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                      // 主机模式
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                  // 帧数据长度为8bit
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                        // 时钟空闲电平为高
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;                       // 第1个边沿采样
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                          // 片选信号由SSI寄存器控制
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; // 波特率为PCLK的8分频
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                 // 最高有效位 MSB 收发在前
    SPI_InitStructure.SPI_Speed = SPI_Speed_Low;                       // 低速SPI

    SPI_Init(CW_SPI, &SPI_InitStructure);
    SPI_Cmd(CW_SPI, ENABLE);
    uint8_t count = 5;
    // spi_init_config();
    SysTickDelay(1);
    while (count--)
    {
        SPI_CS_LOW();

        while (CW_SPI->ISR_f.TXE == 0)
        {
            __nop();
            /* code */
        }
        CW_SPI->DR = 0x01;
        while (CW_SPI->ISR_f.RXNE == 0)
        {
            __nop();
            /* code */
        }
        CW_SPI->DR;

        SPI_CS_HIGH();
        SysTickDelay(1);
        /* code */
    }

使用特权

评论回复
11
fox1|  楼主 | 2024-11-12 12:47 | 只看该作者
这是我的main文件

main.zip

3.07 KB

使用特权

评论回复
12
shushi0406| | 2024-11-13 14:51 | 只看该作者
fox1 发表于 2024-11-12 12:47
这是我的main文件

我直接用你的mian替换例程的,逻辑分析仪波形是符合代码的

使用特权

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

本版积分规则

2

主题

8

帖子

0

粉丝