# X5 EVB V2P0 开发板使用指南

## 功能概述

### 规格参数

X5 EVB 开发板作为 X5 芯片的参考平台，提供了以太网、 USB、 Camera、 LCD、 HDMI、 40PIN 等多种外围接口，配合摄像头、音频板、 LCD 屏幕等外围配件，用户可以方便的进行图像多媒体、算法的评测和开发。

开发板基础规格如下：

| 模块         | 参数                                                         |
| ------------ | ------------------------------------------------------------ |
| **处理器**   | Sunrise 5 （ X5 ） 芯片                                        |
| **CPU**      | 8 核 ARM ® Cortex ® A55@1.5GHz                                  |
| **BPU**      | Bayers-architecture BPU@1.0GHz， 10 TOPS                      |
| **存储**     | 2GB/4GB LPDDR4 ， 8GB/16GB eMMC                                |
| **摄像头**   | 1 路 4-lane MIPI CSI 接口（通过扩展板可拆分为 2 路 2-lane MIPI CSI 接口）<br>2 路 2-lane MIPI CSI 接口 |
| **显示**     | 1 路 HDMI 4K@30fps ， 1 路 MIPI DSI 2K@30fps                 |
| **USB**      | 1 路 USB Type-A 3.0 接口， 1 路 Micro USB 2.0 接口             |
| **有线网络** | 1 路千兆以太网接口                                           |
| **无线网络** | 2.4G / 5G Wi-Fi x1 ，支持 802.11 b/g/n、 Bluetooth 5.1         |
| **其他接口** | TF 卡接口 x1 ， 40 PIN 接口 x1 ， ADC x5 ， I2S0&PDM x1            |
| **供电**     | DC 12V 适配器供电接口                                        |

### X5 EVB 配件说明

用户使用 X5 EVB 开发板前，需要提前的配件如下：

**必选配件**
- 12V 电源适配器 x1 ，至少 2A 供电能力
- 千兆网线 x1 ，用于网络通讯
- Micro USB 2.0 数据线 x2 ，分别用于串口、 USB 通讯
- Camera 模组，用于视频、图像功能评测

**可选配件**
- 显示器与 HDMI Type-A 接口线缆，用于视频画面预览
- MIPI LCD 显示屏与 24PIN FPC，用于显示功能测试
- Audio 子板，用于语音功能测试

## <span id="Function_module_layout"/>功能模块布局

![image-20250525102507117](./_static/_images/x5_evb_v2p0_user_guide/image-20250525102507117.png)

| 接口 | 功能                                    | 接口 | 功能                                                         |
| ---- | --------------------------------------- | ---- | ------------------------------------------------------------ |
| 1    | 12V  DC 电源适配器供电接口              | 14   | JTAG  调试接口                                               |
| 2    | HDMI  Type-A 接口， 最大支持 4K@30 输出 | 15   | Wi-Fi  6 & Bluetooth 5.4 模组 FCS960KAAMD                    |
| 3    | USB  3.0 Type-A 接口                    | 16   | IPEX  Antenna （Bluetooth 天线接口）                         |
| 4    | 千兆以太网接口                          | 17   | Wi-Fi  SMD Antenna, 2400–2500 MHz; 5150–7125 MHz             |
| 5    | Micro  USB 2.0 数据接口                 | 18   | 低功耗  HDMI 1.4 发射器，LT8618SXB                           |
| 6    | 复位功能按键                            | 19   | Micro  USB 2.0调试串口                                       |
| 7    | 唤醒功能按钮                            | 20   | 4-lane MIPI CSI 接口（通过扩展板可拆分为 2 路 2-lane MIPI CSI 接口） |
| 8    | RTC  外部供电接口                       | 21   | 2-lane MIPI CSI 接口                                         |
| 9    | 启动配置拨码，选择启动方式              | 22   | 2-lane MIPI CSI 接口                                         |
| 10   | USB  3.0 主从模式切换接口               | 23   | 电源开关                                                     |
| 11   | ADC[3-7]  功能插针                      | 24   | 40PIN  功能管脚，支持 UART、 I2C、 SPI、 PWM、 I2S           |
| 12   | 4-lane  MIPI DSI 接口                   | 25   | 独立的  I2C 接口，可以用于扩展为 MIPI CSI 接口               |
| 13   | I2S&PDM  音频接口                       | 26   | TF  卡接口                                                   |

### 尺寸图

![image-20250525103157887](./_static/_images/x5_evb_v2p0_user_guide/image-20250525103157887.png)

![image-20250525103208120](./_static/_images/x5_evb_v2p0_user_guide/image-20250525103208120.png)




## 接口使用说明

