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.

[参考译文] TRF7970A:MSP430g2553 + TRF7970A 固件的闪存写入问题

Guru**** 2553440 points
Other Parts Discussed in Thread: MSP430G2553, TRF7970A

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/573917/trf7970a-flash-write-issue-with-msp430g2553-trf7970a-firmware

器件型号:TRF7970A
主题中讨论的其他器件:MSP430G2553

您好!

我们正在使用为 TRF7970A 和 MSP430G2553提供的参考固件、此外、我们还开发了一个安装了这些 IC 的定制板。

我们的问题是、我们正在尝试将标记 UUID 的详细信息存储在 MSP 的信息段中。 首先、我们单独测试了程序的闪存擦除/写入部分、它工作正常。

但是、当尝试将该程序与 TRF7970A 的参考固件相结合时、我们发现闪存写入是根据需要进行的。 在少数电路板中、它会损坏数据、而在少数电路板中、它是正确的。

我们试图找到、但目前还不能找到。 请帮助解决此问题。

TIA。

下面是我们正在使用的闪存写入代码:


//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//闪存擦除
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
空 FlashErase (uint8_t *地址)

_disable_interrupt ();//禁用中断。 否则、这很重要、
//可能发生中断时正在进行闪存操作
//系统崩溃。
while (Busy & FCTL3);//检查是否正在使用闪存
FCTL2 = FWKEY + FSSEL_1 + FN3;// Clk = SMCLK/4
FCTL1 = FWKEY + ERASE;//设置擦除位
FCTL3 = FWKEY;//清除锁定位
*addr = 0;//虚拟写入来擦除闪存段
while (Busy & FCTL3);//检查是否正在使用闪存
FCTL1 = FWKEY;//清除 WRT 位
FCTL3 = FWKEY + LOCK;//设置 LOCK 位
_enable_interrupt ();


//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//闪存写入
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
void FlashWrite (uint8_t *地址、uint8_t *值、uint8_t 大小)

_disable_interrupt ();
FCTL2 = FWKEY + FSSEL_1 + FN0;// Clk = SMCLK/4
FCTL3 = FWKEY;//清除锁定位
FCTL1 = FWKEY + WRT;//为写入操作设置 WRT 位

uint8_t ui8LoopCount;
对于(ui8LoopCount = 0;ui8LoopCount < size;ui8LoopCount++)


*(addr + ui8LoopCount)= Value[ui8LoopCount];//将值复制到闪存

FCTL1 = FWKEY;//清除 WRT 位
FCTL3 = FWKEY + LOCK;//设置 LOCK 位
while (忙& FCTL3);
_enable_interrupt ();

此致、

Maddineni  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    解决了这个问题。
    很抱歉这个主题。 这是我们的错。
    时钟频率过高、MSP 无法执行写操作。
    配置 FCTL2 = FWKEY + FSSEL_1 + FN0; FCTL2 = FWKEY + FSSEL_1 + FN4;满足了这一需求。

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

    您好 Maddineni、

    没问题! 很高兴它已经解决了。

    顺便说一下、如果您有 MSP430特定问题、他们也有一个 E2E 论坛!  https://e2e.ti.com/support/microcontrollers/msp430/f/166 、以防您将来有疑问。 )