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.

[参考译文] MSP430FR5994:将 LaunchPad#39;s SD 卡与 SLAA281B 配合使用

Guru**** 2589280 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/724457/msp430fr5994-using-the-launchpad-s-sd-card-with-slaa281b

器件型号:MSP430FR5994

我已"成功"使用 开箱即用代码将数据写入 SD 卡。  程序尝试执行循环、在循环中它将获取数据、将其写入 SD 卡并再次获取数据、持续10次、数据集。  写入速度不必太快、因为数据是获取的、然后在获取数据后 写入一组数据、然后再获取下一组数据 、我在示例中仅使用了代码。  

问题、我第一次执行程序时、它会执行10个数据收集并写入10个文件、每次写入一个文件。

再执行几次后、要么使用 按钮复位、甚至通过断开电源来完成 POR 以重新启动程序、下次执行时、迟早 只写入7个文件。  下一次尝试写入的内容可能会更少。  当"程序"挂起时、它确实会跟踪它应该写入的日志文件编号、因为下次写入时、日志文件编号会递增 到之前应该写入的文件编号之上、而该文件编号会丢失。   在某个点经过多个周期后、甚至不会使用复位按钮或完成 POR 来尝试重新启动、从而获取或写入一组数据。

我增加了堆栈和堆大小、只是尝试一些操作、但这并不起作用、在问题重新出现之前、10个成功文件的数量似乎没有改变。

要使其返回到运行位置、我重新加载程序。  我还注意到、如果每次写入10个文件时、我都会删除卡并删除10个文件、然后删除并重新加电、似乎会在问题重新出现之前继续多次、但是、这种情况迟早会发生。  它会记住最后写入的文件编号、并开始正确地对新日志文件进行编号、从它知道的最后一个文件编号开始递增、即使它不再在卡上。  所有这些似乎都是有效的。

我在开箱即用代码中看到、每次通过时:

它会检查卡是否已安装。

它会检查是否有目录。

我想、它会检查并读取文件名、并以某种方式使用它、或许可以知道对下一个日志文件进行编号的内容

尽管如此、即使我删除了所有以前的日志文件、它仍然知道从何处正确开始编号、因此它必须将该信息存储在其他位置。  因此 、再说一次、很多工作 正常。  我尝试找到存储此文件的位置、因为可能是该区域存在问题。

很抱歉、请长时间 wined。  我单步执行开箱即用的代码、执行所有这些"操作"以写入卡、其中许多我不理解/识别命令、而且它在所包含的文件之间跳转很多、我会丢失这些文件。

如果有任何帮助,将不胜感激

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

    您是说您使用开箱即用代码、问题是否相同? 还是问题仅发生在从开箱即用代码修改的代码中?

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

    我找到了悬挂它的东西。  我没有尝试弄清原因、因为我不需要这部分开箱即用代码。  最初、我只截掉了导致程序问题的开箱即用代码部分、当时我发现了这些代码。  我这样做是为了尝试而不是制造额外的问题、但这当然意味着您可以在进行额外测试时发现其他问题。

    问题的原因是:

     //读取目录和文件


       RC = SDCardLib_getDirectory (&sdCardLib、"data_log"、dirs、&dirNum、文件、 fileNum);

    在子例程中:StoreTimeStampSDCard()

    不知道为什么有时不返回、但我将确保在启动程序之前卡上有所需的目录、因此我不需要此目录并将其注释掉。  现在、该程序将存储255个数据日志、受以下限制:

    uint8_t numLogFiles = 0;

    现在255已经足够了、因此我不会开始愚蠢地将其更改为8位以外的位。  可能只需要一条语句、否则可能会导致混乱。  那么,越好,越好的敌人就越好。

    感谢大家的帮助。

     Jerry