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:拔下/插入 SDCard 会导致无法识别文件/目录

Guru**** 2589280 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/782928/msp430fr5994-unplugging-plugging-sdcard-causes-files-dir-not-to-be-recognized

器件型号:MSP430FR5994

拔下并插入 sdcard 会导致 SDCARD 库函数意外失败。 我怀疑 SDCard 状态会恢复到不使用 SPI 接口的本机行为。 我尝试 使用 sdcard.c 库中的 SDCardLib_unInit()和 SDCarLib_init()函数重新初始化接口,但没有成功。 是否有人遇到了这个问题并获得了解决方案?  

例如,当没有拔下/重新拔插 SDCard 时,此代码起作用,但在再次拔下/插入 SDCard 时失败。  

//在根目录下创建目录
RC = SDCardLib_creeDirectory (&sdCardLib、"data_log");
如果(RC =FR_EXISTECT){//FR_EXISTECT 是名称冲突、则对象已存在
//报告成功;
} 如果(RC!= FR_OK){
SDCardLib_unInit (&sdCardLib);
MODE = 0;
//报告失败
返回;
}
//将时间戳写入日志文件
RC = f_open (&fil、文件名、fa_write | fa_open_existing);
如果(RC){
f_close (&fil);
SDCardLib_unInit (&sdCardLib);
MODE ="0";
返回;
}

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

    感谢您发帖。 我将尝试使用我的 LaunchPad 重复此问题、稍后再返回给您。

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

    我认为 SDCard 未正确初始化。 插回插卡后、默认使用"SD Bus"、而不是 SPI 接口。 。 我找到了一种解决方案、即获取对连接到 SDCard 的 SPI 接口总线的控制并将输出拉高。 等待 SDCard 识别新模式、然后重新插入接口。 它似乎起作用。 真正的解决方案可能是将其放入 HAL 层。  感谢 BR 的努力。(我无法告诉您、您总是尽力帮助我、我非常感激)。 我现在已经成功连接了摄像头、可以将照片存储 到 SDCard 中。  

    对连接 SDCard 的 SPI 接口进行//抓取控制并重新初始化
    P1SEL0 &=~GPIO_PIN6;P1SEL1 &=~GPIO_PIN6;
    P1SEL0 &=~GPIO_PIN7;P1SEL1 &=~GPIO_PIN7;
    P2SEL0 &=~GPIO_PIN2;P1SEL1 &=~GPIO_PIN2;
    GPIO_setOutputHighOnPin (GPIO_PORT_P1、BIT6);
    GPIO_setOutputHighOnPin (GPIO_PORT_P1、BIT7);
    GPIO_setOutputHighOnPin (GPIO_PORT_P2、BIT2);
    GPIO_setAsOutputPin (GPIO_PORT_P1、BIT6);
    GPIO_setAsOutputPin (GPIO_PORT_P1、BIT7);
    GPIO_setAsOutputPin (GPIO_PORT_P2、BIT2);
    PMM_unlockLPM5 ();
    _DELAY_CYCLES (900);
    
    
    //配置 SDCard CS 引脚
    GPIO_setOutputHighOnPin (GPIO_PORT_P4、BIT0);
    GPIO_setAsOutputPin (GPIO_PORT_P4、BIT0);
    
    //将 SDCard 接口插入 SDCard 库
    SDCardLib_init (&sdCardLib、&sdIntf_MSP430FR5994LP);
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    void SDCard_init (void)
    {
    对连接 SDCard 的 SPI 接口进行//抓取控制并重新初始化
    P1SEL0 &=~GPIO_PIN6;P1SEL1 &=~GPIO_PIN6;
    P1SEL0 &=~GPIO_PIN7;P1SEL1 &=~GPIO_PIN7;
    P2SEL0 &=~GPIO_PIN2;P1SEL1 &=~GPIO_PIN2;
    GPIO_setOutputHighOnPin (GPIO_PORT_P1、BIT6);
    GPIO_setOutputHighOnPin (GPIO_PORT_P1、BIT7);
    GPIO_setOutputHighOnPin (GPIO_PORT_P2、BIT2);
    GPIO_setAsOutputPin (GPIO_PORT_P1、BIT6);
    GPIO_setAsOutputPin (GPIO_PORT_P1、BIT7);
    GPIO_setAsOutputPin (GPIO_PORT_P2、BIT2);
    PMM_unlockLPM5 ();
    _DELAY_CYCLES (900);
    
    //为 UCB0CLK 配置引脚
    GPIO_setPeripheralModuleFunctionInputPin (
    GPIO_PORT_P2、
    GPIO_PIN2、
    GPIO_secondary 模块功能
    ); 

    ……μ A //其余 SDCard_initiio 代码...

    我将"grab control of the SPI interface to SDCard……" HAL_SDcard.c 层、它可以正常工作。