本文以CC2530的F256為例,即有256kb的flash存儲器和8K的sram存儲器
一、CC2530裡的四種存儲空間(結構上劃分的存儲空間,并不是實際的存儲器,是一種理論上的概念)
1. CODE 程式存儲器 用處存放程式代碼和一些常量
有16根位址總線,是以CODE的尋址範圍是 0000H~FFFFH 共64KB
2. DATA 資料存儲器 用于存放程式運作過程中的資料
有8根位址總線,是以DATA的尋址空間為 00H~FFH 共256 byte.低128位可以直接尋址,高128位隻能間接尋址。
3. XDATA 外部資料存儲器(隻能間接尋址,通路速度比較慢) DMA是再XDATA上尋址的,這一點很重要
有16根位址總線,是以 XDATA 的尋址空間為 0000H ~ FFFFH 共64K
4. SFR 特殊功能寄存器 就是那些T1CTL, EA, P0 等配置寄存器存儲的地方 共128K。因為CC2530的配置寄存器比較多,是以一些多餘的寄存器就放到了 XREG 裡面。XREG的大小為1K XREG的通路速度比 SFR慢。
以上4中存儲空間隻是4種不同尋址方式的概念,并不代表實體上具體的儲存設備。例如 FLASH 或者 EEPROM都可以作為實體的存儲媒介映射 到CODE上,DRAM或者SRAM都可以作為存儲媒介映射到DATA中。CODE和DATA是存儲空間的概念,FLASH、SRAM、EEPROM等是具體的實體存 儲裝置,這兩個概念不要混淆。這好比,電腦需要RAM和ROM,這個ROM可以是西部資料的硬碟,也可以使三星的硬碟,也可以是不同材料的固态硬碟。一個是存儲空間,另一個是具體的實體儲存設備。
二、關于CODE存儲器的映射
大家肯定會有疑問:既然CODE的尋址範圍隻有64KB,那CC2530F256怎麼有256KB的flash呢?
正是為了解決尋址空間不足的問題,CC2530才提出了映射的概念。(當然,映射的另一重要目的是為了DMA)
CC2530把FLASH存儲器分成了幾個bank,每個bank的大小是32KB,即對于F256來講,它有8個bank分别是bank0~bank7(不同晶片,bank數目不同)。通過FMAP.MAP[2:0] 控制,把不同的編号的bank映射到CODE上,解決了尋址空間受限制的問題。上圖..

從圖中可以看出,bank0是rootbank,就是程式開始執行的地方,這個common area始終都是對應FLASH存儲器的0000H~7FFFH, 上面的另一半可以映射bank0~7. 我以前一直疑惑,為什麼common area已經有bank0了,上面怎麼還可以有bank0,從user guide裡看,這樣是可以的,就比如CC2530F32,隻有一個bank0,它也隻能這麼映射了吧。
三、關于XDATA存儲器的映射
關于XDATA的映射,可以這麼說:一切都是為了DMA!! 為了讓DMA能通路所有的存儲區域,是以把所有的存儲器都映射到了XDATA上。上圖:
從圖中可以看出,XDATA中包含了所有存儲器的映射,包括256kb的FLASH存儲器,8K 的SRAM存儲器,還有 SFR , XREG, INFORMATION FAGE。這裡看出來,其實CC2530的DATA,和 XDATA,都是用SRAM作為實體存儲媒介的,但是它們的尋址方式不一樣,是以通路DATA,比通路XDATA要快。至于SFR,XREG,INFORMATION PAGE,我不知道它們用了什麼實體存儲媒介,但是它們都被映射到XDATA上,可以被DMA通路。
這裡要搞清楚一個概念,映射到XDATA上,不代表就隻能用XDATA的尋址方式通路。比如SFR,它雖然被映射到了XDATA上,隻能說明,DMA可以通過通路XDATA來操作SFR,但是CPU還是可以通過單周期通路SRF.打個比方,我們平時坐的公共汽車上都有一把逃生應急錘,在緊急情況下可以敲破窗子逃生。我們平時不會使用錘子敲碎窗子進出車廂,我們平時有車門可以走。但是在特殊情況下(比如DMA要操作某個存儲器中的資料時),我們可以用特殊的方法(從XDATA上的映射來得到我們想要的資料)。
四、關于從SRAM啟動代碼
這種情況下,CC2530把SRAM存儲器整個都映射到了CODE的bank area,可以從SRAM中執行代碼。不要了解錯了,這裡隻是說可以從SRAM中運作代碼,不代表程式從SRAM中啟動。程式還是會從 CODE的rootbank的0000H開始執行,隻不過我們可以通過程式控制,讓程式跳到 8000H之後,執行我們SRAM中想要的代碼。
CC2530存儲空間的使用
IAR中CC2530的有兩種代碼模式,Near和Banked。其中Banked模式是ZStack使用的模式,ZStack的ROM使用大約在100多KB。其中Near是普通的51單片機模式,隻支援64KB的通路範圍