2.1. X5 EVB 1_B 开发板使用指南
2.1.1. 功能概述
2.1.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.1.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.1.2. 功能模块布局

| 接口 | 功能 | 接口 | 功能 |
|---|---|---|---|
| 1 | 12V DC 电源适配器供电接口 | 14 | JTAG 调试接口 |
| 2 | HDMI Type-A 接口, 最大支持 4K@30 输出 | 15 | Wi-Fi 和 Bluetooth 模块, CDW-47852BS |
| 3 | USB 3.0 Type-A 接口 | 16 | Bluetooth 天线接口 |
| 4 | 千兆以太网接口 | 17 | Wi-Fi 天线接口,使用 Duplex 支持同时传输 2.4G&5G 信号 |
| 5 | Micro USB 2.0 数据接口 | 18 | Wi-Fi 天线接口,使用 Duplex 支持同时传输 2.4G&5G 信号 |
| 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.1.2.1. 尺寸图


2.1.3. 接口使用说明
2.1.3.1. 启动开发板
请按照以下步骤设置开发板并上电启动。
上电前需确认启动配置拨码开关(接口 9 )处于 D0 : ON, D1/D2/D4 : OFF 位置,表示从
eMMC启动,串口波特率115200,如下图所示:
接入 12V 电源适配器(接口 1 ),将电源开关(接口 23 )打开,此时工作指示红灯点亮,说明开发板供电正常。


注意: 如发现开发板电源灯点亮、但调试串口无打印的情况,需要确认拨码开关状态是否正确。
2.1.3.2. 拨码开关
拨码开关(接口 9 )决定了开发板的启动模式配置、调试串口波特率,方便用户对开发板不同模式的配置。
拨码开关内部结构和实物如下图,拨到 ON 位置表明给定信号为高电平 1。

D0、D1、D2三个拨码对应 X5 芯片的2NDBOOT_SEL管脚,用于决定开发板的启动模式。D4拨码对应 X5 芯片的UART_BPS管脚,用于决定开发板调试串口的波特率。
对应的拨码真值表如下表:
| 2NDBOOT_SEL | Value | 选项 | 启动方式的描述 |
|---|---|---|---|
| D2, D1, D0 | 000 | 2NDBOOT UART | 从 UART 接口进行引导启动 |
| 001 | 2NDBOOT eMMC | 从 eMMC 存储设备进行引导启动 | |
| 010 | 2NDBOOT USB2.0 DFU | 从 USB2.0 DFU( Device Firmware Upgrade)接口进行引导启动 | |
| 011 | 2NDBOOT SD Card | 从 SD 卡进行引导启动 | |
| 100 | 2NDBOOT QSPI NOR Flash | 从 QSPI NOR Flash 存储设备进行引导启动 | |
| 101 | 2NDBOOT QSPI NAND Flash | 从 QSPI NAND Flash 存储设备进行引导启动 | |
| 110 | 2NDBOOT USB3.0 DFU | 从 USB3.0 DFU( Device Firmware Upgrade)接口进行引导启动 | |
| 111 | 2NDBOOT QSPI NAND Flash (disable mmu) | 从 QSPI NAND Flash 存储设备进行引导启动,并且在启动时禁用 MMU |
| UART_BPS | Value | 选项 | 描述 |
|---|---|---|---|
| D4 | 0 | 115200bps | 启动时调试串口的波特率将设定为 115200bps |
| 1 | 921600bps | 启动时调试串口的波特率将设定为 921600bps |
2.1.3.3. 调试串口
开发板提供 1 路调试串口,对应接口 19 ,开发板通过串口转 USB 芯片 CH340N,将串口转换为 USB 接口,用户通过 Micro USB 数据线,可实现 PC 与开发板的串口通讯。

2.1.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.1.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 模式。

软件方式
通过执行系统配置命令,强制切换 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.1.3.6. USB 2.0 接口
开发板提供 1 路 Micro USB 2.0 接口,对应接口 5 ,支持 OTG 功能。

该接口的主要功能应用如下:
功能调试,默认 adb 模式,可通过命令切换 rndis、 uvc 等功能
镜像烧录,支持 dfu、 fastboot 等模式的烧录功能
外设接入,配合 otg 线,可连接多种 USB 外设
2.1.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 接口。
开发板目前标配模组有 SC230AI、SC132gs、IMX415 等多个型号,方便用户对不同图像场景的测试需求。完整 Camera Sensor 支持列表,请查阅 Camera Sensor Support List。
Camera 模组通过 24PIN 异面排线与开发板摄像头接口相连,连接时需注意排线正反面顺序,如下图所示:

摄像头模组使用的 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.1.3.8. HDMI 接口
开发板支持 1 路 HDMI Type-A 接口,对应接口 2 ,最大支持输出 3840x2160@30fps。
由于系统不支持图形界面,因此开发板 HDMI 接口主要用于实时预览摄像头、网络流画面等功能,具体方法请查阅 示例代码介绍 中显示相关示例。
2.1.3.9. LCD ( MIPI DSI)和 TP 接口
开发板支持 MIPI DSI 和触摸屏接口,对应接口 12 ,需要接入配套的屏幕,如下图所示:

成功进入 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 :

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

管脚位置如下所示:
| 序号 | 名称 | 属性 | 说明 |
|---|---|---|---|
| 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.1.3.11. Wi-Fi / Bluetooth
使用 Wi-Fi
开发板集成了 CDW-47852BS 2.4G/5.0G 双模 Wi-Fi / Bluetooth 模组,支持 802.11 b/g/n、 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
执行 startbt8852.sh 完成蓝牙初始化
执行 bluetoothctl 进入交互模式下的蓝牙配置界面,出现了类似下图的设备信息表示蓝牙被识别到了,然后用 show 来查看蓝牙信息,留意蓝牙的 powered 和 discoverable 状态。

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

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

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

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


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

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

