# X5 MD 开发板使用指南

## 功能概述

### 产品介绍

X5 MD采用核心板与IO载板分离的模块化设计方式，便于功能扩展与定制开发。

RDK X5 Module作为核心板，集成了D-Robotics Sunrise®5智能计算芯片及其关键电路设计，融合了PMIC电源管理模块、DDR、eMMC、QSPI NAND、Wi-Fi/蓝牙等核心功能单元。核心板提供300针高速扩展接口，可灵活连接多种外设，满足各类应用场景的快速部署需求。

![image-20250704171124](./_static/_images/x5_md_user_guide/image-20250704171124.png)

RDK X5 Module Carrier Board是RDK X5 Module的配套IO载板，提供了丰富的外设接口。
直出接口包括：
- 两路22Pin摄像头接口（集成MIPI CSI、LPWM&MCLK、I²C、GPIO）
- 一路HDMI接口
- 一路RJ45以太网接口
- 一路LCD接口（集成MIPI DSI和I²C）
- 40Pin扩展接口（包含GPIO、I²C、SPI、I²S、PWM）
- 多路功能控制接口等

经过IO载板外围器件处理后输出的接口包括：
- CAN总线接口（采用TCAN4550芯片，SPI转CAN）
- 耳机音频接口（基于ES8326B，支持I²S转音频DAC&ADC）
- 四路USB 3.0接口（通过GL3510 USB Hub扩展）

![image-20250704112054](./_static/_images/x5_md_user_guide/image-20250704112054.png)

用户可参考IO载板的电路设计，自主开发满足自身应用需求的定制化底板。

### 规格参数

X5 MD基础规格如下：

| 模块         | 参数                                                         |
| ------------ | ------------------------------------------------------------ |
| **处理器**   | Sunrise 5 （ X5 ） 芯片                                        |
| **CPU**      | 8 核 ARM ® Cortex ® A55@1.5GHz                                  |
| **BPU**      | Bayers-architecture BPU@1.0GHz， 10 TOPS                      |
| **存储**     | 2GB/4GB/8GB LPDDR4 ， 0/8GB/16GB/32GB/64GB eMMC                                |
| **摄像头**   | 2 路 4-lane MIPI CSI 接口 |
| **显示**     | 1 路 HDMI 1080P@60fps ， 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 ， I2S x2            |
| **供电**     | USB Type C 5V/5A 供电                                        |

### X5 MD 配件说明

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

**必选配件**
- USB Type C 接口 5V/5A 的电源适配器
- 千兆网线 x1 ，用于网络通讯
- Micro USB 2.0 数据线 x1，用于串口通信
- USB TYPE-C 数据线 x1,用于USB 2.0 数据传输
- Camera 模组，用于视频、图像功能评测

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

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

![image-202507041116](./_static/_images/x5_md_user_guide/image-202507041116.png)

| 接口 | 功能                                    | 接口 | 功能                                                         |
| ---- | --------------------------------------- | ---- | ------------------------------------------------------------ |
| 1    | USB Type C 5V/5A供电接口              | 13   | RTC电池接口                                             |
| 2    | USB2.0配置header | 14   | CAN终端电阻接入开关                    |
| 3    | USB2.0接口                    | 15   | CAN总线接口                         |
| 4    | USB3.0 HOST接口x2                          | 16   | 功能控制IO header             |
| 5    | USB3.0 HOST接口x2                 | 17   |  Audio接口                           |
| 6    | 千兆以太网口                            | 18   | IO电平选择header                                      |
| 7    | 风扇接口                            | 19   | MIPI DSI接口 |
| 8    | POE 接口                       | 20   | Micro SD卡接口（背面）                                         |
| 9    | CAM2接口，4lane              | 21   | HDMI接口                                         |
| 10   | CAM1接口，4lane               | 22   | Debug口，USB转串口（背面）                                                     |
| 11   | 40pin header                      | 23   | Sleep按键           |
| 12   | 核心模组接口                   | 24   | 电源开关           | 

### 尺寸图

![image-20250704141256](./_static/_images/x5_md_user_guide/image-20250704141256.png)

![image-20250704141132](./_static/_images/x5_md_user_guide/image-20250704141132.png)


