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.
我已经读过几个关于 Flash 存储器"累积编程时间"限制的主题:
但建议似乎有些不完整,在某些情况下是相互矛盾的。 我想问一下
一些澄清。
我要说的基本要点是:不能对块中的闪存单元施加高电压应力、以实现更多功能
小于(对于我的 MSP430F5359) 16ms。 这样做的时间越长、就会引发错误
存储在该块中的任何数据中、并可能永久损坏存储的栅极氧化层
晶体管。 到目前为止、非常好。
我无法明确理解的是、我们是如何根据该16ms 裕度计算时间的。
这是 SLAU208P 的相关图、即"MSP430x5xx 和 MSP430x6xx 系列用户"
指南”:
以下是 MSP430F5359数据表中的相关表格:
以下是我感到困惑的地方:
用户指南中提到了 Twrite、但数据表中没有该参数。 而是具有 Tword。
它们是否指的是同一实体? (因此、当我从正在运行的代码启动一个闪存编程操作时
从闪存中、我的程序因 Twrite = Tword = 64µs μ s 最小值、85µs μ s 最大值而被阻止?)
这是我需要根据16ms 的"累积编程时间"裕度进行调整的时间吗?
或者、它是不是看起来未命名且未指定的较小"编程操作激活"时间
不包括启动和停止编程电压发生器的时间? (芯片实际上是不是这样的
编程电压发生器停止时保持停滞?)
最后、我假设这一"累积编程时间"限制适用于较长的时间范围
如果我在16毫秒内花费16毫秒、或者我在课程中花费16毫秒、这一点无关紧要
天;无论通过哪种方式、我都可以获得每个闪存块16毫秒的"累积编程时间"
每个块都使用自己的16ms 分配进行单独计数、因此运算次数为多个
块可能会重叠。
本质上、我要问:我是否可以擦除块、然后逐字或对块进行编程
在秒、分钟或小时的过程中按长字长整型、与总和一样长
该 特定块的所有 TWRITE 值中的值不超过16ms?
这会让我再问一个问题:
该系列用户指南明确记录了三种闪存写入模式:
而 MSP430F5359的数据表指出、它确实可以执行长字写入、但可以执行长字写入
没有为此定义任何时序。 那么、Tlongword 需要多长时间?
Atlant
在 F5xx 器件上、字节/字/长字闪存写入将花费相同的时间。 它不是恒定时间(与 F2xx 系列类似)、对于每个 F5xx 器件来说是不同的(例如、一个 F5359的闪存比另一个 F5359快20%)、因此数据表中存在范围。
累积编程时间与一个块(128字节)相关。 例如、将128个字节写入同一个块(典型固件更新)不是问题。 问题是在不同块之间跳转和写入字节、当在累积编程时间内将第一个字节和最后一个字节写入同一个块。
无论如何、对我来说、最佳(和最快)选项是长字块写入、代码从 RAM 中执行。 或在启用智能位的情况下提高两倍。
当我查看这个时、我得出结论、即使使用单字节写入、也不可能超过累积编程时间。(该部分给出了闪存时序发生器的周期数。)
除非您多次写入每个字节、否则我会将其归档到非问题文件夹中并忘记它。
关于您的第一个问题:是的
关于第二个问题: Twrite = Tword ="生成编程电压"时间+ "编程操作激活"时间 +"移除编程电压"
时间。 因此、第一个字节或字的块编程时间、 最后一个字节或字的块编程时间以及其他字节或字之间存在差异。
关于您的第三个和第四个问题:您是否说您只能在 MSP430的整个生命周期内对每个块进行16ms 编程?
关于您的第五个问题: Tlongword 取决于您使用的模式。 您可以逐字写入或使用块写入模式。
>它不是恒定时间(与 F2xx 系列类似)、对于每个 F5xx 器件来说是不同的
(例如、一个 F5359的闪存比另一个 F5359快20%)和
>因此、数据表中存在范围。
当然、这是因为 MODOSC 不是精密时钟、对吧?
>累积编程时间与一个块(128字节)相关。 例如、
>将128个字节写入同一个块(典型固件更新)不是问题。
>问题是、当第一个字节时、在不同块之间跳转和写入字节
>和最后一个字节到同一个块在累积编程时间内被写入。
哦、我看到了! 《系列用户指南》规定:
闪存存储器被划分为主存储器、信息存储器和 BSL 存储器部分。
字节、字、32字节 长字或128字节块可写入闪存存储器、
但段是 可被擦除的闪存存储器的最小大小。
因此、与大多数闪存不同、对于主闪存、您有一个不同的擦除块
大小与编程块和主闪存段的大小各有不同
4 128字节编程块!
这是一个让我逃脱的小东西!
所有这一切(包括数据表 Teg_ERASE 时序)的含义是错误
可在多个擦除块之间并行完成。 因此、当您:
对吧?
Atlant
>关于第三个和第四个问题: 您是否说您只能在 MSP430的整个生命周期内对每个块进行16ms 的编程?
否 我重申系列用户指南和数据表的声明、即一旦一个段被擦除、就必须在"累积编程时间"后的16ms 内完成该段内每个单独128字节块的所有重新编程。
如果您要超过该16ms、则必须擦除并重新开始。
Atlant
>当我看这篇报告时,我得出结论,不可能超过累积值
>编程时间、即使使用单字节写入也是如此。(该部件根据提供了时间
>闪存时序发生器的周期。)
是的! 我最初在《系列用户指南》中遗漏了这一子细节、但它支持这一点
您的争用:
闪存存储器被划分为主存储器、信息存储器和 BSL 存储器部分。
字节、字、32字节 长字或128字节块可写入闪存存储器、
但段是 可被擦除的闪存存储器的最小大小。
因为主闪存"段"(大多数闪存用户会将其称为"擦除块")
µs 包含4个128字节的块、然后用于 MSP430F5359及其最大85 μ A
Tword 编程 µs、我们分别得到的最大值为10、880 μ s (~11ms)
对一个128字节块中的所有字节进行一次性编程。
正如您所说的、似乎只需要担心累积编程
1) 1)不擦除而对字节重新编程的时间、2)使用块编程
运行模式、但您执行它的速度太慢。
Atlant
[引用 user="Atlantis Schmidt"]当然,这是因为 MODOSC 不是精密时钟,对吗?[/quot]
是的、我认为这 与闪存时钟有关。 在这里、您可以看到我的测试设备按刷新率(KByte/sec)值排序。
获取器件
# JTID 熔丝芯硬软 LotWafer DieX Diey
0 91 正常 3881 1106 10 219CA446 1800 0F00
1 91 OK 5435 0100 10 10 ADE98146 0A00 2100
2 91 正常 3180 1104 12 013BB046 1200 1E00
3 91 正常 3180 1104 12 013BB046 0D00 1E00
4 91 OK 5435 0100 10 10 ADE98146 0400 2000
5 91 正常 3180 1104 12 013BB046 2a00 2100
6 91 正常 3080 1104 30 10 B15B9446 2000 1700
7 91 OK 3081 2106 10 B7A50951 0A00 1100
写入测试
SMART #0#1 #2 #3#4#5#6#7
0 93、8 100、6 102、0 102、2 102、5 103、3 105、4 106、4
1 216、8 232、5 235、7 236、1 236、9 238、6 243、6 245、9
只是为了回到这里……
[引用 user="Atlanter Schmidt">我的基本要点是:无法对块中的闪存单元施加高压应力、以实现更多功能
小于 (对于我的 MSP430F5359) 16ms。 这样做的时间越长、就会引发错误
存储在该块中的任何数据中、并可能永久损坏存储的栅极氧化层
晶体管。 到目前为止、非常好。[/引述]
我在使用相同的 F5xx 目标器件板的闪光灯上工作了多年、在开发过程中、所有其他闪烁故障都会多次发出16ms 的限制信号。 所有这些目标器件上的闪存存储器都在工作(我可以通过 使用边界读取来看到)、这与它是全新的时相同。
>我使用相同的 F5xx 目标器件板在 Flasher 工作多年、
>在开发过程中、该16ms 限值多次被各种类型的发出
>其它刷写故障。 所有这些目标器件上的闪存存储器都在工作(正如我所说的
>可以通过 边际读取来查看)今天与全新的情况相同。
这是很好的了解! 持久闪存总是一件好事!
同时、这里是另一个线程中 Jens-Michael Gross 的回复、仅供参考
规定超过累积编程时间可能会对电池造成损害:
https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/19724/1476172#1476172
在块写入模式下、当第一个字节被写入块时、应用编程电压、
并在写入另一个块或禁用写入模式时从块中移除。
调试器会暂停 CPU、但不会停用块写入模式。
单步执行闪存写入代码是不安全的、无论是从闪存运行还是从 RAM 运行。
如果超过累积写入时间、写入的闪存内容将不可靠。 保留时间
可能会显著减小、甚至可能发生未编程的位切换为"0"的情况。 闪存
将在下一个擦除周期恢复、但会长时间施加编程电压
也会像多次编程(和擦除)一样对闪存单元绝缘施加应力、
从而减少可用写入周期的数量。
下面是对特定样本的"long-Word"写入的样子
MSP430F5359微处理器:
只有标记为"DB_TP_XP"的米色迹线才有意义。
它向我们展示的是、写入闪存的三个字节大小的写入速度非常快
µs (每个约1.1 μ s、因此可能是8MHz MCLK 的9个周期)和
第四个字节 µs 完成长字、然后花费70.3 μ s、
µs 产品说明书64 μ A 范围的低侧、只是一个 smidgen
至85 µs。
(这两个时间都包含大约1 BIS.B #& instruction's worth
更新所使用的 DB_TP_XP GPIO 信号时的开销
演示所有这些操作的时序;下面显示了完整的代码。)
这确认了字节写入、字写入和非块模式
长字写入都需要相同的时间。
Atlant
-------------
注:
下面是执行上述写入操作的实际代码:
DB_TP_XP_OUT_REG |= DB_TP_XP_BIT;
F2D080002202 BIS.B #0x80、&0x222
*address_ptr =* src_ptr; //因为我们在闪存中执行、无论何时是长字
FC4D0000 MOV.B @R13+、0 (R12)
DB_TP_XP_OUT_REG &&~DB_TP_XP_BIT; // 传输完成,处理器将自动卡在此处
F2C080002202 BIC.B #0x80、&0x222
您好、 Atlanta,
您的问题是否已解决?
如果不是、您能向我解释一下进展情况吗? 我可以咨询我们的专家。
伊斯天
伊斯天:
>您的问题是否已解决?
我认为我的所有问题都已经解决、所以我将按下"Resolved"按钮、但我鼓励您与维护 MSP430系列用户指南和数据表的技术作者分享此主题、因为此主题暴露了这些文档和多个领域之间的几个不一致之处 这可以更完整地记录下来。
感谢您的帮助和其他所有人、也感谢您的帮助!
Atlant
您好、 Atlanta,
感谢您指出。 我已将请求提交给我们的相关同事。
伊斯天