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**** 2584535 points
Other Parts Discussed in Thread: MSP430FR5994, MSP-EXP430FR5994

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

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

器件型号:MSP430FR5994
主题中讨论的其他器件: MSP-EXP430FR5994

你(们)好

我正在尝试写入和读取 MSP430FR5994 Launchpad 上的 microSD 卡。 我之前已将"开箱即用体验"转换为单独使用 SD 卡、但我获得的速度太慢(我需要以5000Hz 的频率对32位数据进行采样和存储)。  我想尝试在不创建文件的情况下将数据写入 SD 卡的扇区(我计划稍后在收集数据后进行转换)。

我尝试使用 SLAA281B"将 MSP430与 MMC/SD 闪存卡连接"。 我从 Launchpad 原理图中注意到 SD 卡连接如下:

CS - P4.0

MOSI - P1.6

SPICLK - 2.2

MISO - P1.7

SD_Detect - P7.2

我的问题是:

1) 1)在库中、MOSI、MISO 和 CLK 似乎都在同一端口上、但它们不在该 LaunchPad 上。 我不确定应该如何在不干扰代码操作的情况下更改它。

2) 2)为了优化速度、我可以删除代码的哪些组件? 我知道我正在使用 SPI (USCIB0)、因此我尝试取消对其他通信方法的检查、但没有成功。

3) 3)当 main.c 使用"mcReadSector"时、数据不会存储到变量中。 声明为'char RXData[512]'的变量是否足够?

4) 4)为了确定可使用的扇区总数、可以使用'mcReadCardSIz'函数吗?

很抱歉、对于基本问题、我在这方面没有经验。

谢谢你

