1# Nuclei DDR200T开发板LiteOS使用说明 2 3## Nuclei DDR200T开发板简介 4 5Nuclei DDR200T开发板是一款集成了FPGA和通用MCU的RISC-V评估开发板。其中FPGA子系统采用Xilinx XC7A200T-2 FPGA芯片,提供板载FPGA JTAG下载器、丰富的板载存储(Flash,DDR,eMMC,EEPROM)、丰富的接口资源(数字、模拟)以及蜂鸟调试器接口。MCU子系统采用GD32VF103 MCU芯片,提供板载调试器以及JTAG调试接口。 6 7开发板资料链接: 8 9- [Nuclei DDR200T开发板详细介绍](https://www.nucleisys.com/upload/files/fpga/doc/Nuclei_FPGA_DebugKit_Intro_20201220.pdf) 10- [Nuclei DDR200T开发板原理图](https://www.nucleisys.com/upload/files/fpga/doc/Nuclei_DDR200T.pdf) 11 12## 文件结构 13 14``` 15├── components # 可选组件 16│ ├── cppsupport # C++支持 17│ └── cpup # CPUP功能 18├── kal # 内核抽象层 19│ └── posix # posix标准接口支持 20├── arch # 内核指令架构层代码 21│ ├── risc-v # risc-v架构的代码 22│ │ └── nuclei # nuclei内核相关代码 23│ │ └── gcc # gcc编译器相关代码 24│ │ └── nmsis # nmsis内核标准 25│ └── include # 对外接口存放目录 26│ ├── los_atomic.h # 定义通用arch的原子操作 27│ ├── los_context.h # 定义通用arch的上下文切换 28│ ├── los_arch.h # 定义通用arch初始化 29│ └── los_interrupt.h # 定义通用arch中断 30├── kernel # 内核最小功能集支持 31│ ├── include # 对外接口存放目录 32│ │ ├── los_config.h # 功能开关和配置参数 33│ │ ├── los_event.h # 事件 34│ │ ├── los_liteos.h # liteos最小功能集对外提供的头文件 35│ │ ├── los_memory.h # 堆内存管理 36│ │ ├── los_mutex.h # 互斥锁 37│ │ ├── los_queue.h # 队列 38│ │ ├── los_scheduler.h # 调度算法 39│ │ ├── los_sem.h # 信号量 40│ │ ├── los_task.h # 任务 41│ │ └── los_timer.h # 定时器 42│ └── src # 内核最小功能集源码 43├── targets # 板级工程目录 44│ └── riscv_nuclei_demo_soc_gcc # Nuclei DDR200T开发板相关代码 45│ ├── GCC # 编译相关 46│ ├── OS_CONFIG # 开发板配置功能开关和配置参数 47│ ├── SoC # SOC相关代码 48│ └── Src # application相关代码 49└── utils # 通用公共目录 50 ├── include 51 │ ├── los_compiler.h # 编译工具配置,类型定义 52 │ ├── los_debug.h # debug,printf相关 53 │ ├── los_error.h # 错误定义 54 │ └── los_list.h 55 └── src 56``` 57 58## 使用说明 59 60软件需求:linux环境 61 62硬件需求:Nuclei DDR200T开发板 63 64[环境配置](#sectionb1) 65 66[编译源码](#sectionb2) 67 68[下载调试、运行](#sectionb3) 69 70本示例将新建并运行两个任务,可以在控制台查看任务执行打印信息。 71 72### 环境配置<a name="sectionb1"></a> 73 74- **工具链配置** 75 76请先确认您使用的是centos系统或Ubuntu 64bit。 77 781. 新建一个`Nuclei` 文件夹,比如`~/home/Nuclei` 792. 参考下图,从[Nuclei Download Center](https://nucleisys.com/download.php)下载工具链和OpenOCD。 80 - CentOS或Ubuntu系统请点击图中红框1下载RISC-V GNU工具链 81 - 点击图中蓝框2-1下载64bit的OpenOCD 82 - **确保Make工具版本不低于3.82**: ubuntu系统使用`sudo apt-get install make`指令安装`make`工具, CentOS系统使用`sudo yum install make`指令安装。 83 84图1 Linux环境要下载的Nuclei Tools 85 86 87 88 89 903. 在之前新建的`Nuclei`文件夹中新建`gcc`文件夹和`openocd`文件夹。 91 - 解压缩之前下载的**gnu工具链**到任意文件夹中,复制其中`bin`文件件所在层级的所有内容到`gcc`文件夹中。 92 - 同样解压缩之前下载的**OpenOCD**到任意文件夹中,复制其中`bin`文件件所在层级的所有内容到`openocd`文件夹中。 93 94> 注意: 95> 96> 请务必下载并解压缩Linux版本的工具,不要下载windows版本工具。 97 98- **驱动配置** 99 100驱动配置步骤如下: 101 1021. 连接开发板到Linux中,确保USB被Linux识别出来。 103 1042. 在控制台中使用lsusb指令查看信息,参考的打印信息如下: 105 106 ``` 107 Bus 001 Device 010: ID 0403:6010 Future Technology Devices International, Ltd FT2232xxxx 108 ``` 109 1103. 将github(https://github.com/riscv-mcu/ses_nuclei_sdk_projects/blob/master/misc/99-openocd.rules)上misc文件夹内99-openocd.rules文件复制到当前路径下,控制台中输入sudo cp 99-openocd.rules /etc/udev/rules.d/99-openocd.rules指令复制文件到指定路径下。 111 1124. 断开调试器再重新连接到Linux系统中。 113 1145. 使用ls /dev/ttyUSB*命令查看ttyUSB信息,参考输出如下: 115 116 ``` 117 /dev/ttyUSB0 /dev/ttyUSB1 118 ``` 119 1206. 使用ls -l /dev/ttyUSB1命令查看分组信息,参考输出如下: 121 122 ``` 123 crw-rw-r-- 1 root plugdev 188, 1 Nov 28 12:53 /dev/ttyUSB1 124 ``` 125 126 可以看到ttyUSB1已经加入plugdev组,接下来我们要将自己添加到plugdev组。使用whoami命令查看当前用户名,我们将其记录为\< your_user_name >。 127 1287. 使用sudo usermod -a -G plugdev \<your_user_name>命令将自己添加进plugdev组。 129 1308. 再次确认当前用户名已属于plugdev组,使用groups命令,可以看到打印信息中有plugdev即成功将当前用户添加至plugdev组。 131 132### 编译源码<a name="sectionb2"></a> 133 134使用`git clone`复制代码到任意目录下,打开进入到工程根目录下,输入`git submodule update --init --recursive`下载更新子模块。 135 136编译前请在当前控制台中配置`NUCLEI_TOOL_ROOT`路径,假设`Nuclei`文件夹所在路径为`/home/Nuclei`,输入`export NUCLEI_TOOL_ROOT=/home/Nuclei` 。或者使用时make选项增加`NUCLEI_TOOL_ROOT=/home/Nuclei`。 137 138配置路径后打开至代码根目录下的/target/riscv_nuclei_demo_soc_gcc/GCC位置,输入如下指令开始编译: 139 140``` 141make all 142``` 143 144编译结束后部分参考输出如下: 145 146``` 147 text data bss dec hex filename 148 21900 112 65426 87438 1558e build/Nuclei-demo-soc.elf 149``` 150 151若编译前想清理工程,请使用如下指令: 152 153``` 154make clean 155``` 156 157### 下载调试、运行<a name="sectionb3"></a> 158 159调试或运行前请先是用蜂鸟调试器连接Nuclei DDR200T开发板,确保已按照[环境配置](#sectionb1)中驱动配置部分配置完成。 160 161同样配置好`NUCLEI_TOOL_ROOT`路径并打开至代码根目录下的/target/riscv_nuclei_demo_soc_gcc/GCC位置,输入如下指令进入GDB调试: 162 163``` 164make debug 165``` 166 167等待到进入GDB调试界面时,输入`load`指令下载编译好的elf文件,就可以开始调试。 168 169若想直接运行,请在调试时所在位置输入如下指令: 170 171``` 172make upload 173``` 174 175运行时可以查看串口打印内容,使用串口查看工具,这里以`minicom`为例,若未安装此工具可自行安装或使用其他串口查看工具。打开控制台,输入`minicom -D /dev/ttyUSB1 -b 115200`指令打开串口查看工具。 176 177运行时参考输出如下: 178 179``` 180Nuclei SDK Build Time: Mar 31 2021, 03:29:57 181Download Mode: ILM 182CPU Frequency 7998996 Hz 183entering kernel init... 184TaskSampleEntry1 running... 185TaskSampleEntry1 running... 186TaskSampleEntry1 running... 187TaskSampleEntry1 running... 188TaskSampleEntry2 running... 189TaskSampleEntry1 running... 190TaskSampleEntry1 running... 191TaskSampleEntry1 running... 192TaskSampleEntry1 running... 193TaskSampleEntry1 running... 194TaskSampleEntry2 running... 195TaskSampleEntry1 running... 196``` 197