使用 l2ping 测试网络连接

2.1.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.1.3.13. 40PIN 接口
开发板提供 1 路 40PIN 接口,方便用户扩展外围接口,对应接口 24 ,定义以及支持的复用功能如下:

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

警告:切换电压域时务必同步更新 UBoot 代码。如果未进行配合修改,可能导致软件配置与实际供电不匹配,从而造成芯片损坏。
连接举例:
这里展示一款 Auido Driver HAT 的硬件参考连接图:

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

| 序号 | 名称 | 说明 |
|---|---|---|
| 1 | GND | 电池负极,参考地 |
| 2 | VRTC | 电池正极, 3.3V |
外部 RTC 默认开启,系统会自动加载 RTC 芯片(PCF8563T)的驱动,但是需要 注意 外接电池一定要保证电量充足,才能正常使用。
开机后确认启动日志,可以看到 PCF8563T 驱动的打印:
root@buildroot:~# dmesg | grep rtc
……
[ 1.508638] rtc-pcf8563 4-0051: pcf8563_probe
[ 1.518422] rtc rtc1: read_time: fail to read: -22
[ 1.518656] rtc-pcf8563 4-0051: char device (253:1)
[ 1.518667] rtc-pcf8563 4-0051: registered as rtc1
从日志可以看到, pcf8563 被注册为 rtc1 ,可以使用下面命令进行外部 RTC 测试:
# 确认是否存在 /dev/rtc1 设备
ls /dev/rtc*
# 建立 /dev/rtc1 到 /dev/rtc 的软连接
rm /dev/rtc
ln -s /dev/rtc1 /dev/rtc
# 将时间写入外部 rtc
date -s "2024/01/01 17:08:00" # 设置系统时间
hwclock -w # 将系统时间写入 RTC
hwclock -r # 读取 RTC 时间,确认时间是否写入成功
# 重启单板后从外部 RTC 读取时间到系统
# 确认是否存在 /dev/rtc1 设备
ls /dev/rtc*
# 建立 /dev/rtc1 到 /dev/rtc 的软连接
rm /dev/rtc
ln -s /dev/rtc1 /dev/rtc
hwclock -s # 如果 rtc 电池存在,断电后,再上电,可以将 RTC 时间更新到系统时间
date # 读取系统时间,此时应该是先前配置的时间 "2024/01/01 17:08:00"
此时,再次读取 pcf8563 的日志可以看到时间的读取过程:
# 写入时间到 PCF8563T 后重启单板日志
root@buildroot:~# dmesg | grep rtc
……
[ 1.490904] rtc-pcf8563 4-0051: pcf8563_probe
[ 1.492784] rtc-pcf8563 4-0051: pcf8563_rtc_read_time: raw data is st1=08, st2=00, sec=35, min=08, hr=17, mday=01, wday=31, mon=21, year=24
[ 1.492805] rtc-pcf8563 4-0051: pcf8563_rtc_read_time: tm is secs=35, mins=8, hours=17, mday=1, mon=0, year=124, wday=1
[ 1.493485] rtc-pcf8563 4-0051: pcf8563_rtc_read_alarm: raw data is min=80, hr=9c, mday=90, wday=94
[ 1.493902] rtc-pcf8563 4-0051: pcf8563_rtc_read_alarm: tm is mins=0, hours=22, mday=10, wday=4, enabled=0, pending=0
[ 1.495035] rtc-pcf8563 4-0051: pcf8563_rtc_read_time: raw data is st1=08, st2=00, sec=35, min=08, hr=17, mday=01, wday=31, mon=21, year=24
[ 1.495055] rtc-pcf8563 4-0051: pcf8563_rtc_read_time: tm is secs=35, mins=8, hours=17, mday=1, mon=0, year=124, wday=1
[ 1.496190] rtc-pcf8563 4-0051: pcf8563_rtc_read_time: raw data is st1=08, st2=00, sec=35, min=08, hr=17, mday=01, wday=31, mon=21, year=24
[ 1.496213] rtc-pcf8563 4-0051: pcf8563_rtc_read_time: tm is secs=35, mins=8, hours=17, mday=1, mon=0, year=124, wday=1
[ 1.496465] rtc-pcf8563 4-0051: char device (253:1)
[ 1.496481] rtc-pcf8563 4-0051: registered as rtc1
2.1.3.15. ADC 接口
接口 11 是开发板上的 ADC(模数转换器)接口,它提供了 ADC[3-7] 这五个功能插针,用于连接模拟信号输入源,并将模拟信号转换为数字信号供系统处理。用户可以通过读取相应的系统文件来获取转换后的 ADC 值。
输入电压范围: ADC 支持的输入电压范围为 0.1~1.7V,用户需要确保输入信号的电压在此范围内,以避免信号失真或损坏 ADC。

读取 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.1.3.16. 其他接口
电源开关
控制单板的重新上电和断电,对应接口为 23。
复位开关
通过拉低芯片的 RSTN 信号实现复位操作,对应接口为 6。
唤醒开关
用于在 Sleep 模式下通过外部唤醒源唤醒系统,对应接口为 7。
JTAG 调试接口
用于配合 DS5 等工具进行芯片调试,对应接口为 14。开发板默认未焊接连接器,需在使用前手动焊接连接器。