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.

[参考译文] MSP430F5638:通过 MSP430F5638的 SPI 驱动 microSD 卡

Guru**** 1689980 points
Other Parts Discussed in Thread: MSP430F5638, MSP430FR5994
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1049398/msp430f5638-driving-a-microsd-card-via-spi-from-msp430f5638

器件型号:MSP430F5638
主题中讨论的其他器件: MSP430FR5994

在驱动图形 LCD 的定制 SBC 上使用 MSP430F5638 -运行正常。 尝试使用 TI SLAA281C.pdf 示例说明和相关代码通过 P8和 UCB1 SPI 从 microSD 卡读取和写入数据。 我已经了解了涉及 SLAA281C 的其他3个案例、它们只是部分有用。  

SLAA281C 示例默认使用 BITBANG 与卡进行通信。 这在 CCS v10中构建、加载到 MCU 中并在 LCD 上显示数据。 但我正在使用 UCB1 SPI、因此必须为此更改代码。

不使用 DMA、因此它被禁用。

将头文件更改为适用于 F5638和 SBC 的头文件

将 #define SPI_SER_INTF SER_INTF_BITBANG 更改为   #define SPI_SER_INTF SER_INTF_USCIB1

将示例 P5更改为 P8、并且我用于 SPI 的引脚:P8.1 UCB1STE、P8.4 UCB1CLK、P8.5 UCB1SIMO、P8.6 UCB1SOMI

CCS v10获取以下变量或常量的构建错误、这些变量或常量通常未定义

halSPITXDONE、 IFG1、U0RXBUF、U0TXBUF、UCB1MCTL、 URXIFG0、UTXIFG0

我已经尝试过在文件中的不同位置声明这些特定变量或常量的许多变体、但无法获得干净的编译。

