• 正文
  • 相关推荐
申请入驻 产业图谱

全志T153处理器ARM+RISC-V的双核CP多有强?

13小时前
322
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

嵌入式设备拼性能、拼响应、拼功耗的内卷时代,双核协作才是破局的关键。传统的对称多处理(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,即返回,执行唤醒动作。

echo devices > /sys/power/pm_test

设备进入休眠:

echo mem > /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控制台输入以下命令切换:

echo 0 >/sys/class/pm_msgbox/set_dram_refresh

然后A核进入休眠状态:

echo mem > /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 messagen");

printf(" -c : create buffern");

printf(" -C : Send Cnt(default: 1)n");

printf(" -d : destory buffern");

printf(" -s : send test messagesen");

printf(" -l : list created buffersn");

printf(" -a : sync transmitn");

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 datan");

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 -cn");

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 32n");

printf("n");

printf(" If this buffer is no longer in use, destroy it:n");

printf(" rpbuf_test -N "xxx" -dn");

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 messagesn");

printf(" -c : send count (default: 10)n");

printf(" -r : receive messagesn");

printf(" -t time : specifies the time of receive messagess, unit:msn");

printf(" -a : sync transmitn");

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 datan");

printf("n");

printf("e.g.n");

printf(" rpbuf_test -L 0x1000 -c 10 -s : send 10 test data, size=0x1000n");

printf(" rpbuf_test -L 0x1000 -r : receive test data forever, size=0x1000n");

printf(" rpbuf_test -L 0x1000 -r -t 1000 : receive test data 1 second, size=0x1000n");

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保障实时响应,同时将“高性能计算”、“硬实时控制” 与 “超低功耗待机” 这三大关键能力融为一体,满足工业控制等场景需求。这远不止是技术功能的实现,更是为下一代智能硬件提供了一个量产化、功能完整、性能可靠的芯片级解决方案平台。

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录

秉承专业态度,专注智能设备核心平台研发与制造,以技术研发创新为主导,以客户实用化,产品化为目标,把握嵌入式行业的前沿发展需求,利用核心技术为客户提供稳定、可靠、功能优异的高品质产品。合作联系:17713286011