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.

[参考译文] 编译器/CC2640:F_WRITE 至 SD 卡需要花费大量时间并提供节能提示?

Guru**** 2595805 points
Other Parts Discussed in Thread: CC2640

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/610824/compiler-cc2640-f_write-to-sd-card-takes-a-lot-of-time-and-tips-for-power-saving

器件型号:CC2640

工具/软件:TI C/C++编译器

各位专家、您好!

我正在使用具有 CC2640的定制板上的软件。 我们的目标是实现3天的运行时间、但是、我们只能使用3.7V 电池运行大约~13小时。  

我的代码涉及传感器控制器(SC)和 M3、其中 SC 从传感器收集数据、CPU 将数据写入 SD 卡。 通过评测、我注意到写入 SD 卡的器件需要大量时间。 具体而言、在 SC 收集288个元素并将其放入大小为288的缓冲区后、snprintf 会将 int 转换为 char 数组并写入 SD 卡。

//对于来自传感器1
snprintf 的数据(value_arr_4b、5、"%04x"、value);

//对于来自传感器2
snprintf 的数据(value_arr_8b、9、"%08x"、value); 

一个周期的整个过程(转换、写入 SD 卡)大约需要14秒才能完成!! 我是否可以做任何事情来加快这个过程?

此外、我还担心电路板的节能、人们是否可以采取任何措施来节省更多电量?

如果有任何帮助或指示、我们将不胜感激

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

    我们不提供 CC26xx BLE + SD 卡的参考、因此我不确定我在这里可以提供多少帮助。 我建议您使用总线跟踪来识别您是否以最佳方式实施 SD 卡协议。

    为了节能、示例应用配置为在不使用 MCU 时将其置于待机状态。 但是、如果您执行不必要的 CPU /外设操作、这显然会对允许 MCU 进入待机状态产生负面影响。 我还建议您检查电路板其他区域(如 IO 和外部组件)是否存在意外的电流泄漏。

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

    您好、JXS、

    感谢您的回答! 实际上、我发现了写入 SD 过程花费太多时间的原因。 每次我将缓冲区中的值转换为字符数组以写入 SD 卡时、我都会调用 f_write 和 f_sync。 在缓冲区中写入所有值后调用 f_sync 将时间缩短一半(~8s)、我想如果我设法将整个缓冲区从 uint32_t 转换为 char 并且只调用 f_write 一次、它将进一步节省更多时间。  

    在我们的软件中、我们有一个用于传感器控制器中断的信标、用于通知 SC 中的缓冲区已满。 该过程将是:

    SC 收集数据-> SC 中断(信标)->将数据复制到 SD 卡 

    如果我在最后一步之后(通过 Task_sleep (n)?)将 MCU 置于 STANY 模式、中断会将其唤醒还是需要执行任何额外配置?

    此致、

    Henry

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

    听起来好像您在正确的路径上。

    在睡眠/待机方面、我不建议使用任务睡眠强制待机。 通常情况下、您将无法实现预期的结果。 最好只完成您的任务并让它在 SEM 上挂起。 然后、RTOS 将自动将 MCU 置于待机状态。

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的 JXS、

    写入 SD 过程已经过优化、几乎达到了我们的理想目标。 它现在在~1秒内写入一个~8k 的缓冲器。

    您知道什么方法可以测试 MCU 是否处于待机模式? 我们的软件确实会挂起来自传感器控制器的信标(当数据缓冲区已满时)、因此我认为在完成任务(写入 SD 卡)时应该进入睡眠状态。 此外、是否有任何方法可以检查是否有任何干扰 MCU 并防止其进入睡眠状态?

    此致、
    Henry