Skip to main content

接口定义

整机接口定义

LKB3576提供了丰富的接口,具体如下图:

丝印设备节点备注
MIC输入声音,录制音频文件
LINE播放音频文件
HDMI1card0-HDMI-A-1HDMI输出,最高支持4K@120fps
Type-C可转接USB和DP信号
ETH0eth0千兆网卡
ETH1eth1千兆网卡
WIFIwlan02.4/5GHz
UART4/dev/ttyS4串口,默认波特率9600
RS485/dev/ttyS5串口,默认波特率9600
USB1Type-A USB3.0 host
USB2Type-A USB3.0 host
USB3Type-A USB3.0 host
PWR LED电源灯
4G LED4G灯 4G/5G 拨号
SYS LEDwork1系统灯
STA LEDwork2STA灯
RTC/dev/rtc0RTC时钟

MIC 使用

使用以下命令可以录制音频文件,支持wav、mp3等格式。

录制双声道的16位小端格式的音频,采样率为48000Hz,然后保存为001.wav文件。

# 设置sai接收硬件总线
amixer -c 0 cset numid=27,iface=MIXER,name='SAI1 Receive PATH2 Source Select' 0
# 设置sai接收硬件总线数量
amixer -c 0 cset numid=4,iface=MIXER,name='SAI1 Receive SDIx Select' 1
# 打开外置mic录音通道
amixer -c 0 cset numid=69,iface=MIXER,name='Headset Mic Switch' on
# 打开耳机录音通道
amixer -c 0 cset numid=68,iface=MIXER,name='Main Mic Switch' on

arecord -Dhw:0,0 -r48000 -f S16_LE -c2 > 001.wav

• -Dhw:0,0 指定了录音设备,0,0 是card 0 device 0,也就是第一个声卡的第一个设备。

• -r48000 指定了采样率,单位是Hz,48000表示每秒采样48000次。

• -f S16_LE 指定了采样格式,S16_LE表示有符号的16位小端格式,也就是每个采样点占用2个字节,低位在前,高位在后。

• -c2 指定了声道数,2表示双声道,也就是立体声。

• > 001.wav 指定了输出文件,>表示重定向标准输出到文件,001.wav表示文件名,wav表示文件格式。

LINE 使用

使用第一个声卡的第一个设备播放001.wav文件。

# 设置sdo2为通道0
amixer -c 0 cset numid=31,iface=MIXER,name='SAI1 Transmit SDO2 Source Select' 0
# 设置输入sai总线数量为1
amixer -c 0 cset numid=4,iface=MIXER,name='SAI1 Receive SDIx Select' 1
# 设置输出sai总线数量为1
amixer -c 0 cset numid=3,iface=MIXER,name='SAI1 Transmit SDOx Select' 1
# 配置耳机通路打开
amixer -c 0 cset numid=80,iface=MIXER,name='OUT1 Switch' 1
# 配置spk播放通路打开
amixer -c 0 cset numid=80,iface=MIXER,name='OUT2 Switch' 1
# 使能spk pa
amixer -c 0 cset numid=64,iface=MIXER,name='spk switch' on
# 播放测试音频
aplay -D hw:0,0 001.wav

• -D hw:0,0 指定了播放设备,hw:0,0 是card 0 device 0,也就是第一个声卡的第一个设备。

• 001.wav 指定了音频文件,wav表示文件格式,001表示文件名。

HDMI/DP 说明

xrandx命令可以查看当前HDMI连接:

neardi@3576:~$ xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
HDMI-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1920x1080 60.00*+ 60.00 50.00 30.00 24.00
4096x2160 24.00
3840x2160 30.00 25.00 24.00
1920x1080i 60.00 50.00
1280x720 60.00 60.00 50.00 50.00 30.00 24.00
720x576 50.00 50.00
720x480 59.94 59.94 59.94
DP-1 disconnected (normal left inverted right x axis y axis)

完整节点:

HDMI1:/sys/devices/platform/display-subsystem/drm/card0/card0-HDMI-A-1/
DP:/sys/devices/platform/display-subsystem/drm/card0/card0-DP-1/

设置分辨率

ETH 说明

可以通过调试串口、ssh或者adb来查看IP地址,例如:

