SPI调试&&SPI基础知识&&SPI实际波形&&实际Demo

一、问题出现场景:

 原理可以参考链接:SPI协议详解(图文并茂+超详细) - 知乎 (zhihu.com)

1.SPI的引脚变动

二、程序内部移植注意

移植已有项目的SPI程序架构

以上引脚变动需要注意的点:

1.引脚使用的变动,比如从PA3变为PB4

2.SPI编号的变动,有的MCU可能会有三组SPI【SPI1 SPI2 SPI3】

3.SPI的时钟源是否变化,这个决定SPI 的时钟频率,正常频率设置应该为 总线/2

【原来SPI1 SPI_PSC_8】

    /* SPI2 parameter config */
    spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
    spi_init_struct.device_mode          = SPI_MASTER;
    spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;
    spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
    spi_init_struct.nss                  = SPI_NSS_SOFT;
    spi_init_struct.prescale             = SPI_PSC_16 ;
    spi_init_struct.endian               = SPI_ENDIAN_MSB;
    spi_init(SPI2, &spi_init_struct);

4.引脚变动时需要查看芯片手册,确认变动的引脚是否是特殊引脚

PA15为特殊引脚需要做重映射

void gpio_config(void) 
{ /* GPIO output */ 
  gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE); 
  gpio_pin_remap_config(GPIO_SPI2_REMAP, ENABLE); 
}

三、波形分析问题点

波形分析思路

1.CS引脚是否可以顺利的拉高拉低

2.主机发送数据时波形是否正确

3.从机发送数据时波形是否正确

  • 连接SPI的引脚到示波器对应的通道
  • 使用示波器抓捕波形
  • 进入程序进行DEG

实际波形可以参考下图:

参考链接:SPI协议详解(图文并茂+超详细) - 知乎 (zhihu.com)

【SPI有四种模式,由极性和相序决定】


四、出现该问题的反思

1.对于芯片底层配置不熟悉

主要时芯片手册的了解和引脚配置的知识存在盲区

很多引脚配置最好参考原厂配置,【这里上传了GD的资料】

2.对于SPI出现问题解决思路不清晰

检查引脚配置

检查时钟源

检查波形

3.对于时钟的概念和意义未深刻理解

【待补充,这里就总结一下SPI调试过程中的收获】

### SPI 协议波形与时序图生成 #### 什么是SPI协议? SPI(Serial Peripheral Interface)是一种同步串行通信接口,通常用于短距离通信,主要应用在微控制器和外围设备之间。它采用主从模式工作,支持全双工数据传输[^2]。 #### SPI波形与时序图的特点 SPI协议的核心特点在于其时钟信号(SCLK)、主输出从输入(MOSI)、主输入从输出(MISO),以及片选信号(SS)。这些信号共同决定了SPI的数据交换过程。具体来说: - **SCLK (Clock)**:由主机产生的时钟信号,控制数据的发送与接收速率。 - **MOSI (Master Out Slave In)**:主机到从机的数据通道。 - **MISO (Master In Slave Out)**:从机到主机的数据通道。 - **SS/CS (Slave Select / Chip Select)**:激活特定从设备的选择信号。 为了清晰展示SPI的工作机制,可以借助时序图来表示各个信号之间的关系及其变化规律[^1]。 #### 使用WaveDrom绘制SPI波形 WaveDrom是一个非常强大的工具,能够快速创建复杂的数字逻辑波形图表。以下是利用WaveDrom生成简单SPI波形的方法: ```json { "signal": [ { "name": "SCLK", "wave": "p......P......" }, { "name": "SS", "wave": "0...........1." }, { "name": "MOSI", "wave": "x.34..56..x.", "data":["Data Bit 0","Data Bit 1","Data Bit 2"]}, { "name": "MISO", "wave": "x.ab..cd..x.", "data":["Acknowledge 0","Acknowledge 1"]} ] } ``` 上述JSON配置定义了一个基本的SPI交互场景,其中包含了四个关键信号线的变化情况。通过访问WaveDrom官方网站或者集成插件至VS Code环境内运行此脚本即可得到直观的结果[^4]。 #### FPGA环境下模拟SPI操作 如果是在FPGA项目里研究SPI,则可以通过Quartus Prime软件完成仿真实验。一种常见做法就是构建Testbench测试平台,在这里设定好各种激励条件之后观察目标模块的行为表现;另一种则是运用内置Vector Waveform File(VWF)功能直接描绘期望看到的理想化曲线形态[^3]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值