### 启动开发板

请按照以下步骤设置开发板并上电启动。

- 上电前需确认启动配置拨码开关（接口 9 ）处于 **D0/D4/D11 ： ON， D1/D2/D5 ： OFF** 位置，表示从 `eMMC` 启动，串口波特率 `115200` ，eMMC 在 CLK 上升沿锁存数据，如下图所示：

  ![image-20250525103334208](./_static/_images/x5_evb_v2p0_user_guide/image-20250525103334208.png)

- 接入 12V 电源适配器（接口 1 ），将电源开关（接口 23 ）打开，此时工作指示红灯点亮，说明开发板供电正常。

  ![image-20250525103441164](./_static/_images/x5_evb_v2p0_user_guide/image-20250525103441164.png)




**注意：** 如发现开发板电源灯点亮、但调试串口无打印的情况，需要确认拨码开关状态是否正确。

### <span id="DIP_switch/">拨码开关

拨码开关（接口 9 ）决定了开发板的启动模式配置、调试串口波特率，方便用户对开发板不同模式的配置。

拨码开关内部结构和实物如下图，拨到 ON 位置表明给定信号为高电平 `1`。

![image-20240424225353367](./_static/_images/x5_evb_v2p0_user_guide/image-20240424225353367.png)

- `D5、D0、D1、D2` 三个拨码对应 X5 芯片的 `2NDBOOT_SEL` 管脚，用于决定开发板的启动模式。
- `D4` 拨码对应 X5 芯片的 `UART_BPS` 管脚，用于决定开发板调试串口的波特率。
- `D11` 拨码对应 X5 芯片的 `EMMC_CLK_LATCH` 管脚，用于决定 eMMC 接口的数据采样时钟边沿选择 。

对应的拨码真值表如下表：

| 2NDBOOT_SEL    | Value | 选项                                  | 启动方式的描述                                               |
| -------------- | ----- | ------------------------------------- | ------------------------------------------------------------ |
| D5, D2, D1, D0 | 1000  | 2NDBOOT UART                          | 从 UART 接口进行引导启动                                     |
|                | 1001  | 2NDBOOT eMMC                          | 从 eMMC 存储设备进行引导启动                                 |
|                | 0010  | 2NDBOOT USB2.0 DFU                    | 从 USB2.0 DFU（ Device Firmware Upgrade）接口进行引导启动    |
|                | 1011  | 2NDBOOT SD Card                       | 从 SD 卡进行引导启动                                         |
|                | 1100  | 2NDBOOT QSPI NOR Flash                | 从 QSPI NOR Flash 存储设备进行引导启动                       |
|                | 1101  | 2NDBOOT QSPI NAND Flash               | 从 QSPI NAND Flash 存储设备进行引导启动                      |
|                | 0110  | 2NDBOOT USB3.0 DFU                    | 从 USB3.0 DFU（ Device Firmware Upgrade）接口进行引导启动    |
|                | 1111  | 2NDBOOT QSPI NAND Flash (disable mmu) | 从 QSPI NAND Flash 存储设备进行引导启动，并且在启动时禁用 MMU |

说明：当需要让开发板从 USB DFU 引导启动时， D5 需要配置为低电平（0）。

| UART_BPS | Value | 选项      | 描述                                    |
| -------- | ----- | --------- | --------------------------------------- |
| D4       | 0     | 115200bps | 启动时调试串口的波特率将设定为 115200bps |
|          | 1     | 921600bps | 启动时调试串口的波特率将设定为 921600bps |

| EMMC_CLK_LATCH | Value | 选项                        | 描述                                         |
| -------------- | ----- | --------------------------- | -------------------------------------------- |
| D11            | 0     | eMMC clk falling latch data | 在 **时钟的下降沿** 采样数据（falling edge） |
|                | 1     | eMMC clk rising latch data  | 在 **时钟的上升沿** 采样数据（rising edge）  |

### 调试串口

开发板提供 1 路调试串口，对应接口 19 ，开发板通过串口转 USB 芯片 CH340N，将串口转换为 USB 接口，用户通过 Micro USB 数据线，可实现 PC 与开发板的串口通讯。

![image-20250525104809297](./_static/_images/x5_evb_v2p0_user_guide/image-20250525104809297.png)

### 以太网

开发板提供 1 路 RJ45 网络接口，对应接口 4 ，支持 1000BASE-T、 100BASE-T 和 10BASE-T 标准，开发板默认 `ip` 地址为 `192.168.1.10`。 如需查询 IP 地址，可通过串口登录设备，执行 `ifconfig` 命令查看 `eth0` 节点对应的信息。

