0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Vybrid非對稱多核架構(gòu)的裸機(jī)固件

星星科技指導(dǎo)員 ? 來源:嵌入式計算設(shè)計 ? 作者:Stefan Agner, Torad ? 2022-06-14 09:24 ? 次閱讀

在上一篇文章中,Valter Minute 討論了總體架構(gòu)以及非對稱(也稱為異構(gòu))多核 SoC 的優(yōu)勢。對于次要 Cortex-M4 內(nèi)核的操作平臺有多種選擇:Valter 文章中討論的示例使用 eCos RTOS,飛思卡爾推廣自己的 RTOS MQX。

然而,根據(jù)應(yīng)用程序的不同,人們甚至可能更喜歡裸機(jī)解決方案,例如移植舊版固件或?yàn)榱似浜唵涡?。但是,也有缺點(diǎn),最突出的是缺少外圍設(shè)備的驅(qū)動程序。本文展示了為 Vybrid 的 Cortex-M4 內(nèi)核創(chuàng)建定制的裸機(jī)固件時的一些技術(shù)缺陷。

作為一個示例環(huán)境,我決定為開源固件庫 libopencm3 貢獻(xiàn) Vybrid 支持。該庫在 LGPL 版本 3 下獲得許可,因此明確允許將封閉源應(yīng)用程序與該庫鏈接。盡管它的名字,這個庫也支持各種 Cortex-M4 微控制器,因此它非常適合 Vybrid 的 Cortex-M4 內(nèi)核。使用該庫,我們可以利用對 Cortex-M4 內(nèi)核外設(shè)的支持,例如系統(tǒng)滴答定時器或嵌套中斷控制器。有人可能會爭辯說,使用庫并不是真正的裸機(jī),但是由于庫的幾乎所有組件都是完全可選的,因此與使用完整的 RTOS 相比,它更接近于裸機(jī)。

該代碼尚未合并到上游項(xiàng)目中,但已經(jīng)可以從 Github 獲得(切換到 fsl-vf6xx 分支):https ://github.com/falstaff84/libopencm3和https://github.com/falstaff84/libopencm3-examples 。 此處的詳細(xì)構(gòu)建說明:http: //falstaff.agner.ch/2014/07/10/libopencm3-bare-metal-vybrid-examples/

內(nèi)存和閃存

標(biāo)準(zhǔn)微控制器和 Vybrid 的 Cortex-M4 之間的第一個也是最顯著的區(qū)別是不同的內(nèi)存和閃存架構(gòu)。在微控制器上,非易失性存儲器通常可在控制器的線性地址空間中訪問,從而允許它執(zhí)行就地固件 (XIP)。在 Vybrid 上,非易失性內(nèi)存通常不會以允許其就地執(zhí)行的方式實(shí)現(xiàn)。相反,固件由主操作系統(tǒng)(例如 Linux)從存儲介質(zhì)(例如 NAND 閃存)加載到 RAM 中,隨后由 Cortex-M4 內(nèi)核執(zhí)行。

有不少于三種內(nèi)存類型可供運(yùn)行:緊密耦合內(nèi)存、片上內(nèi)存 (OC-RAM/SRAM) 和外部 (DDR) 內(nèi)存。緊密耦合內(nèi)存 (TCM) 是可用的最快內(nèi)存,因?yàn)樗苯舆B接到 Cortex-M4 內(nèi)核。但是,可用的內(nèi)存量也非常有限。片上存儲器 SRAM 是一種流行的選擇,因?yàn)樗诔叽绾退俣确矫嫣峁┝肆己玫恼壑?。飛思卡爾提供了一份詳盡的文檔,討論了可用內(nèi)存類型的速度和建議(請參閱 AN4947,了解 Vybrid 架構(gòu))。

pYYBAGKn44KAH2VaAAD-7G1PrYY786.png

另一方面是 Cortex-M4 的哈佛式架構(gòu),它由兩條總線組成,一條用于數(shù)據(jù),一條用于指令。為了確保硬件相應(yīng)地使用這兩條總線,內(nèi)存映射提供別名以使用兩條總線訪問相同的內(nèi)存位置:

OC-RAM Code-Bus: 0x1f000000-0x1f03ffff

OC-RAM System-Bus: 0x3f000000-0x3f03ffff

