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.

[参考译文] RTOS/MSP432P401R:SPI + SD 卡错误

Guru**** 2581345 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/613214/rtos-msp432p401r-spi-sd-card-error

器件型号:MSP432P401R

工具/软件:TI-RTOS

您好!

我有一个项目需要通过 SPI 读取一些数据、而不是将其写入 SD 卡。

从 SPI 读取有效、也可以(单独)写入 SD 卡。

问题是、在初始化 SD 卡后、我无法正确读取 SPI 传感器的数据。

如果我不调用 mount 函数、我能够正常读取数据。 如果我调用 mount 函数、则 SPI 数据会很奇怪。  

void mount(){
/*安装并注册 SD 卡*/
SDSPI_Params_init (sdspiParams);
sdspiHandle = SDSPI_open (Board_SDSPI0、drive_NUM、&sdspiParams);
if (sdspiHandle == NULL){
System_printf ("启动 SD 卡时出错\n");
system_flush();
while (1);
} 否则{
System_printf ("已安装驱动器%u、驱动器_NUM);
system_flush();
}
} 

有什么帮助?

版本:
Simplelink 1.30

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

    您好!

    [引用 user="user4504050"]问题是,在初始化 SD 卡后,我无法正确读取 SPI 传感器的数据。

    您好像 使用 相同的 SPI 接口与 SPI 传感器和 SD 卡通信、是否可以在以下设备之间共享 SPI 连接:

    MSP432和传感器

    MSP432和 SD 卡

    此外、请共享传感器和 SD 卡的 SPI 初始化代码。

     谢谢、

      David

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

    我唯一改变的是:

    CONST SDSPIMSP432_HWAttrsV1 sdspiMSP432HWAttrs[MSP_EXP432P401R_SDSPICOUNT]={
    
    {
    
    /* CLK、MOSI 和 MISO 端口和引脚*/
    
    
    
    baseAddr = EUSCI_B0_BASE、
    
    时钟源= EUSCI_B_SPI_CLOCKSOURCE_SMCLK、
    
    sckPin = SDSPIMSP432_P3_5_UCB0CLK、
    
    .somiPin = SDSPIMSP432_P3_7_UCB0SOMI、
    
    simoPin = SDSPIMSP432_P3_6_UCB0SIMO、
    
    /*芯片选择端口和引脚*/
    
    csPin = SDSPIMSP432_P5_1_CS
    
    }
    
    }; 

    由此:

    CONST SDSPIMSP432_HWAttrsV1 sdspiMSP432HWAttrs[MSP_EXP432P401R_SDSPICOUNT]={
    {
    /* CLK、MOSI 和 MISO 端口和引脚*/
    
    baseAddr = EUSCI_B0_BASE、
    时钟源= EUSCI_B_SPI_CLOCKSOURCE_SMCLK、
    sckPin = SDSPIMSP432_P1_5_UCB0CLK、
    .somiPin = SDSPIMSP432_P1_7_UCB0SOMI、
    simoPin = SDSPIMSP432_P1_6_UCB0SIMO、
    
    /*芯片选择端口和引脚*/
    csPin = SDSPIMSP432_P4_6_CS
    }
    } 

    之后、我注意到 SPI0从配置如上的 SD 卡读取数据。

    SPI 初始化(传感器/RAM..)

    //*********
    //@摘要:init SPI
    //@param:none
    //@return:none
    //*********
    void FRAM_Init_SPI (){
    
    SPI_Params spiParams;
    
    /*使用从模式初始化 SPI 句柄*/
    SPI_Params_init (&spiParams);
    spiParams.frameFormat = SPI_POL0_PHA1;
    
    masterSpi = SPI_open (Board_SPI0、&spiParams);
    if (masterSpi == NULL){
    System_abort ("初始化 SPI\n"\n 时出错);
    system_flush();
    } 否则{
    system_printf ("SPI 已初始化\n"\});
    system_flush();
    }
    
    } 

    SD 卡初始化...

    /*安装并注册 SD 卡*/
    SDSPI_Params_init (sdspiParams);
    sdspiHandle = SDSPI_open (Board_SDSPI0、drive_NUM、&sdspiParams);
    if (sdspiHandle == NULL){
    System_printf ("启动 SD 卡时出错\n");
    system_flush();
    while (1);
    } 否则{
    System_printf ("已安装驱动器%u、驱动器_NUM);
    system_flush();
    } 


    它的缝隙与安装 SD 卡后的缝隙类似、SPI0从 SD 卡而不是 SPI0 (1_7)读取 MISO (3_7)。

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

    您好!

     请尝试更改 SDSPIMSP432_HWAttrsV1 sdspiMSP432HWAttrs 以使用 EUSCI_B2_base。

    CONST SDSPIMSP432_HWAttrsV1 sdspiMSP432HWAttrs[MSP_EXP432P401R_SDSPICOUNT]={
    {
    baseAddr = EUSCI_B2_base、
    时钟源= EUSCI_B_SPI_CLOCKSOURCE_SMCLK、
    
    /* CLK、MOSI 和 MISO 端口和引脚*/
    sckPin = SDSPIMSP432_P3_5_UCB2CLK、
    .somiPin = SDSPIMSP432_P3_7_UCB2SOMI、
    simoPin = SDSPIMSP432_P3_6_UCB2SIMO、
    
    /*芯片选择端口和引脚*/
    csPin = SDSPIMSP432_P5_1_CS
    }
    }; 

    希望这能达到目的。

     此致、

      David

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

    它工作正常!

    谢谢 David。