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.

[参考译文] TMS320F28P650DK:使用 TMS320F28P650DK9 上的 CPU2 进行 SD 日志记录

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1635748/tms320f28p650dk-sd-logging-using-cpu2-on-tms320f28p650dk9

器件型号: TMS320F28P650DK

尊敬的 TI:

我尝试在 F28P65x 内核上使用 CPU2 实现 SD 卡日志记录 — 主要目标是向空白文本文件写入一条简单消息。

我已成功使用 TI 示例“sd_fat32_exFAT.c"将“将简单消息写入空白文本文件(使用 CPU1)。

我还成功地遵循了双核示例:“led_ex1_c28x_dual_blinky_cpu1.c"和“和“led_ex1_c28x_dual_blinky_cp2.c"。“。

我的理解是 CPU2 需要由 CPU1 启动 — 因此到目前为止,我的方法是修改双 LED 示例、方法是保留启动逻辑但将 SD 写入逻辑复制到 CPU2 上。  

然而,当我尝试 f_open () 时,我总是会得到 f_not_ready 作为我返回的错误代码。 我知道我的 pinMux 是正确的、因为我已成功使用 CPU1 写入。

我已附上修改 SD 写入 LED 示例的尝试。

led_ex1_c28x_dual_blinky_cpu1.c 

led_ex1_c28x_dual_blinky_cp2.c 

感谢您提供的任何建议、  

Samuel。

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

    您好 Samuel、

    您出现该错误的原因可能是 CPU2 当前没有您尝试使用的外设的所有权。 对于此 SD 卡日志记录、您是否尝试使用 SPI 外设?  

    此致、
    Aj Favela.  

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

    尊敬的 Favela:

    是的、交换使用 SPI。 在我所附的代码中、我使用 CPU1 代码将 SPI 所有权分配给 CPU2(以及引导 CPU2)。 然后、在 CPU2 代码上执行 SPI 配置和 SD 写入逻辑。

    谢谢、Samuel。

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

    您好 Samuel、

    对延迟的回复表示歉意。

    必须通过 CPU1 调用 GPIO_setControllerCore 函数、因为只有它有权修改这些寄存器
    如果您在进行此修复后仍然遇到问题、请告诉我。
    此致、
    Arnav
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Arnav:

    我遵循了您的建议、但我仍然似乎收到 FR_not_ready。 我随附了最新代码 (sd_card_cpu1.c 和 sd_card_cp2.c)

    我发现通过运行这个简单的代码、CPU2 能够对 SPI/FIFO 寄存器进行一些控制、其中我验证 rxFifoActive = true:

    volatile bool rxFifoActive = false;
    
    // trigger transfer
    SPI_writeDataBlockingFIFO(SPID_BASE, 0xFF << 8);
    
    uint32_t timeout = 100000;
    while(SPI_getRxFIFOStatus(SPID_BASE) == 0 && timeout--)
    {
    }
    
    if(timeout != 0)
    {
    rxFifoActive = true;
    }

    e2e.ti.com/.../sd_5F00_card_5F00_cpu1.ce2e.ti.com/.../sd_5F00_card_5F00_cpu2.c

    任何建议都很感谢!

    谢谢、

    Samuel。

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

    尊敬的 Arnav:

    更新:我使用 CPU2 成功完成了 SD 日志、结果显示我使用了修改后的 sdspi.c、该代码中断了 SPI 事务!

    我将共享我的工作代码。

    感谢大家的帮助!

    e2e.ti.com/.../2451.sd_5F00_card_5F00_cpu1.ce2e.ti.com/.../6175.sd_5F00_card_5F00_cpu2.c