实验环境:米联客XCZU4EV开发板
tinyriscv工程文件下载:https://download.youkuaiyun.com/download/xiaolangyangyang/91240174
tinyriscv开源代码下载:https://download.youkuaiyun.com/download/xiaolangyangyang/91240177
tinyriscv OCD下载:https://download.youkuaiyun.com/download/xiaolangyangyang/91240166
tinyriscv编译器下载:https://download.youkuaiyun.com/download/xiaolangyangyang/91240167
jlink_v11驱动下载:https://download.youkuaiyun.com/download/xiaolangyangyang/91240172
1、安装Jlink V11 7.56b版本驱动,JLINK V11
双击JLink_Windows_V756b_x86_64.exe,一路next即可。
如果遇到以上问题,将jlink驱动转换为winusb驱动,操作步骤如下:
下载 Zadig 工具: http://zadig.akeo.ie
Options 点击 List All Devices
点击箭头处,选择 J-Link,在 Driver 出选择 jlink,另一边选择 Winusb,然后点击 Replace Driver,等待完成即可。
2、米联客EV4开发板引脚定义,将开发板的CEP作为IO使用,由于接口不兼容,只能用杜邦线链接其中5根相关的JTAG线,不能直接插入20PIN的JTAG插座


3、Jlink链接
至少链接以下5根线:TCK、TMS、TDI、TDO、VTref
4、通过 Jlink+openOCD测试RISCV
打开 cmd 执行命令:openocd -f jlink.cfg -f tinyriscv.cfg(使用jlink附带的openocd,目录中已包含)
成功检测到 RISCV CPU
打开另一个cmd窗口执行telnet localhost 4444,再在telnet加载并验证固件:
如上图所示表示固件加载及验证成功,可使用resume 0命令启动cpu
5、编译生成bin文件
C语言程序例程位于tests\example目录里,下面以simple程序为例进行说明,打开CMD窗口,进入到tests\example\simple目录,执行以下命令编译:
# make
6、使用telnet进行调试
再打开另一个终端,输入以下命令连接telnet:telnet localhost 4444
然后就可以使用各种命令进行调试了,下面介绍一些常用的命令:
- halt:停住MCU,进入调试模式;
- resume:MCU从停住的地方继续执行,退出调试模式;
- reset:复位MCU,复位之后就开始执行。通常在下载完程序后使用该命令来运行程序;
- reset halt:复位MCU,然后停住MCU,即MCU停在复位地址处;
- bp 0x00000010 4 hw:打断点,其中0x00000010是断点的地址,4表示地址长度为4个字节,hw表示硬件断点。tinyriscv只支持硬件断点。
- rbp 0x00000010:删除0x00000010地址处的断点;
- bp:查看所有断点信息;
- step:单步执行,每次执行一条指令;
- mww 0x00000010 0x1234:即memory write word,往0x00000010地址处写入0x1234,长度为4个字节;
- mdw 0x00000010 2:即memory display word,从0x00000010地址处读取2个word;
- reg sp:读取sp寄存器的值;
- reg sp 0x10:往sp寄存器写入0x10;
- load_image:加载image文件,比如:load_image filename address bin min_address max_length,其中filename表示要加载的文件,address表示要加载到哪个地址,bin表示文件的类型,min_address表示最小地址,该值与address相同即可,max_length表示文件的最大长度。目前使用这个命令来下载C语言程序。
- verify_image:比如:verify_image filename offset,其中filename表示已经下载了的文件,offset表示从哪个地址开始校验。使用这个命令来校验下载进去的程序是否正确。
- load_bin:如果觉得load_image命令的参数比较多,可以使用load_bin命令,比如:load_bin bin_file 0x0 1,表示将bin_file二进制文件下载到0x0地址处,并且校验。
7、使用gdb进行调试
除了使用telnet进行调试之外,还可以使用gdb进行调试。
openocd连上之后,打开另一个终端,执行以下命令运行gdb(freertos即为elf文件):
tinyriscv-v2.4\tools\gnu-mcu-eclipse-riscv-none-gcc-8.2.0-2.2-20190521-0004-win64\bin\riscv-none-embed-gdb.exe tests\example\FreeRTOS\Demo\tinyriscv_GCC\freertos
(gdb) set remotetimeout 2000 // 设置超时时间
(gdb) target remote localhost:3333 // 连接openocd服务
(gdb) load // 加载程序
(gdb) c // 继续执行
注意,如果要用gdb进行调试,则编译C程序时必须加上-g参数。