[MCU] 【先楫HPM6750EVKMINI测评】4# HPM6750双核体验

太阳上的骑士   2022-7-27 11:25 楼主

HPM6750集成2个RISC-V 处理器,两个处理器配置相同,但分主从,CPU0 为主CPU,CPU1 为从CPU。

使用多核处理器,主要关心五个问题:

  1. 从核代码如何生成
  2. 从核如何启动
  3. 两个内核分别如何调试
  4. 主从核之间如何通信
  5. 外设资源出现竞争如何处理

 

一、从核代码如何生成

1、官方提供的最新sdk 0.12.1里面有sdk说明文档,以网页的方式提供,具体位置在:

Sdk目录/hpm_sdk/doc/output/sdk_doc/zh/latest/html/index_zh.html,

双击index_zh.html用浏览器打开

104550m84banmt8ykc4bz4.png

按照doc说明操作,需要设置CMAKE_BUILD_TYPE的值,但是在SEGGER Embedded Stduio里的工程设置里面没有找到相应的参数修改

104550x2luofpkjpsl8s5o.png

 

2、找不到相关值的修改后,猜测应该是开发环境不一样的原因,所以回到doc里的HPM SDK概述里面看开发环境如何搭建,这里介绍的开发环境搭建和

HPM6750EVKMINI USER GUIDE介绍的有点不一样。由于本身工作任务比较紧,所以暂时想通过其它办法解决从核代码生成的问题,就没按照doc里的再搭新的开发环境。

 

3、在论坛搜索发现已经有人做过相关实验

https://bbs.eeworld.com.cn/thread-1202275-1-1.html

是通过官方给的python工具来生成从核代码,具体方法是

  1. 正常编写从核功能代码,用SEGGER Embedded Stduio生成bin文件
  2. 打开Windows  cmd,使用官方python工具生成数据文件,在cmd中输入:Sdk目录\tools\python3\python3.exe Sdk目录\hpm_sdk\scripts\ bin2c.py 你的bin文件 > 输出文件

我这里输入:

D:\sdk_env_v0.12.1\tools\python3\python3.exe D:\sdk_env_v0.12.1\hpm_sdk\scripts\bin2c.py D:\sdk_env_v0.12.1\hpm_sdk\samples\drivers\gpio\hpm6750evkmini_build\segger_embedded_studio\Output\Debug\Exe\gpio_example.bin sec_core_img >d:\sec_core_img.c

104550lgonyc7onkasko9w.png

这样在D盘根目录生成sec_core_img.c文件

 

二、从核如何启动

阅读HPM6700_6400用户手册可知,双核启动步骤如下:

  1. CPU0 将CPU1 的代码镜像地址写入SYSCTL_CPU1_GPR0 寄存器
  2. CPU0 将CPU1 启动代号写入SYSCTL_CPU1_GPR1 寄存器,代号为0xC1BEF1A9
  3. CPU0 将SYSCTL_CPU1_LP [HALT] 位清0,即可释放CPU1

验证:

    1)生成sdk里hpm_sdk\samples\multicore\hello\core0例程SES工程,下载到开发板,按reset键,现象是板载RGB灯R、G、B轮流渐亮渐灭,串口输出数据:

104550e7a17gdebqg9ek1f.png

    2)生成sdk中hpm_sdk\samples\drivers\gpio的从核数据文件,用 generate_project -b hpm6750evkmini -t sec_core_img命令生成SES工程,再用SES生成bin文件,最后通过官方提供的bin2c工具生成 sec_core_img的数据,最后把数据替换第一步工程中的 sec_core_img.c文件。下载复位后led没闪烁,但串口有数据,说明core0运行起来了,但core1没启动。

    A、怀疑是core1的代码生成有问题,尝试过使用generate_project -b hpm6750evkmini -t sec_core_img、generate_project -b hpm6750evkmini -t sec_core_img_release都没有用

    B、尝试用sdk中的rgb_led来生成从核数据,替换sec_core_img数据后从核还是不运行

    C、有可能是sdk版本问题,使用0.9.0版本的sdk生成rgb_led的例程,使用generate_project -b hpm6750evkmini -t sec_core_img生成的SES工程编译不通过

image.png

 

对比两个core1数据文件差别还挺大的,说明还是生成的core1数据问题,在网上找了一圈也没找到其它生成从核数据的办法,期待官方出详细的从核数据生成的教程,等后续这个问题解决了再体验双核吧(๑→ܫ←)


image.png image.png   

三、两个内核分别如何调试

 

四、主从核之间如何通信

 

五、如何避免同时使用相同外设资源

 

本帖最后由 太阳上的骑士 于 2022-7-27 11:23 编辑

回复评论 (9)

两个一样的核好像用 rpmsg 和remoterpc

默认摸鱼,再摸鱼。2022、9、28
点赞  2022-7-27 18:42

linkfile有同步的更新么?

工程不同,link的地址不同,core1就乱了

点赞  2022-7-28 11:38
引用: linusoon 发表于 2022-7-28 11:38 linkfile有同步的更新么? 工程不同,link的地址不同,core1就乱了

两个工程core1用的外设都一样,只不过是逻辑不一样,跟linkfile没啥关系吧。

找了一下没见着linkfile相关的设置

点赞  2022-7-28 22:06

image.png

link在这里,双核的启动对于片内的地址分布已经选用适合的link,你可以根据工程里的link文件,做自己的规划。 

点赞  2022-7-29 11:01
引用: linusoon 发表于 2022-7-29 11:01 link在这里,双核的启动对于片内的地址分布已经选用适合的link,你可以根据工程里的link文件,做自己的 ...

昨天看到这个设置了,在本地文件夹找到这个flash_xip.icf文件,但是没发现咋改

点赞  2022-7-29 12:39

你可以先在一个工程里面尝试用不同的link文件编译后看看map文件的差别。

同时看一下芯片自身对于总线地址的分布,结合多核例程中特有的link文件在进行相应的改动。

 

 

点赞  2022-7-30 14:52
引用: linusoon 发表于 2022-7-30 14:52 你可以先在一个工程里面尝试用不同的link文件编译后看看map文件的差别。 同时看一下芯片自身对于总线地 ...

好的,谢谢分享,我再试试~

点赞  2022-7-30 18:35

9楼 tuu 

你好 后面的问题主从核之间如何通信有进展了吗

点赞  2022-12-9 09:01
引用: tuu 发表于 2022-12-9 09:01 你好 后面的问题主从核之间如何通信有进展了吗

先楫官方回复:先楫官方SDK_env_v0.14.0里有ERPC的示例,这个就是双核通信,可以参考用来解决问题~

 

SDK下载链接:https://pan.baidu.com/s/1qvyXhhbDmn4ug3oJeHJrbg?pwd=4peg

 

看看对你有用吧

点赞  2022-12-9 16:00
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复