• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users






Re: 關於內部Nonvolatile Memory讀寫的問題 SAMC21N18A
#5
管理員
管理員


查看用戶資訊
您好, 首先 RWWEE 與 Flash Emulated EEPROM 的確如您所描述的分屬於不同的區塊, 但都歸類在 NVMCTRL的管轄之下, 這裡有兩篇 APP note相信對於您理解他們之間的區別及應用有很大的幫助

https://ww1.microchip.com/downloads/en ... plicationNote_AT10931.pdf

https://ww1.microchip.com/downloads/en ... 3974_Application-Note.pdf

由於 NOR Flash 的特性, 無法如同真正的 EEPROM 達到單一Byte的擦除及寫入, 在32位元的MCU中, 若想擁有一塊特定的非揮發性記憶體區塊, 但是不想額外設計製程容量密度比不同且不一定會用到的的 EEPROM 在 Memory 中時, 通常會使用 Flash 來實現 EEPROM 以達到應用上折衷的需求.
RWWEE 又比 Flash Emulated EEPROM 更接近 EEPROM 的使用情境, 因為當程式在Flash執行時, 可以同時對 RWWEE 進行寫入操作. 因此這只能說使用 Flash 來達成的"類"EEPROM 的功能.

發表於: 2023/11/20 11:41

Edited by Libra on 2023年11月21日 09:31:51
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於內部Nonvolatile Memory讀寫的問題 SAMC21N18A
#4
新會員
新會員


查看用戶資訊
Hi Libra,

感謝您的回覆~
另外,想再請教關於RWWEE與EEPROM emulation的差異。

以下是我根據Datasheet第9章(Memories)與第27章(NVMCTRL – Nonvolatile Memory Controller)中的了解,不曉得觀念是否正確?

Q1:
首先是針對位址(Address)的部分,以SAMC21N18A型號來說,RWWEE是已經固定好的一塊8KB大小空間,位址為:0x00400000 ~ 0x00401FFF,如Datasheet中Figure 27-3所示。

EEPROM emulation 則是在256KB的Flash中(0x00000000 ~ 0x0003FFFF),切一塊空間出來模擬EEPROM,大小可以在NVM User Row中選定,並且從最高位址往下切割,如Datasheet中Figure 27-4所示。

EX: NVM User Row (0x804000 [6:4]) 寫入1 ,表示EEPROM Emulation Area Size 為 8Kbytes的大小,位址會落在: 0x0003E000 ~ 0x0003FFFF。

- ---------------- 我是分隔線 --------------------

Q2:
RWWEE 與 EEPROM Emulation之所以稱做EEPROM,是因為其寫入/抹除行為能單一字節做處理嗎?
但按照RWWEE的範例程式來看,一樣只能以頁面(Page or Row)的單位做處理。
若不是以上的原因為何稱為EEPROM?

- ---------------- 我是分隔線 --------------------
1. 兩者分別使用的情境為何?以及RWW (Read While Write)的實際用途?

謝謝

發表於: 2023/11/13 17:06
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於內部Nonvolatile Memory讀寫的問題 SAMC21N18A
#3
管理員
管理員


查看用戶資訊
關於 __attribute__ 請參閱 XC32 compiler for SAM/PIC32C 說明
P124 8.11 VARIABLE ATTRIBUTES
https://ww1.microchip.com/downloads/en ... 2_PICC_UG_DS50002895A.pdf

關於程式碼 :
#define NVMCTRL_FLASH_ROWSIZE (256U)
const uint8_t nvm_user_start_address[NVMCTRL_FLASH_ROWSIZE] __attribute__((aligned(NVMCTRL_FLASH_ROWSIZE),keep,externally_visible,space(prog)))= {0};

幾本上的解讀為宣告一個矩陣 nvm_user_start_address 空間大小為 256 Bytes
256byte 是內部 NVMFlash的Row erase size,
aligned用來指定該矩陣所對齊的地址, 也就是起始位址, 即 0x100
keep, externally_visible 用來避免compiler將之忽視, 並且宣告為外部可以參照到的記憶體位址
space(prog) 宣告該矩陣變數所在位址為 Internal Flash(Programming Memory)

簡單來說, 就是在程式記憶體(Flash)中預留一塊大小為256 bytes的空間, 用來進行Flash的讀寫存取.
好處是, 該Flash空間可以隨著程式燒錄時一併預留下來, 而且還是可以直接寫程式定址的一個矩陣.
壞處是, 如果重新燒錄程式時, 就會被一併Erase, 因為該空間屬於程式定址範圍內的區域.
縮圖

Attach file:



jpg  SAMC21_NVM.jpg (490.84 KB)
67979_64e8420f0d0af.jpg 537X661 px

發表於: 2023/8/25 13:54
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於內部Nonvolatile Memory讀寫的問題 SAMC21N18A
#2
新會員
新會員


查看用戶資訊
具我印象所知,你問的三個宣告應該如下。
詳細說明可以參考Compiler User’s Guide (google一下就可以找到)

__attribute__((keep)) 可以應用於函數。 keep 屬性將
使用 --gc-sections 防止Linker時刪除該函數,即使它是
沒用過。

externally_visible,宣告成外部可見的變數或函數

space(prog),宣告使用的是 prog的這個區塊

發表於: 2023/8/21 18:41
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


關於內部Nonvolatile Memory讀寫的問題 SAMC21N18A
#1
新會員
新會員


查看用戶資訊
Dear Microchip Team,

最近再練習MCU內部Memory讀寫的功能,參考了\HarmonyFramework\csp_apps_sam_c20_c21\apps\nvmctrl\ 裡的兩個範例。
兩個範例在宣告記憶體空間的方式不太一樣~

nvmctrl_flash_read_write 中的宣告方式

// Define a constant array in Flash.
// It must be aligned to row boundary and size has to be in multiple of rows

const uint8_t nvm_user_start_address[NVMCTRL_FLASH_ROWSIZE] __attribute__((aligned(NVMCTRL_FLASH_ROWSIZE),keep,externally_visible,space(prog)))= {0};

執行後,使用ICD4回讀整個記憶體的資料,發現寫入的位址是0x1200,但範例程式中並沒有任何起始位址的定義,請問在這樣的情況下,是否就由compiler自行分配位址呢?

nvmctrl_flash_read_while_write 中的宣告方式
const uint8_t nvm_user_start_address[NVMCTRL_FLASH_ROWSIZE] __attribute__((address(NVMCTRL_FLASH_START_ADDRESS+0x20000),keep,externally_visible,space(prog)))= {0};

這裡就有定義執行位址NVMCTRL_FLASH_START_ADDRESS+0x20000, 如果未來想自己定義起始位置,是否可以使用下面的方式宣告呢?

const uint8_t nvm_user_start_address[NVMCTRL_FLASH_ROWSIZE] __attribute__((aligned(NVMCTRL_FLASH_ROWSIZE),address(NVMCTRL_FLASH_START_ADDRESS+0x20000) ,keep,externally_visible,space(prog)))= {0};

最後,是否有大師知道__attribute__中 keep, externally_visible, space(prog) 這三個關鍵詞的功能是什麼?

謝謝~

發表於: 2023/8/8 10:42
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------