我正在使用 STM8,由于向量表在閃存中,我需要寫入閃存以創建和使用向量表。由于向量表的地址是固定的,我的代碼在每次啟動時都會將相同的值寫入閃存的相同記憶體地址。但是代碼中沒有擦除,所以我認為在第一次寫入程序之后它不會再做任何事情了。我的問題是,如果我在每次啟動/重置時寫入相同的閃存地址而不擦除,它會縮短閃存的壽命嗎?
uj5u.com熱心網友回復:
我的問題是,如果我在每次啟動/重置時寫入相同的閃存地址而不擦除,它會縮短閃存的壽命嗎?
一般來說,它會縮短使用壽命。
但這取決于寫入例程的實作,即取決于您的“作業系統”。它可能會確定寫入是不必要的并且不會執行它。
FLASH 寫入/擦除的經驗值是 50 k。
在制造商的頁面上,我沒有發現任何關于集成磨損均衡的資訊,無論是對于閃存還是對于 EEPROM,請參閱 https://www.st.com/en/microcontrollers-microprocessors/stm8-8-bit-mcus.html
- 程式存盤器:8-Kbyte Flash 存盤器;55 °C 下 100 次回圈后資料保留 20 年
- 記憶體:1 KB
- 資料存盤器:128位元組真資料EEPROM;耐久性高達100 k寫/擦除周期
以下頁面強調您應該使用磨損均衡技術: https ://embedded-lab.com/blog/continuing-stm8-microcontroller-expedition/11/
盡管閃存主要用于存盤應用程式代碼,但仍然可以像使用應用內編程 (IAP) 的 EEPROM 一樣使用它們。但是,重要的是要檢查一下,我們不會在應用程式代碼所在的那些區域進行撰寫。IAP 還可用于通過無線 (OTA) 升級應用程式韌體。
避免頻繁寫入/擦除以增加記憶體生命周期。如果需要頻繁地寫入/擦除資料,請使用磨損均衡技術。
uj5u.com熱心網友回復:
這個問答可能更適合https://electronics.stackexchange.com,在那里可能會找到更多關于嵌入式電子設備和閃存作業原理的專家。
閃存如何真正作業的物理和電子學
快速回答:
由于向量表的地址是固定的,我的代碼在每次啟動時都會將相同的值寫入閃存的相同記憶體地址。
因此,根據我在下面寫的內容,不會發生新的損壞。
我的問題是,如果我在每次啟動/重置時寫入相同的閃存地址而不擦除,它會縮短閃存的壽命嗎?
如果您每次都將相同的內容寫入相同的閃存,并且中間沒有擦除周期,那么在第一次寫入后不會發生新的損壞。只有第一次寫入才會真正釋放任何位(電容器),從而造成損壞。
細節:
我的問題是,如果我在每次啟動/重置時寫入相同的閃存地址而不擦除,它會縮短閃存的壽命嗎?
讓我在這里添加一些見解。
以下是我對閃存真正作業原理的理解:
- 擦除:閃存是存盤在微型電容器中的存盤器。“擦除”將所有單元寫入高電壓,這被認為是零 (
0)。當電子在充電程序中穿過它時,“擦除”回圈會破壞電容器電池壁的原子結構。擦除周期是在整個閃存“頁面”或大塊記憶體上一次完成的。擦除是一項昂貴的操作,無論是在能源消耗還是時間方面,因為一堆電荷泵必須將微小的 mcu 電壓泵送到一個高電壓,這可以一次為整個閃存頁面的所有單元充電一次大洪水為電容器組充電的能量。 - 寫入: “寫入”可以在粒度字(例如:4 位元組)或位元組級別(粒度取決于單片機)上完成,而不是在通常為千位元組的大型閃存頁面級別上完成。它速度很快,因為它所要做的就是將一個或幾個位短路到地以使電容器放電,從而將高電壓 (
0) 變為低電壓 (1)。“寫入” a1位只是將該位從 HIGH (0) 釋放到 LOW (1)。僅當該位先前被“擦除”以將其充電至高電平時,它才會更改任何內容(0) 首先。從 HIGH 到 LOW 一點點放電也是一個破壞性的程序,因為它會在放電時通過電容器壁爆炸電子,因為你將電池短路到地,當電子爆炸時在原子水平上去除物質。0向(高電壓)“寫入”一點絕對沒有任何作用。正是擦除周期將該位設定為0(高)。就像這樣:- 寫入閃存
0(HIGH) -->1(LOW) = 充電位通過短接接地放電;這是一個分子破壞性操作 - 寫入閃存
0(HIGH) -->0(HIGH) = 沒有任何反應(寫入 HIGH 是無操作);位已經充電,寫入不能充電位;只有擦除可以。該位保持高電平 (0)。 - 寫入閃存
1(LOW) -->0(HIGH) =沒有任何反應(寫入 HIGH 是無操作);寫作不能收費;只有擦除可以。該位保持低電平 (1)。 - 寫入閃存
1(LOW) -->1(LOW) = 該位與地短路以將其放電至 LOW (1),但由于它已經放電,因此沒有任何反應。沒有想要移動的電子,因此這是一個非破壞性操作,因為當該位從0(HIGH) 放電到1(LOW) 時,之前已經發生了“損壞”。
- 寫入閃存
說得通?
因此,如果您嘗試將二進制位元組0b00000000(所有位處于高電壓)寫入0b11111111(所有位處于低電壓),那么它將通過將所有位短路到零來釋放所有位,使它們的電壓從高到低,最終得到0b11111111. 這會損壞電容器單元。如果您嘗試再次寫入該位元組0b11111111,它會將所有電池再次短路到地,但是由于電池已經放電,所以什么也沒有發生!不會發生新的損壞。
但是,如果您嘗試將二進制0b11111111(所有位為低電壓)寫入0b00000000(所有位為高)電壓,則不會發生任何事情!寫入不能為單元充電,只有擦除操作可以!你最終0b11111111還是。沒有對您的細胞造成損害。你沒有操作。
因此,當你放電一點時,當你充電一點時,就會發生損壞。一個位的充電是通過一個擦除周期完成的,因此您可以只計算您擦除了多少次,作為對閃存電容器單元施加的“損壞周期”數量的估計。
- 標準閃存(可按大“頁”組擦除)通常額定高達10,000 次“寫入 1(低;通過放電)/擦除至 0(高,通過充電)”回圈。請參閱您的資料表以了解您的確切數字。
- EEPROM(可在非常精細的位元組或字級別擦除)閃存通常更強大,可以處理100,000次寫入/擦除周期。請參閱您的資料表以了解您的確切數字。
現在,有了這些知識,你的“寫作”真的沒有先擦除就可以做任何事情嗎?
你真的造成了任何傷害嗎?如果在第一次寫入時導致它,后續寫入會造成更大的損壞嗎?
您現在應該擁有知道這些答案的工具。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/485431.html
