在《玩轉(zhuǎn)MCU雙核(上)》文章里,我們給大家介紹了先楫HPM6000系列雙核的特性、使用方法以及工程編譯與調(diào)試。本文緊接上篇內(nèi)容,給大家詳細(xì)闡述雙核的通信方式、資源分配以及雙核應(yīng)用eRPC架構(gòu)。如果大家在練手過程中,有其他的建議和想法,歡迎給我們留言互動(dòng)。
雙核的通信方式
Communication
HPM雙核通信方式有那些?這里列舉如下:
A. 通信外設(shè)通信
如enet/uart/spi/can/i2c/gpio等等。Core0和Core1可通過通信外設(shè)相互之間發(fā)送消息來通信。
( 注意:此方案會(huì)浪費(fèi)對應(yīng)的通訊外設(shè),且需要硬件上支持。)
B. 共享內(nèi)存RAM通信
Core0和Core1通過訪問同一片內(nèi)存RAM來達(dá)到通信。如:一個(gè)核寫,另一個(gè)和讀。
共享RAM要點(diǎn)
1. 雙核下的共享RAM區(qū)域地址及大小必須相同。
2. 為防止CPU cache的影響,共享的RAM區(qū)域在雙核下均要設(shè)置為nocache區(qū)域或者在訪問前后強(qiáng)制刷新cache。
注意:如果設(shè)置為nocache區(qū)域,core0和core1中均要調(diào)用初始化PMP。
例如:
HPM-SDK雙核例程下,雙核linker文件中,均已分配了SHARE_RAM區(qū)域。
Core0 linker文件中的SHARE_RAM區(qū)域分配:
Core1 linker文件中的SHARE_RAM區(qū)域分配:
工程中定義共享RAM區(qū)域,并訪問讀寫。
Core0工程下設(shè)定nocache區(qū)域,并初始化PMP。
Core1工程下同樣設(shè)定為nocache區(qū)域,并初始化PMP。
如下:
Core0工程
Core1工程
通過debug調(diào)試,在core1中打斷點(diǎn),core1中寫共享區(qū)域。
通過串口發(fā)送數(shù)據(jù),在core0中讀取共享區(qū)域。
運(yùn)行結(jié)果如下:
從運(yùn)行結(jié)果看,core1中寫入的共享區(qū)域的數(shù)據(jù)和core0中讀取的共享區(qū)域的數(shù)據(jù)是一致的。
C. 通信信箱MBX通信
HPM支持獨(dú)有的通信信箱MBX來進(jìn)行處理器核間通信。主要特性如下:
● 每個(gè)接口支持 TX FIFO 和 RX FIFO
● 支持標(biāo)志位反映 TX FIFO 和 RX FIFO 狀態(tài)
● 支持生成中斷
雙核MBX通信,參考HPM-SDK例程drivers/mbx。
(注意:當(dāng)然也支持讀寫Flash來通信,考慮到并發(fā)讀寫Flash帶來的異常,此通信方案不推薦使用。)
在這里,推薦大家結(jié)合B和C方案,通過MBX做雙核間的消息傳遞,通過共享RAM的方式來達(dá)到大數(shù)據(jù)的通信。
當(dāng)然通過雙核通信來實(shí)現(xiàn)雙核間的同步和互斥。例如:通過MBX通信,實(shí)現(xiàn)類似OS互斥鎖和信號量的功能。
雙核的資源分配
Resources
HPM雙核資源,除了以下資源是Core0和Core1各自私有的,其余資源均需要合理分配。
● CPU 自身的指令/數(shù)據(jù)本地存儲(chǔ)器 ILM / DLM 為私有
● FGPIO 為私有
● 平臺中斷控制器 PLIC 為私有
● 軟件中斷控制器 PLICSW 為私有
● 機(jī)器定時(shí)器 MCHTMR 為私有
A:雙核Flash 資源分配要點(diǎn)
防止Core0和Core1并發(fā)同時(shí)訪問同一個(gè)flash。例如:結(jié)合MBX通信,實(shí)現(xiàn)互斥鎖來避免并發(fā)訪問。并且考慮到flash_xip(非xip的除外) 片上運(yùn)行,同時(shí)應(yīng)在訪問flash前后,禁止和使能全局中斷。
B:雙核RAM 資源分配要點(diǎn)
1. 除了共享ram區(qū)域和各自私有的ILM/DLM區(qū)域。其余sram和sdram在core0和core1的分配中不可重疊,避免出現(xiàn)未知數(shù)據(jù)錯(cuò)誤。
2. Core0和Core1共享RAM區(qū)域的分配,地址及大小必須相同。
C:雙核訪問同一外設(shè)要點(diǎn)
通常應(yīng)該避免雙核訪問同一個(gè)外設(shè)。如果有需求要同時(shí)訪問同一外設(shè),需要注意以下幾點(diǎn):
1. 禁止雙核均初始化同一外設(shè)。如:Core0已經(jīng)初始化相關(guān)外設(shè),Core1無需再次初始化。
2. 防止Core0和Core1并發(fā)操作同一外設(shè)。例如:結(jié)合MBX通信,實(shí)現(xiàn)雙核互斥鎖來防止并發(fā)操作。
D:雙核使能同一外設(shè)中斷要點(diǎn)
由于雙核Core0/Core1各自的PLIC平臺中斷控制器是私有的,如果雙核均使能了同一個(gè)外設(shè)中斷,需注意以下幾點(diǎn):
1. 禁止雙核均初始化同一外設(shè)。如:Core0已經(jīng)初始化相關(guān)外設(shè),Core1無需再次初始化。
2. 雙核各自的私有PLIC中均要使能當(dāng)前中斷。如:Core0的PLIC中使能了IRQn_GPIO0_Z中斷,Core1的PLIC中同樣也要使能IRQn_GPIO0_Z中斷。
3. 禁止雙核外設(shè)中斷處理接口中均清除中斷標(biāo)識位。如:Core0中清除了當(dāng)前外設(shè)中斷標(biāo)識位,Core1中無需再次清除。如下:
E:雙核異常要點(diǎn)
由于HPM雙核是兩個(gè)獨(dú)立的CPU,是主從架構(gòu)。
當(dāng)雙核出現(xiàn)異常情況,需要注意以下幾點(diǎn):
1. 其中一個(gè)核出現(xiàn)異常(crash)但未重啟,另一個(gè)核仍能正常運(yùn)行,不受影響。
2. Core0異常重啟,Core1也會(huì)隨之重啟。
主從架構(gòu),Core0為主,Core1為從。當(dāng)復(fù)位發(fā)生時(shí),系統(tǒng)總是由Core0啟動(dòng),而Core1處于待機(jī)狀態(tài),需要Core0裝載啟動(dòng)Core1。
3. Core1異常重啟,Core0仍正常運(yùn)行,不受影響。
推薦結(jié)合看門狗WDG來合理處理雙核異常情況。
雙核應(yīng)用eRPC架構(gòu)
eRPC Structure
eRPC(Embeded Remote Procedure Call) 是一個(gè)簡單的、易用的、高效的遠(yuǎn)程調(diào)用框架。
RPC是一種機(jī)制,Client端通過簡單的本地函數(shù)調(diào)用,就能使用Server端提供的服務(wù)。對于Client端而言,使用遠(yuǎn)程服務(wù)就像調(diào)用應(yīng)用程序中內(nèi)置的庫函數(shù)一樣。
當(dāng)Client端調(diào)用遠(yuǎn)程函數(shù)時(shí),該函數(shù)的標(biāo)識(identifier)和函數(shù)的參數(shù)(parameters)將被序列化到字節(jié)流中,此字節(jié)流通過傳輸層的通信通道(IPC、TCP/IP、UART、SPI等)傳至Server端。Server端收到字節(jié)流數(shù)據(jù)后,解析函數(shù)參數(shù)并根據(jù)標(biāo)識選擇調(diào)用的服務(wù)函數(shù)。若函數(shù)有返回值,則Server端將返回值序列化并發(fā)送回Client端。
以下是RPC架構(gòu)框圖(此圖僅顯示一個(gè)傳輸方向,省略了來自Server端的回復(fù))。
對應(yīng)多核(MultiCore)應(yīng)用,通過RPMsg-Lite是作為傳輸層;對于多芯片(MultiProcessor)應(yīng)用,通過UART、SPI、TCP/IP等作為傳輸層信號通道。
HPM6000系列雙核應(yīng)用,將使用RPmsg-Lite作為傳輸層。
RPMsg-Lite(Remote Processor Messaging Lite)是ePRC的傳輸層,RPMsg協(xié)議定義了一個(gè)標(biāo)準(zhǔn)化的二進(jìn)制接口,用于在多核系統(tǒng)中內(nèi)核之間的通信。
RPMsg協(xié)議的分層模型如下:
它是實(shí)現(xiàn)eRPC的關(guān)鍵部分,采用的數(shù)據(jù)通訊方式為共享內(nèi)存和消息通知。
詳細(xì)介紹參考GitHub官方網(wǎng)站:
https://github.com/EmbeddedRPC/erpc
https://github.com/nxp-mcuxpresso/rpmsg-lite
HPM-SDK已完成了eRPC的移植,采用RPmsg-Lite作為數(shù)據(jù)傳輸層,采用MBX作為事件通知。
例程:hpm_sdksamplesmulticoreerpc
本次對先楫HPM6000系列雙核的內(nèi)容介紹到此結(jié)束,大家有什么建議或想法,或是您想進(jìn)一步了解先楫半導(dǎo)體產(chǎn)品的其他內(nèi)容,歡迎給我們留言互動(dòng)。先楫生態(tài)社區(qū)需要您的關(guān)注和支持,感謝!
“先楫半導(dǎo)體”(HPMicro)是一家致力于高性能嵌入式解決方案的半導(dǎo)體公司,產(chǎn)品覆蓋微控制器、微處理器和周邊芯片,以及配套的開發(fā)工具和生態(tài)系統(tǒng)。公司成立于2020年6月,總部坐落于上海市張江高科技園區(qū),并在天津、深圳、蘇州和杭州均設(shè)立分公司。核心團(tuán)隊(duì)來自世界知名半導(dǎo)體公司管理團(tuán)隊(duì),具有15年以上,超過20個(gè)SoC的豐富的研發(fā)及管理經(jīng)驗(yàn)。
先楫半導(dǎo)體以產(chǎn)品質(zhì)量為本,所有產(chǎn)品均通過嚴(yán)格的可靠性測試。目前已經(jīng)量產(chǎn)的高性能通用MCU產(chǎn)品系列HPM6700/6400、HPM6300及HPM6200,性能領(lǐng)先國際同類產(chǎn)品,并完成AEC-Q100認(rèn)證,全力服務(wù)中國工業(yè),汽車和能源市場。
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
146文章
16885瀏覽量
349914 -
通信
+關(guān)注
關(guān)注
18文章
5949瀏覽量
135782 -
雙核
+關(guān)注
關(guān)注
0文章
37瀏覽量
15169 -
編譯
+關(guān)注
關(guān)注
0文章
648瀏覽量
32774
原文標(biāo)題:玩轉(zhuǎn)先楫HPM6000系列雙核(下)
文章出處:【微信號:HPMicro,微信公眾號:先楫半導(dǎo)體HPMicro】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論