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.

[参考译文] MSP430G2553:调节闪存写入操作的延迟、从而在 LED 调光器应用中产生闪烁

Guru**** 2484615 points
Other Parts Discussed in Thread: MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1225947/msp430g2553-reg-the-delay-in-flash-write-operation-creating-flickering-in-the-led-dimmer-application

器件型号:MSP430G2553

尊敬的专家:

我们将在离线 LED 调光器应用中使用 MSP430G2553。 在此代码中、我们将使用闪存写入和读取操作来保存开/关状态和调光级别。

当我们执行闪存写入操作时、我们观察到灯在闪烁。 我们观察到在运行期间缺失了其中一个交流电压周期+ve/-ve。

根据我们的观察,闪存写入操作似乎花费了更多的时间(~>10毫秒)。 因此我们在控制中错过了调光周期。

闪存写入操作所需的最长时间是多少? 我们有没有机会减少这个时间?

以下代码用于闪存写入操作。

*****

void save_dimlevel (无符号字符级别)

// TRANSMIT_Char ('s');
//转换(dim_level);
_BIC_SR_register (GIE);

unsigned char * Flash_ptr;//闪存指针
Flash_ptr =(unsigned char *) 0x1030;//初始化闪存指针
FCTL3 = FWKEY;//清除锁定位
FCTL1 = FWKEY + ERASE;//设置擦除位
* Flash_ptr = 0;//虚拟写入以擦除闪存段
FCTL1 = FWKEY + WRT;//为写入操作设置 WRT 位
* Flash_ptr =级别;//将值写入闪存
FCTL1 = FWKEY;//清除 WRT 位
FCTL3 = FWKEY + LOCK;//设置 LOCK 位
__ bis_SR_register (GIE);
}

****

请提供解决负载闪烁问题的解决方案。

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

    大家好

    累积编程时间(当对一个64字节闪存块进行写入操作时、一定不能超过累积编程时间。 此参数适用于所有编程
    方法:单独的字/字节写入模式和块写入模式)根据MSP430G2x53、MSP430G2x13混合信号微控制器数据表(修订版 J)、最长时间为10ms

    谢谢

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

    擦除时间范围为~10ms 至~19ms。 任何东西都不会改变这一点。

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

    嗯、有一件事可以改变它。 您可以将闪存时序发生器频率(FCTL2)配置为快于数据表中列出的最大值。 但是、擦除和写入操作将不可靠、或者可能会失败。

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

    我们是否有其他任何方法可以像2ms 这样在更短的时间内存储一个字节的数据?

    我可以在不执行擦除操作的情况下执行闪存写入吗?

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

    我们有没有任何方法可以减少闪存写入操作时间?

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

    我只是从您的观点得到了一个想法。 似乎我在闪存写入操作中使用 ACLK (32kHz)。

    如果我使用 SMCLK、这可能会提高擦除和写入操作的速度。

    FCTL2 = FWKEY + FSSEL_2 + FN1;           // SMCLK/3 //333kHz  

    我们可以用于闪存写入操作的最大频率是多少? 我在这里应该使用1MHz 吗?

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

    除非您更改了它、否则 PUC 的默认时钟选择为 MCLK/3或333KHz。 最大速度在数据表中、但1MHz 超出该限制。

    只有当您正在写入一个已被擦除的位置时、您才可以在不进行擦除的情况下进行闪存写入。 这需要更多的工作、但您可以使用段的所有字节来存储调光值。 只使用最后一个、擦除段、并在完成所有写入后重新开始。 这还会延长使用擦除/写入周期耗尽存储器的时间。 (数据表中也有相关限制。)

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

    @大卫·舒尔茨

    非常感谢 您的详细信息。 所以、在没有擦除的情况下无法写入闪存。  

    并且对于一个字节的数据、闪存写入时间至少为10ms。 没有办法减少时间。 对吧?

    擦除需要多长时间? 写入闪存需要多长时间?

    我目前在犹豫如何解决我的 LED 灯(调光器)闪烁的问题、同时写入闪存?  

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

    闪存写入比擦除快得多。 这些时间在数据表中是根据闪存时序发生器的周期数量给出的。

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

    最大程度地缩短时间的一种方法是强制在闪存写入之前更新 LED、在写入之后强制更新另一个。