您能否提供有关需要声明和使用这些项目的位置的任何见解?

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

    查看头文件(msp430f5638.h)、了解如何定义串行寄存器。 我看到 UCA0、UCA1、UCB0和 UCB1

    grep TXBUF /usr/ti/gcc/include/msp430f5638.h
    sfr_b(UCA0TXBUF);                             /* USCI A0 Transmit Buffer */
    sfr_b(UCB0TXBUF);                             /* USCI B0 Transmit Buffer */
    sfr_b(UCA1TXBUF);                             /* USCI A1 Transmit Buffer */
    sfr_b(UCB1TXBUF);                             /* USCI B1 Transmit Buffer */

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

    通常、对于这些类型的问题、转到正在工作的项目、右键单击在新项目中找不到的名称之一、然后选择"显示声明"-有时您必须执行几次。 包含定义的文件将会显示、在本例中为 David 所指示的文件。

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

    大家好、Ted Fryberger、

    hal_MMC_hardware_board.h 上包含#include 或者、您可以使用#include "msp430f5638.h"作为您的器件吗?  因为、您的常见常量未定义、这似乎是一个包含问题。 David 的代码部分显示在 msp430f5638.h include 上、其中定义了许多变量/常量。  

    此致、

    Luke

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

    感谢大家的回答。 我已经在 main.c 和 hal_mmc_hardware_board.h 中包含了 msp430f5638.h

    我使用了"打开声明"或"打开资源"来查找 代码中的标识符。 现在 CCS 找不到 UCRXIFG 和 UCTXIFG -并且这两个都在 msp430f5638.h 中的 UCBxIFG 控制位下明确定义。 我将更深入地探讨这个文件。

    我的部分问题是不清楚这些组件需要如何组合在一起:SPI + MMC + MicroSD 卡。 P8 UCB1 SPI 端口正在自行工作、向数据监听器发送数据。

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

    "MMC"的使用是一个危险信号、所以我需要修改代码才能使用现代卡。 它肯定不适用于 SDHC 卡。 SDHC 规范的副本将有所帮助。 www.sdcard.org/.../

    SDHC 寻址块中的数据、初始化流程不同。


    我已经沿着这条路走了一两次。 从 MMC 卡仍然是一件好事开始。 (我有一个64MB 的 MMC 卡,收集灰尘。) 我最近一次的 MSP430工作是在第四次、而不是 C

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

    David、感谢您的最新博文。 现在、我将讨论 TI 的 MMC 代码。 TI 可能希望向 SLAA281C 添加一条注释、说明该注释已过时、并且需要修改才能使用当前的 microSD 卡。 它仍然是一个很好的通用参考和概述。 还花了不少时间尝试让 Elm Chan 的示例运行-到目前为止未能成功。 网上有大量有关 microSD 卡编程的信息、所有这些信息都是8至15岁的、有很多漏洞、它们完全跳过关键步骤。 所有这些都有助于概览此处和此处的一些详细信息。

    我将联系 sdcard.org、查看他们是否有任何当前示例或建议、也请再次访问 Elm Chan 以查找任何更新的示例。

    近年来、是否有人通过 SPI 和 C 获得了对 microSD 卡的 MSP430读写? 或知道任何其他良好的参考源?

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

    不难。 我从 SparkFun Logomatic 开始已经完成了几次。(我在一段时间内第一次看到它。 除了容量位、它似乎执行 SD 2.0初始化、因此应针对 SDHC 轻松更改。) 然后输入 第四个 来表示 MSP430。 它构成了 Tensy 版本的基础。 不使用 SPI、而是使用其 SD 硬件。

    SD 规范中初始化过程的流程图不太容易遵循。 此外、您可能可以安全地将代码留给初始化 MMC 或 SD 1.0卡。

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

    David、感谢 SparkFun 链接、我将查看它。

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

    尊敬的 Ted:

    您是否能够 修复先前遇到的定义错误?  

    如果您需要一些参考资料、我们还提供了一些代码(不适用于此器件)、这些代码涉及 SD 卡。 您可以从 MSP-EXP430FR5994_Software_Examples 的 Firmware/Source/OutOfBox_MSP430FR5994下找到它。 名称中有明显的文件、其中包含 SD、但 HAL 文件中也有 SD 配置。 此代码适用于 MSP430FR5994、因此它不会直接与您的器件搭配使用、仅用作参考。

    此致、

    Luke

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

    Luke、感谢您的更新。 David 说、我放弃了 SLAA281C 的移植、多年来、它发生了许多变化、如果没有很多模板、它将无法轻松支持较新的 SD 卡。 我将查看您的 MSP430FR5994链接、任何支持430的内容都应比其他 MCU 的许多(非常旧)在线参考文献更接近。

    Elm Chan 的确有一个4/2021更新、我也在关注这一点-尽管他的代码与 MCU 无关。 此外、Joonas Pihlajamaa 还在提供了一个有关基本 SD 卡控制的有用的4部分教程

    https://codeandlife.com/2012/04/02/simple-fat-and-sd-tutorial-part-1/、 我也在查看它。

    到目前为止、唯一可行的是 TI 的 MSP432 LaunchPad + BOOSTXL 卡-它的工作方式非常完美! 但未成功将代码移植到430。

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

    MSP432和 MSP430在尝试端口1至1时的混合效果不是很好。 它们具有不同的内核(MSP432使用 ARM、MSP430使用 TI)、因此它们不能直接相互移植。 MCU 无关型和 MSP430FR5994将是您的最佳资源、尽管 MSP430FR5994使用 FRAM 而不是闪存作为其主存储器、因此这是另一个重要因素、具体取决于您的实现方式。

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

    Luke、感谢您的更新。 我购买了 MSP430FR5994 LaunchPad、该 LaunchPad 在实时温度和 FRAM 日志模式下运行良好。 但无法使其在 SDCard 日志模式下运行。  

    假设它可以使用 FAT32格式的32GB 和64GB microSD 卡。 听起来您必须像运行 FRAM 日志模式那样运行它。 为 LP 加电并按 S1 + S2两次以进入模式3 SDCard、连接 GUI 并从 GUI 启动 SDCard 模式、我看到红色 LED 上闪烁3次、运行很短时间、按 S2停止、重新连接 GUI 并加载 SDCard 数据。 但 GUI 显示没有要加载的数据。 从 Win 查看卡也不显示其他数据。

    我缺少什么?