## 接口使用说明

### 启动开发板

接入 5V/5A 电源适配器（接口 1 ），将电源开关（接口 24 ）打开，CB PWR和MD PWR 亮起，说明开发板供电正常。

  ![image-20250704140657](./_static/_images/x5_md_user_guide/image-20250704140657.png)


### 从 `eMMC` 启动

X5 MD最开始为RDK生态客户设计，运行RDK系统，默认从`spi nand`启动，如果要烧录使用SDK系统，需要改为从`eMMC`启动。

首先，通过核心板和IO载板的丝印，确认板卡硬件版本。

V0.X版本：需要更改核心板，请咨询FAE获取`eMMC`启动修改方法；

V1.X版本：需要更改IO载板：图中位置焊接4.7K欧姆电阻。

  ![image-20250704170727](./_static/_images/x5_md_user_guide/image-20250704170727.png)

### 调试串口

开发板提供一路调试串口(<font color='Red'>背面</font>接口22)，以实现串口登录、调试功能。电脑串口工具的参数配置如下：

- 波特率（Baud rate）：921600
- 数据位（Data bits）：8
- 奇偶校验（Parity）：None
- 停止位（Stop bits）：1
- 流控（Flow Control）：无

串口连接时，需要将通过 Micro-USB 线，连接开发板接口22 与 PC。

  ![image-20250704141632](./_static/_images/x5_md_user_guide/image-20250704141632.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
```

此外，该接口支持 PoE（Power over Ethernet，以太网供电）功能，无需额外的电源线即可通过网线同时传输数据和电力，使设备的安装更加简便灵活。

### USB 3.0 接口

开发板提供 1 路 USB 3.0，IO载板通过USB HUB扩展为4路 USB 3.0 Type A接口 对应接口4和接口5 ，默认工作在 Host 模式。

如果用户设计的底板没有usb hub，可以通过软件方式切换成 Device 模式。

**使能 USB 3.0 Device 模式**

  通过执行系统配置命令，强制切换 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 接口，对接口 3 ，可以短接接口 2，将USB 2.0切换到HOST模式。

![image-20250704141855](./_static/_images/x5_md_user_guide/image-20250704141855.png)

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

- 功能调试，默认 adb 模式，可通过命令切换 rndis、 uvc 等功能
- 镜像烧录，支持 dfu、 fastboot 等模式的烧录功能
- 外设接入，配合 接口 3，灵活切换host和device模式

### IO电平选择

开发板提供一路 IO 电平选择接口（对应接口 18），可切换 IO 电平为 1.8V 或 3.3V。该设置会同时影响 40Pin 接口和 CAM 接口的 IO 电平。

![image-20250704144333](./_static/_images/x5_md_user_guide/image-20250704144333.png)

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

开发板提供 2 路 22pin MIPI CSI 接口，CAM1(接口 10) CAM2(接口 9) 。

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

| 接口 | MIPI CSI Host | 最大支持 lane 数  | I2C Bus  | 复位 GPIO           | LPWM & MCLK           |
| ---- | ------------- | ---------------- | ------- | ------------------- | --------------------- |
| 10   | MIPI_CSI0&1   | 4 lane           | I2C6    | LSIO_GPIO1_06 - 353 | LSIO_LPWM1_0 & LSIO_SENSOR0_MCLK |
| 9    | MIPI_CSI2&3   | 4 lane           | I2C4    | LSIO_GPIO1_04 - 351 | LSIO_LPWM1_1 & LSIO_SENSOR1_MCLK |

22pin接口可以对接树莓派风格的摄像头模组，IO电平（接口 18）要选择3.3V，支持的模组有`IMX219`、`IMX477`、`OV5647`，MCLK由模组提供。

官方提供了22pin到24pin的转接板，转接板上集成了一颗24M有源晶体负责给Sensor提供MCLK，IO电平（接口 18）要选择1.8V。

![image-202507041445](./_static/_images/x5_md_user_guide/image-202507041445.png)

X5 MD 与转接板通过 22Pin 0.5mm 间距同向 FPC 连接，转接板与摄像头模组之间使用与 EVB 板相同类型的排线。

通过转接板可以对接EVB板卡支持的一系列摄像头模组，例如`SC230AI`、`SC132gs`、`IMX415`，方便用户对不同图像场景的测试需求。完整 Camera Sensor 支持列表，请查阅 [Camera Sensor Support List](../linux_development/approved_vendor_list.html#camera-sensor-support-list)。

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

查询靠CAM1(接口10) 接口 上 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

i2cdetect -y -r 6
```

查询CAM2(接口9) 接口 上 Camera Sensor 的 I2C 设备地址：
```
echo 351 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio351/direction
echo 0 > /sys/class/gpio/gpio351/value
sleep 0.1
echo 1 > /sys/class/gpio/gpio351/value

i2cdetect -y -r 4
```

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

```
root@buildroot:~$ i2cdetect -y -r 6
     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 接口，对应接口 21 ，支持的Pixel Clock 范围为 25 MHz –165 MHz。

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

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

开发板支持 MIPI DSI 和触摸屏接口，对应接口 14 ，接口为22pin，可使用DSI-Cable-12cm接入微雪4.3寸电容触控屏 800×480，如下图所示：

![image-20250704155010](./_static/_images/x5_md_user_guide/image-20250704155010.png)

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

```Shell
modprobe sii902x
modprobe panel-wh-cm480
modprobe ft5406
modprobe hb_bl
modprobe vio_n2d
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:800x480 -P 33@31:800x480@NV12` 命令进行测试。

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

![image-20250704155508](./_static/_images/x5_md_user_guide/image-20250704155508.png)

加载驱动的命令中， `ft5406`是触摸屏驱动， `hb_bl`是背光驱动，具体的驱动开发工作请查阅触摸屏的用户手册和 [ 驱动开发指南 ](../linux_development/driver_develop_guide/index.md)。

驱动加载成功后，会生成 `/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;
}

