工具与软件:
大家好!
我们已经完成了本文件中提到的所有措施: https://www.ti.com/lit/an/slaa729a/slaa729a.pdf?ts = 1709980960376.
仍然有很多人看到闪存损坏,我们仍然不理解它的根本原因。
低电压:
当检测到负载下电池上的2.2电压时、我们的器件将进入睡眠模式(空闲模式)。
不可充电电池(CR2430)
环境影响:
我们的器件上都有可靠的 ESD 保护、我不认为它会造成问题。
对 JTAG 标签节点进行了测试、未发现问题。 我们会在制造过程中、在开始的时候使用 JTAG 对器件进行编程。 正常操作后、可在安装6-36次后在设备上更新内存。
操作温度为+10至+45 C (+50至+113 F)--无温度问题。
闪存时序生成器频率:
这可能是一个问题、我们需要您的耐心来了解根库。
最常见的问题是违反频率与电压关系。
在我们的硬件 MCLK 中:4MHz。
//用于清除信息存储块。
//在从应用程序代码调用此函数之前禁用中断。
//此处我们没有为闪存操作设置时钟源。
void flash_clear (字符*地址)
{
FCTL3 = FWKEY;
FCTL1 = FWKEY + ERASE;
while (FCTL3和 BUSY);
*Addr = 0;
while (FCTL3和 BUSY);
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
while (FCTL3和 BUSY);
}
//用于在信息存储器中写入数据。
//在更改设备配置时使用此功能。
//在从应用程序代码调用此函数之前禁用中断。
//此处我们没有为闪存操作设置时钟源。
void flash_Write (void *数据、字 Addr、字节 nbytes)
{
FCTL3 = FWKEY;
FCTL1 = FWKEY + WRT;
while (FCTL3和 BUSY);
memcpy ((char *) Addr、(char *) data、nbytes);
while (FCTL3和 BUSY);
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
while (FCTL3和 BUSY);
}
//用于擦除512字节的闪存段
//在 OTA 升级过程中使用了此函数
//将 MCLK 设置为时钟源、将时钟分频器设置为5。
void flash_flash_addr Erase_Segment (char* addr)
{
//禁用所有中断
_DINT();
//选择用于闪存写入的 MCLK 以及5分频
FCTL2 = FWKEY+FSSEL_1+FN2;
//清除锁定
FCTL3 = FWKEY;
//启用段擦除
FCTL1 = FWKEY + ERASE;
while (FCTL3和 BUSY);
//执行擦除
*addr = 0;
while (FCTL3和 BUSY);
//禁用擦除
FCTL1 = FWKEY;
//设置锁定
FCTL3 = FWKEY + LOCK;
while (FCTL3和 BUSY);
//启用中断
_EINT();
}
//用于在 Flash 存储器中写入数据。
//在 OTA 升级过程中使用了此函数
//在从应用程序代码调用此函数之前禁用中断。
//此处我们没有为闪存操作设置时钟源。
void flash_Write (void *数据、字 Addr、字节 nbytes)
{
FCTL3 = FWKEY;
FCTL1 = FWKEY + WRT;
while (FCTL3和 BUSY);
memcpy ((char *) Addr、(char *) data、nbytes);
while (FCTL3和 BUSY);
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
while (FCTL3和 BUSY);
}
该流程中是否有任何内容或下面的代码需要更改?