Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ART-Pi
先楫HPM_RISCV
risc-v_RISCV
先楫半导体hpm6750(双核800Mhz)初体验(一)运行第一个程序
发布于 2022-05-21 14:39:09 浏览:4370
订阅该版
[tocm] ### 相关资源: - SDK:[SDK](http://www.hpmicro.com/resources/detail.html?id=a313eb8f-afbf-4d12-95a2-ce22bda8d3c0) - 数据手册:[数据手册](http://www.hpmicro.com/resources/resources.html) ### 零、前言 最近几个月陆陆续续接触到关于先楫半导体的hpm6750的信息。随着先楫半导体的sdk、数据手册等释出,决定入手hpm6750体验一下。本文是上手体验的一点小总结,多数内容来自sdk、手册等等。 **新手不建议现在入手,在意bug的也不建议现在入手。** ### 一、构建第一个示例 下载sdk后打开目录观察一下主要包含驱动、示例、工具链等。目前看样子主推segger_embedded_studio和rtt studio。使用ide可以方便构建和调试,目前我为了能更好的熟悉sdk决定使用非ide。 运行 sdk_env 根目录下 `start_cmd.cmd` 命令配置开发环境,然后进入目录`“hpm_sdk/samples/hello_world”`。 generate_project 命令是用于生成工程的命令,运行 `generate_project -h` 看看支持什么操作: ``` generate_project [-f] [-b board] [-a] [-list] [-h] -f: force clean already existed build directory -b board: specify board for project generation -a: generate projects for all supported boards -list: list all supported boards -t type: specify build type -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 ``` 运行 `generate_project -list` 查看此示例支持的开发板(目前也就evk与evkmini) 运行 `generate_project -f -b hpm6750evkmini -t debug` 构建项目,自动生成 hpm6750evkmini_build 目录,我们进入此目录并执行 ninja ,如果运行没错误的话能看到类似信息: ``` [98/98] Linking C executable output\demo.elf Memory region Used Size Region Size %age Used ILM: 0 GB 256 KB 0.00% DLM: 0 GB 256 KB 0.00% CORE0_LM_SLV: 67776 B 512 KB 12.93% CORE1_LM_SLV: 0 GB 512 KB 0.00% SDRAM: 0 GB 32 MB 0.00% AXI_SRAM: 35312 B 768 KB 4.49% AXI_SRAM_NONCACHEABLE: 0 GB 256 KB 0.00% ``` debug 类型工程对应的 gcc 工具链链接脚本为 ram.ld ,他在`“hpm_sdk/soc/HPM6750/toolchains/gcc”`目录下: ```c ENTRY(_start) STACK_SIZE = DEFINED(_stack_size) ? _stack_size : 0x4000; HEAP_SIZE = DEFINED(_heap_size) ? _heap_size : 0x4000; MEMORY { ILM (wx) : ORIGIN = 0, LENGTH = 256K DLM (w) : ORIGIN = 0x80000, LENGTH = 256K /* It's alias address of core0 ILM+DLM, but accessing via system bus */ CORE0_LM_SLV (wx) : ORIGIN = 0x1000000, LENGTH = 512K /* It's alias address of core1 ILM+DLM, but accessing via system bus */ CORE1_LM_SLV (wx) : ORIGIN = 0x1180000, LENGTH = 512K SDRAM (wx) : ORIGIN = 0x40000000, LENGTH = 32M AXI_SRAM (wx) : ORIGIN = 0x1080000, LENGTH = 768K AXI_SRAM_NONCACHEABLE (wx) : ORIGIN = 0x01140000, LENGTH = 256K } . . . ``` 如果构建类型是`flash_???`,可以直接使用 program_flash 命令间接调用 openocd 下载固件到板载 qspi flash 上。 ### 二、关于调试和下载算法 hpm6750evkmini 使用的是 ft2232h 配合 openocd 下载和调试程序(hpm6750与rt1052类似,**无片内Flash**)。 这里先看看针对 hpm6750evk 的几个 openocd 配置文件。 文件路径`“hpm_sdk/boards/openocd”`,主配置文件为`“hpm6750_all_in_one.cfg”`,它其中有一段注释解释了怎么启动单核和双核: ``` # usage: # # connect hpm6750evkmini via ft2232, debugging single core # $ openocd -c "set HPM_SDK_BASE ${HPM_SDK_BASE}; set BOARD hpm6750evkmini; set PROBE ft2232;" -f hpm6750_all_in_one.cfg # # connect hpm6750evkmini via ft2232, debugging dual core # $ openocd -c "set HPM_SDK_BASE ${HPM_SDK_BASE}; set BOARD hpm6750evkmini; set PROBE ft2232; set ENABLE_DUALCORE 1" -f hpm6750_all_in_one.cfg # ``` `“hpm6750_all_in_one.cfg”`主要包含了以下三个配置文件: ``` source ${HPM_OPENOCD_CONFIG}/probes/${PROBE}.cfg source ${HPM_OPENOCD_CONFIG}/soc/${CORE}.cfg source ${HPM_OPENOCD_CONFIG}/boards/${BOARD}.cfg ``` 其中 `source ${HPM_OPENOCD_CONFIG}/boards/${BOARD}.cfg` 包含了时钟和sdram初始化。 hpm6750 的 openocd 是定制版,其中添加了针对 hpm6750 下载算法,学习过 stm32h750 的应该对下载算法不陌生。 主要的几个文件`“src/flash/nor/hpm_xpi.c”`和`“contrib/loaders/flash/hpm_xpi/hpm_xpi_flash.h”`。 `“hpm_xpi_flash.bin”`文件来自sdk中的`“hpm_sdk/samples/openocd_algo”`项目,此项目主要利用 BootROM API 实现对 Qspi Flash 的操作。 通过openocd连接ft2232h: ``` openocd -c "set HPM_SDK_BASE ${HPM_SDK_BASE}; set BOARD hpm6750evkmini; set PROBE ft2232;" -f hpm6750_all_in_one.cfg ``` ![捕获openocd.PNG](https://oss-club.rt-thread.org/uploads/20220522/674961e79024b87536934d2686c85de9.png) 通过gdb将代码加载到目标板ram运行: ``` > riscv32-unknown-elf-gdb.exe file demo.elf target remote localhost:3333 load b main c ``` ![捕获gdb.PNG](https://oss-club.rt-thread.org/uploads/20220522/f1158e3c2cfb2846e3d68224b8775e66.png) 串口输出: ![捕获uart.PNG](https://oss-club.rt-thread.org/uploads/20220522/fc5bd464f30dc38012feda9ac2ecd390.png) ### 三、使用msys2环境构建openocd 尝试搭建openocd构建环境后续可能用得上,这里记录一下过程。 [hpm版openocd源代码](https://github.com/hpmicro/riscv-openocd) [msys2安装包](https://www.msys2.org/) 安装msys2后运行“pacman -Sy”更新镜像列表 安装构建openocd的各类包 ``` pacman -S mingw-w64-x86_64-hidapi \ mingw-w64-x86_64-libusb \ mingw-w64-x86_64-libftdi \ mingw-w64-x86_64-gcc pacman -S libtool \ autoconf \ automake \ texinfo \ pkg-config \ make \ autogen \ unzip \ libtool \ autoconf \ automake \ texinfo \ git ``` 进入openocd根目录运行命令: ``` ./bootstrap ./configure LDFLAGS="-Wl,-s" --enable-ftdi --enable-dummy --prefix=/openocd_hpm ``` 执行成功会有以下提示: ``` libjaylink configuration summary: - Package version ................ 0.2.0 - Library version ................ 1:0:1 - Installation prefix ............ /openocd_hpm - Building on .................... x86_64-w64-mingw32 - Building for ................... x86_64-w64-mingw32 Enabled transports: - USB ............................ yes - TCP ............................ yes OpenOCD configuration summary -------------------------------------------------- MPSSE mode of FTDI based devices yes cJTAG OSCAN1 tunneled thru MPSSE yes (auto) ST-Link Programmer yes (auto) TI ICDI JTAG Programmer yes (auto) Keil ULINK JTAG Programmer yes (auto) Altera USB-Blaster II Compatible yes (auto) Bitbang mode of FT232R based devices yes (auto) Versaloon-Link JTAG Programmer yes (auto) TI XDS110 Debug Probe yes (auto) CMSIS-DAP v2 Compliant Debugger yes (auto) OSBDM (JTAG only) Programmer yes (auto) eStick/opendous JTAG Programmer yes (auto) Olimex ARM-JTAG-EW Programmer yes (auto) Raisonance RLink JTAG Programmer yes (auto) USBProg JTAG Programmer yes (auto) Andes JTAG Programmer (deprecated) no CMSIS-DAP Compliant Debugger yes (auto) Nu-Link Programmer yes (auto) Cypress KitProg Programmer yes (auto) Altera USB-Blaster Compatible yes (auto) ASIX Presto Adapter yes (auto) OpenJTAG Adapter yes (auto) Linux GPIO bitbang through libgpiod no SEGGER J-Link Programmer yes (auto) Bus Pirate no Use Capstone disassembly framework no ``` 开始编译: ``` make -j4 make install ``` 成功之后会在msys2的安装目录下看到openocd_hpm目录,将依赖库(libconfuse-2.dll libftdi1.dll libhidapi-0.dll libusb-1.0.dll)复制到`"openocd_hpm/bin"`下。 ### 四、前期遇到的各类问题 1、通过telnet连接到openocd端口4444,使用load_image加载程序到ram,提示“couldn't open demo.elf”。 使用绝对路径解决问题。 ``` reset init halt load_image "C:/Users/u/Desktop/sdk_env_v0.10.0/hpm_sdk/samples/hello_world/demo.elf" resume 0x1000000 ``` 2、windows下通过环境变量传递sdk路径给openocd会有反斜杠问题。 替换“hpm6750_all_in_one.cfg”文件相关内容: ``` #set HPM_OPENOCD_CONFIG ${HPM_SDK_BASE}/boards/openocd set HPM_OPENOCD_CONFIG C:/Users/u/Desktop/sdk_env_v0.10.0/hpm_sdk/boards/openocd ``` 待续...
10
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
lizimu
这家伙很懒,什么也没写!
文章
7
回答
22
被采纳
3
关注TA
发私信
相关文章
1
studio能否支持risc-v的工程,包括调试。
2
移植rt-nano至risc-v时,无法在main函数创建用户线程
3
risc-v移植rtthread,程序莫名跳转到异常Exception
4
GD32VF103出现to free a bad data block:错误
5
rtt os riscv Store address misaligned异常
6
仅实现机器模式的芯片是否可以移植RT-THREAD系统
7
nano版本移植finsh(基于risc-v)
8
C++在多核下cout打印引起崩溃
9
RT-SMART求助
10
RT-Thread在RISC-V架构的芯片上有成熟的市场项目吗?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部