```
root@buildroot:~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 9a:77:34:d1:fc:ed  txqueuelen 1000  (Ethernet)
        RX packets 1813  bytes 134485 (131.3 KiB)
        RX errors 0  dropped 1  overruns 0  frame 0
        TX packets 4563  bytes 282810 (276.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 38
```

### USB 3.0 接口

开发板提供 1 路 USB 3.0 Type-A 接口，对应接口 3 ，默认工作在 Host 模式，用户可通过如下方式切换 Device 模式。

**使能 USB 3.0 Device 模式**

可以通过软件和硬件两种方式设置 USB 3.0 工作在 Device 模式下。

- **硬件方式**

  短接接口 10 的插针后， USB 3.0 会自动切换到 Device 模式，断开插针短接后会自动切换回 host 模式。

  ![image-20250525104828249](./_static/_images/x5_evb_v2p0_user_guide/image-20250525104828249.png)

- **软件方式**

  通过执行系统配置命令，强制切换 USB 3.0 的主从模式。

  设置 USB 3.0 为 Device 模式下的命令：

  ```
  echo device > /sys/class/usb_role/35100000.usb-role-switch/role
  ```

  设置 USB 3.0 为 Host 模式下的命令：

  ```
  echo host > /sys/class/usb_role/35100000.usb-role-switch/role
  ```

### USB 2.0 接口

开发板提供 1 路 Micro USB 2.0 接口，对应接口 5 ，支持 OTG 功能。

![image-20250525104844207](./_static/_images/x5_evb_v2p0_user_guide/image-20250525104844207.png)

该接口的主要功能应用如下：

- 功能调试，默认 adb 模式，可通过命令切换 rndis、 uvc 等功能
- 镜像烧录，支持 dfu、 fastboot 等模式的烧录功能
- 外设接入，配合 otg 线，可连接多种 USB 外设

### 摄像头 (MIPI CSI) 接口

开发板提供 3 路 MIPI CSI 接口，分别对应接口 20 、 21 、 22 。

三路接口的能力以及配置情况如下表：

| 接口 | MIPI CSI Host | 最大支持 lane 数  | I2C Bus  | 复位 GPIO           |
| ---- | ------------- | ---------------- | ------- | ------------------- |
| 20   | MIPI_CSI0&1   | 4 lane           | I2C4    | AON_GPIO_PIN0 - 498 |
| 21   | MIPI_CSI2     | 2 lane           | I2C2    | AON_GPIO_PIN4 - 502 |
| 22   | MIPI_CSI3     | 2 lane           | I2C7    | LSIO_GPIO1_06 - 353 |

注： 接口 20 的 MIPI CSI0&1 可以通过外接扩展板拆分为 MIPI CSI0 和 MIPI CSI1 两路 2-lane MIPI CSI 接口。