為獲得最佳性能,應(yīng)在鏈接器文件的內(nèi)存描述中考慮到這一點(diǎn);libopencm3 庫定義了兩個內(nèi)存區(qū)域,代碼總線 (pc_ram) 和系統(tǒng)總線 (ps_ram)。在以下示例中,可用內(nèi)存被分成兩半,每個部分有 256K 的 RAM。由于地址是整個內(nèi)存范圍的別名,因此可以根據(jù)項(xiàng)目需要自由調(diào)整這兩個部分的大小。

鏈接器控制文件片段:examples/vf6xx/colibri-vf61/colibri-vf61.ld

MEMORY

{

pc_ram (rwx) : ORIGIN = 0x1f000000, LENGTH = 256K

ps_ram (rwx) : ORIGIN = 0x3f040000, LENGTH = 256K

}

在節(jié)部分,我們需要將代碼節(jié)(文本)和數(shù)據(jù)節(jié)(例如 bss)的位置分配給這兩個內(nèi)存區(qū)域。

鏈接器控制文件片段:lib/vf6xx/libopencm3_vf6xx.ld

SECTIONS

{

.text : {

*(.vectors) /* Vector table */

。 = ALIGN(0x400);

*(.text.reset_handler) /* Force reset handler at start */

*(.text*) /* Program code */

。 = ALIGN(4);

} 》pc_ram

。..

.bss : {

*(.bss*) /* Read-write zero initialized data */

*(COMMON)

。 = ALIGN(4);

_ebss = 。;

} 》ps_ram

。..

}

向量表和入口地址

另一個重要方面是向量(中斷)表。在 Cortex-M4 上,向量表0x00000000在復(fù)位時讀取。在微控制器上,這通常位于非易失性存儲器中。在 Vybrid 上,Cortex-M4 內(nèi)核最初是關(guān)閉的。在固件的初始化代碼中,我們可以使用向量表偏移寄存器 (VTOR) 來定義向量表的自定義位置。在上面的鏈接器文件中,向量表明確放置在固件的開頭。lib/vf6xx/vector_chipset.c 中的初始化代碼確保在啟動時設(shè)置 VTOR 寄存器。

對于 Cortex-M4 微控制器,入口點(diǎn)(也稱為復(fù)位向量)是向量表的一部分。這引入了對 Vybrid 的循環(huán)依賴,因?yàn)槲覀儚墓碳a中初始化向量表(無法從 Cortex-A5 內(nèi)核訪問 VTOR 寄存器)。為了解決這個難題,輔助內(nèi)核的入口點(diǎn)(“復(fù)位向量”)由系統(tǒng)復(fù)位控制器 (SRC) 模塊的寄存器在外部定義。對于飛思卡爾的啟動實(shí)用程序“mqxboot”,在 Cortex-A5 內(nèi)核上運(yùn)行的 mcc 內(nèi)核模塊中的啟動實(shí)現(xiàn)可確保相應(yīng)地設(shè)置此寄存器。用戶需要將入口點(diǎn)作為參數(shù)傳遞給“mqxboot”。注意:地址需要將位 0 設(shè)置為 1,以告訴 CPU 目標(biāo)是 Thumb 代碼(另請參閱參考手冊的“運(yùn)行輔助內(nèi)核”一章)。

例如,要將固件 demo.bin 加載到 SRAM 并在輔助內(nèi)核上啟動它,可以在主內(nèi)核上運(yùn)行的 Linux 上使用 mqxboot:

mqxboot

mqxboot demo.bin 0x3f000000 0x1f000401

加載地址需要可從 Cortex-A5 訪問。在本例中,這是 SRAM 的開始。但是,入口點(diǎn)地址是僅適用于 Cortex-M4 內(nèi)核的代碼總線別名。

時鐘

由于 Cortex-M4 在源自 Cortex-A5 內(nèi)核時鐘的系統(tǒng)時鐘上運(yùn)行,因此從 Cortex-M4 側(cè)更改時鐘并不是一個好主意。然而,為了計算時序,讀取時鐘寄存器以獲得當(dāng)前速度是必要的。在libopencm3中,計算邏輯在lib/vf6xx/ccm.c下實(shí)現(xiàn)。主要時鐘是 ARM 內(nèi)核時鐘 (ccm_core_clk)、平臺總線時鐘(也是 Cortex-M4 內(nèi)核時鐘 (ccm_platform_bus_clk) 以及 IPS(外設(shè))時鐘 (ccm_ipg_bus_clk))。

溝通

