Skip to main content

接口定义

整机接口定义

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

丝印设备节点备注
MIC输入声音,录制音频文件
LINE播放音频文件
ETH0eth0千兆网卡
ETH1eth1千兆网卡
WIFIwlan02.4/5GHz
RS485/dev/ttyS3串口,默认波特率9600
USART/dev/ttyS2串口,默认波特率9600
USB1Type-A USB2.0 host
USB2Type-A USB2.0 host
PWR LED电源灯
4G LED4G灯 4G/5G 拨号
SYS LED系统灯
STA LEDSTA灯
RTC/dev/rtc0RTC时钟

MIC 使用

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

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

# 录音:
amixer cset name='SAI1 Receive SDIx Select' 1
# 单通道分别测试
arecord -f S16_LE -r 16000 -c 1 -d 10 001.wav
# 双通道录音
arecord -d 10 -f cd -r 48000 -c 2 -t wav 001.wav

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

``` shell
# 设置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表示文件名。

ETH 说明

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

neardi@3506:~$ 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

先通过lsmod查看是否加载wifi驱动 如果未加载驱动执行:

insmod /usr/lib/modules/6.1.118/kernel/drivers/misc/seekwaveplatform/skw_usb.ko
insmod /usr/lib/modules/6.1.118/kernel/drivers/net/wireless/rockchip_wlan/seekwave/skw.ko
insmod /usr/lib/modules/6.1.118/kernel/drivers/bluetooth/skwbt/skwbt.ko
WiFi先加载驱动然后执行下面的命令
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
wpa_cli -i wlan0 add_network
//neardi_5G"改为所需连接热点名称
wpa_cli -i wlan0 set_network 1 ssid \"neardi_5G\"
//"neardi8888"改为热点密码
wpa_cli -i wlan0 set_network 1 psk \"neardi8888\"
wpa_cli -i wlan0 enable_network 1
dhcpcd wlan0

UART 使用

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

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

# 设置流控,拉高发送,拉低接收
echo 13 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio13/direction
# 拉高发送
echo 1 > /sys/class/gpio/gpio13/value
# 拉低接收
echo 0 > /sys/class/gpio/gpio13/value

发送字符串到主机

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

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

接收主机发送的字符串

cat /dev/ttyS3

RTC时钟

LKD3506使用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"