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.

[参考译文] MSP-EXP430FR5994:将.bss 段移至 FRAM 时、SD 卡无法正常工作

Guru**** 2539500 points
Other Parts Discussed in Thread: MSP430FR2111

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/765282/msp-exp430fr5994-sd-card-not-working-when-bss-section-moved-to-fram

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

您好!

 如果我现有 RAM 设置中将.bss 段设置为 FRAM、开箱即用示例 SD 卡访问段似乎停止工作。 停止工作意味着一旦调用诸如 SDCardLib_detectCard()fopen()等函数,该函数就永远不会返回。 有人知道为什么会发生这种情况? 我尝试将整个.bss 段移动到 FRAM 而不是 RAM。

 ".bss       :{}> FRAM'->位于.cmd 文件中

-

谢谢

-

此致

Soumyajit

 

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

    您好、Soumyajit、

    首先要了解的是您用于 SD 卡功能的函数、现在、它不是 RAM、而是应处理 FRAM。 虽然 FRAM 可用于 RAM 等用途、但仍然存在差异、尤其是在可用的寻址模式方面。 因此、在许多情况下、在 RAM 中使用变量的函数在没有相应更改的情况下无法移植到 FRAM 功能。

    有关更多详细信息、请参阅我们的文档。

    遗憾的是、对于 FR5994和其他 FR5xx/6xx 衍生产品、我们没有汇编器示例、但对于 FRAM 功能、您也可以使用 FR2xx 示例、如下所示:

    ;--copyright--, BSD_EX
    ; 版权所有(c) 2014,Texas Instruments Incorporated
    ; 保留所有权利。

    ; 以源代码和二进制形式重新分发和使用,有无
    ; 允许修改,但前提是满足以下条件
    ; 满足:

    ; * 源代码的重新分发必须保留上述版权
    ;    注意,此条件列表和以下免责声明。

    ; * 二进制形式的再发行必须复制上述版权
    ;    注意,中的条件列表和以下免责声明
    ;    分发时提供的文档和/或其他材料。

    ; * 德州仪器公司的名称和名称均不相同
    ;    其贡献者可用于认可或推广衍生产品
    ;    来自此软件,未经特定的事先书面许可。

    ; 本软件由版权所有者和贡献者“按原样”提供
    ; 以及任何明示或暗示的保证,包括但不限于:
    ; 对特定适销性和适用性的隐含保证
    ; 免责声明。 在任何情况下、版权所有者不得或
    ; 贡献者对任何直接、间接、偶然、特殊、
    ; 惩戒性或后果性损害(包括但不限于
    ; 采购替代货物或服务;丧失使用、数据或利润;
    (或 业务中断)无论造成了什么后果,也基于任何责任理论,
    ; 无论是合同、严格责任还是侵权行为(包括疏忽或)
    ; 否则)因使用本软件而产生的任何后果,
    ; 即使被告知可能发生这种损害。



    ;                       MSP430代码示例免责声明

    ; MSP430代码示例是通常包含的低级程序
    ; 以高度演示单个外设功能或设备功能
    ; 简明扼要。 为此、代码可能依赖于器件的加电默认值
    ; 寄存器值和设置,如时钟配置和注意
    ; 在组合多个示例中的代码时,应采取这种方法,以避免潜在的问题
    ; 效果。 有关 GUI、另请参阅 www.ti.com/grace 和 www.ti.com/msp430ware
    ; 用于外设配置的 API 函数库方法。

    ;--/版权--
    ;********
    ;  MSP430FR211x 演示- FRAM 的长字写入

    ;  说明:使用长字写入来写入 FRAM 的512字节块。
    ;  每100次写入后切换 LED。
    ;  注:长时间运行此示例将影响 FRAM
    ;  耐久性。
    ;  ACLK = REFO、MCLK = SMCLK =默认 DCODIV =~1MHz

    ;          MSP430FR2111
    ;----        --
    ;/|\|                  |
    ;||                    
    ;-|RST                |
    ;|                      
    ;|P1.0                |---> LED

    ;  李小东
    ;  Texas Instruments Inc.
    ;  2015年12月
    ;  使用 Code Composer Studio v6.1构建
    ;********
               cdecls C、list、"msp430.h" ;包含器件头文件
             
    FRAM_WRITE_PTR    .set   R5
    数据              .set   R6
    计数             .set   R7
    FRAM_TEST_START   .set   0xFD00

    ;------------------------------------------------------------------
               .def   重置                  ;将程序入口点导出到
                                               ;使链接器知道它。
    ;------------------------------------------------------------------

               .text                          ;汇编到闪存存储器
               .retain                        ;确保链接当前段
               .retainrefs

    重置      mov.w  #_stack_end、SP        ;初始化堆栈指针
    StopWDT    mov.w  #WDTPW+WDTHOLD、&WDTCTL ;停止 WDT

               BIS.b   #01h、&P1DIR
               BIC.w   #LOCKLPM5、PM5CTL0     ;解锁 I/O 引脚

               MOV.w   #1111h,data           ;初始化虚拟数据
               MOV.w   #00h、count            ;初始化计数器

    Mainloop   inc.w   数据
               MOV.w   #FRAM_TEST_START、FRAM_WRITE_PTR
               调用   #FRAMWrite               ;无限循环
               Inc.w   计数                   ;使用 R14作为计数器
               cmp.w   #101、count
               Jnz       Mainloop
               XOR.b   #01h、&P1OUT               ;切换 LED 以显示512字节
               CLR.w   计数                   ;...已被写入
               MOV.w   #0x1111,DATA           ;经过100次后,重置虚拟数据
               JMP       主循环

    ;------------------------------------------------------------------
    FRAMWrite    ;Write to the FRAM
    ;------------------------------------------------------------------
               clr.w   R15                       ;使用 gen 用途寄存器作为索引
    启动      inc.w   R15
               MOV.w   #FRWPPW、SYSCFG0
               cmp.w   #101h、R15               ;对于128块...
               JHS     出口
               MOV.w   数据、0x0 (FRAM_WRITE_PTR);写入 FRAM
               INCD.w  FRAM_WRITE_PTR
               JMP     启动
               MOV.w   #FRWPPW+PFWP、SYSCFG0
    退出       RET
    ;------------------------------------------------------------------
    ;堆栈指针定义
    ;------------------------------------------------------------------
               .global __stack_end
               .sect  .stack
               
    ;------------------------------------------------------------------
    ;中断矢量
    ;------------------------------------------------------------------
               .sect  ".reset"               ;MSP430复位矢量
               短路 复位
               .end

    此致

    Peter

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