蓝牙技术
直播中

萧蔼晨

9年用户 1073经验值
私信 关注
[问答]

请问在CYBLE-333074-EVAL-M2B中SPI应使用哪些引脚?

您好,我正在使用模块 CYBLE-333074-EVAL-M2B
,我在数据表中看到可以使用 SPI,我想通过 SPI 将模块 CYBLE-333074-EVAL-M2B 与外部闪存通信
,您能告诉我可以使用哪些引脚来使用 SPI 吗?

能否提供一个在 CYBLE-333074-EVAL-M2B 模块中使用 spi 的代码示例?

回帖(1)

王伟

2025-7-7 17:17:44

在 CYBLE-333074-EVAL-M2B 模块中使用 SPI 与外部闪存通信,引脚选择和配置如下:


推荐 SPI 引脚分配




  1. SPI1(主模式)引脚(通过软件配置,非固定物理位置):



    • MOSI(主出从入)P3.0 (可编程为任意未占用 GPIO)

    • MISO(主入从出)P3.1 (可编程为任意未占用 GPIO)

    • SCLK(时钟线)P3.2 (可编程为任意未占用 GPIO)

    • CS(片选)P3.3 (手动控制或通过硬件 CS 功能)




  2. 其他可用 GPIO(确保与板载功能无冲突):






⚠️ 注意事项



  • 所有 SPI 引脚需通过 SCB 组件配置为软件可编程引脚。

  • 验证选择的引脚是否被板载调试器或传感器占用(避免冲突)。

  • 外部闪存的电压等级需与模块 I/O 电压匹配(通常为 1.8V/3.3V)。



代码示例(基于 PSoC Creator)


以下代码演示 SPI 初始化和读写操作(以 Winbond W25Q16 闪存为例):


#include "project.h"
#include

#define SPI_CS_PIN P3_3  // 自定义片选引脚
#define DUMMY_BYTE 0xA5  // 空操作字节
#define READ_CMD 0x03    // 闪存读取指令

void SPI_Init(void) {
    // 配置 SPI1 为主机模式,时钟频率 1 MHz
    Cy_SCB_SPI_Init(SPI1_HW, &SPI1_config, NULL);
    Cy_SCB_SPI_Enable(SPI1_HW);

    // 初始化片选引脚
    Cy_GPIO_Pin_Init(SPI_CS_PORT, SPI_CS_PIN, &CY_GPIO_PIN_OUTPUT_STRONG);
    Cy_GPIO_Write(SPI_CS_PORT, SPI_CS_PIN, 1); // 初始拉高
}

// 从闪存读取数据
void Flash_Read(uint32_t addr, uint8_t *buffer, uint16_t len) {
    uint8_t cmd[] = {
        READ_CMD,
        (uint8_t)(addr >> 16), // 地址高位
        (uint8_t)(addr >> 8),  // 地址中位
        (uint8_t)(addr)        // 地址低位
    };

    // 拉低 CS 开始通信
    Cy_GPIO_Write(SPI_CS_PORT, SPI_CS_PIN, 0);

    // 发送读命令和地址
    Cy_SCB_SPI_WriteArray(SPI1_HW, cmd, 4);

    // 接收数据
    for (uint16_t i = 0; i < len; i++) {
        buffer[i] = Cy_SCB_SPI_Read(SPI1_HW);
    }

    // 拉高 CS 结束
    Cy_GPIO_Write(SPI_CS_PORT, SPI_CS_PIN, 1);
}

int main(void) {
    CyGlobalIntEnable;
    SPI_Init();

    uint8_t data[16];
    Flash_Read(0x000000, data, sizeof(data)); // 从地址0读取16字节

    while (1);
}

关键步骤




  1. 硬件连接



    • 连接 MOSI/MISO/SCLK/CS 到闪存对应引脚。

    • 确保共地(GND)并匹配电平(必要时用电平转换器)。




  2. 软件配置



    • 在 PSoC Creator 中拖放 SCB(SPI) 组件。

    • 设置模式 Master、时钟频率、数据位宽(通常 8-bit)。

    • 手动控制片选(CS)以获得更大灵活性。




  3. 验证通信



    • 发送闪存的 JEDEC ID 命令(如 0x9F),验证返回的厂商 ID。

    • 确保时序符合闪存规格书要求。




参考文档



  1. CYBLE-333074-EVAL-M2B 用户手册

  2. PSoC 6 SCB 寄存器手册

  3. SPI Master 驱动 API 文档


通过上述配置,您可实现稳定的 SPI 通信。根据实际闪存型号调整命令和时序。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分