蓝牙技术
直播中

laisvl

8年用户 1027经验值
私信 关注
[问答]

CYW20829调试SPI通信时,遇到的两个问题求解

我们这边使用BLE(CYW20829)作为SPI slave和MCU(TC387)作为SPI master,调试SPI通信时,遇到两个问题: 1.
1.slave接收来自master的数据,rx中断不触发。
SPI 初始化如下: SPI 初始化如下



代码段参考:https://infineon.github.io/psoc6hal/html/group__group__ hal__spi .html文档中的Snippet4:SPI 事件中断
代码修改基于例程:https://github.com/Infineon/mtb-example-hal-spi-slave#readme

尝试:调试过程中发现,slave 使用 cyhal_spi_slave_write时,rx中断正常触发,看代码该函数调用了 cyhal_spi_transfer_async。
问题:只有slave一直调用cyhal_spi_transfer_async进行读/写操作,rx中断才正常触发?
解决方案:有没有配置可以让master写入数据时,slave就触发SPI rx中断?

2.slave使用函数cyhal_spi_slave_write向master发送数据时,没有等待master拉低片选取并生成时钟信号,导致接收数据异常。

尝试:使用Cy_GPIO_读取CS引脚,直到该引脚被拉低。
问题:容易死循环,读取引脚数据一直为高电平。
解决方案 1:能否帮忙调试出一个该方案可行的代码?
解决方案2:是否有其他slave write函数,是等待master拉低片选并生成时钟信号,才发送数据?


回帖(1)

ejlwj

2024-5-28 16:05:24
在您的问题中,您提到了两个主要问题:1. slave接收来自master的数据时,rx中断不触发;2. 使用cyhal_spi_slave_write时,rx中断正常触发。我将分别针对这两个问题提供解决方案。

问题1:rx中断不触发

可能的原因及解决方案:

1.1 SPI初始化问题:请确保您已经正确初始化SPI接口。检查SPI初始化代码,确保所有必要的参数都已设置,例如时钟极性、相位、数据宽度等。

1.2 中断配置问题:请检查您的中断配置是否正确。确保已经启用了SPI的中断,并正确配置了中断优先级。

1.3 硬件连接问题:检查SPI硬件连接是否正确,包括SPI数据线、时钟线和片选线。确保连接稳定且无短路或断路。

1.4 驱动问题:确保您使用的是最新的驱动程序和库文件。如果可能,请尝试升级到最新版本。

问题2:使用cyhal_spi_slave_write时,rx中断正常触发

可能的原因及解决方案:

2.1 代码逻辑问题:请检查您的代码逻辑,确保在调用cyhal_spi_slave_write之前,已经正确初始化了SPI接口,并配置了相关的中断。

2.2 异步传输问题:cyhal_spi_transfer_async函数用于异步传输数据。请确保您已经正确地处理了异步传输的回调函数,以便在接收到数据时触发中断。

2.3 事件处理问题:请检查您的事件处理代码,确保在接收到数据时能够正确地触发中断。您可以参考以下示例代码:

```c
cy_rslt_t result;
uint16_t data_received;
uint16_t data_to_send = 0x1234;

cyhal_spi_slave_write(spi, &data_to_send, sizeof(data_to_send), &result);

if (result == CY_RSLT_SUCCESS) {
    // 处理接收到的数据
    cyhal_spi_slave_read(spi, &data_received, sizeof(data_received), &result);
}
```

总结:

针对问题1,请检查SPI初始化、中断配置、硬件连接和驱动程序。针对问题2,请检查代码逻辑、异步传输和事件处理。希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我能更好地帮助您。
举报

更多回帖

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