John

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

    器件型号:MSP430FR5994

    大家好

    我有 个 MSP430FR5994 Launchpad 并尝试使用板载 SD 卡。 我首先尝试使用开箱即用体验演示、但发现我无法使其足够快地写入。 我看到了标题为"将 MSP430与 MMC/SD 闪存卡连接"的文档(已附加)、该文档不会创建.txt 文件、而是写入扇区。 由于 launchpad 上的 SD 卡连接与示例代码不同(文档中提供了链接)、因此我更改了一些代码以反映这一点:

    #include "msp430FR5994.h" //根据进行调整 编辑日期:2007年2月28日
    //正在使用的 MSP430器件。
    // SPI 端口定义 //调整所选
    #define SPI_PxSEL 的值 P1SEL //接口、根据修改的引脚28/07
    #define SPI_PxDIR P1DIR //中指示的赋值 编辑了28/07
    #define SPI_PxIN P1IN //选择的 MSP430器件数据表。 编辑了28/07
    #define SPI_PxOUT P1OUT // 编辑了28/07
    #define SPI_SIMO 0x40 // 编辑了28/07
    #define SPI_SOMI 0x80 // 编辑了28/07
    #define SPI_UCLK 0x04 // 编辑日期:2007年2月28日 
    // SPI 端口定义 //调整所选
    #define MMC_PxSEL 的值 SPI_PxSEL //接口、根据引脚
    #define MMC_PxDIR SPI_PxDIR //
    #define MMC_PxIN 中指示的赋值 SPI_PxIN //选择的 MSP430器件数据表。
    #define MMC_PxOUT SPI_PxOUT
    #define MMC_SIMO SPI_SIMO
    #define MMC_SOMI SPI_SOMI
    #define MMC_UCLK SPI_UCLK
    
    //芯片选择
    #define MMC_CS_PxOUT P4OUT //编辑了28/07
    #define MMC_CS_PxDIR P4DIR //编辑了28/07
    #define MMC_CS 0x02 //编辑了28/07
    
    //卡检测
    #define MMC_PxIN P7IN //编辑了28/07
    #define MMC_PxDIR P7DIR //编辑了28/07
    #define MMC_CD 0x04 //编辑了28/07 

    我已将 MOSI 更改为 P1.6、MISO 更改为 P1.7、UCLK 更改为 P2.2、CS 更改为 P4.0、CD 更改为 P7.2。 我还添加了 MSP430FR5994头文件。 此外、我交换了 CS_LOW 和 CS_HIGH 的功能、因为开箱即用体验演示在 CS 保持高电平时使用 SD 卡、而此示例在 CS 处于低电平时选择该卡。

    我还更改了 MMC.c 中的以下内容、以说明 MOSI 和 MISO 位于与 CLK 不同的端口上:

    // MMC 的 Init 端口(默认为高电平)
    //MMC_PxOUT |= MMC_SIMO + MMC_UCLK; 编辑了28/07
    P1OUT |= MMC_SIMO;
    P2OUT |= MMC_UCLK;
    //MMC_PxDIR |= MMC_SIMO + MMC_UCLK; 编辑了28/07
    P1DIR |= 0xC0;
    P2DIR |= 0x04; 
    //启用次级函数
    #if SPI_SER_INTF!= SER_INTF_BITBANG
    //MMC_PxSEL |= MMC_SIMO + MMC_SOMI + MMC_UCLK;
    P1SEL |= 0xC0;// MOSI、MISO 编辑了28/07
    P2SEL |= 0x04;// CLK 编辑了28/07
    #endif 

    程序在 main.c 中运行'mcInit'时会卡住、因为它似乎永远不会返回变量'status'的非零值。

    此外、我还想指出以下几点:

    #define SPI_SER_INTF SER_INTF_BITBANG // MMC 接口 

    取消注释、因为我在 SPI 中使用 UCB0而不是位拆裂:

    //#define SPI_SER_INTF SER_INTF_USCIB0 // MMC 接口 

    但是、当我这么做时、我收到一条错误消息、指出 P1SEL 未定义。 我是否需要包含其他文件、或者我是否做了错误的操作?

    我花了一些时间尝试使其正常工作、因此我们非常感谢您的任何帮助。 我还在.zip 文件中附加了我的当前程序。

    e2e.ti.com/.../slaa281b.pdf

    e2e.ti.com/.../Raw-SD-Card-Write-Test.zip

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

    尊敬的 John:

    您不应使用 SLAA281、MSP-EXP430FR5994开箱即用体验代码将是 SD 卡通信的最佳资源。 如果您想提高 SPI 通信速度、请将 HAL_SDCard 内的 DesedSpiClock 参数更改为所需的 SPI_FAST_FREQ。 您还可以将 SMCLK 频率增加到16MHz (当前为8MHz)、但这将需要采取一些额外的步骤来实现。

    编辑:我合并了包含相同主题的两个主题、也许作者可以相互帮助。

    此致、
    Ryan

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

    器件型号:MSP430FR5994

    工具/软件:Code Composer Studio

    大家好

    我正在尝试将数据写入 MSP430FR5994 Launchpad 的 SD 卡。 我一直在使用“开箱即用”体验演示,但我想尝试直接写入扇区。

    我‘m到,在“mc.c”中定义了以下命令:

    /* MMC/SD 命令(SPI 模式)*/
    
    #define CMD0 (0) /* GO_IDLE_STATE */
    
    #define CMD1 (1) /* SEND_OP_COND */
    
    #define ACMD41 (0x80+41)/* SEND_OP_COND (SDC)*/
    
    #define CMD8 (8) /* SEND_IF_COND */
    
    #define CMD9 (9) /* SEND_CSD */
    
    #define CMD10 (10) /* SEND_CID */
    
    #define CMD12 (12) /* STOP_transmission */
    
    #define ACMD13 (0x80+13)/* SD_STATUS (SDC)*/
    
    #define CMD16 (16) /* SET_BLOCKLEN */
    
    #define CMD17 (17) /* read_single_block */
    
    #define CMD18 (18) /* read_multiple_block */
    
    #define CMD23 (23) /* SET_BLOCK_COUNT */
    
    #define ACMD23 (0x80+23)/* SET_WR_BLK_ERASE_COUNT (SDC)*/
    
    #define CMD24 (24) /* write_block */
    
    #define CMD25 (25) /* write_multiple_block */
    
    #define CMD41 (41) /* SEND_OP_COND (ACMD)*/
    
    #define CMD55 (55) /* APP_CMD */
    
    #define CMD58 (58) /* Read_OCR */ 

    通过一些在线研究,我注意到其他一些人在使用这些工具,但我并不完全理解。

    ‘MMC.c’似乎创建了使用这些命令的函数,但当我逐步体验“开箱即用”时,这些命令似乎没有被使用。

    是否有人能够解释我如何使用这些函数写入块? 或任何替代选项?

    谢谢你

    Vivek

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

    MMC.c 是 FatFs (FAT 文件系统)的一部分、其命令由 ff.c 调用并在 sdcard.c 中使用 您不必担心这些文件夹/库抽象层中的任何一个、但您需要知道如何正确调用 sdcard.c 函数来控制您的文件系统。 您可以以 SDCardLogMode.c 为例。

    此致、
    Ryan