CC2530之Flash笔记
參考文章:
http://www.cfanz.cn/?c=article&a=read&id=173767
http://www.xuebuyuan.com/1035130.html
http://blog.csdn.net/crystal736/article/details/8727111
https://wenku.baidu.com/view/b640309043323968001c925d.html
http://www.xuexila.com/diannao/rumen/607222.html
http://www.cnblogs.com/felixfang/p/3420462.html
一、基礎(chǔ)知識
我使用的TI的芯片型號為CC2530-F256,擁有256K的 **Flash**,8K **SRAM**,內(nèi)核為8051,只支持64K訪問空間,以下為一些基本概念。1.CODE. A read-only memory space for program memory. This memory
space addresses 64 KB.
2.DATA. A read/write data memory space that can be directly or indirectly accessed by a single-cycle CPU instruction. This memory space addresses 256 bytes. The lower 128 bytes of the DATA memory space can be addressed either directly or indirectly, the upper 128 bytes only indirectly.
3.XDATA. A read/write data memory space, access to which usually requires 4–5 CPU instruction cycles.This memory space addresses 64 KB. Access to XDATA memory is also slower than DATA access, as the CODE and XDATA memory spaces share a common bus on the CPU core, and instruction
prefetch from CODE can thus not be performed in parallel with XDATA
accesses.
4.SFR. A read/write register memory space which can be directly accessed by a single CPU instruction.This memory space consists of 128 bytes. For SFR registers whose address is divisible by eight, each bit is also individually addressable.
二、CC2530中的 Flash 結(jié)構(gòu)
由于CC2530只支持64K尋址,因此,采用 **Bank**映射的方式尋址,其中,32K作為 **ROOT**,用于存放啟動代碼等,地址空間為 0x0000~0x7FFF;剩余32K用于映射不同的 **Bank**(0~7),地址為0x8000~0xFFFF.在查詢某個(gè) **Bank** 的數(shù)據(jù)或代碼時(shí),將該 **Bank**映射到地址空間 0x8000 ~ 0xFFFF即可。通過ZigBee協(xié)議棧中的定義
#define HAL_FLASH_PAGE_SIZE 2048我們可以知道每頁page的大小為2K,定義每16個(gè)page為1個(gè)Bank,下圖為Bank與page的關(guān)系
Bank地址:
Bank0: 0x00000 ~ 0x07FFFF
Bank1: 0x18000 ~ 0x1FFFFF
Bank2: 0x28000 ~ 0x2FFFFF
Bank3: 0x38000 ~ 0x3FFFFF
Bank4: 0x48000 ~ 0x4FFFFF
Bank5: 0x58000 ~ 0x5FFFFF
Bank6: 0x68000 ~ 0x6FFFFF
Bank7: 0x78000 ~ 0x7FFFFF
三、計(jì)算Bank的數(shù)據(jù)或代碼的地址
在計(jì)算地址前,首先了解物理地址與邏輯地址的概念,及兩者之間的轉(zhuǎn)換公式。 1、物理地址與邏輯地址 物理地址:加載到內(nèi)存地址寄存器中的地址,內(nèi)存單元的真正地址。在前端總線上傳輸?shù)膬?nèi)存地址都是物理內(nèi)存地址,編號從0開始一直到可用物理內(nèi)存的最高端。這些數(shù)字被北橋(Nortbridge chip)映射到實(shí)際的內(nèi)存條上。物理地址是明確的、最終用在總線上的編號,不必轉(zhuǎn)換,不必分頁,也沒有特權(quán)級檢查(no translation, no paging, no privilege checks)。邏輯地址:CPU所生成的地址。邏輯地址是內(nèi)部和編程使用的、并不唯一。例如,你在進(jìn)行C語言指針編程中,可以讀取指針變量本身值(&操作),實(shí)際上這個(gè)值就是邏輯地址,它是相對于你當(dāng)前進(jìn)程數(shù)據(jù)段的地址(偏移地址),不和絕對物理地址相干。
2、物理地址與邏輯地址的轉(zhuǎn)換 (1)確定虛擬地址(物理地址)的有效位 例如:假設(shè)頁面大小1KB,共32頁。(頁面:邏輯地址 頁框:物理地址)
由32(KB)=32×1024(B) 即等于32×1024 字節(jié)
二進(jìn)制用多少位能有效表示這么多字節(jié)呢?
還是以上假設(shè),那么頁面大小為1KB=1024字節(jié) 同樣的方法計(jì)算出表示位數(shù):10位
如果給你邏輯地址:0000 1111 1000 0000
那么由:011+11100000000(相當(dāng)于 頁號+頁面(10位))推得出頁號011=3
(3)根據(jù)頁號找出對應(yīng)的頁框號
由 物理地址=頁框號×頁塊大小(頁塊大小是等于頁面大小的)+頁內(nèi)位移(即頁面邏輯地址)//物理地址=塊的大小(即頁的大小L)*塊號f+頁內(nèi)地址d
根據(jù)上面 物理地址=頁框號×1024B + 1110000000 ( 這里的相加是指位置上而言)
例如:110+110=110110(即高地址+低地址)
bank映射到XDATA的0x8000~0xFFFF中,我們讀取page值為100,偏移量為20的數(shù)據(jù)時(shí),這個(gè)地址通過上面的表達(dá)式就很容易計(jì)算出來為20+0x8000+(100%16)2024 = 0x9FB4,注意這個(gè)地址轉(zhuǎn)換成了(uint8 ),即為XDATA空間的地址。
pg /= HAL_FLASH_PAGE_PER_BANK;計(jì)算page所在的bank,如果pg為100,則其所在bank值為100/16= 6MEMCTR = (MEMCTR & 0xF8) | pg;這句是將剛才計(jì)算所得的bank映射到XDATA的0x8000~0xFFFF中去,MEMCTR的低三位為XDATA的bank選擇位四、其他地址
1、IEEE-D_IEEE_ADDRESS_SPACE_START=(((_NR_OF_BANKS+1)*_FIRST_BANK_ADDR)-0x18)
-D_IEEE_ADDRESS_SPACE_END=(_IEEE_ADDRESS_SPACE_START+7)
-Z(CODE)IEEE_ADDRESS_SPACE=_IEEE_ADDRESS_SPACE_START-_IEEE_ADDRESS_SPACE_END
注:0x18 = 24 = 16 +8;
_IEEE_ADDRESS_SPACE_START容易算出來,_NR_OF_BANKS值為0x07,_FIRST_BANK_ADDR值為0x8000,這些值是在options...里面設(shè)置的。所以_IEEE_ADDRESS_SPACE_START的值為0x40000 - 0x18 = 0x3FFE8,_IEEE_ADDRESS_SPACE_END值就為0x3FFE8+7 = 0x3FFEF。
(備注:每2kb(1page)的flash有1bit的lock位)
-D_ZIGNV_ADDRESS_SPACE_START=(((_NR_OF_BANKS+1)*_FIRST_BANK_ADDR)-0x3800)
-D_ZIGNV_ADDRESS_SPACE_END=(_ZIGNV_ADDRESS_SPACE_START+0x2FFF)
-Z(CODE)ZIGNV_ADDRESS_SPACE=_ZIGNV_ADDRESS_SPACE_START-_ZIGNV_ADDRESS_SPACE_END
總結(jié)
以上是生活随笔為你收集整理的CC2530之Flash笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《BeagleBone开发指南》——1.
- 下一篇: 不在JPA 的 persistence.