一、有關(guān)CCM訪問地址的話題
有用過STM32F4系列部分芯片或STM32F334芯片的人,可能知道片內(nèi)有個(gè)CCM【Core Coupled Memory】區(qū)域,從芯片系統(tǒng)框圖結(jié)合文字說明,可以清晰知道這個(gè)區(qū)域僅能被CPU訪問,常用來存放些對執(zhí)行效率敏感的關(guān)鍵性的代碼或數(shù)據(jù)。也就是說對于這兩個(gè)系列的CCM區(qū)域,DMA是訪問不了的。
下面截圖分別來自STM32F42X/STM32F43X器件和STM32F334器件的參考手冊。
到了STM32G4系列,里面依然也有CCM這個(gè)區(qū)域。見下面STM32G4系統(tǒng)框架圖。
從框架圖上看,這個(gè)CCM區(qū)域不僅可以被CPU訪問,也可以被DMA訪問。關(guān)于它的起始地址也有相關(guān)描述:
從上面描述來看,CCM的地址起始于0x1000 0000和SRAM2結(jié)尾的地方。至于SRAM2結(jié)尾的地址還跟STM32G4具體的子系列或型號(hào)有關(guān),見下面截圖資料:
那么這兩個(gè)地址空間怎么用,或者說區(qū)別是什么呢?
當(dāng)為了充分發(fā)揮CPU對這塊區(qū)域的訪問效能時(shí)就使用0x1000 0000開始的地址空間,此時(shí)CPU通過ICode總線訪問這個(gè)區(qū)域。這塊地址空間DMA是訪問不了的,屬CPU專訪區(qū)。
若希望DMA訪問這塊物理區(qū)域,DMA要通過總線矩陣來訪問,所用的空間則是0x20005800或0x20018000(視具體系列而定)開始的一段地址。此時(shí),這個(gè)CCM區(qū)域在DMA眼里,不過是SRAM2區(qū)域延伸出來的一塊別名區(qū)。當(dāng)我們試圖讓DMA訪問這個(gè)區(qū)域時(shí),地址別給錯(cuò)了,不要使用CPU的專用地址,而要給0x20005800或0x20018000開始的地址。
也就是說同一個(gè)物理空間,不同的主體通過走不同的地址路線而實(shí)現(xiàn)不同的訪問、執(zhí)行性能。這樣的設(shè)計(jì)更具靈活性,以滿足五彩斑斕的實(shí)際應(yīng)用需求。就像我們要到達(dá)某個(gè)地方完成某事,有人走正門,有人走側(cè)門,甚至有人飛檐走壁,各用所便,各盡所能,各取所需。
當(dāng)然,G4系列的CCM除了上面因訪問主體不同采樣不同地址空間的靈活特性外,還加強(qiáng)了很多安全特性,比方奇偶校驗(yàn)、讀寫保護(hù)等,有興趣可以進(jìn)一步閱讀相關(guān)參考手冊。
二、有關(guān)位帶操作的話題
有人問起STM32G4系列是否支持位帶操作方面的相關(guān)話題。
要問STM32某個(gè)系列是否支持位帶操作,首先得看看相關(guān)STM32系列所用ARM內(nèi)核是否支持位帶操作。如果內(nèi)核本身就不支持位帶功能,STM32是不會(huì)支持該功能的。反之,如果相關(guān)ARM核支持位帶操作,基于該核的STM32系列一般都會(huì)支持位帶操作,而且在相關(guān)STM32參考手冊里一定會(huì)明確說明?!酒鋵?shí),第三方芯片設(shè)計(jì)者在基于ARM核設(shè)計(jì)、集成芯片時(shí),對于內(nèi)核的部分功能或者核外設(shè)是有取舍權(quán)的?!?/p>
具體到STM32G4系列芯片,它屬于cortex M4核,該核內(nèi)置位帶功能,STM32G4芯片也集成了該功能,在STM32G4參考手冊上也有明確描述。【下圖截取于STM32G4參考手冊】
這里的位帶區(qū)特指一段片內(nèi)SRAM空間和外設(shè)寄存器空間。位帶區(qū)的SRAM里的每一位或外設(shè)寄存器的每一位都可以通過訪問相應(yīng)的另外一段地址空間的一個(gè)字實(shí)現(xiàn)讀寫操作,這個(gè)另外一段地址空間就稱之為位帶區(qū)的別名區(qū)。
不過,在STM32參考手冊里,針對位帶操作的介紹相對比較簡單,主要是因?yàn)锳RM內(nèi)核相關(guān)手冊有較為詳細(xì)的描述。STM32參考手冊里主要就如何計(jì)算別名區(qū)的地址做了個(gè)演示,并提示閱讀相關(guān)ARM 內(nèi)核手冊。
上圖截取于STM32G4參考手冊RM0440。有人納悶示例中的0x2200,0000是從哪里來的?翻遍整個(gè)G4系列參考手冊也不知它怎么冒出來的。其實(shí),這個(gè)地址是在Arm cortex M4內(nèi)核手冊里明確的。見下圖:
上圖來自于Cortex -M4Devices Generic User Guide。
上圖清晰了給出兩塊位帶區(qū)【SRAM區(qū)和外設(shè)寄存器區(qū)】以及對應(yīng)的別名區(qū)的地址邊界和對應(yīng)關(guān)系。圖中淺紫色表示位帶區(qū),綠色表示別名區(qū)。顯然,位帶區(qū)字節(jié)地址為0x2000,0000的bit0對應(yīng)別名區(qū)的字地址就是0x2200,0000;位帶區(qū)字節(jié)地址為0x2000,0000的字節(jié)的bit1對應(yīng)別名區(qū)的字地址就是0x2200,0004,這樣依此類推。
關(guān)于位帶操作的介紹,除了上面的Memory框圖外,在內(nèi)核手冊里還有更多包括地址計(jì)算在內(nèi)的詳細(xì)介紹。下面三副截圖均來自M4內(nèi)核用戶手冊。
關(guān)于位帶操作的介紹就聊到這里,順便給幾點(diǎn)提醒:
1、不是所有STM32系列都支持位帶操作,是否支持終究由內(nèi)核決定;
2、執(zhí)行位帶操作的主體只能是CPU,而不能是別的,比方DMA;
3、位帶操作只支持針對數(shù)據(jù),而不能針對指令;
上面主要分享了STM32G4系列中有關(guān)CCM和Bit Banding應(yīng)用方面的話題,做了些提醒及分享,以供參考。
審核編輯:湯梓紅
-
cpu
+關(guān)注
關(guān)注
68文章
10804瀏覽量
210828 -
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354291 -
CCM
+關(guān)注
關(guān)注
0文章
144瀏覽量
23898 -
STM32F334
+關(guān)注
關(guān)注
0文章
6瀏覽量
4781
原文標(biāo)題:STM32G4系列存儲(chǔ)訪問的兩個(gè)小話題
文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論