2.2. X5 EVB V2P0 开发板使用指南

2.2.1. 功能概述

2.2.1.1. 规格参数

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 接口)
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 适配器供电接口

2.2.1.2. X5 EVB 配件说明

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

必选配件

  • 12V 电源适配器 x1 ,至少 2A 供电能力

  • 千兆网线 x1 ,用于网络通讯

  • Micro USB 2.0 数据线 x2 ,分别用于串口、 USB 通讯

  • Camera 模组,用于视频、图像功能评测

可选配件

  • 显示器与 HDMI Type-A 接口线缆,用于视频画面预览

  • MIPI LCD 显示屏与 24PIN FPC,用于显示功能测试

  • Audio 子板,用于语音功能测试

2.2.2. 功能模块布局

image-20250525102507117

接口 功能 接口 功能
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 卡接口

2.2.2.1. 尺寸图

image-20250525103157887

image-20250525103208120

2.2.3. 接口使用说明

2.2.3.1. 启动开发板

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

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

    image-20250525103334208

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

    image-20250525103441164

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

2.2.3.2. 拨码开关

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

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

image-20240424225353367

  • 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)

2.2.3.3. 调试串口

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

image-20250525104809297

2.2.3.4. 以太网

开发板提供 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

2.2.3.5. 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

  • 软件方式

    通过执行系统配置命令,强制切换 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
    

2.2.3.6. USB 2.0 接口

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

image-20250525104844207

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

  • 功能调试,默认 adb 模式,可通过命令切换 rndis、 uvc 等功能

  • 镜像烧录,支持 dfu、 fastboot 等模式的烧录功能

  • 外设接入,配合 otg 线,可连接多种 USB 外设

2.2.3.7. 摄像头 (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 接口。

开发板目前标配模组有 SC230AISC132gsIMX415 等多个型号,方便用户对不同图像场景的测试需求。完整 Camera Sensor 支持列表,请查阅 Camera Sensor Support List

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

image-20250525104903968

摄像头模组使用的 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 相关的使用,请查阅 示例代码介绍

2.2.3.8. HDMI 接口

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

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

2.2.3.9. LCD ( MIPI DSI)和 TP 接口

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

image-20250525105009502

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

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

串口将会打印:

[ 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

在使用 TouchScreen 之前,需要加载对应的驱动,例如 gt9xx.ko, 具体的驱动开发工作请查阅触摸屏的用户手册和 驱动开发指南

驱动加载示例如下:

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

测试代码:

#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;
}

2.2.3.10. 独立 I2C 接口

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

image-20250525105039648

管脚位置如下所示:

序号 名称 属性 说明
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 模块供电

2.2.3.11. 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 来查看蓝牙信息,留意蓝牙的 powereddiscoverable 状态。

image-20240520-134333.png

执行 power on 使能蓝牙,如下图所示:

image-20240520-134343.png

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

image-20240520-134348.png

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

image-20240520-135529.png

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

image-20240520-134399.png

image-20240520-134358.png

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

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

image-20240520-134403.png

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

image-20240520-134408.png

使用 l2ping 测试网络连接

image-20240520-134412.png

2.2.3.12. 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

2.2.3.13. 40PIN 接口

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

image-20250331-120318

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

image-20240426221223253

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

连接举例:

这里展示一款 Auido Driver HAT 的硬件参考连接图:

image-20250525105101571

2.2.3.14. RTC

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

image-20250525105136462

连接器类型:JST_1X2P_PITCH1

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

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

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 测试:

# 将时间写入 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 时间:

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

2.2.3.15. ADC 接口

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

  • 输入电压范围: ADC 支持的输入电压范围为 0.1~1.7V,用户需要确保输入信号的电压在此范围内,以避免信号失真或损坏 ADC。

    image-20250525105335886

读取 ADC 值

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

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 )。

2.2.3.16. 其他接口

  • 电源开关

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

  • 复位开关

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

  • 唤醒开关

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

  • JTAG 调试接口

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

2.2.3.17. 注意事项

X5 EVB V2P0 包含 Secure 和 Non-secure 两种版本,用户需区分 Secure 和 Non-secure 固件,有关 Non-secure 固件可以参考Non-secure 固件