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

AN4232_STM32F3和 STM32G4的模擬比較器入門(mén)指南

AN5310_使用STM32F3系列與STM32G4系列設(shè)備的模擬特性指南

UM2492_從STM32G4系列的STM32CubeG4開(kāi)始的用戶(hù)手冊(cè)

STM32G4電機(jī)驅(qū)動(dòng)實(shí)例

STM32G4市場(chǎng)和特性篇

評(píng)論