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.

[参考译文] CC3200:从睡眠模式唤醒后 SD 卡出现问题。

Guru**** 2812305 points

Other Parts Discussed in Thread: CC3200

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/991638/cc3200-issue-with-sd-card-after-waking-up-from-sleep

器件型号:CC3200

您好!

快速说明:从低功耗深度睡眠模式唤醒后、我无法从 SD 卡连接(安装、打开、读取、写入或获取信息)。 在进入 LPDS 模式之前、SD 工作正常、我可以与其进行交互。

我要做的是:

在我的项目中、我将收集数据并将其保存在 SD 卡中、为此、我将:

1-初始化:

  +安装 SD 卡

  +创建/打开几个文件

2 -器件从传感器读取数据、它将通过写入 文件来存储数据

3-设备进入低功耗深度睡眠模式

4-几分钟后唤醒以重复步骤2 (从传感器读取数据)

在步骤4中、我无法写入 SD 卡、我甚至尝试再次安装 SD 卡、但我收到错误代码13 ("没有有效的 FAT 卷")

所有文件系统功能(读取、写入、获取信息等)都不起作用、器件将在那里停止(我甚至激活了看门狗、但器件不会重新启动、只是在该功能中停止、不会响应任何中断(单击按钮))、 如果从器件中删除 LPDS 功能、并在等待几分钟后将其替换、则器件工作正常。 我尝试在进入 LPDS 之前取出 SD 卡并关闭所有文件、同样、我面临同样的问题、器件将无法使用 SD 卡、并且将在 f_stat 中停止(冻结) (我使用该函数从 SD 卡获取有关我要写入的文件的信息)。
我想我在睡觉之前没有什么应该做的事情、但我不能弄清楚、有些我希望有人能帮我解决这个问题

谢谢你

哈比卜

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

    您好、Habib、

    当您在 CC3200上进入 LPDS 模式时、您将丢失许多外设的状态、包括 SD 主机外设。 在重新安装 SD 卡时、您是否正在执行 SD 主机外设的整个重新初始化?

    此致、

    Michael

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

    您好!

    每次器件唤醒以初始化 SD 主机外设时、我都会调用此函数:

    void vSdCardCfg(void)
    {
    	MAP_PinTypeSDHost(ucPin_SD_DO, PIN_MODE_8);
    	MAP_PinTypeSDHost(ucPin_SD_CLK, PIN_MODE_8);
    	MAP_PinTypeSDHost(ucPin_SD_CMD, PIN_MODE_8);
    	MAP_PinDirModeSet(ucPin_SD_CLK,PIN_DIR_MODE_OUT);
    	MAP_PinConfigSet(ucPin_SD_DO,PIN_STRENGTH_4MA, PIN_TYPE_STD_PU);
    	MAP_PinConfigSet(ucPin_SD_CMD,PIN_STRENGTH_4MA, PIN_TYPE_STD_PU);
    	MAP_PRCMPeripheralClkEnable(PRCM_SDHOST,PRCM_RUN_MODE_CLK);
    	MAP_PRCMPeripheralReset(PRCM_SDHOST);
    	MAP_SDHostInit(SDHOST_BASE);
    	MAP_SDHostSetExpClk(SDHOST_BASE,MAP_PRCMPeripheralClockGet(PRCM_SDHOST),15000000);
    }

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

    您好、Habib、

    您的初始化代码看起来正确,在启动时以及 LDP 之后运行该 vSdCardCfg()函数是您应该执行的操作,因此很高兴看到实现了该操作。

    此时、没有任何明显的因素会导致 LPDS + SD 外设、因此需要进行一些实验。

    我建议您在卸载 SD 卡之后、进入 LPDS 之前尝试执行 PRCMPeripheralReset (PRCM_SDHOST)、看看这是否有用。

    您还可以使用逻辑分析仪来检查发送到 SD 卡的 SD 信号、并查看当您进入和退出 LPDS 时这些 SD 信号会发生什么情况。

    如果您执行这些步骤、您会观察到什么?

    此致、

    Michael

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

    您好!

    我测试了您的建议、但运气不好、我仍然无法使它在唤醒后正常工作。

    这是我迄今为止测试过的内容:

    在睡眠之前(在调用此函数"MAP_PRCMLPDSEnter()之前),关闭所有打开的文件并取出 SD 卡

    睡眠后(器件唤醒时),调用 vSdCardCfg()以重新配置 SD 卡配置,然后再次装入 SD 卡并再次打开文件(至少是我尝试的操作)。 但这对我不起作用

    您能告诉我、如果我每次唤醒器件时都需要重新安装并重新打开所有文件、或者我可以在进入睡眠模式之前打开所有文件、这样我就不需要再次打开它们了吗?

    此致、

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

    您好!

    遗憾的是、在 LPDS 期间、您不可能简单地保持所有文件打开。 这是因为在 LPDS 中、处理器状态和外设状态丢失、需要重新加载和初始化。 由于这将导致 SD 主机外设无法预测地运行、因此您需要在进入 LPDS 之前关闭文件。

    我很好奇、如果您使用休眠而不是 LPDS、您是否仍然会遇到这些问题? 您可以使用以下代码进入休眠模式:

    		MAP_PRCMHibernateIntervalSet(SLEEP_TIME);
    		MAP_PRCMHibernateWakeupSourceEnable(PRCM_HIB_SLOW_CLK_CTR);
    		MAP_PRCMHibernateEnter();
    

    此致、

    Michael

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

    您好、Michael、

    首先、感谢您的帮助、

    我已经实现了休眠模式、通过点击按钮关闭和打开器件、器件在从休眠模式唤醒后工作正常(我将代码更改为使用计时器作为唤醒源) 但我认为这不会有所帮助、因为器件只需重新初始化固件并重新加载代码、然后从头开始执行(器件将重新启动) 但与 LPDS 不同、器件将从特定点唤醒以运行 init 函数、以重新配置该函数中提到的所有外设。

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

    您好!

    经过几次测试后、我设法使其正常工作、我认为问题是器件正在连续睡眠(我是说、器件将在1秒后从 LPDS 唤醒以执行操作(不到0.5秒)、然后再次进入睡眠状态) 这会导致问题、因为器件找不到安装 SD 卡并打开文件的时间、并且在进入睡眠模式之前、我需要解压并关闭文件。
    感谢你的帮助。

    此致、

    哈比卜