乐鑫技术交流
直播中

罗星

8年用户 1612经验值
擅长:模拟技术
私信 关注
[问答]

如何使用HSPI与外部设备进行通信?

我正在尝试使用 HSPI 与外部设备进行通信。为此,我使用 eor-spi-master 库。
这些是下载驱动程序的链接:https://github.com/kanflo/eor-spi

问题是,当我发送/接收超过 8 个字节时,字节之间的时间会增长到 1,5 秒的事务之间的延迟。
我尝试在 nonos 中做同样的事情,而且一切都很好,所以我想问题源于 RTOS。


回帖(1)

李莉

2024-7-12 18:01:46
要使用 HSPI 与外部设备进行通信,您需要遵循以下步骤。在这个过程中,我们将使用 eor-spi-master 库,并尝试解决您提到的延迟问题。

1. 首先,确保您已经正确安装了 eor-spi-master 库。从您提供的链接克隆或下载库,并将其添加到您的项目中。

2. 在您的代码中,包含所需的头文件:
   ```cpp
   #include
   ```

3. 初始化 HSPI。在您的程序中,找到合适的位置(例如在 `app_main()` 函数中)来初始化 HSPI。使用以下代码:
   ```cpp
   eor_spi_init(VSPI_HOST, 8, 1, 0, 0, 16);
   ```
   这里,`VSPI_HOST` 是 HSPI 端口的名称,`8` 是数据位宽,`1` 是极性,`0` 是相位,`0` 是空闲状态,`16` 是最大时钟频率。

4. 发送和接收数据。使用 `eor_spi_transfer()` 函数来发送和接收数据。例如:
   ```cpp
   uint8_t data_to_send[10] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A};
   uint8_t data_received[10];

   eor_spi_transfer(VSPI_HOST, data_to_send, data_received, sizeof(data_to_send));
   ```

5. 检查延迟问题。您提到的延迟问题可能与 RTOS 调度或任务优先级有关。尝试以下方法来解决这个问题:

   a. 确保您的 HSPI 通信任务具有适当的优先级。在 FreeRTOS 中,您可以使用 `xTaskCreate()` 或 `xTaskCreatePinnedToCore()` 函数创建任务,并设置优先级。

   b. 检查您的代码中是否有任何可能导致阻塞或延迟的长时间运行的任务。如果有,请考虑将它们拆分成更小的任务或使用异步操作。

   c. 使用 FreeRTOS 提供的调试工具,如 `xTaskGetSchedulerState()` 和 `vTaskList()`,来检查任务的状态和优先级。这将帮助您找到可能导致延迟的问题。

6. 如果问题仍然存在,您可以尝试在非 RTOS 环境中测试您的代码,以排除硬件或驱动程序问题。

通过遵循这些步骤,您应该能够使用 HSPI 与外部设备进行通信,并解决您遇到的延迟问题。
举报

更多回帖

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