另一方面是與運(yùn)行在 Cortex-A5 上的主操作系統(tǒng)進(jìn)行通信的通信基礎(chǔ)設(shè)施。libopencm3 實(shí)現(xiàn)目前不支持通信??赡茏詈唵蔚耐ㄐ艑?shí)現(xiàn)是定義一個可以從雙方訪問的共享內(nèi)存區(qū)域(考慮使用使用獨(dú)占加載/存儲指令 LDREX/STREX 的同步機(jī)制)。更復(fù)雜一點(diǎn)的是 MQX RTOS 的多核通信 (MCC) 組件的實(shí)現(xiàn)。該組件利用硬件信號量模塊 (SEMA4) 以及四個 CPU 到 CPU 中斷之一在有新消息可用時通知另一個 CPU。可以下載最近的 MQX 版本(4.0.2 及更高版本)以獲取 MCC 的源代碼(驗(yàn)證許可證是否涵蓋您的用例)。

結(jié)論

在 Vybrid 上移植或?qū)崿F(xiàn)裸機(jī)固件是可能的,而且不是很復(fù)雜。畢竟,Vybrid 內(nèi)部的 Cortex-M4 仍然是執(zhí)行 ARMv7-M 架構(gòu)的 Cortex-M4 內(nèi)核。除了外圍驅(qū)動程序,鏈接器文件以及初始設(shè)置代碼需要一些特殊考慮。

作者:Stefan Agner, Toradex

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7334

    瀏覽量

    150093
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    15879

    瀏覽量

    175344
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5250

    瀏覽量

    119195
