# AXU4EV-E 开发板 BSP 说明

## 简介

本文档是为 AXU4EV-E 开发板提供的 BSP (板级支持包) 说明。

主要内容如下:

- 开发板资源介绍
- BSP 快速上手
- 进阶使用方法

通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。

## 开发板介绍

AXU4EV-E 开发板是 芯驿电子科技(上海)有限公司 推出的一款基于 XILINX Zynq UltraScale+ MPSoCs 开发平台的开发板。这款 MPSoCs 开发平台采用核心板加扩展板的模式,方便用户对核心板的二次开发利用。核心板使用 XILINX Zynq UltraScale+ EV 芯片 ZU4EV 的解决方案,它采用Processing System(PS)+Programmable Logic(PL)技术将四核ARM Cortex-A53 和FPGA 可编程逻辑集成在一颗芯片上。另外核心板上 PS 端带有 4 片共 4GB 高速 DDR4 SDRAM 芯片,1 片 8GB的 eMMC 存储芯片和 1 片 256Mb 的 QSPI FLASH 芯片;核心板上 PL 端带有 1 片 1GB 的DDR4 SDRAM 芯片 。

开发板更多详细信息请参考[芯驿电子科技(上海)有限公司](http://www.alinx.cn/)。

## 外设支持

本 BSP 目前对外设的支持情况如下:

| **核心**      | **支持情况** | **备注**                              |
| :----------------- | :----------: | :------------------------------------- |
| R5-CPU0   |     支持     | 运行系统的为R5核的CPU0 |
| **板载外设**      | **支持情况** | **备注**                              |
| 无 |          |  |
| **片上外设**      | **支持情况** | **备注**                              |
| GPIO              |     支持     |  |
| UART              |     支持     | UART0                            |
| TIMER     |     支持     |     TTC0提供系统时钟         |
| EMMC | 支持 | SD0控制器 |
| EMAC | 支持 | e0网卡 |

## 使用说明

使用说明分为如下两个章节:

- 快速上手

    本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。

- 进阶使用

    本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。


### 快速上手

本 BSP 为仅支持 GCC 开发环境,下面介绍如何将系统运行起来。

#### 编译下载

1. 在 bsp 下打开 env 工具,输入`scons`进行编译。

2. 编译完成后在 bsp 目录下会生成 `rtthread-zynqmp-r5.elf` 文件。

3. 使用 Xilinx Vitis 产生 FSBL,然后创建 “Debug Configuration”,Application 选择`rtthread-zynqmp-r5.elf` 文件。

4. 使用调试器连接 PC 和开发板,通过拨码开关设置为 JTAG 启动,然后连接电源,点击开始调试或运行即可。

   由于编译时默认带有调试信息(见 rtconfig.py 中 BUILD),所以在 Xilinx Vitis 中调试时同样可以打开源文件设断点进行调试。

#### 固化程序

1. 在 bsp 下打开 env 工具,输入`scons`进行编译。

2. 编译完成后在 bsp 目录下会生成 `rtthread-zynqmp-r5.elf` 文件。

3. 使用 Xilinx Vitis 或 Xilinx SDK 产生 FSBL,然后使用 Xilinx 提供的 bootgen 工具制作 BOOT.bin 文件。

   例如使用命令行方式:

   ```
    bootgen -image ./output.bif -arch zynqmp -o ./BOOT.bin -w on
   ```
   
   其中 output.bif 文件可以是:
   ```
   //arch = zynqmp; split = false; format = BIN
   the_ROM_image:
   {
        [bootloader, destination_cpu = r5-0]./fsbl.elf
        [destination_cpu = r5-0, exception_level = el-3]./rtthread-zynqmp-r5.elf
   }
   ```
   
4. 根据 ALINX 提供的文档将 BOOT.bin 放进SD卡或烧录到 QSPI FLASH 中,通过拨码开关设置启动方式,然后连接电源即可启动。


#### 运行结果

下载程序成功之后,系统会自动运行。

连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息:

```bash
 \ | /
- RT -     Thread Operating System
 / | \     4.0.3 build Nov 27 2020
 2006 - 2020 Copyright by rt-thread team
msh />
```

### 进阶使用

此 BSP 默认开启了 EMMC 驱动和 DFS 文件系统,如果需要使用文件系统可以自行格式化并挂载。

此 BSP 默认开启并配置了网卡驱动及lwip协议栈,相关配置需要注意如下几点:

1. 注意将`RT_LWIP_PBUF_NUM`至少设置为256
2. 注意将`RT_LWIP_MEM_ALIGNMENT`设置为32。若使用RTT中lwip 2.0.2以外的版本时,由于其他版本未使用该宏,需要手动修改`lwipopts.h`中的`MEM_ALIGNMENT`宏。


## 板级移植

如果需要将BSP移植到其他 XILINX Zynq UltraScale+ MPSoCs 开发平台的开发板上也比较方便,主要修改的地方有以下几点:

1. 内存: 如果 DDR memory 小于 2G,需要修改`zynqmp-r5.ld`链接文件中的`psu_r5_ddr_0_MEM_0` 以及`board.h`中的`HEAP_END`
2. 主频: `xparameters.h`中的`XPAR_CPU_CORTEXR5_0_CPU_CLK_FREQ_HZ`
3. 串口引脚和频率:`drv_uart.c`中的`rxmio`, `txmio` 和`xparameters.h`中的`XPAR_PSU_UART_0_UART_CLK_FREQ_HZ`
4. 定时器频率:`xparameters.h`中的`XPAR_PSU_TTC_0_TTC_CLK_FREQ_HZ` 
5. SD控制器:`drv_sdcard.c`中的块设备驱动初始化
6. 网卡驱动:若使用的PHY芯片不在驱动支持范围内,可能需要在`xemacpsif_physpeed.c`中实现相应芯片的速率识别函数,可参考ALINX的相应教程。

以上需要修改的`xparameters.h`中的参数宏定义不需要手动修改,可以直接将Xilinx Vitis中产生的开发板的`xparameters.h`文件复制过来即可。



## 注意事项

- 无

## 联系人信息

维护人:

-  [王华辰](https://github.com/Wang-Huachen/)