• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > MSPM0在指定Flash地址開辟模擬EEPROM

    MSPM0在指定Flash地址開辟模擬EEPROM

    作者:Captain Luo 時間:2023-10-18 來源:TI 收藏

    在嵌入式系統中,諸如變頻器和伺服驅動器等工業應用,乃至CD播放器等眾多消費電子產品,都需要保存最近的用戶設置,在下次上電后加載使用。如果使用MCU內置Flash,一般擦寫次數限制在10k次,無法滿足壽命和耐久性要求,所以只能通過外置實現。

    本文引用地址:http://www.czjhyjcfj.com/article/202310/451710.htm

    新推出的系列MCU支持使用Flash,在小容量存儲需求的場合能節省外部芯片,實現成本控制。系列MCU的Flash容量覆蓋16KB到128KB,其中低32KB的Flash區域支持10萬次擦寫,而剩余區域支持1萬次擦寫,如下圖G3507規格書所示。所以,在使用FlashEEPROM時,應盡可能選擇低32KB區域。

    當使用<=32KB Flash容量產品時,這時芯片的全部Flash區域都支持10萬次擦寫,只需要根據用戶代碼量以及存儲需求確定EEPROM的容量大小,然后放置到Flash的尾部地址即可。

    當使用>32KB Flash容量產品時,這時用戶代碼占用空間可能較大,如果直接選取低32KB尾部地址作為模擬EEPROM,有可能與用戶代碼地址相沖突而造成誤擦寫,如下圖所示:

    這時則需要在代碼中向編譯器聲明EEPROM的位置及長度,使其安排Code及Data時避開用戶設置的EEPROM區域。

    在CCS IDE with Clang中,需要做兩步修改:

    1. 在.cmd文件中添加Sections的聲明如下圖:

    其中EEPROM 為自定義的section名字,0x00001000為自定義的開始地址。

    2. 在需要使用的.c文件中(如c)添加數組定義如下:

    圖片.png

    以上語句定義了一個名為EEPROM、類型為uint32,長度為4096的const數組,并且存放在上面開辟的.EEPROM Sections,其中添加__attribute((used))可以避免編譯器把該數組優化掉。

    完成以上修改后,編譯器會避開自定義的EEPROM SECONS,代碼只會存放于.text SECTIONS,這樣修改后就可以保證EEPROM地址和長度都落在期望的Lower 32KB區域且不會與代碼段沖突。

    添加修改并編譯后,查看Memory Allocation如下圖,可見EEPROM段與.text代碼段分開,所定義的EEPROM數組也成功初始化。

    最后就可以進行Flash的Erase/Program操作,具體可參考drivelib中的flashctl_program_with_ecc等例程,這里不再贅述。

    本文針對MSPM0系列MCU使用Flash模擬EEPROM時需要在Lower 32KB開辟EEPROM專用區域的工況,提出使用SECTIONS分配的方式解決與EEPROM和Code可能重合的問題,配合SDK的Flash操作,可以很容易實現EEPROM在任意Flash區域的開辟。



    關鍵詞: TI MSPM0 模擬 EEPROM

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 肃南| 积石山| 湘潭市| 宁远县| 松潘县| 张家港市| 高要市| 碌曲县| 荣成市| 遵义县| 年辖:市辖区| 象州县| 晋宁县| 垫江县| 牡丹江市| 平顺县| 南漳县| 阿拉善右旗| 买车| 崇信县| 揭东县| 台中市| 明溪县| 汉阴县| 泰和县| 鄂托克前旗| 夏邑县| 涪陵区| 石景山区| 绍兴县| 尤溪县| 林甸县| 喀喇沁旗| 寿阳县| 西丰县| 云阳县| 绥阳县| 孙吴县| 宜春市| 邛崃市| 天津市|