在嵌入式設備拼性能、拼響應、拼功耗的內卷時代,雙核協作才是破局的關鍵。傳統的對稱多處理(SMP)架構已難以兼顧全場景需求,非對稱多處理(AMP)異構架構正在成為行業主流,在這樣的背景下,全志T153平臺直接搬出ARM+RISC-V的“雙核CP”:主打高性能計算的Cortex-A7核心運行Linux,聚焦高實時性任務的RISC-V E907核心運行RTOS,組成 “互補型搭檔”。
本文會通過飛凌嵌入式OK153-S開發板,為大家實測這對雙核CP的協作實力——依托異構核間通訊機制(IPC)與Suspend/Resume電源管理機制,全面驗證A核與R核的協同工作能力,并驗證異構多核環境下的數據交互效率與智能化喚醒邏輯。
1、休眠喚醒功能驗證
pm_test 節點可以用于測試Linux部分的休眠喚醒功能。設備凍結后,等待5s,即返回,執行喚醒動作。
echodevices > /sys/power/pm_test設備進入休眠:
echomem > /sys/power/state執行以上命令后,設備5s后會被喚醒。
2、R核喚醒休眠的A核
“功耗管理”是產品續航與成本控制的核心競爭力。T153處理器的異構多核架構為此提供了的解決方案:
A核休眠:ARM核在空閑時進入WFI深度睡眠,功耗降至最低;
R核值守:RISC-V核心持續運行,監聽外部事件;
按需喚醒:當傳感器觸發、定時任務到達時,R核一鍵喚醒A核處理復雜任務。
A核進入WFI模式,R核運行在DRAM上,R核喚醒A核。
首先設置主核休眠時,DRAM不進入自刷新,從核保持運行在DRAM上。可以通過linux控制臺輸入以下命令切換:
echo0>/sys/class/pm_msgbox/set_dram_refresh然后A核進入休眠狀態:
echomem > /sys/power/state使用R核喚醒A核。我們的R核提供了cpux_resume接口來喚醒主核,在R核中執行以下命令進行A核喚醒:
cpux_resume
在低功耗場景下,高性能的A核休眠待機,低功耗的R核持續值守。當外部事件觸發時,R核可瞬間喚醒A核響應任務。這種 "小核值班、大核待命" 的架構,讓設備在續航與實時響應之間達到平衡。
3、雙核通訊驗證
T153處理器采用ARM Cortex-A7+RISC-V 的多核異構架構,讓系統兼具"大腦"與"小腦",而異構核間通訊機制(IPC)正是連接兩個"腦"的高速通道,通過共享內存機制,雙核之間可實現數據傳輸。以下是操作方法:
測試之前首先使能R核:
echo amp_rv0.bin > /sys/class/remoteproc/remoteproc0/firmware
echo start > /sys/class/remoteproc/remoteproc0/state(1)RISC-V端例程
rtos/lichee/rtos-components/aw/rpbuf/rpbuf_demo/rpbuf_test.c命令使用方法:
static void print_help_msg(void)
{
printf("\n");
printf("USAGE:\n");
printf(" rpbuf_test [OPTIONS]\n");
printf("OPTIONS:\n");
printf(" -h : print help message\n");
printf(" -c : create buffer\n");
printf(" -C : Send Cnt(default: 1)\n");
printf(" -d : destory buffer\n");
printf(" -s : send test messagese\n");
printf(" -l : list created buffers\n");
printf(" -a : sync transmit\n");
printf(" -I ID : specify controller ID (default: 0)\n");
printf(" -N NAME : specify buffer name (default: "%s")\n",
RPBUF_BUFFER_NAME_DEFAULT);
printf(" -L LENGTH : specify buffer length (default: %d bytes)\n",
RPBUF_BUFFER_LENGTH_DEFAULT);
printf(" -p : print performance data\n");
printf("\n");
printf("e.g.\n");
printf(" First, create a buffer (its name and length should match "
"that of remote rpbuf buffer):\n");
printf(" rpbuf_buffer -N "xxx" -L LENGTH -c\n");
printf(" Then if remote sends data to it, the buffer callback will be called.\n");
printf("\n");
printf(" We can send test data to remote:\n");
printf(" rpbuf_test -d 100 -s -L 32\n");
printf("\n");
printf(" If this buffer is no longer in use, destroy it:\n");
printf(" rpbuf_test -N "xxx" -d\n");
printf("\n");
}參數解釋:
-c 創建緩沖區
-C發送次數
-d銷毀
-i 哪個節點
-a數據同步
-N名字
-L緩沖區大小
(2)A核例程
命令使用方法:
static void print_help_msg(void)
{
printf("\n");
printf("USAGE:\n");
printf(" rpbuf_test [OPTIONS]\n");
printf("\n");
printf("OPTIONS:\n");
printf(" -d time : set data sending interval (default: 100 ms)\n");
printf(" -s : send test messages\n");
printf(" -c : send count (default: 10)\n");
printf(" -r : receive messages\n");
printf(" -t time : specifies the time of receive messagess, unit:ms\n");
printf(" -a : sync transmit\n");
printf(" -I ID : specify rpbuf ctrl ID (default: 0)\n");
printf(" -N NAME : specify buffer name (default: "%s")\n",
RPBUF_BUFFER_NAME_DEFAULT);
printf(" -L LENGTH : specify buffer length (default: %d bytes)\n",
RPBUF_BUFFER_LENGTH_DEFAULT);
printf(" -p : print performance data\n");
printf("\n");
printf("e.g.\n");
printf(" rpbuf_test -L 0x1000 -c 10 -s : send 10 test data, size=0x1000\n");
printf(" rpbuf_test -L 0x1000 -r : receive test data forever, size=0x1000\n");
printf(" rpbuf_test -L 0x1000 -r -t 1000 : receive test data 1 second, size=0x1000\n");
printf("\n");
}參數解釋:
-s發送
-c發送次數
-r阻塞接收
(3)實驗現象
以RISC-V向A核發送數據為例,緩沖區大小為511.875K,發送100次;
開辟一個511.875K的緩沖區,A核向RISC-V發送一百次數據。
以下命令按次序執行:
RISC-V命令:rpbuf_test -c -I 0 -N rpbuf_test -L 524160 -a
A端命令:rpbuf_test -L 524160 -N rpbuf_test -r
RISC-V命令:rpbuf_test -N rpbuf_test -C 100 -s
RISC-V 串口:
cpu0>rpbuf_test -c -I 0 -N rpbuf_test -L 524160 -a
cpu0>[RPBUF_INFO][rpbuf_addr_remap_default:206]reamp pa:0x42144000 -> va:0x42144000
[RPBUF_INFO][rpbuf_service_command_buffer_created_handler:827]buffer "rpbuf_test" (id:0): local_dummy_buffers -> buffers
buffer "rpbuf_test" is available
cpu0>rpbuf_test -N rpbuf_test -C 100 -s
[0]data:21a94801873e262b487f31000da27543... [md5:fd0f42ddde63121837ebcdec775250b9]A核串口:
root@OKT153:/# rpbuf_test -L 524160 -N rpbuf_test -r
ping: 8099.576172ms
bandwidth: 0.517149Mbps
data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success
ping: 14.155000ms
bandwidth: 186.086807Mbps
data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success
ping: 14.721000ms
bandwidth: 181.881592Mbps
data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success
ping: 14.694000ms
bandwidth: 181.992096Mbps
data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success
ping: 14.680000ms
bandwidth: 182.055313Mbps
data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success
ping: 14.712000ms
bandwidth: 181.779083Mbps
data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success
ping: 14.690000ms
bandwidth: 182.276901Mbps
data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success測試數據顯示,ARM與RISC-V雙核間數據傳輸帶寬平均可達184Mbps,驗證了共享內存機制的高效與穩定。
4、結論
全志T153處理器通過?異構多核架構?、??高效異構核間通訊機制(IPC)以及與之配套的?智能休眠喚醒方案?,可以實現ARM核與RISC-V核的高效協作——Linux負責復雜運算,RTOS保障實時響應,同時將?“高性能計算”?、?“硬實時控制”? 與 ?“超低功耗待機”? 這三大關鍵能力融為一體,滿足工業控制等場景需求。這遠不止是技術功能的實現,更是為下一代智能硬件提供了?一個量產化、功能完整、性能可靠的芯片級解決方案平臺?。
-
嵌入式
+關注
關注
5198文章
20442瀏覽量
333964 -
Linux
+關注
關注
88文章
11758瀏覽量
219005 -
Amp
+關注
關注
0文章
100瀏覽量
48492 -
全志科技
+關注
關注
4文章
136瀏覽量
17686
發布評論請先 登錄
基于Intel 凌動雙核D525處理器的無風扇嵌入式系統
Arm+RISC-V雙核異構前景如何?
中國首顆ARM+RISC-V異構多核MCU伴隨IAR在上海國際嵌入式展亮相
全志T113i全國產核心板上市
T536行業首發!飛凌嵌入式FET536-C/FET536-S核心板驚艷亮相
基于全志T113-i多核異構處理器的全國產嵌入式核心板簡介
【新品發布】10路UART、3路千兆網、2路CAN-FD,全志T153核心板為工業應用而生
全志T153處理器ARM+RISC-V的雙核CP多有強?——飛凌嵌入式
評論