neardi@3576:~$ ifconfig -a
enP2p33s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.65 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::7df7:e74d:497e:345d prefixlen 64 scopeid 0x20<link>
ether 62:ea:fb:ca:95:e7 txqueuelen 1000 (Ethernet)
RX packets 2548 bytes 210938 (210.9 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 338 bytes 46899 (46.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 140 base 0xd000

Wi-Fi 说明

通过如下命令查看当前Wi-Fi型号:

cat /sys/bus/sdio/devices/mmc2\:0001\:1/vendor
cat /sys/bus/sdio/devices/mmc2\:0001\:1/device
  • 0x02d0:0xaae8:AP6275S.
  • 0x024c:0xb852:RTL8852.
  • 0x024c:0xd723:RTL8723DS.
  • 0x024c:0xc821:RTL8821CS.
  • 0x1ffe:0x6316:FD7352S

连接 Wi-Fi:

  • Cmd

  • C

  • Search Wi-Fi:

sudo nmcli device wifi rescan
  • Show all Wi-Fi:
nmcli dev wifi list
  • Connect Wi-Fi:
sudo nmcli device wifi connect neardi_5G password neardi_pwd

• neardi_5G 是WiFi 网络(SSID) 的名称。

• neardi_pwd 是连接到该WiFi 网络所需的密码。

• sudo 用于确保nmcli 具有管理网络连接所需的权限,因为在某些系统上连接到WiFi 网络可能需要管理权限。

create connect_wifi.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

void connect_to_wifi(const char *ssid, const char *password) {
char command[256];

// Create the WPA configuration file without the -e option
snprintf(command, sizeof(command), "echo 'network={\\n ssid=\"%s\"\\n psk=\"%s\"\\n}' | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf", ssid, password);
if (system(command) != 0) {
perror("Failed to create wpa_supplicant.conf");
return;
}

// Run wpa_supplicant
if (system("sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf") != 0) {
perror("Failed to start wpa_supplicant");
return;
}

// Obtain an IP address
if (system("sudo dhclient wlan0") != 0) {
perror("Failed to obtain an IP address");
}
}

int main() {
const char *ssid = "neardi_5G";
const char *password = "neardi_pwd";

connect_to_wifi(ssid, password);
return 0;
}
gcc connect_wifi.c -o connect_wifi
sudo ./connect_wifi

启动热点

RS485 使用

串口是一种常见的通信接口,用于与外部设备进行串行通信。LKB3576提供了多个串口,分别对应不同的设备节点。在使用串口之前,需要确保串口连接正确,以及波特率和其他参数设置一致。

RS485设备文件为/dev/ttyS5。在开发板设备上运行下列命令:

# 设置流控,拉高发送,拉低接收
echo 66 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio66/direction
# 拉高发送
echo 1 > /sys/class/gpio/gpio66/value
# 拉低接收
echo 0 > /sys/class/gpio/gpio66/value
# 设置串口属性
stty -F /dev/ttyS5 ispeed 9600 ospeed 9600 cs8 -cstopb -parenb min 1 time 1

发送字符串到主机

echo "neardi RS485 test…" > /dev/ttyS5

主机中的串口终端即可接收到字符串 “neardi RS485 test…” 开发板接收数据:

接收主机发送的字符串

cat /dev/ttyS5

LED 说明

LKB3576有两颗LED可以通过GPIO进行控制,此版本还没实现led闪烁灯效果

完整节点:

# 绿灯
echo 1 > /sys/class/leds/work/brightness
# 红灯
echo 1 > /sys/class/leds/work1/brightness

RTC时钟

LKB3576使用HYM8563作为RTC时钟。

如何修改RTC时钟为'2025-11-11 12:00:00'

  • Cmd
  • C
#关闭网络时间协议(NTP)的服务,使得RTC时钟不受网络时间的影响
timedatectl set-ntp false
#设置RTC时钟的时间为2025年11月11日12时00分00秒
timedatectl set-time '2025-11-11 12:00:00'
#将RTC时钟的时间同步到系统时钟,使得系统时钟和RTC时钟保持一致,可加在/etc/init.d/rockchip.sh中
hwclock --hctosys

create time_setter.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>

void exec_command(const char *cmd) {
int ret = system(cmd);
if (ret != 0) {
fprintf(stderr, "Command failed: %s\n", cmd);
exit(1);
}
}

// Set system time
void set_system_time(const char *time_str) {
char cmd[128];
snprintf(cmd, sizeof(cmd), "timedatectl set-time '%s'", time_str);
exec_command(cmd);
}

// Disable NTP
void disable_ntp() {
exec_command("timedatectl set-ntp false");
}

// Synchronize hardware clock to system clock
void sync_hwclock_to_system() {
exec_command("hwclock --hctosys");
}

// Print help information
void print_usage() {
printf("Usage: time_setter -t <time>\n");
printf(" -t <time> Set system time (format: 'YYYY-MM-DD HH:MM:SS')\n");
printf(" -h Show help\n");
}

int main(int argc, char *argv[]) {
if (argc != 3) {
print_usage();
return 1;
}

const char *time_str = NULL;

int opt;
while ((opt = getopt(argc, argv, "t:h")) != -1) {
switch (opt) {
case 't':
time_str = optarg;
break;
case 'h':
default:
print_usage();
return 0;
}
}

if (time_str == NULL) {
fprintf(stderr, "Error: Time argument is required\n");
print_usage();
return 1;
}

// 1. Disable NTP
disable_ntp();

// 2. Set system time
set_system_time(time_str);

// 3. Synchronize hardware clock to system clock
sync_hwclock_to_system();

printf("Time has been set to: %s\n", time_str);
return 0;
}
gcc -o time_setter time_setter.c
./time_setter -t "2025-11-11 12:00:00"