收藏 人收藏

    評論

    相關(guān)推薦

    混合部署 | 在迅為RK3568上同時部署RT-Thread和Linux系統(tǒng)

    非對稱多處理)是一種更靈活的架構(gòu),允許不同的核心運(yùn)行不同的操作系統(tǒng),實(shí)現(xiàn)更高效的資源利用和任務(wù)分配。通過 AMP,系統(tǒng)可以為不同的任務(wù)選擇最合適的操作系統(tǒng)和處理方式。 當(dāng)前迅為iTOP-RK3568開發(fā)板
    發(fā)表于 09-18 10:54

    請問高頻放大器用非對稱電源供電會有什么影響?

    高頻放大器用非對稱電源供電會有什么影響?
    發(fā)表于 08-29 06:22

    OPA828運(yùn)放非對稱電源供電有什么好處嗎?

    看到一些精密儀器的電路運(yùn)放好像特意設(shè)計成非對稱電源供電,比如+14v、-17v這種,請問運(yùn)放非對稱電源供電有什么好處嗎?信號擺幅不超過正負(fù)7v
    發(fā)表于 08-01 06:48

    TL084能否采用-5V和+ 32V的非對稱雙電源供電呢?

    看手冊雙電源最高支持到+-20V,單電源是4.5V到40V。請問一下能否采用-5V和+ 32V的非對稱雙電源供電呢?
    發(fā)表于 07-29 06:50

    【本周六-上?!縎MP對稱多處理 線下培訓(xùn)

    對稱多處理(SymmetricMultiprocessing,SMP)是一種常見的并行計算架構(gòu),其中多個處理器核心共享相同的內(nèi)存和總線系統(tǒng)。這種架構(gòu)允許多個處理器核心同時運(yùn)行獨(dú)立的指令流,從而
    的頭像 發(fā)表于 06-13 08:35 ?189次閱讀
    【本周六-上?!縎MP<b class='flag-5'>對稱多</b>處理 線下培訓(xùn)

    線下培訓(xùn) | 瑞薩電子基于RZ/G2L的OpenAMP混合部署實(shí)戰(zhàn)培訓(xùn)

    OpenAMP一個提供用于處理非對稱多處理(AMP)系統(tǒng)的軟件組件,可以簡化異構(gòu)多核處理器系統(tǒng)間的高效通信,提供跨平臺、可擴(kuò)展且靈活的解決方案。通過OpenAMP,開發(fā)人員可以輕松地在不同架構(gòu)
    的頭像 發(fā)表于 05-17 08:01 ?404次閱讀
    線下培訓(xùn) | 瑞薩電子基于RZ/G2L的OpenAMP混合部署實(shí)戰(zhàn)培訓(xùn)

    多核架構(gòu)高性能電機(jī)控制芯片

    基于傳統(tǒng)單核架構(gòu)的電機(jī)控制芯片已無法應(yīng)對新出現(xiàn)的嚴(yán)峻挑戰(zhàn),多核架構(gòu)的控制芯片應(yīng)運(yùn)而生。雙核架構(gòu)芯片已在許多領(lǐng)域成功應(yīng)用,并顯示出其獨(dú)特的優(yōu)勢,可以利用無傳感器技術(shù)實(shí)現(xiàn)高性能的電機(jī)控制模
    的頭像 發(fā)表于 04-19 14:46 ?3451次閱讀
    <b class='flag-5'>多核</b><b class='flag-5'>架構(gòu)</b>高性能電機(jī)控制芯片

    單相降壓轉(zhuǎn)換器雙非對稱BG評估板數(shù)據(jù)手冊

    電子發(fā)燒友網(wǎng)站提供《單相降壓轉(zhuǎn)換器雙非對稱BG評估板數(shù)據(jù)手冊.rar》資料免費(fèi)下載
    發(fā)表于 04-14 17:10 ?0次下載
    單相降壓轉(zhuǎn)換器雙<b class='flag-5'>非對稱</b>BG評估板數(shù)據(jù)手冊

    單相降壓轉(zhuǎn)換器雙非對稱AG評估板數(shù)據(jù)手冊

    電子發(fā)燒友網(wǎng)站提供《單相降壓轉(zhuǎn)換器雙非對稱AG評估板數(shù)據(jù)手冊.rar》資料免費(fèi)下載
    發(fā)表于 04-14 17:02 ?0次下載
    單相降壓轉(zhuǎn)換器雙<b class='flag-5'>非對稱</b>AG評估板數(shù)據(jù)手冊

    對稱多相網(wǎng)絡(luò)的工作原理

    本文披露了對稱的多相網(wǎng)絡(luò),該網(wǎng)絡(luò)至少包括一個多相網(wǎng)絡(luò)部分,其中包括個單相網(wǎng)絡(luò)電路,每一個電路都有一個第一阻抗,它連接在與該電路相關(guān)的輸入和輸出端子之間。
    的頭像 發(fā)表于 03-25 10:43 ?341次閱讀
    <b class='flag-5'>對稱多</b>相網(wǎng)絡(luò)的工作原理

    G473使用TIM1非對稱模式做移相,用TIM8Combined PWM模式做對角的移相與門輸出,為什么時序不對?

    G473使用TIM1非對稱模式做移相,用TIM8Combined PWM模式做對角的移相與門輸出,為啥占空比對了時序不對?
    發(fā)表于 03-14 07:49

    為什么三相短路是對稱故障?單相短路是非對稱故障呢?

    為什么三相短路是對稱故障?單相短路是非對稱故障呢? 三相短路是對稱故障,而單相短路是非對稱故障,其根本原因在于電網(wǎng)中的相量關(guān)系和電壓分布。 首先,
    的頭像 發(fā)表于 02-18 11:41 ?2519次閱讀

    “國產(chǎn)雙系統(tǒng)”出爐,RK3568J非對稱AMP:Linux+RTOS/裸機(jī)

    處理架構(gòu)?!?b class='flag-5'>非對稱AMP”雙系統(tǒng)是指多個核心相對獨(dú)立運(yùn)行不同的操作系統(tǒng)或裸機(jī)應(yīng)用程序,如Linux + RTOS/裸機(jī),但需一個主核心來控制整個系統(tǒng)以及其它從核心。每個處理器核心相互隔
    發(fā)表于 12-01 09:35

    AUTOSAR架構(gòu)下的多核通信介紹

    隨著汽車ECU迅速的往域控制器方向發(fā)展,ECU要處理的任務(wù)越來越多,單核CPU的負(fù)載越來越大,多核ECU勢在必行。AUTOSAR架構(gòu)下OS支持多核處理,本系列文章將詳細(xì)介紹AUTOSAR架構(gòu)
    的頭像 發(fā)表于 11-13 09:24 ?1673次閱讀
    AUTOSAR<b class='flag-5'>架構(gòu)</b>下的<b class='flag-5'>多核</b>通信介紹

    基于Tricore芯片的AUTOSAR架構(gòu)下的多核啟動

    隨著汽車ECU迅速的往域控制器方向發(fā)展,ECU要出來任務(wù)越來越多,單核CPU的負(fù)載越來越大,多核ECU勢在必行。AUTOSAR架構(gòu)下OS支持多核處理,本系列文章將詳細(xì)介紹AUTOSAR架構(gòu)
    的頭像 發(fā)表于 10-23 10:15 ?2575次閱讀
    基于Tricore芯片的AUTOSAR<b class='flag-5'>架構(gòu)</b>下的<b class='flag-5'>多核</b>啟動