```

### 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 接口（接口22 ），最大支持 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
```

### CANFD 接口

 开发板提供 CANFD 接口（接口15）和 CAN终端电阻接入开关（接口14，高速通信需要两端使能终端电阻，防止信号反射，提升抗干扰能力），可用于CAN及CAN FD通信

 CANFD 接口的三个信号脚分别为 GND L H。

 ![image-20250704161207](./_static/_images/x5_md_user_guide/image-20250704161207.png)

### 40PIN 接口

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

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

40PIN 上的所有 IO 管脚支持通过电平选择接口（接口 18）来切换 3.3V 和 1.8V 电压域。

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

![image-20250704163146](./_static/_images/x5_md_user_guide/image-20250704163146.png)

### RTC

开发板使能了pmic 芯片 hpu3501 的 RTC 功能，RTC 电池接口为接口 13：

![image-20250704161122](./_static/_images/x5_md_user_guide/image-20250704161122.png)

连接器从左到右为 电池负极，电池正极，对电池的电压和放电电流要求为：2~3.3V ，＞2.5uA

hpu3501-rtc 被注册为 `rtc0` ，可以使用下面命令进行外部 RTC 测试：

```bash
# 确认是否存在 /dev/rtc0 设备
ls /dev/rtc*

# 建立 /dev/rtc0 到 /dev/rtc 的软连接
rm /dev/rtc
ln -s /dev/rtc0 /dev/rtc

# 将时间写入外部 rtc
date -s "2024/01/01 17:08:00"    # 设置系统时间
hwclock -w                       # 将系统时间写入 RTC
hwclock -r                       # 读取 RTC 时间，确认时间是否写入成功

# 重启单板后从外部 RTC 读取时间到系统
# 确认是否存在 /dev/rtc0 设备
ls /dev/rtc*
# 建立 /dev/rtc0 到 /dev/rtc 的软连接
rm /dev/rtc
ln -s /dev/rtc1 /dev/rtc
hwclock -s                               # 如果 rtc 电池存在，断电后，再上电，可以将 RTC 时间更新到系统时间
date                                     # 读取系统时间，此时应该是先前配置的时间 "2024/01/01 17:08:00"
```

### 其他接口

- **电源开关**

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

- **复位开关**

整版下电，对应接口为 **22** 左1；X5MD核心板下电 **22** 左2。

- **唤醒开关**

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