<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[全志T153处理器ARM+RISC-V的双核CP有多强？]]></title><description><![CDATA[<p dir="auto">在嵌入式设备拼性能、拼响应、拼功耗的内卷时代，双核协作才是破局的关键。传统的对称多处理（SMP）架构已难以兼顾全场景需求，非对称多处理（AMP）异构架构正在成为行业主流，在这样的背景下，全志T153平台直接搬出ARM+RISC-V的“双核CP”：主打高性能计算的Cortex-A7核心运行Linux，聚焦高实时性任务的RISC-V E907核心运行RTOS，组成 “互补型搭档”。</p>
<p dir="auto">本文会通过飞凌嵌入式OK153-S开发板，为大家实测这对双核CP的协作实力——依托异构核间通讯机制（IPC）与Suspend/Resume电源管理机制，全面验证A核与R核的协同工作能力，并验证异构多核环境下的数据交互效率与智能化唤醒逻辑。</p>
<p dir="auto"><strong>1、休眠唤醒功能验证</strong><br />
pm_test 节点可以用于测试Linux部分的休眠唤醒功能。设备冻结后，等待5s，即返回，执行唤醒动作。</p>
<pre><code>echodevices &gt; /sys/power/pm_test
</code></pre>
<p dir="auto">设备进入休眠：</p>
<pre><code>echomem &gt; /sys/power/state
</code></pre>
<p dir="auto">执行以上命令后，设备5s后会被唤醒。</p>
<p dir="auto"><strong>2、R核唤醒休眠的A核</strong><br />
“功耗管理”是产品续航与成本控制的核心竞争力。T153处理器的异构多核架构为此提供了的解决方案：</p>
<p dir="auto">A核休眠：ARM核在空闲时进入WFI深度睡眠，功耗降至最低；<br />
R核值守：RISC-V核心持续运行，监听外部事件；<br />
按需唤醒：当传感器触发、定时任务到达时，R核一键唤醒A核处理复杂任务。</p>
<p dir="auto">A核进入WFI模式，R核运行在DRAM上，R核唤醒A核。</p>
<p dir="auto">首先设置主核休眠时，DRAM不进入自刷新，从核保持运行在DRAM上。可以通过linux控制台输入以下命令切换：</p>
<pre><code>echo0&gt;/sys/class/pm_msgbox/set_dram_refresh
</code></pre>
<p dir="auto">然后A核进入休眠状态：</p>
<pre><code>echomem &gt; /sys/power/state
</code></pre>
<p dir="auto">使用R核唤醒A核。我们的R核提供了cpux_resume接口来唤醒主核，在R核中执行以下命令进行A核唤醒：</p>
<pre><code>cpux_resume
</code></pre>
<p dir="auto">在低功耗场景下，高性能的A核休眠待机，低功耗的R核持续值守。当外部事件触发时，R核可瞬间唤醒A核响应任务。这种 "小核值班、大核待命" 的架构，让设备在续航与实时响应之间达到平衡。</p>
<p dir="auto"><strong>3、双核通讯验证</strong><br />
T153处理器采用ARM Cortex-A7+RISC-V 的多核异构架构，让系统兼具"大脑"与"小脑"，而异构核间通讯机制（IPC）正是连接两个"脑"的高速通道，通过共享内存机制，双核之间可实现数据传输。以下是操作方法：</p>
<p dir="auto">测试之前首先使能R核：</p>
<pre><code>echo amp_rv0.bin &gt; /sys/class/remoteproc/remoteproc0/firmware
echo start &gt; /sys/class/remoteproc/remoteproc0/state
</code></pre>
<p dir="auto">（1）RISC-V端例程</p>
<pre><code>rtos/lichee/rtos-components/aw/rpbuf/rpbuf_demo/rpbuf_test.c
</code></pre>
<p dir="auto">命令使用方法：</p>
<pre><code>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");
}
</code></pre>
<p dir="auto">参数解释：<br />
<strong>-c 创建缓冲区<br />
-C发送次数<br />
-d销毁<br />
-i 哪个节点<br />
-a数据同步<br />
-N名字<br />
-L缓冲区大小</strong></p>
<p dir="auto">（2）A核例程<br />
命令使用方法：</p>
<pre><code>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");
}
</code></pre>
<p dir="auto">参数解释：<br />
<strong>-s发送<br />
-c发送次数<br />
-r阻塞接收</strong></p>
<p dir="auto">（3）实验现象<br />
以RISC-V向A核发送数据为例，缓冲区大小为511.875K，发送100次；<br />
开辟一个511.875K的缓冲区，A核向RISC-V发送一百次数据。<br />
以下命令按次序执行：</p>
<p dir="auto"><strong>RISC-V命令：rpbuf_test -c -I 0 -N rpbuf_test -L 524160 -a<br />
A端命令：rpbuf_test -L 524160 -N rpbuf_test -r<br />
RISC-V命令：rpbuf_test -N rpbuf_test -C 100 -s</strong></p>
<p dir="auto">RISC-V 串口：</p>
<pre><code>cpu0&gt;rpbuf_test -c -I 0 -N rpbuf_test -L 524160 -a
cpu0&gt;[RPBUF_INFO][rpbuf_addr_remap_default:206]reamp pa:0x42144000 -&gt; va:0x42144000
[RPBUF_INFO][rpbuf_service_command_buffer_created_handler:827]buffer "rpbuf_test" (id:0): local_dummy_buffers -&gt; buffers
buffer "rpbuf_test" is available
cpu0&gt;rpbuf_test -N rpbuf_test -C 100 -s
[0]data:21a94801873e262b487f31000da27543... [md5:fd0f42ddde63121837ebcdec775250b9]
</code></pre>
<p dir="auto">A核串口：</p>
<pre><code>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
</code></pre>
<p dir="auto">测试数据显示，ARM与RISC-V双核间数据传输带宽平均可达184Mbps，验证了共享内存机制的高效与稳定。</p>
<p dir="auto"><strong>4、结论</strong><br />
全志T153处理器通过‌异构多核架构‌、‌‌高效异构核间通讯机制（IPC）以及与之配套的‌智能休眠唤醒方案‌，可以实现ARM核与RISC-V核的高效协作——Linux负责复杂运算，RTOS保障实时响应，同时将‌“高性能计算”‌、‌“硬实时控制”‌ 与 ‌“超低功耗待机”‌ 这三大关键能力融为一体，满足工业控制等场景需求。这远不止是技术功能的实现，更是为下一代智能硬件提供了‌一个量产化、功能完整、性能可靠的芯片级解决方案平台‌。</p>
]]></description><link>https://bbs.aw-ol.com/topic/6861/全志t153处理器arm-risc-v的双核cp有多强</link><generator>RSS for Node</generator><lastBuildDate>Thu, 12 Mar 2026 00:56:51 GMT</lastBuildDate><atom:link href="https://bbs.aw-ol.com/topic/6861.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Jan 2026 09:50:40 GMT</pubDate><ttl>60</ttl></channel></rss>