以下操作都是 Win11 21H2
, sdk_env_v0.11.0
下进行, 如有不同, 纯属正常.
现在出的有 HPM67xx(双核双千兆以太网), 64xx(单核双千兆), 63xx(单核单百兆或无百兆), 做产品另说, 学的话现在挑个最猛的HPM6750就可以, 反正SDK是一样的, 一通百通. 官方现在有3款板子, 注册直接买就可以, 买了最贵的, 顺丰包邮, 无骚扰电话好评
下面是HPM6750的资源, 双核双千兆, 4路CANFD, 不论是做电机控制, 双目视觉, OpenMV, 仪器仪表, 还是汽车电子周边等, 都是目前最好的选择.
相关资料可参考:
B站这个 黑辞旧
的Up主上传的 谁才是最强单片机?_哔哩哔哩_bilibili 中的 CoreMark 跑分, 也可以看到 HPM6750 也是遥遥领先:
根据 CPU Performance Benchmark – MCU Performance Benchmark – CoreMark – EEMBC Embedded Microprocessor Benchmark Consortium 整理下常见 MCU 的跑分情况(CoreMark/MHz没有除以核数)
MHz | Cores | CoreMark | CoreMark/MHz | |
---|---|---|---|---|
HPM6750 | 816 | 2 | 9220 | 11.299 |
Infineon AURIX TC397XE | 300 | 6 | 4047 | 13.49 |
STM32H745XI | 360 | 2 | 3223 | 8.96 |
ESP32 | 160 | 2 | 660 | 4.13 |
CH32V307 | 144 | 1 | 380 | 2.64 |
S32K144 | 112 | 1 | 366 | 3.27 |
RH850/F1KM-S1 | 120 | 1 | 343 | 2.858 |
RP2040 | 125 | 2 | 246 | 2.0 |
参考:
熟悉RT-Thread的可以用RT-Thread Studio, 对于喜欢从头开始撸的可以用 Segger Embedded Studio, 手册中也提到了基于VS Code的环境, 还有图形化配置工具:
先楫半导体也将为开发者提供基于VS Code 的 免费集成开发环境HPM Studio 和 PC 桌面端图形化的 SoC 资源配置工具
下载: Embedded Studio for RISC V (segger.com), 可以选Win或Linux版本, 按部就班安装即可, 先楫半导体向用户提供免费商用的license.
打开 Embedded Studio -> Tools -> License Manager -> Diagnose Problems
, 复制下网卡的MAC:
到 SEGGER Embedded Studio License Activation 这里填下名字邮箱和上面的MAC地址
然后马上就能到邮箱里找到邮件, 复制 SEGGER Embedded Studio License Activation Key for HPMicro Devices
到 Embedded Studio -> Tools -> License Manager -> Activate Embedded Studio
, 粘贴安装即可
sdk_env_v0.11.0\tools\FTDI_InstallDriver.exe
, 双击装就可以了, 装完后设备管理器里面
start_cmd.cmd
作用是把工具链和脚本等加入环境变量, 仅对当前窗口生效
这个运行到最后打开的是cmd
, 没有powershell
中ls
之类的命令, 不好用, 所以这里手动把 cmd
注释掉, 改成 powershell, 不知道会不会有影响.
参考:
tools\scripts\generate_project.cmd
先来查看帮助
>generate_project -h
generate_project [-f] [-b board] [-a] [-list] [-h]
-f: force clean already existed build directory # 比如之前生成的是ram工程, 想改成flash工程可以加-f
-b board: specify board for project generation # 指定3种板子中的一个
-a: generate projects for all supported boards
-list: list all supported boards # 列出支持的板子
-t type: specify build type # 定义构建类型, 默认debug(RAM), 片外Flash要用flash_xip
-h: show this text
ECHO 处于关闭状态。
Here're supported build types:
- release
- debug
- flash_xip
- flash_xip_release
- flash_sdram_xip
- flash_sdram_xip_release
- flash_uf2
- flash_uf2_release
- flash_sdram_uf2
- flash_sdram_uf2_release
- sec_core_img
- sec_core_img_release
# 目前支持的3块板子
>generate_project -list
hpm6360evk
hpm6750evk
hpm6750evkmini
# 切换到示例工程文件夹
# 生成hpm6750evk板子的hello_work示例, 默认RAM跑跑就行(速度快, 但断电程序消失)
> cd .\hpm_sdk\samples\hello_world\
> generate_project -b hpm6750evk -f
# 生成hpm6750evk板子的coremark示例, 下载到外部的Flash里面(下载速度慢, 但断电后程序还在)
# 双击 hpm_sdk\samples\coremark\hpm6750evk_build\segger_embedded_studio\coremark.emProject 打开
> cd .\hpm_sdk\samples\coremark\
> generate_project -b hpm6750evk -t flash_xip -f
左边Flash工程, 右边RAM工程, link脚本文件是不一样的
看一下这两个icf文件的区别
这个地址当然不是瞎写的, 参考手册可以查到,
如果使用了link文件中没有定义的地址, 一定要手动添加 section, 不然生成的HEX会七零八落, 或者bin文件巨大, 不利于boot升级.
link 文件中也指明了 app_load_addr
等, 对于做 boot + app 的可能要好好修改link文件
tools\scripts\program_flash.cmd
刷写脚本
> program_flash.cmd -h
program_flash [-b board] [-elf elf_file] [-bin bin_file address] [-h] [-f]
-b board: specify board for project generation
-elf elf_file: program elf file to flash
-bin bin_file address: program bin file to flash at given flash address
-f: force to run even if elf or bin file does not exist, instead it will start openocd
-h: show this text
Note: -elf and -bin can't be specified at the same time
还有一个刷写软件 HPMProgrammmer_v0.1.0
, 当没有Jlink时, 可以用串口或USB来刷写程序
对于EVK就是
# 生成hpm6750evk板子的coremark示例, 下载到外部的Flash里面(下载速度慢, 但断电后程序还在)
> cd .\hpm_sdk\samples\coremark\
> generate_project -b hpm6750evk -t flash_xip -f
双击 hpm_sdk\samples\coremark\hpm6750evk_build\segger_embedded_studio\coremark.emProject
打开工程
编译工程
确定FTDI驱动装好且连接正常
连接GDB
可以直接下ELF文件
下完后可以 Disconnect 掉
板子的拨码开关 BOOT1, BOOT0
拨到 OFF OFF
打开串口助手, 按下复位按键, 等十几秒就可以看到跑分结果
这个是下载到XPI0的单核跑分, 双核比double略少一点, 接近官方宣称的 9200 分
==============================
hpm6750evk clock summary
==============================
cpu0: 816000000Hz
cpu1: 816000000Hz
axi0: 200000000Hz
axi1: 200000000Hz
axi2: 200000000Hz
ahb: 200000000Hz
mchtmr0: 24000000Hz
mchtmr1: 1000000Hz
xpi0: 133333333Hz
xpi1: 400000000Hz
dram: 166666666Hz
display: 74250000Hz
cam0: 59400000Hz
cam1: 59400000Hz
jpeg: 200000000Hz
pdma: 200000000Hz
==============================
----------------------------------------------------------------------
$$\ $$\ $$$$$$$\ $$\ $$\ $$\
$$ | $$ |$$ __$$\ $$$\ $$$ |\__|
$$ | $$ |$$ | $$ |$$$$\ $$$$ |$$\ $$$$$$$\ $$$$$$\ $$$$$$\
$$$$$$$$ |$$$$$$$ |$$\$$\$$ $$ |$$ |$$ _____|$$ __$$\ $$ __$$\
$$ __$$ |$$ ____/ $$ \$$$ $$ |$$ |$$ / $$ | \__|$$ / $$ |
$$ | $$ |$$ | $$ |\$ /$$ |$$ |$$ | $$ | $$ | $$ |
$$ | $$ |$$ | $$ | \_/ $$ |$$ |\$$$$$$$\ $$ | \$$$$$$ |
\__| \__|\__| \__| \__|\__| \_______|\__| \______/
----------------------------------------------------------------------
2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks : 316281778
Total time (secs): 13.178408
Iterations/Sec : 4552.902343
Iterations : 60000
Compiler version : GCC10.3.0
Compiler flags : -Wall -Wno-format -fomit-frame-pointer -fno-builtin -ffunction-sections -fdata-sections -mabi=ilp32 -march=rv32imac -g -O3 -funroll-all-loops -finline-limit=600 -ftree-dominator-opts -fno-if-conversion2 -fselective-scheduling -fno-code-hoisting -mstrict-align
Memory location : STACK
seedcrc : 0xe9f5
[0]crclist : 0xe714
[0]crcmatrix : 0x1fd7
[0]crcstate : 0x8e3a
[0]crcfinal : 0xbd59
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 4552.902343 / GCC10.3.0 -Wall -Wno-format -fomit-frame-pointer -fno-builtin -ffunction-sections -fdata-sections -mabi=ilp32 -march=rv32imac -g -O3 -funroll-all-loops -finline-limit=600 -ftree-dominator-opts -fno-if-conversion2 -fselective-scheduling -fno-code-hoisting -mstrict-align / STACK
工程右键 -> Options