色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSPM0在指定Flash地址開辟模擬EEPROM

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

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

          在嵌入式系統(tǒng)中,諸如變頻器和伺服驅(qū)動(dòng)器等工業(yè)應(yīng)用,乃至CD播放器等眾多消費(fèi)電子產(chǎn)品,都需要保存最近的用戶設(shè)置,在下次上電后加載使用。如果使用MCU內(nèi)置Flash,一般擦寫次數(shù)限制在10k次,無法滿足壽命和耐久性要求,所以只能通過外置實(shí)現(xiàn)。

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

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

          當(dāng)使用<=32KB Flash容量產(chǎn)品時(shí),這時(shí)芯片的全部Flash區(qū)域都支持10萬次擦寫,只需要根據(jù)用戶代碼量以及存儲(chǔ)需求確定EEPROM的容量大小,然后放置到Flash的尾部地址即可。

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

          這時(shí)則需要在代碼中向編譯器聲明EEPROM的位置及長(zhǎng)度,使其安排Code及Data時(shí)避開用戶設(shè)置的EEPROM區(qū)域。

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

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

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

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

          圖片.png

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

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

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

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

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



          關(guān)鍵詞: TI MSPM0 模擬 EEPROM

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