• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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![Nuclei Tools need to be downloaded for Linux](doc/image/nuclei_tools_download_linux.png)
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