开发板目前标配模组有 `SC230AI`、`SC132gs`、`IMX415` 等多个型号，方便用户对不同图像场景的测试需求。完整 Camera Sensor 支持列表，请查阅 [Camera Sensor Support List](../linux_development/approved_vendor_list.html#camera-sensor-support-list)。

Camera 模组通过 24PIN 异面排线与开发板摄像头接口相连，连接时需注意排线正反面顺序，如下图所示：

![image-20250525104903968](./_static/_images/x5_evb_v2p0_user_guide/image-20250525104903968.png)

**摄像头模组使用的 MIPI lane 通道数是决定接口选择的唯一因素**，举例说明如下：

- `SC132gs` 模组为 2-lane，因此可以连接到 20 、 21 、 22 任意一个接口。
- `IMX415` 模组为 4-lane，因此只能连接到支持 4-lane 的接口，即接口 20 。

安装完成后，可以通过命令确认模组 I2C 地址能否正常检测到。如检测不到，则需要检查 FPC 排线连接是否正常，避免接触不到位、方向接反等问题。

查询接口 20 上 Camera Sensor 的 I2C 设备地址：

```
echo 498 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio498/direction
echo 0 > /sys/class/gpio/gpio498/value
sleep 0.1
echo 1 > /sys/class/gpio/gpio498/value
echo 24000000 > /sys/class/vps/mipi_host0/param/snrclk_freq
echo 1 > /sys/class/vps/mipi_host0/param/snrclk_en

i2cdetect -y -r 4
```

查询接口 21 上 Camera Sensor 的 I2C 设备地址：

```
echo 502 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio502/direction
echo 0 > /sys/class/gpio/gpio502/value
sleep 0.1
echo 1 > /sys/class/gpio/gpio502/value
echo 24000000 > /sys/class/vps/mipi_host2/param/snrclk_freq
echo 1 > /sys/class/vps/mipi_host2/param/snrclk_en

i2cdetect -y -r 2
```

查询接口 22 上 Camera Sensor 的 I2C 设备地址：

```
echo 353 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio353/direction
echo 0 > /sys/class/gpio/gpio353/value
sleep 0.1
echo 1 > /sys/class/gpio/gpio353/value
echo 24000000 > /sys/class/vps/mipi_host3/param/snrclk_freq
echo 1 > /sys/class/vps/mipi_host3/param/snrclk_en

i2cdetect -y -r 7
```

成功探测到 Camera Sensor 的 I2C 设别地址时，可以看到如下所示的打印（以在接口 22 上探测 SC230AI 为例，可以发现 30 地址被打印出来了）：

```
root@buildroot:~$ i2cdetect -y -r 7
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
```

更多有关 Camera Sensor 相关的使用，请查阅 [ 示例代码介绍 ](../samples/overview.md) 。

### HDMI 接口

开发板支持 1 路 HDMI Type-A 接口，对应接口 2 ，最大支持输出 3840x2160@30fps。

由于系统不支持图形界面，因此开发板 HDMI 接口主要用于实时预览摄像头、网络流画面等功能，具体方法请查阅 [ 示例代码介绍 ](../samples/overview.md) 中显示相关示例。

### LCD （ MIPI DSI）和 TP 接口

开发板支持 MIPI DSI 和触摸屏接口，对应接口 12 ，需要接入配套的屏幕，如下图所示：

![image-20250525105009502](./_static/_images/x5_evb_v2p0_user_guide/image-20250525105009502.png)

成功进入 Linux 系统之后，执行以下命令加载驱动：

```Shell
modprobe panel-jc-050hd134
modprobe vio_n2d
modprobe lontium_lt8618
modprobe vs-x5-syscon-bridge
modprobe vs_drm
```

串口将会打印：

```bash
[ 3343.383052] vs-disp-sif 3e080000.vs-sif: Adding to iommu group 3
[ 3343.384118] vs-dc 3e000000.dc8000Nano: Adding to iommu group 4
[ 3343.385252] vs-bt1120 3e010000.bt1120: Adding to iommu group 5
[ 3343.387555] horizon-lsio-pinctrl 34180000.lsio_iomuxc: set pin = 14 direction to input
[ 3343.387567] horizon-lsio-pinctrl 34180000.lsio_iomuxc: map pin14 to gpio[0] - 14
[ 3343.387635] panel-jc-050hd134 3e060000.mipi_dsi0.0: supply power not found, using dummy regulator
[ 3343.391241] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e080000.vs-sif (ops sif_component_ops [vs_drm])
[ 3343.391529] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e000000.dc8000Nano (ops dc_component_ops [vs_drm])
[ 3343.391692] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e010000.bt1120 (ops bt1120_component_ops [vs_drm])
[ 3343.391730] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e000000.disp_apb:bt1120_bridge (ops bt1120_bridge_component_ops [vs_drm])
[ 3343.391764] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e000000.disp_apb:bt1120_bridge_wb (ops bt1120_bridge_component_ops [vs_drm])
[ 3343.391816] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e060000.mipi_dsi0 (ops dsi_component_ops [vs_drm])
[ 3343.391917] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e000000.disp_apb:dsi-encoder (ops encoder_component_ops [vs_drm])
[ 3343.391976] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e000000.disp_apb:hdmi-encoder (ops encoder_component_ops [vs_drm])
[ 3343.392815] [drm] Initialized vs-drm 1.0.0 20191101 for 3e000000.disp_apb:display-subsystem on minor 0
play-subsystem on minor 0
```

当出现 `[drm] Initialized vs-drm 1.0.0 20191101 for 3e000000.disp_apb:display-subsystem on minor 0` 表示显示驱动加载成功。

使用 `modetest -M vs-drm -a -s 73@31:720x1280 -P 33@31:720x1280@NV12` 命令进行测试。

连接的屏幕将会亮起，显示如下图的 pattern ：

![image-20240426174508923](./_static/_images/x5_evb_user_guide/image-20240426174508923.png)

在使用 TouchScreen 之前，需要加载对应的驱动，例如 gt9xx.ko， 具体的驱动开发工作请查阅触摸屏的用户手册和 [ 驱动开发指南 ](../linux_development/driver_develop_guide/index.md)。

驱动加载示例如下：

```bash
root@buildroot:~$ modprobe gt9xx_core

[   31.725453] Gt9xx driver installing..
[   31.725836] goodix-ts 4-0014: GTP Driver Version: V2.8.1<2022/07/25>
[   31.725846] goodix-ts 4-0014: GTP I2C Address: 0x14
[   31.725858] goodix-ts 4-0014: Unset touchscreen-max-id, use default
[   31.725867] goodix-ts 4-0014: Unset touchscreen-max-w, use default
[   31.725872] goodix-ts 4-0014: Unset touchscreen-max-p, use default
[   31.725879] goodix-ts 4-0014: touch input parameters is [id x y w p]<16 720 1280 1024 1024>
[   31.725892] goodix-ts 4-0014: int-sync enabled
[   31.725897] goodix-ts 4-0014: driver-send-cfg enabled
[   31.725954] goodix-ts 4-0014: Looking up vdd_ana-supply from device tree
[   31.725963] goodix-ts 4-0014: Looking up vdd_ana-supply property in node /soc/a55_apb0/i2c@340f0000/gt9xx@14 failed
[   31.725994] goodix-ts 4-0014: supply vdd_ana not found, using dummy regulator
[   31.733294] goodix-ts 4-0014: Looking up vcc_i2c-supply from device tree
[   31.733304] goodix-ts 4-0014: Looking up vcc_i2c-supply property in node /soc/a55_apb0/i2c@340f0000/gt9xx@14 failed
[   31.733353] goodix-ts 4-0014: supply vcc_i2c not found, using dummy regulator
[   31.740584] goodix-ts 4-0014: Success request irq-gpio
[   31.740606] goodix-ts 4-0014: Success request rst-gpio
[   31.740615] goodix-ts 4-0014: Guitar reset
[   31.770464] do irq down
[   31.833945] goodix-ts 4-0014: I2C Addr is 14
[   31.834979] goodix-ts 4-0014: IC Version: 911_1060
[   31.837180] goodix-ts 4-0014: Config group0 used,length: 186
[   31.839372] goodix-ts 4-0014: Driver send config
[   31.872342] goodix-ts 4-0014: Use slot report protocol
[   31.872888] input: goodix-ts as /devices/virtual/input/input1
[   31.873593] goodix-ts 4-0014: INT num 77, trigger type:2
[   31.873991] goodix-ts 4-0014: create proc entry gt9xx_config success
[   31.874016] goodix-ts 4-0014: Alloc memory size:3070.
[   31.874023] goodix-ts 4-0014: I2C function: without pre and end cmd!
[   31.874032] goodix-ts 4-0014: Create proc entry success!
```

驱动加载成功后，会生成 `/dev/input/event1` 设备节点给用户态程序使用。

**测试使用：**

使用 `tc_test` 程序测试触摸屏功能，当用对触摸屏做点击操作时，可以获取事件、类型、状态码和对应的坐标。

```
# ./tc_test /dev/input/event1
Monitoring input events on /dev/input/event1
[/dev/input/event1] event(0): type:3; code: 47; value:  0; realx:  0; realy:  0
[/dev/input/event1] event(1): type:3; code: 57; value: 16; realx:  0; realy:  0
[/dev/input/event1] event(2): type:3; code: 53; value:248; realx:248; realy:  0
[/dev/input/event1] event(3): type:3; code: 54; value:1007; realx:248; realy:1007
[/dev/input/event1] event(4): type:3; code: 48; value: 13; realx:248; realy:1007
[/dev/input/event1] event(5): type:3; code: 58; value: 13; realx:248; realy:1007
```

**测试代码：**

```c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>

static int handle_event(int fd, const char *device_name)
{
	struct input_event ev[64];
	int button = 0, realx = 0, realy = 0, i, rd;

	rd = read(fd, ev, sizeof(struct input_event) * 64);
	if (rd < (int)sizeof(struct input_event)) return 0;

	for (i = 0; i < rd / (int)sizeof(struct input_event); i++)
	{
		if (EV_ABS == ev[i].type)
		{
			if (ev[i].code == 53) {
				realx = ev[i].value;
			} else if (ev[i].code == 54) {
				realy = ev[i].value;
			}
		}
		printf("[%s] event(%d): type:%d; code:%3d; value:%3d; realx:%3d; realy:%3d\n",
			   device_name, i, ev[i].type, ev[i].code, ev[i].value, realx, realy);
	}
	return 1;
}

int main(int argc, char *argv[])
{
	if (argc < 2) {
		printf("Usage: %s <event device path>\n", argv[0]);
		return -1;
	}

	const char *device_path = argv[1];
	int fd = open(device_path, O_RDONLY);
	if (fd < 0) {
		printf("Failed to open input device: %s\n", device_path);
		return -1;
	}

	printf("Monitoring input events on %s\n", device_path);
	while (handle_event(fd, device_path));

	close(fd);
	return 0;
}

```

### 独立 I2C 接口

开发板支持 1 路独立 I2C 接口，对应接口 25 ，本接口设计的主要用途是配合 MIPI CSI 扩展板把 MIPI CSI0&1 接口（接口 20 ）扩展为 MIPI CSI0 和 MIPI CSI1 两路接口，同时它可以作为一个独立的 I2C 接口连接外设。

![image-20250525105039648](./_static/_images/x5_evb_v2p0_user_guide/image-20250525105039648.png)

管脚位置如下所示：

| 序号 | 名称         | 属性               | 说明                                           |
| ---- | ------------ | ------------------ | ---------------------------------------------- |
| 1    | GND          | 信号电源参考地     | 地                                             |
| 2    | RESET        | 1.8V 单端输出      | 主板对模块进行复位，低电平有效                 |
| 3    | I2C1_SCL     | 默认 3.3V 单端信号 | I2C 数据线                                     |
| 4    | I2C1_SDA     | 默认 3.3V 单端信号 | I2C 时钟线                                     |
| 5    | CSI1 Triggle | 1.8V 单端输入      | 扩展 MIPI CSI1 接口时，用于 Camera Sensor 的触发 |
| 6    | VDD33        | 3.3V， 200mA        | 模块供电                                       |

### Wi-Fi / Bluetooth

- 使用 Wi-Fi

开发板集成了 FCS960K 2.4G/5.0G 双模 Wi-Fi / Bluetooth 模组，支持 IEEE802.11a/b/g/n/ac/axWLAN、 Bluetooth 5.1 功能，系统启动时自动加载 Wi-Fi 驱动。
```
root@buildroot:~$ ifconfig wlan0
wlan0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 40:9c:a7:70:98:cc  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```

用户需要通过修改配置文件的方式，手动配置热点名和获取 ip 地址，方法如下：

```
# 进入 userdata 目录，避免在系统目录下遇到无法写文件的错误
cd /userdata/
# 根据 Wi-Fi 热点情况修改命令中的热点名（ SSID）和密码（“ WIFI_SSID”，“ WIFI_PASSWD”）
wpa_passphrase "WIFI_SSID" "WIFI_PASSWD"  >> ./wpa_supplicant.conf

sleep 1
wpa_supplicant -D nl80211 -i wlan0 -c ./wpa_supplicant.conf -B
sleep 1
udhcpc -i wlan0 &
```

配置完成后，执行 `ping 8.8.8.8` 命令确认网络是否正常，正常情况下的日志如下：

```
root@buildroot:~$ cd /userdata/
root@buildroot:/userdata$ wpa_passphrase WiFi-Test 12345678 >> ./wpa_supplicant.conf
root@buildroot:/userdata$ wpa_supplicant -D nl80211 -i wlan0 -c ./wpa_supplicant.conf -B
Successfully initialized wpa_supplicant
[10093.447698] [BB][halbb_la_bb_set_smp_rate] smp_rate_tmp=7, la_smp_rate_log=160 M
root@buildroot:/userdata$ udhcpc -i wlan0 &
[1] 1309
udhcpc: started, v1.35.0
root@buildroot:/userdata$ udhcpc: broadcasting discover
udhcpc: broadcasting select for 192.168.137.252, server 192.168.137.1
udhcpc: lease of 192.168.137.252 obtained from 192.168.137.1, lease time 604800
deleting routers
adding dns 192.168.137.1

[1]+  Done                    udhcpc -i wlan0
root@buildroot:/userdata$ ifconfig wlan0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.137.252  netmask 255.255.255.0  broadcast 192.168.137.255
        ether 40:9c:a7:70:98:cc  txqueuelen 1000  (Ethernet)
        RX packets 117  bytes 15326 (14.9 KiB)
        RX errors 0  dropped 1  overruns 0  frame 0
        TX packets 63  bytes 5056 (4.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@buildroot:/userdata$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=52 time=82.124 ms
64 bytes from 8.8.8.8: seq=1 ttl=52 time=106.029 ms
64 bytes from 8.8.8.8: seq=2 ttl=52 time=129.993 ms
^ C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 82.124/106.048/129.993 ms
root@buildroot:/userdata$
```

Wi-Fi 的 STA 和 AP 模式切换
执行 `/etc/init.d/wifi_init.sh ap` 可以切换到 AP 模式，执行 `/etc/init.d/wifi_init.sh sta` 可以切换到 STA 模式

```
root@buildroot:~# /etc/init.d/wifi_init.sh ap
Initialize wlan0 to ap mode
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
Finish initialize wlan0 to ap mode
dnsmasq: started, version 2.86 cachesize 150
root@buildroot:~# dnsmasq: compile time options: IPv6 GNU-getopt DBus no-UBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth no-cryptohash no-DNSSEC loop-detect inotify dumpfile
dnsmasq: warning: no upstream servers configured
dnsmasq-dhcp: DHCP, IP range 192.168.5.2 -- 192.168.5.254, lease time 12h
dnsmasq: read /etc/hosts - 2 addresses

root@buildroot:~# /etc/init.d/wifi_init.sh sta
Initialize wlan0 to station mode
Finish initialize wlan0 to station mode
```


- 使用 Bluetooth

执行 `/etc/init.d/bt_init.sh ` 完成蓝牙初始化

执行 `bluetoothctl` 进入交互模式下的蓝牙配置界面，出现了类似下图的设备信息表示蓝牙被识别到了，然后用 `show` 来查看蓝牙信息，留意蓝牙的 `powered` 和 `discoverable` 状态。

![image-20240520-134333.png](./_static/_images/x5_evb_user_guide/image-20240520-134333.png)

执行 `power on` 使能蓝牙，如下图所示：

![image-20240520-134343.png](./_static/_images/x5_evb_user_guide/image-20240520-134343.png)

为了能够使蓝牙被附近的设备发现，需要执行 `discoverable on` 打开蓝牙可发现属性，如下图所示：

![image-20240520-134348.png](./_static/_images/x5_evb_user_guide/image-20240520-134348.png)

此时使用手机或者电脑扫描蓝牙就可以发现 BlueZ 5.64 这个名称的蓝牙设备（这个名称的版本号会因为 BlueZ 版本号不同而有差异，例如还可能会是 BlueZ 5.79）：

![image-20240520-135529.png](./_static/_images/x5_evb_user_guide/image-20240520-135529.png)

接下来测试蓝牙的主动扫描功能，在 bluetoothctl 的交互界面输入 scan on 即可打开主动扫描，它会周期性地打印附近的设备，可以看到已经发现了我的手机设备， scan off 关闭扫描功能并汇总打印扫描到的蓝牙设备：

![image-20240520-134399.png](./_static/_images/x5_evb_user_guide/image-20240520-134399.png)

![image-20240520-134358.png](./_static/_images/x5_evb_user_guide/image-20240520-134358.png)

然后就是和其他蓝牙的配对：

配对命令：`pair [targetMAC]` ，输入该命令后，根据提示输入 `yes`，对端蓝牙设备选择 `配对` 选项完成配对。

![image-20240520-134403.png](./_static/_images/x5_evb_user_guide/image-20240520-134403.png)

配对成功后可以使用 `trust [targetMAC]` 来让下次自动连接

![image-20240520-134408.png](./_static/_images/x5_evb_user_guide/image-20240520-134408.png)

使用 l2ping 测试网络连接

![image-20240520-134412.png](./_static/_images/x5_evb_user_guide/image-20240520-134412.png)


### TF 卡

开发板支持 1 路 TF 接口（接口 26 ），最大支持 SDR104 模式。支持 FAT32 （ VFAT）、 EXFAT、 ext2 、 ext3 、 ext4 文件系统格式。

插上 TF 卡后，内核有如下日志，说明正确识别：

```
[ 9809.931894] mmc1: new HSSDHC card at address 1234
[ 9809.933740] mmcblk1: mmc1:1234 SA16G 14.5 GiB
[ 9809.940060]  mmcblk1: p1
```

注意：根据 TF 卡的具体型号及 TF 卡的具体分区，实际打印可能有细微差别。

- TF 卡上的分区文件系统格式不是 FAT32 （ VFAT）、 ext2 、 ext3 、 ext4 ，请使用以下命令对 TF 卡分区进行格式化

```
# 格式为 FAT32(VFAT)
mkfs.vfat /dev/mmcblk2p1
# 格式为 ext4
mkfs.ext4 /dev/mmcblk2p1
# 格式为 ext3
mkfs.ext3 /dev/mmcblk2p1
# 格式为 ext2
mkfs.ext2 /dev/mmcblk2p1
```

### 40PIN 接口

开发板提供 1 路 40PIN 接口，方便用户扩展外围接口，对应接口 24 ，定义以及支持的复用功能如下：

![image-20250331-120318](./_static/_images/x5_evb_user_guide/image-20250331-120318.png)

40PIN 上的所有 IO 管脚默认工作在 3.3V 电压域，支持调整 `R903` 和 `R902` 来切换 3.3V 和 1.8V 电压域。

![image-20240426221223253](./_static/_images/x5_evb_user_guide/image-20240426221223253.png)

<font color=red>**警告：切换电压域时务必同步更新 UBoot 代码。如果未进行配合修改，可能导致软件配置与实际供电不匹配，从而造成芯片损坏。**</font>

#### <span id="pin-connection-example"/> 连接举例：
这里展示一款 Auido Driver HAT 的硬件参考连接图：

![image-20250525105101571](./_static/_images/x5_evb_v2p0_user_guide/image-20250525105101571.png)


### RTC

开发板通过外部 RTC 电路及外接电池，可实现断电后系统时间保持功能。其中 RTC 电池接口（接口 8 ）定义如下：

![image-20250525105136462](./_static/_images/x5_evb_v2p0_user_guide/image-20250525105136462.png)

连接器类型：JST_1X2P_PITCH1

| 序号 | 名称 | 说明             |
| ---- | ---- | ---------------- |
| 1    | VRTC | 电池正极， 3.3V  |
| 2、3、4 | GND | 电池负极，参考地 |

**注意**：X5 EVB V2P0 板端无外部 RTC，仅有 X5 SOC 内置的 RTC ，开机后确认启动日志，可以看到 X5 SOC 内置 RTC 的相关打印：

```Shell
root@buildroot:~# dmesg | grep rtc
[    0.571115] dw-rtc 31010000.rtc: prescaler set to: 24000000
[    0.571451] dw-rtc 31010000.rtc: char device (253:0)
[    0.571463] dw-rtc 31010000.rtc: registered as rtc0
[    0.571479] dw-rtc 31010000.rtc: setting system clock to 1970-01-01T00:00:00 UTC (0)
```

从日志可以看到， X5 SOC 内置 RTC 被注册为 `rtc0` ，可以使用下面命令进行 RTC 测试：

```bash
# 将时间写入 rtc0
date -s "2025/01/01 08:00:00"    # 设置系统时间
hwclock -w                       # 将系统时间写入 RTC
hwclock -r                       # 读取 RTC 时间，确认时间是否写入成功
date -s "2024/01/01 17:08:00"    # 再次设置系统时间为不同的时间
hwclock -s                       # 将 RTC 时间更新到系统时间
date                             # 查看同步 RTC 时间是否成功   
```

如果有外接 RTC 电池，可以在开机后执行下面命令，测试是否能够同步 RTC 时间：

```bash
date        # 查看重启后的当前系统时间
hwclock -s  # 同步 RTC 时间到系统
date        # 查看当前系统时间，确认当前同步 RTC 时间到系统是否成功
```

### ADC 接口

接口 11 是开发板上的 ADC（模数转换器）接口，它提供了 ADC[3-7] 这五个功能插针，用于连接模拟信号输入源，并将模拟信号转换为数字信号供系统处理。用户可以通过读取相应的系统文件来获取转换后的 ADC 值。

- **输入电压范围**： ADC 支持的输入电压范围为 <font color=red> **0.1~1.7V**</font>，用户需要确保输入信号的电压在此范围内，以避免信号失真或损坏 ADC。

  ![image-20250525105335886](./_static/_images/x5_evb_v2p0_user_guide/image-20250525105335886.png)

**读取 ADC 值**

通过读取系统文件 `/sys/bus/iio/devices/iio:device0/in_voltage3_raw` 至 `/sys/bus/iio/devices/iio:device0/in_voltage7_raw` 来获取 ADC[3-7] 各个通道的原始 ADC 值。例如，要读取 ADC3 的值，可以使用以下命令：

```bash
root@buildroot:~$ cat /sys/bus/iio/devices/iio:device0/in_voltage3_raw
1020
```

该命令将输出 ADC3 通道转换后的原始数字值。用户可以根据需要分别读取 ADC[3-7] 的值，只需将命令中的 `in_voltage3_raw` 替换为相应的 `in_voltageX_raw`（ X 为 3 到 7 ）。

### 其他接口

- **电源开关**

控制单板的重新上电和断电，对应接口为 **23**。

- **复位开关**

通过拉低芯片的 RSTN 信号实现复位操作，对应接口为 **6**。

- **唤醒开关**

用于在 Sleep 模式下通过外部唤醒源唤醒系统，对应接口为 **7**。

- **JTAG 调试接口**

用于配合 DS5 等工具进行芯片调试，对应接口为 **14**。开发板默认未焊接连接器，需在使用前手动焊接连接器。


### 注意事项

X5 EVB V2P0 包含 Secure 和 Non-secure 两种版本，用户需区分 Secure 和 Non-secure 固件，有关 Non-secure 固件可以参考[Non-secure 固件](../linux_development/bsp_develop.html#no_secure_firmware)
