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.

[参考译文] CCS/MSP430F5438A:闪存存储器读取/写入

Guru**** 2551110 points
Other Parts Discussed in Thread: MSP430F5438A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/591519/ccs-msp430f5438a-flash-memory-read-write

器件型号:MSP430F5438A

工具/软件:Code Composer Studio

我正在尝试使用 MSP430F5438A 实验板来完成其中一个课程的项目。 目前、我使用 的是用户体验演示 、特别是音频录制/播放应用。

我的目标是在音频数据被录制并存储在闪存中之后、但在回放之前对其进行修改。 目前、当我运行该方法时、我可以检索数据、但无法将其写回存储器。 下面是我使用的函数、它位于演示程序中。  

void audiorecord (unsigned char 模式)
{
unsigned char i;

setupRecord();

//...
//...
//...

合成语音();//my 函数被调用
shutdownRecord();
} 
void 合成语音(){
unsigned long flash_loc;
FCTL3 = FWKEY;//解锁闪存以进行写入
FCTL1 = FWKEY + WRT;//将闪存设置为写入字节
unsigned long FlashPtr;//指向闪存的长指针
FlashPtr = PlaybackPtr;//加载音频的起始位置
(flash_Byte = AudioMemory_Memory= AudioMastrt; Flash_loc++){//循环

无符号字符数据=(*(unsigned char*) FlashPtr);//从闪存检索数据

(*(unsigned char*) FlashPtr)=(数据+ 1);//修改数据并将其存储在闪存中的同一位置

FlashPtr++;//闪存指针位置
}
FCTL3 = FWY +增量; //将闪存锁定为写入
// char data[AUDIO_MEMEND-AUDIO_MEMSTART];
} 

到目前为止,我可以考虑解决这个问题的几个办法,但我想得到一些建议,说明应采取何种途径。  

选项1)我在写入闪存之前不擦除闪存。 我在 E2E 表格上多次看到过这一点、我认为这可能是(DATA+1)未写入闪存的原因。 在当前设计中、擦除闪存将不是很有效、因为音频是使用 DMA 以块的形式写入闪存。 通常有几千个样本、这意味着读取一个样本、擦除该位置并重新写入它需要发生几千次、这可能不会很慢。  

选项2)我可以在每次中断时读取 ADC12MEM0、而不是使用 DMA 写入闪存、并将音频样本保存在 RAM 中并在那里进行修改。 不过、这需要大量重写演示、我对 MSP430没有太多经验。 另一个潜在的问题可能是 ADC12MEM0的读取速度、修改和在下一个音频采样被读取前存储在闪存中。  

感谢您为此提供的任何帮助、感谢您抽出宝贵的时间。  

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

    LC、

    Kasthuri 和我认为方案2是最好的、但我们不满足您的性能要求。  通常、如果您执行大量的写入和重写、则应使用 RAM 而不是闪存、因为大量的闪存写入会使闪存降级(及其速度较慢)。  

    Chris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    必须在写入前擦除闪存。 在源代码中、闪存中的每个字节都在不擦除的情况下更新。

    不知道如何通过 DMA 写入闪存、但如果速度很重要、则应在启用智能位的情况下(250 KByte /秒)使用大于5xx 的闪存块写入。