This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM2612:AM2612 SPI 读取并行问题

Guru**** 2914110 points

Other Parts Discussed in Thread: AM2612

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1649891/am2612-am2612-spi-read-parallel-question

器件型号: AM2612

尊敬的专家:

 

我要找客户。

客户的应用场景:客户需要使用 2 个 SPI 模块来读取 6 个通道的磁性编码器结果。 电机控制算法要求在 30µs 内完成读取。 每个 SPI 模块处理 3 个片选(2 个硬件芯片选择+ 1 个软件芯片选择)、所有操作都必须在同一 ADC 中断内完成、这意味着 SPI 无法使用中断。

客户测试了 MCAL 和 SDK:

  • 单次 6 字节 SPI 读取需要 25µs (MCAL) 和 7µs (SDK)
  • 总线上的实际数据传输时间为 5µs

初步结论是只有 SDK 能够满足要求。 但是、即使使用 SDK、 按顺序读取 6 个通道仍然不够 — 为了满足时序要求,需要每次并行读取 2 个通道

 

客户的问题是: SDK 是否支持 同时在两个 SPI 硬件单元上发起通信 (不使用中断)、然后 进行轮询以检查两个通道的完成状态? 这将实现 2×3 SPI 读取、理论总时间仅高于 21µs、可以满足要求。

 

您能帮我们检查一下、给我们演示一下吗?

 

此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kita:

    感谢您对客户应用要求的详细描述。

    是的、AM2612 SDK 可以支持在两个硬件模块上通过基于轮询的完成检查来同时进行 SPI 通信。 以下是解决方法:

    并行 SPI 实现方法:

    1. 独立配置两个 SPI 模块 — 使用相同的时序参数设置 SPI0 和 SPI1(或您所选的模块)、以处理每个片选 (2 个硬件 CS + 1 个软件 CS)。

    2. 同时启动传输 — 使用 SDK 的非阻塞传输 API 在两个 SPI 模块上启动背对背通信、而无需等待完成:

      MCSPI_transfer(spi0Handle, &spi0Transaction);
      MCSPI_transfer(spi1Handle, &spi1Transaction);
    3. 轮询完成 — 检查紧密环路中两个模块的传输状态寄存器:

      while(!MCSPI_isTransferComplete(spi0Handle) || 
            !MCSPI_isTransferComplete(spi1Handle));
    4. 对剩余的片选重复 — 执行此图形三次 (每个片选组一次)以完成所有 6 次通道读取。

    预期时序:

    • 单个 6 字节传输:~5µs 总线时间+~2µs 开销= 7µs
    • 并行 2 通道读取:每次迭代~7µs× 3 次迭代=~21µs TOTAL
    • 这应满足您的 30µs 要求并留有裕度

    建议:

    • 确保两个 SPI 模块均由同一个同步源提供时钟
    • 如果可用、则使用 DMA 进一步减少 CPU 开销、尽管轮询应该足够了
    • 验证 CS 时序是否符合您的磁性编码器规格

    请告诉我您正在使用哪个 SDK 版本、如果您在实现并行 SPI 配置和轮询机制方面需要其他帮助、请告知我。

    此致、
    Zackary Fleenor