内部低速控制接口

GPIO/LED

功能简介
RK3576大部分GPIO被用于其他功能(如I2C、UART等),如需将这些接口作为普通GPIO使用,须在设备树中解除功能占用。
RK3576载板有一个绿色LED(USER)可自定义灯状态,使用GPIO4_C7引脚(GPIO ID为151)。

GPIO ID计算方式

GPIO ID = 32*X + 8*Y + Z

例如:GPIO4_C7
X=4, Y=2(C), Z=7
GPIO ID = 32*4+8*2+7 = 151

命令行相关指令

cat /sys/class/gpio/gpio151/direction            #读取操作方向
echo out > /sys/class/gpio/gpio151/direction     #设置为输出
echo in > /sys/class/gpio/gpio151/direction      #设置为输入
echo in > /sys/class/gpio/gpio151/direction      #设置为输入模式
cat /sys/class/gpio/gpio151/value                #读取当前的电平状态
echo 0 >/sys/class/gpio/gpio151/value            #输出低电平
echo 1 >/sys/class/gpio/gpio151/value            #输出高电平
echo 151 > /sys/class/gpio/export    #导出GPIO 接口

测试脚本
该脚本在 /dfrobot-test/blink.sh中,请在root权限下执行该脚本,可看到载板的LED间隔一秒闪烁。

. /dfrobot-test/blink.sh
# 或
bash /dfrobot-test/blink.sh

脚本代码

#!/bin/bash

GPIO=151

cleanup() {
    echo 0 > /sys/class/gpio/gpio${GPIO}/value
    echo ${GPIO} > /sys/class/gpio/unexport 
    exit 0
}

trap cleanup EXIT

echo ${GPIO} > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio${GPIO}/direction


while true; do
    echo 1 > /sys/class/gpio/gpio${GPIO}/value
    sleep 1
    echo 0 > /sys/class/gpio/gpio${GPIO}/value
    sleep 1
done

I2C/RTC

功能简介

RK3576有10个I2C端口,部分I2C端口与其他功能复用。

  • 支持7位和10位地址模式
  • 软件可编程时间频率
  • 支持100kbps标准模式和400kbps快速模式

RK3576载板I2C使用情况如下:

I2C端口 I2C0 I2C2 I2C3 I2C5 I2C6 I2C8
映射功能 DSI触摸 RTC ES8388音频控制 CSI1 I2C CSI0 I2C CSI3 I2C

命令行相关指令

RK3576载板板载了RTC芯片 - IT8563UE

cat /sys/class/rtc/rtc0/date     #获取RTC日期
cat /sys/class/rtc/rtc0/time     #获取RTC时间
cat /proc/driver/rtc             #打印RTC相关信息

执行命令后效果如下:

UART

RK3576有12个UART端口,部分UART端口与其他功能复用。

  • 集成2个64字节的FIFO
  • 支持5bit、6bit、7bit、8bit串口数据接收
  • 支持标准异步通讯
  • 支持不同输入时钟,波特率高达8Mbps
  • UART1-UART11支持自动流控模式
  • UART1-UART11支持RS485功能

RK3576载板UART使用情况如下:

UART端口 UART0 UART2 UART3 UART4 UART5 UART7
映射功能 排针引出(debug) 排针引出 排针引出 蓝牙通讯 排针引出 RS485

RK3576载板引出了4路UART排针

测试脚本

该脚本在 /dfrobot-test/uart.sh中。将UART3的TX和RX短接到一起,在root权限下执行该脚本,即可看到测试结果

. /dfrobot-test/uart.sh

脚本代码

#!/bin/bash

SERIAL_DEV="/dev/ttyS3"  # 替换为你实际串口
TEST_STRING="LoopbackTest_$(date +%s)"
TMP_FILE=$(mktemp)  # 安全创建临时文件
TIMEOUT=2           # 超时时间(秒)

# 清理函数
cleanup() {
    [[ -n "$CAT_PID" ]] && kill -TERM "$CAT_PID" 2>/dev/null
    rm -f "$TMP_FILE"
}
trap cleanup EXIT

# 配置串口
stty -F "$SERIAL_DEV" 115200 cs8 -cstopb -parenb -ixon -ixoff -crtscts -echo

# 清空串口缓冲区
timeout 0.5 cat "$SERIAL_DEV" >/dev/null

# 后台读串口
cat "$SERIAL_DEV" > "$TMP_FILE" &
CAT_PID=$!

# 确保读取进程启动
sleep 0.1

# 发送字符串(添加换行符)
echo "$TEST_STRING" > "$SERIAL_DEV"

# 等待接收完成(带超时)
start_time=$(date +%s)
while true; do
    # 检查超时
    if [[ $(($(date +%s) - start_time)) -ge $TIMEOUT ]]; then
        echo "错误:接收超时"
        exit 2
    fi
    
    # 检查是否收到完整字符串
    if grep -q "$TEST_STRING" "$TMP_FILE" 2>/dev/null; then
        break
    fi
    
    sleep 0.1
done

# 获取接收内容
RECEIVED=$(grep "$TEST_STRING" "$TMP_FILE" | head -n1)

# 判断结果
if [[ "$RECEIVED" == "$TEST_STRING"* ]]; then
    echo "串口环回测试成功:$RECEIVED"
    exit 0
else
    echo "串口环回测试失败,发送:$TEST_STRING"
    echo "收到:$RECEIVED"
    exit 1
fi

风扇接口

内置风扇控制接口,使用方法如下:

linaro@linaro-alip:~$ dfrobot-fan-ctl --help
Device found: hwmon6 (name: 'dfrobot-fan')
Fan device found: /sys/class/hwmon/hwmon6
DFRobot Fan Control Program
Usage: dfrobot-fan-ctl [options]

Options:
  -t, --temp          Show current temperature
  -f, --fan           Show fan status
  -s, --status        Show all status information
  --set-temp <value>  Set temperature threshold (°C, range 0.0-100.0)
  --set-time <value>  Set check interval (seconds, range 1.0-60.0)
  --monitor           Enter monitor mode
  -h, --help          Show this help message

Examples:
  dfrobot-fan-ctl -s                    # Show all status
  dfrobot-fan-ctl --set-temp 65.5       # Set temperature threshold to 65.5°C
  dfrobot-fan-ctl --set-time 2.5        # Set check interval to 2.5 seconds
  dfrobot-fan-ctl --monitor             # Enter monitor mode
linaro@linaro-alip:~$ dfrobot-fan-ctl -s
Device found: hwmon6 (name: 'dfrobot-fan')
Fan device found: /sys/class/hwmon/hwmon6
Current temperature: 36.1°C (36076 millidegree)
Fan status: OFF
Temperature threshold: 60.0°C (60000 millidegree)
Check interval: 10.0 seconds (10000 milliseconds)

请注意在设置风扇温度阈值以及查询时间时请使用root权限

linaro@linaro-alip:~$ dfrobot-fan-ctl --set-temp 65.5
Device found: hwmon6 (name: 'dfrobot-fan')
Fan device found: /sys/class/hwmon/hwmon6
Failed to set temperature threshold: Permission denied
linaro@linaro-alip:~$ sudo dfrobot-fan-ctl --set-temp 65.5
Device found: hwmon6 (name: 'dfrobot-fan')
Fan device found: /sys/class/hwmon/hwmon6
Temperature threshold set: 65.5°C (driver value: 65500 millidegree)

工业与串行通讯接口

RS485

测试RS485收发,需使用串口转RS485工具,使用前需将RK3576载板RS485_A连接到串口转RS485工具的RS485_A口,RK3576载板RS485_B连接到串口转RS485工具的RS485_B口。

RK3576载板将RS485挂载在UART7上。

命令行操作RS485相关指令

# 配置RS485通讯参数
stty -F /dev/ttyS7 115200 cs8 -parenb -cstopb

# 发送数据
echo "hello dfrobot" > /dev/ttyS7

# 接收数据
cat /dev/ttyS7

CAN

RK3576有2路CAN端口。

  • 符合CAN和CAN FD规范
  • 支持CAN标准和扩展框架
  • 支持数据帧、远程帧、过载帧、错误帧和帧间隔
  • 支持8192位接收FIFO

RK3576载板引出了2路CAN。

命令行操作CAN相关指令

# 配置CAN通讯参数
ip link set can0 type can bitrate 500000 dbitrate 2000000 sample-point 0.8 fd on
# 参数说明
# bitrate      设置波特率为
# dbitrate     设置数据波特率
# ample-point  设置采样点位置
# fd on        是否启用CAN-FD

# 开启CAN设备
ip link set can0 up

# 查看CAN网路接口
ifconfig can0

# 选择配置“TX队列长度”,用于调优 发送队列缓存长度,如在大量高速帧需要发送(比如 CAN-FD),这项设置能显著减少丢帧。
echo 4096 > /sys/class/net/can0/tx_queue_len

# 发送数据              
cansend can0 5A1#123456

# 接收数据                           
candump can0

# 关闭CAN设备
ip link set can0 down

使用CAN

为保证CAN总线的安全性,系统默认设置SocketCAN接口是未激活状态,需要通过ip link set ...来配置并启用它。

# 配置并启用CAN
ip link set can0 type can bitrate 500000 dbitrate 2000000 sample-point 0.8 fd on
ip link set can0 up
# 查看启用的CAN端口
ifconfig can0
# 发送数据
cansend can0 5A1#123456

音频与视频接口

显示输出接口

RK3576支持HDMI、eDP、DP、MIPI-DSI、EBC、并行接口显示输出。

  • HDMI/eDP TX接口
    • HDMI接口
      • HDMI V2.1
      • 最高支持4K@120Hz
      • 输出数据格式:RGB/YUV444/YUV422/YUV420 8/10-bit
    • eDP接口
      • eDP V1.3,兼容DisplayPort V1.2
      • 最高支持4K@60Hz
      • 输出数据格式:RGB/YUV444/YUV422 8/10-bit
  • DP V1.4 TX接口
    • 支持DsiplayProt V1.4
    • 最高支持4K@120Hz
    • 输出数据格式:RGB/YUV444/YUV422/YUV420 8/10-bit
  • MIPI DSI-2 TX接口
    • MIPI DSI-2 V1.1接口,带D-PHY V2.0或C-PHY V1.1
    • 支持D-PHY 4 data lanes或C-PHY 3 data trios
    • 最高支持2560x1600@60Hz
    • 支持最高10位RGB数据格式
  • EBC接口
    • 支持E-ink EPD
    • 支持2560x1920硬件解码
    • 支持16-bit数据总线
    • 支持32级灰度
  • 并行接口
    • 支持RBG/BT656/BT1120
    • 最高支持1920x1080@60Hz
    • 支持最高8位RGB数据格式

RK3576视频输出处理器有三个视频输出端口(HDMI/eDP/DP/DSI-2可连接到任意Video Port,并行输出接口只能连接到Video Port1或2)

  • Video Port0最高支持10-bit 4K@120Hz视频
  • Video Port1最高支持10-bit 2560x1600@60Hz视频
  • Video Port2最高支持8-bit 1920x1080@60Hz视频

RK3576载板引出了标准HDMI(A)、DP、DSI接口,默认视频输出端口分配如下:

  • Video Port0:HDMI接口 最大支持4K@120Hz
  • Video Port1:DSI接口 最大支持2560x1600@60Hz
  • Video Port2:DP接口 最大支持1920x1080@60Hz

视频输入接口

RK3576支持MIPI-CSI、DVP接口输入视频。

  • MIPI-CSI接口
    • 支持5个CSI-2接口
    • 端口0支持4 D-PHY data-lane或3 C-PHY trios
    • 端口1-4支持2 D-PHY V1.2 data-lane(2.5Gbps/lane),2个端口可合并为1个端口,合并后端口有2 data-lane
  • DVP接口
    • 支持8/10/12/16-bit,150Mhz I/O频率
    • 支持BT.601/BT.656和BT.1120 VI接口

RK3576载板引出了3个MIPI-CSI接口,每个接口有4个数据通道

  • CAM0:使用CSI0端口,使用I2C6
  • CAM1:使用CSI1和CSI2端口,使用I2C5
  • CAM2:使用CS3和CSI4端口,使用I2C8

当前RK3576适配了IMX415摄像头

命令行操作CSI相关指令

# 查看摄像头设备,在rkisp_mainpath中找到对应的设备
v4l2-ctl --list-devices

# 预览摄像头,格式、分辨率和帧率可根据实际修改
gst-launch-1.0 v4l2src device=/dev/video11 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink

音频

RK3576支持5个串行音频接口(SAI)

  • SAI0/1支持4个TX通道和4个RX通道
  • SAI2/3/4支持1个TX通道和1个RX通道
  • 支持I2S/TDM/PCM模式
  • 支持3种I2S格式
  • 支持4种PCM格式
  • 采样率高达192KHz
  • 支持16-32bits音频分辨率

RK3576载板ES8388音频编解码芯片,使用了SAI1进行音频传输和I2C3进行配置控制。MIC座子连接到ES8388的IN2接口;SPK通过功放芯片(PAM8302AADCR)连接到ES8388的OUT1接口;PHONE座子连接到ES8388的IN1和OUT2接口。

测试脚本

该脚本在 /dfrobot-test/audio.sh中。将音频设备连接到接口即可测试。

# 测试SPK和MIC
. /dfrobot-test/audio.sh speaker

# 测试PHONE音频
. /dfrobot-test/audio.sh headphone

脚本代码

#!/bin/bash

# 声卡测试脚本
# 支持两种模式:扬声器测试 (默认) 和 耳机测试
# 用法: 
#   ./audio.sh speaker   # 测试扬声器和主麦克风
#   ./audio.sh headphone # 测试耳机和耳机麦克风

# 函数:配置扬声器模式
setup_speaker_mode() {
    # SAI接口配置
    amixer -c 0 cset numid=31,iface=MIXER,name='SAI1 Transmit SDO2 Source Select' 0
    amixer -c 0 cset numid=4,iface=MIXER,name='SAI1 Receive SDIx Select' 1
    amixer -c 0 cset numid=3,iface=MIXER,name='SAI1 Transmit SDOx Select' 1
    
    # 输出通道配置
    amixer -c 0 cset name='OUT1 Switch' on
    amixer -c 0 cset name='OUT2 Switch' off
    amixer -c 0 cset name='spk switch' on
    amixer -c 0 cset name='Speaker Switch' on
    amixer -c 0 cset name='Headphone Switch' off
    
    # 输入通道配置
    amixer -c 0 cset name='Main Mic Switch' on
    amixer -c 0 cset name='Headset Mic Switch' off
    
    # PGA混音器配置
    amixer -c 0 cset name='Left PGA Mux' 1
    amixer -c 0 cset name='Right PGA Mux' 1
    
    echo "已配置为扬声器模式"
}

# 函数:配置耳机模式
setup_headphone_mode() {
    # SAI接口配置
    amixer -c 0 cset numid=31,iface=MIXER,name='SAI1 Transmit SDO2 Source Select' 0
    amixer -c 0 cset numid=4,iface=MIXER,name='SAI1 Receive SDIx Select' 1
    amixer -c 0 cset numid=3,iface=MIXER,name='SAI1 Transmit SDOx Select' 1
    
    # 输出通道配置
    amixer -c 0 cset name='OUT1 Switch' off
    amixer -c 0 cset name='OUT2 Switch' on
    amixer -c 0 cset name='spk switch' off
    amixer -c 0 cset name='Speaker Switch' off
    amixer -c 0 cset name='Headphone Switch' on
    
    # 输入通道配置
    amixer -c 0 cset name='Main Mic Switch' off
    amixer -c 0 cset name='Headset Mic Switch' on
    
    # PGA混音器配置 (注意:耳机模式下使用0)
    amixer -c 0 cset name='Left PGA Mux' 0
    amixer -c 0 cset name='Right PGA Mux' 0
    
    echo "已配置为耳机模式"
}

# 显示当前音频设备信息
show_audio_devices() {
    echo "================================================"
    echo "系统音频设备列表:"
    echo "播放设备:"
    aplay -l
    echo "录制设备:"
    arecord -l
    echo "================================================"
}


# 主程序开始
show_audio_devices

# 解析命令行参数
MODE=${1:-speaker}  # 默认为扬声器模式

case $MODE in
    speaker|spk)
        setup_speaker_mode
        DEVICE_NAME="扬声器"
        MIC_NAME="主麦克风"
        ;;
    headphone|hp)
        setup_headphone_mode
        DEVICE_NAME="耳机"
        MIC_NAME="耳机麦克风"
        ;;
    *)
        echo "错误:未知模式 '$MODE'"
        echo "可用模式: speaker, headphone"
        exit 1
        ;;
esac


# 执行实时录音播放测试
echo "开始测试: 使用${DEVICE_NAME}播放,${MIC_NAME}录音"
echo "================================================"
echo "测试说明:"
echo "1. 请对着${MIC_NAME}说话"
echo "2. 声音将从${DEVICE_NAME}实时播放"
echo "3. 按 CTRL+C 停止测试"
echo "================================================"

# 设置陷阱,确保退出时关闭音频流
trap 'echo "测试已停止"; exit 0' SIGINT

# 执行实时录放(CD质量:44.1kHz, 16-bit, 立体声)
arecord -v -f cd -Dhw:0 | aplay -v -Dhw:0 -f cd

# 处理可能的错误
if [ $? -ne 0 ]; then
    echo "错误:音频设备操作失败!请检查:"
    echo "1. 声卡设备是否存在 (hw:0)"
    echo "2. 是否具有音频设备访问权限"
    echo "3. 其他进程是否占用了音频设备"
    echo "4. 物理连接是否正确(麦克风和耳机是否已插入)"
    exit 1
fi

声卡配置

amixer

使用amixer可以获取和配置声卡的详细信息,以rockchip-es8388为例

#列出可以声卡0的所有可用控件
amixer controls -c 0

输出信息如下:

root@linaro-alip:/dfrobot-test# amixer controls -c 0
numid=64,iface=MIXER,name='Headphone Switch'
numid=56,iface=MIXER,name='PCM Volume'
numid=71,iface=MIXER,name='Mono Mux'
numid=61,iface=MIXER,name='ADC Data Select'
numid=50,iface=MIXER,name='Capture Digital Volume'
numid=51,iface=MIXER,name='Capture Mute'
numid=55,iface=MIXER,name='Capture Polarity'
numid=54,iface=MIXER,name='Playback De-emphasis'
numid=37,iface=MIXER,name='3D Mode'
numid=45,iface=MIXER,name='ALC Capture Attack Time'
numid=44,iface=MIXER,name='ALC Capture Decay Time'
numid=41,iface=MIXER,name='ALC Capture Function'
numid=43,iface=MIXER,name='ALC Capture Hold Time'
numid=39,iface=MIXER,name='ALC Capture Max PGA'
numid=40,iface=MIXER,name='ALC Capture Min PGA'
numid=48,iface=MIXER,name='ALC Capture NG Switch'
numid=46,iface=MIXER,name='ALC Capture NG Threshold'
numid=47,iface=MIXER,name='ALC Capture NG Type'
numid=38,iface=MIXER,name='ALC Capture Target Volume'
numid=42,iface=MIXER,name='ALC Capture ZC Switch'
numid=70,iface=MIXER,name='Differential Mux'
numid=67,iface=MIXER,name='Headset Mic Switch'
numid=52,iface=MIXER,name='Left Channel Capture Volume'
numid=72,iface=MIXER,name='Left Line Mux'
numid=75,iface=MIXER,name='Left Mixer Left Bypass Switch'
numid=57,iface=MIXER,name='Left Mixer Left Bypass Volume'
numid=74,iface=MIXER,name='Left Mixer Left Playback Switch'
numid=68,iface=MIXER,name='Left PGA Mux'
numid=66,iface=MIXER,name='Main Mic Switch'
numid=78,iface=MIXER,name='OUT1 Switch'
numid=79,iface=MIXER,name='OUT2 Switch'
numid=59,iface=MIXER,name='Output 1 Playback Volume'
numid=60,iface=MIXER,name='Output 2 Playback Volume'
numid=53,iface=MIXER,name='Right Channel Capture Volume'
numid=73,iface=MIXER,name='Right Line Mux'
numid=77,iface=MIXER,name='Right Mixer Right Bypass Switch'
numid=58,iface=MIXER,name='Right Mixer Right Bypass Volume'
numid=76,iface=MIXER,name='Right Mixer Right Playback Switch'
numid=69,iface=MIXER,name='Right PGA Mux'
numid=34,iface=MIXER,name='SAI1 Clk Auto Switch'
numid=5,iface=MIXER,name='SAI1 Receive Mono Slot Select'
numid=6,iface=MIXER,name='SAI1 Receive Mono Switch'
numid=29,iface=MIXER,name='SAI1 Receive PATH0 Source Select'
numid=28,iface=MIXER,name='SAI1 Receive PATH1 Source Select'
numid=27,iface=MIXER,name='SAI1 Receive PATH2 Source Select'
numid=26,iface=MIXER,name='SAI1 Receive PATH3 Source Select'
numid=4,iface=MIXER,name='SAI1 Receive SDIx Select'
numid=2,iface=MIXER,name='SAI1 Receive Start Mode Sel'
numid=11,iface=MIXER,name='SAI1 SDI0 Loopback I2S LR Channel Sel'
numid=15,iface=MIXER,name='SAI1 SDI0 Loopback I2S LR Switch'
numid=19,iface=MIXER,name='SAI1 SDI0 Loopback Src Select'
numid=23,iface=MIXER,name='SAI1 SDI0 Loopback Switch'
numid=10,iface=MIXER,name='SAI1 SDI1 Loopback I2S LR Channel Sel'
numid=14,iface=MIXER,name='SAI1 SDI1 Loopback I2S LR Switch'
numid=18,iface=MIXER,name='SAI1 SDI1 Loopback Src Select'
numid=22,iface=MIXER,name='SAI1 SDI1 Loopback Switch'
numid=9,iface=MIXER,name='SAI1 SDI2 Loopback I2S LR Channel Sel'
numid=13,iface=MIXER,name='SAI1 SDI2 Loopback I2S LR Switch'
numid=17,iface=MIXER,name='SAI1 SDI2 Loopback Src Select'
numid=21,iface=MIXER,name='SAI1 SDI2 Loopback Switch'
numid=8,iface=MIXER,name='SAI1 SDI3 Loopback I2S LR Channel Sel'
numid=12,iface=MIXER,name='SAI1 SDI3 Loopback I2S LR Switch'
numid=16,iface=MIXER,name='SAI1 SDI3 Loopback Src Select'
numid=20,iface=MIXER,name='SAI1 SDI3 Loopback Switch'
numid=25,iface=MIXER,name='SAI1 Sync In Switch'
numid=24,iface=MIXER,name='SAI1 Sync Out Switch'
numid=7,iface=MIXER,name='SAI1 Transmit Mono Switch'
numid=33,iface=MIXER,name='SAI1 Transmit SDO0 Source Select'
numid=32,iface=MIXER,name='SAI1 Transmit SDO1 Source Select'
numid=31,iface=MIXER,name='SAI1 Transmit SDO2 Source Select'
numid=30,iface=MIXER,name='SAI1 Transmit SDO3 Source Select'
numid=3,iface=MIXER,name='SAI1 Transmit SDOx Select'
numid=1,iface=MIXER,name='SAI1 Transmit Start Mode Sel'
numid=65,iface=MIXER,name='Speaker Switch'
numid=49,iface=MIXER,name='ZC Timeout Switch'
numid=63,iface=MIXER,name='hp switch'
numid=62,iface=MIXER,name='spk switch'
numid=35,iface=PCM,name='SAI1 PCM Read Wait Time MS'
numid=36,iface=PCM,name='SAI1 PCM Write Wait Time MS'
#列出每个控件的当前值和取值范围等详细信息
amixer contents -c 0

输出信息如下:

root@linaro-alip:/dfrobot-test# amixer contents -c 0
numid=64,iface=MIXER,name='Headphone Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=56,iface=MIXER,name='PCM Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=192,step=0
  : values=192,192
  | dBscale-min=-96.00dB,step=0.50dB,mute=1
numid=71,iface=MIXER,name='Mono Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=3
  ; Item #0 'Stereo'
  ; Item #1 'Mono (Left)'
  ; Item #2 'Mono (Right)'
  : values=0
numid=61,iface=MIXER,name='ADC Data Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'Left Right'
  ; Item #1 'Left Left'
  ; Item #2 'Right Right'
  ; Item #3 'Right Left'
  : values=0
numid=50,iface=MIXER,name='Capture Digital Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=192,step=0
  : values=192,192
  | dBscale-min=-96.00dB,step=0.50dB,mute=1
numid=51,iface=MIXER,name='Capture Mute'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=55,iface=MIXER,name='Capture Polarity'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'Normal'
  ; Item #1 'L Invert'
  ; Item #2 'R Invert'
  ; Item #3 'L + R Invert'
  : values=0
numid=54,iface=MIXER,name='Playback De-emphasis'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'None'
  ; Item #1 '32Khz'
  ; Item #2 '44.1Khz'
  ; Item #3 '48Khz'
  : values=0
numid=37,iface=MIXER,name='3D Mode'
  ; type=ENUMERATED,access=rw------,values=1,items=8
  ; Item #0 'No 3D  '
  ; Item #1 'Level 1'
  ; Item #2 'Level 2'
  ; Item #3 'Level 3'
  ; Item #4 'Level 4'
  ; Item #5 'Level 5'
  ; Item #6 'Level 6'
  ; Item #7 'Level 7'
  : values=1
numid=45,iface=MIXER,name='ALC Capture Attack Time'
  ; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
  : values=5
numid=44,iface=MIXER,name='ALC Capture Decay Time'
  ; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
  : values=0
numid=41,iface=MIXER,name='ALC Capture Function'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'Off'
  ; Item #1 'Right'
  ; Item #2 'Left'
  ; Item #3 'Stereo'
  : values=0
numid=43,iface=MIXER,name='ALC Capture Hold Time'
  ; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
  : values=0
numid=39,iface=MIXER,name='ALC Capture Max PGA'
  ; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
  : values=0
numid=40,iface=MIXER,name='ALC Capture Min PGA'
  ; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
  : values=0
numid=48,iface=MIXER,name='ALC Capture NG Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=46,iface=MIXER,name='ALC Capture NG Threshold'
  ; type=INTEGER,access=rw------,values=1,min=0,max=31,step=0
  : values=10
numid=47,iface=MIXER,name='ALC Capture NG Type'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Constant PGA Gain'
  ; Item #1 'Mute ADC Output'
  : values=1
numid=38,iface=MIXER,name='ALC Capture Target Volume'
  ; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
  : values=12
numid=42,iface=MIXER,name='ALC Capture ZC Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=70,iface=MIXER,name='Differential Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Line 1'
  ; Item #1 'Line 2'
  : values=0
numid=67,iface=MIXER,name='Headset Mic Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=52,iface=MIXER,name='Left Channel Capture Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=8,step=0
  : values=3
  | dBscale-min=0.00dB,step=3.00dB,mute=0
numid=72,iface=MIXER,name='Left Line Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'Line 1L'
  ; Item #1 'Line 2L'
  ; Item #2 'NC'
  ; Item #3 'MicL'
  : values=0
numid=75,iface=MIXER,name='Left Mixer Left Bypass Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=57,iface=MIXER,name='Left Mixer Left Bypass Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=0
  | dBscale-min=-0.15dB,step=3.00dB,mute=0
numid=74,iface=MIXER,name='Left Mixer Left Playback Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=68,iface=MIXER,name='Left PGA Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=3
  ; Item #0 'Line 1L'
  ; Item #1 'Line 2L'
  ; Item #2 'DifferentialL'
  : values=0
numid=66,iface=MIXER,name='Main Mic Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=78,iface=MIXER,name='OUT1 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=79,iface=MIXER,name='OUT2 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=59,iface=MIXER,name='Output 1 Playback Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=33,step=0
  : values=27,27
  | dBscale-min=-45.00dB,step=1.50dB,mute=0
numid=60,iface=MIXER,name='Output 2 Playback Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=33,step=0
  : values=27,27
  | dBscale-min=-45.00dB,step=1.50dB,mute=0
numid=53,iface=MIXER,name='Right Channel Capture Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=8,step=0
  : values=3
  | dBscale-min=0.00dB,step=3.00dB,mute=0
numid=73,iface=MIXER,name='Right Line Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'Line 1R'
  ; Item #1 'Line 2R'
  ; Item #2 'NC'
  ; Item #3 'MicR'
  : values=0
numid=77,iface=MIXER,name='Right Mixer Right Bypass Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=58,iface=MIXER,name='Right Mixer Right Bypass Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=0
  | dBscale-min=-0.15dB,step=3.00dB,mute=0
numid=76,iface=MIXER,name='Right Mixer Right Playback Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=69,iface=MIXER,name='Right PGA Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=3
  ; Item #0 'Line 1R'
  ; Item #1 'Line 2R'
  ; Item #2 'DifferentialR'
  : values=0
numid=34,iface=MIXER,name='SAI1 Clk Auto Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=5,iface=MIXER,name='SAI1 Receive Mono Slot Select'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=128,step=0
  : values=0
  | dBscale-min=0.00dB,step=1.28dB,mute=0
numid=6,iface=MIXER,name='SAI1 Receive Mono Switch'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Disable'
  ; Item #1 'Enable'
  : values=0
numid=29,iface=MIXER,name='SAI1 Receive PATH0 Source Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'From SDI0'
  ; Item #1 'From SDI1'
  ; Item #2 'From SDI2'
  ; Item #3 'From SDI3'
  : values=0
numid=28,iface=MIXER,name='SAI1 Receive PATH1 Source Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'From SDI0'
  ; Item #1 'From SDI1'
  ; Item #2 'From SDI2'
  ; Item #3 'From SDI3'
  : values=1
numid=27,iface=MIXER,name='SAI1 Receive PATH2 Source Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'From SDI0'
  ; Item #1 'From SDI1'
  ; Item #2 'From SDI2'
  ; Item #3 'From SDI3'
  : values=2
numid=26,iface=MIXER,name='SAI1 Receive PATH3 Source Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'From SDI0'
  ; Item #1 'From SDI1'
  ; Item #2 'From SDI2'
  ; Item #3 'From SDI3'
  : values=3
numid=4,iface=MIXER,name='SAI1 Receive SDIx Select'
  ; type=ENUMERATED,access=rw------,values=1,items=5
  ; Item #0 'Auto'
  ; Item #1 'SDIx1'
  ; Item #2 'SDIx2'
  ; Item #3 'SDIx3'
  ; Item #4 'SDIx4'
  : values=1
numid=2,iface=MIXER,name='SAI1 Receive Start Mode Sel'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Standalone'
  ; Item #1 'Chained'
  : values=0
numid=11,iface=MIXER,name='SAI1 SDI0 Loopback I2S LR Channel Sel'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'L:MIC R:LP'
  ; Item #1 'L:LP R:MIC'
  : values=0
numid=15,iface=MIXER,name='SAI1 SDI0 Loopback I2S LR Switch'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Disable'
  ; Item #1 'Enable'
  : values=0
numid=19,iface=MIXER,name='SAI1 SDI0 Loopback Src Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'From SDO0'
  ; Item #1 'From SDO1'
  ; Item #2 'From SDO2'
  ; Item #3 'From SDO3'
  : values=0
numid=23,iface=MIXER,name='SAI1 SDI0 Loopback Switch'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Disable'
  ; Item #1 'Enable'
  : values=0
numid=10,iface=MIXER,name='SAI1 SDI1 Loopback I2S LR Channel Sel'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'L:MIC R:LP'
  ; Item #1 'L:LP R:MIC'
  : values=0
numid=14,iface=MIXER,name='SAI1 SDI1 Loopback I2S LR Switch'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Disable'
  ; Item #1 'Enable'
  : values=0
numid=18,iface=MIXER,name='SAI1 SDI1 Loopback Src Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'From SDO0'
  ; Item #1 'From SDO1'
  ; Item #2 'From SDO2'
  ; Item #3 'From SDO3'
  : values=0
numid=22,iface=MIXER,name='SAI1 SDI1 Loopback Switch'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Disable'
  ; Item #1 'Enable'
  : values=0
numid=9,iface=MIXER,name='SAI1 SDI2 Loopback I2S LR Channel Sel'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'L:MIC R:LP'
  ; Item #1 'L:LP R:MIC'
  : values=0
numid=13,iface=MIXER,name='SAI1 SDI2 Loopback I2S LR Switch'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Disable'
  ; Item #1 'Enable'
  : values=0
numid=17,iface=MIXER,name='SAI1 SDI2 Loopback Src Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'From SDO0'
  ; Item #1 'From SDO1'
  ; Item #2 'From SDO2'
  ; Item #3 'From SDO3'
  : values=0
numid=21,iface=MIXER,name='SAI1 SDI2 Loopback Switch'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Disable'
  ; Item #1 'Enable'
  : values=0
numid=8,iface=MIXER,name='SAI1 SDI3 Loopback I2S LR Channel Sel'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'L:MIC R:LP'
  ; Item #1 'L:LP R:MIC'
  : values=0
numid=12,iface=MIXER,name='SAI1 SDI3 Loopback I2S LR Switch'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Disable'
  ; Item #1 'Enable'
  : values=0
numid=16,iface=MIXER,name='SAI1 SDI3 Loopback Src Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'From SDO0'
  ; Item #1 'From SDO1'
  ; Item #2 'From SDO2'
  ; Item #3 'From SDO3'
  : values=0
numid=20,iface=MIXER,name='SAI1 SDI3 Loopback Switch'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Disable'
  ; Item #1 'Enable'
  : values=0
numid=25,iface=MIXER,name='SAI1 Sync In Switch'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'From IO'
  ; Item #1 'From Sync Port'
  : values=0
numid=24,iface=MIXER,name='SAI1 Sync Out Switch'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'From CRU'
  ; Item #1 'From IO'
  : values=0
numid=7,iface=MIXER,name='SAI1 Transmit Mono Switch'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Disable'
  ; Item #1 'Enable'
  : values=0
numid=33,iface=MIXER,name='SAI1 Transmit SDO0 Source Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'From PATH0'
  ; Item #1 'From PATH1'
  ; Item #2 'From PATH2'
  ; Item #3 'From PATH3'
  : values=0
numid=32,iface=MIXER,name='SAI1 Transmit SDO1 Source Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'From PATH0'
  ; Item #1 'From PATH1'
  ; Item #2 'From PATH2'
  ; Item #3 'From PATH3'
  : values=1
numid=31,iface=MIXER,name='SAI1 Transmit SDO2 Source Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'From PATH0'
  ; Item #1 'From PATH1'
  ; Item #2 'From PATH2'
  ; Item #3 'From PATH3'
  : values=0
numid=30,iface=MIXER,name='SAI1 Transmit SDO3 Source Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'From PATH0'
  ; Item #1 'From PATH1'
  ; Item #2 'From PATH2'
  ; Item #3 'From PATH3'
  : values=3
numid=3,iface=MIXER,name='SAI1 Transmit SDOx Select'
  ; type=ENUMERATED,access=rw------,values=1,items=5
  ; Item #0 'Auto'
  ; Item #1 'SDOx1'
  ; Item #2 'SDOx2'
  ; Item #3 'SDOx3'
  ; Item #4 'SDOx4'
  : values=1
numid=1,iface=MIXER,name='SAI1 Transmit Start Mode Sel'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Standalone'
  ; Item #1 'Chained'
  : values=0
numid=65,iface=MIXER,name='Speaker Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=49,iface=MIXER,name='ZC Timeout Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=63,iface=MIXER,name='hp switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=62,iface=MIXER,name='spk switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=35,iface=PCM,name='SAI1 PCM Read Wait Time MS'
  ; type=INTEGER,access=rw------,values=1,min=0,max=10000,step=1
  : values=0
numid=36,iface=PCM,name='SAI1 PCM Write Wait Time MS'
  ; type=INTEGER,access=rw------,values=1,min=0,max=10000,step=1
  : values=0

以numid为65的控件为例,详解如下:

numid=65,iface=MIXER,name='Speaker Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
  • 基本信息部分:numid=65,iface=MIXER,name='Speaker Switch'

  • numid=65: 控件的数字标识符。这是ALSA系统内部用于唯一标识该控件的数字。

  • iface=MIXER: 表示这是一个混音器(MIXER)接口的控件。

  • name='Speaker Switch': 用户友好的控件名称,表示这是扬声器的开关控制。

  • 属性描述部分: ; type=BOOLEAN,access=rw------,values=1

  • type=BOOLEAN: 控件类型为布尔值,表示它只有两种状态:开(ON)或关(OFF)。

  • access=rw------: 访问权限设置:

    • r: 可读(readable)
    • w: 可写(writable)
    • ------: 没有其他特殊权限
  • values=1: 这个控件只有一个值(布尔类型只有开/关两种状态)

  • 当前值部分:: values=off

  • 这表示控件的当前状态为关闭(OFF)

由上述信息我们就可以知道:这是一个扬声器开关控件,用于启用或禁用扬声器输出,布尔类型意味着它只有两种状态:ON 或 OFF。

操作方式:

# 开启扬声器
amixer -c 0 cset name='Speaker Switch' on
# 或使用numid
amixer -c 0 cset numid=65 on

##关闭扬声器
amixer -c 0 cset name='Speaker Switch' off
# 或使用numid
amixer -c 0 cset numid=65 off

##查看该控制器的配置
amixer -c 0 cget name='Speaker Switch'

alsamixer

alsamixer是一个命令行图形化的配置声卡的工具,具体功能和amixer一致,用来查看和配置声卡的详细信息。

#打开配置界面
alsamixer
#打开card 0 的配置界面
alsamixer -Dhw:0

alsamixer图像化界面使用比较简单除面板中的F系列快捷键以外,通过左右键来切换控件,上下键来更换控件的值,其中面板中的"00"表示on,"MM"表示off。

配置完声卡后,若我们需要保存当前配置,可使用如下命令生成声卡配置文件,

alsactl store

该文件默认保存在/var/lib/alsa目录,文件名为asound.state。当我们需要使用该配置文件时,可使用如下命令使其生效。

alsactl restore

arecord

功能: 从系统的音频输入设备(如麦克风、线路输入、数字输入等)捕获音频数据,并将其保存为音频文件或输出到标准输出。
基本语法:

arecord [选项] [文件名]
  • 常用选项:
    • -D [设备名称]: 指定要使用的录音设备。使用 arecord -laplay -l 列出可用设备。设备名称通常是类似 hw:0,0plughw:1,0 的格式。如果省略,使用默认设备。
    • -d [秒数]: 指定录音的持续时间(秒)。例如 -d 10 录 10 秒。
    • -f [格式]: 指定音频样本格式。常见格式:
      • cdr (16-bit little-endian, CD 质量) - 最常用
      • dat (16-bit big-endian)
      • S16_LE (16-bit signed little-endian)
      • S24_LE (24-bit signed little-endian)
      • S32_LE (32-bit signed little-endian)
      • U8 (8-bit unsigned)
      • 等等。使用 arecord --help 查看完整列表。
    • -r [采样率]: 指定采样率(Hz)。常见值: 8000 (电话音质), 16000, 22050, 44100 (CD 音质), 48000 (DVD 音质), 96000, 192000。
    • -c [通道数]: 指定声道数(1=单声道, 2=立体声)。
    • -t [文件类型]: 指定输出文件的格式(容器)。常见值:
      • wav (Microsoft WAV) - 最常用,有标准头
      • voc (Creative Voice)
      • raw (无头原始 PCM 数据) - 需要额外指定格式(-f)和采样率(-r)
      • au (Sun AU)
      • 等等。如果文件名有扩展名(如 .wav),通常可以自动推断类型。
    • -v: 详细模式,显示录制过程中的信息(如电平)。
    • --help: 显示帮助信息。
  • 常用示例:
    • 录制一个 10 秒的 CD 质量 WAV 文件:
arecord -D hw:0,0 -d 10 -f cd -t wav my_recording.wav
  • 录制并直接播放(管道):
arecord -v -f cd -D hw:0 | aplay -v -D hw:0 -f cd

aplay

功能: 读取音频文件或标准输入中的音频数据,并通过系统的音频输出设备(如扬声器、耳机、线路输出等)播放出来。
基本语法:

aplay [选项] [文件名]
  • 常用选项: (很多与 arecord 类似)
    • -D [设备名称]: 指定要使用的播放设备。使用 aplay -l 列出可用设备。
    • -f [格式]: 当播放原始 PCM (raw) 文件时,必须指定音频样本格式(与录制时一致)。格式与 arecord 相同(cdr, S16_LE等)。
    • -r [采样率]: 当播放原始 PCM (raw) 文件时,必须指定采样率。
    • -c [通道数]: 当播放原始 PCM (raw) 文件时,必须指定声道数。
    • -t [文件类型]: 指定输入文件的格式。如果文件名有扩展名(如 .wav),通常可以自动推断。对于 raw 文件,必须指定 -t raw 并配合 -f, -r, -c 使用。
    • -v: 详细模式,显示播放过程中的信息。
    • -V: 显示 VU 表(音量表)。
    • --help: 显示帮助信息。
  • 常用示例:
    • 播放一个 WAV 文件:
aplay -D hw:0,0 external_speakers.wav 

网络通讯接口

以太网

RK3576支持两个以太网控制器,支持IEEE 802.3 10/100/1000M,带RGMII和RMII。

RK3576载板引出了两个1000M以太网网口。

相关命令行指令

# 安装带宽测试工具
sudo apt install iperf3

# 测试网络
iperf3 -c 192.168.199.129 -p 5011

WiFi

RK3576载板板载AP6256(2.4G/5G WiFi)模组,通过SDIO1连接到RK3576。

相关命令行指令

 # 扫描可用 Wi-Fi 网络
 nmcli device wifi list
 # 连接 Wi-Fi
 nmcli device wifi connect <SSID> password <密码>
 # 指定网卡连接
 nmcli device wifi connect <SSID> password <密码> ifname wlan0
 # 断开 Wi-Fi
 nmcli device disconnect wlan0

4G

RK3576载板板载了一个M.2 B KEY座子(在载板背部),可以连接4G模组,使用USB通讯。

quectel-CM已经内置到/dfrobot-test中可以使用 quectel-CM 工具进行 4G 拨号上网,以下是完整操作流程:

  1. 拨号上网

使用quectel-CM 进行拨号连接:

#跳转到dfrobot-test目录下
cd /dfrobot-test
# 基本拨号命令
sudo ./quectel-CM -s [APN名称] &
# 中国电信示例
sudo ./quectel-CM -s ctnet &
# 中国移动示例
sudo ./quectel-CM -s cmnet &
# 中国联通示例
sudo ./quectel-CM -s 3gnet &
  1. 连接验证
# 查看网络接口状态
ip addr show wwan0

# 测试网络连通性
ping -I wwan0 8.8.8.8

外部通用接口

USB

RK3576支持两路USB2.0接口和两路USB3.2 Gen1x1 OTG接口(其中USB3.2 Gen1x1 OTG1与PCIE1、SATA1复用端口)。

ACM载板引出了1路type-C USB3.2 Gen1 OTG接口,1路USB-A USB3.2 Gen1 Host接口,以及2路USB2.0接口(通过hub芯片扩展)

相关命令行指令

测试时根据自己的实际/dev目录情况挂载测试

# 切换成device设备
sudo echo device > /sys/kernel/debug/usb/23000000.usb/mode

# 切换成usb host
sudo echo host > /sys/kernel/debug/usb/23000000.usb/mode

# 挂载设备
sudo mount /dev/sda1 /mnt/

# 写入测试
dd if=/dev/zero of=/mnt/test.txt bs=1M count=1024 oflag=direct status=progress

# 读取测试
dd if=/mnt/test.txt of=/dev/null bs=1M count=1024 iflag=direct status=progress

# 删除创建的测试文件
sudo rm /mnt/test.txt

# 卸载挂载点
sudo umount /mnt

连接好U盘后:挂载存储设备 → 测试写入性能 → 测试读取性能 → 清理测试文件 → 卸载设备

存储接口

RK3576核心板板载有EMMC存储,RK3576载板板载有M.2 M KEY、TF卡、UFS存储接口(载板未焊接UFS存储芯片)

eMMC

RK3576核心板板载有eMMC存储,符合eMMC V5.1规范,兼容eMMC V4.51及以下标n。

相关命令行指令

测试时根据自己的实际/dev目录情况挂载测试

# 挂载设备
sudo mount /dev/sda1 /mnt/

# 写入测试
dd if=/dev/zero of=/mnt/test.txt bs=1M count=1024 oflag=direct status=progress

# 读取测试
dd if=/mnt/test.txt of=/dev/null bs=1M count=1024 iflag=direct status=progress

# 删除创建的测试文件
sudo rm /mnt/test.txt

# 卸载挂载点
sudo umount /mnt

挂载存储设备 → 测试写入性能 → 测试读取性能 → 清理测试文件 → 卸载设备

M.2 M KEY

RK3576载板板载有M.2 M KEY,最大支持29.5W电源输出,可连接SSD、算力卡,用于扩展系统存储容量和算力。

相关命令行指令

测试时根据自己的实际/dev目录情况挂载测试

# 挂载设备
sudo mount /dev/sda1 /mnt/

# 写入测试
dd if=/dev/zero of=/mnt/test.txt bs=1M count=1024 oflag=direct status=progress

# 读取测试
dd if=/mnt/test.txt of=/dev/null bs=1M count=1024 iflag=direct status=progress

# 删除创建的测试文件
sudo rm /mnt/test.txt

# 卸载挂载点
sudo umount /mnt

连接好SSD后:挂载存储设备 → 测试写入性能 → 测试读取性能 → 清理测试文件 → 卸载设备

TF

RK3576开发板板载一个TF Card 接口,用于可扩展系统存储容量,数据总线宽度为 4bits,支持 SD3.0,MMC ver4.51。

相关命令行指令

测试时根据自己的实际/dev目录情况挂载测试

# 挂载设备
sudo mount /dev/sda1 /mnt/

# 写入测试
dd if=/dev/zero of=/mnt/test.txt bs=1M count=1024 oflag=direct status=progress

# 读取测试
dd if=/mnt/test.txt of=/dev/null bs=1M count=1024 iflag=direct status=progress

# 删除创建的测试文件
sudo rm /mnt/test.txt

# 卸载挂载点
sudo umount /mnt

连接好TF卡后:挂载存储设备 → 测试写入性能 → 测试读取性能 → 清理测试文件 → 卸载设备

CPU & NPU

CPU跑分

RK3576集成4核Cortex A72处理器和4核Cortex A53处理器

  • Cortex A72
    • 每个核心有45KB L1指令缓存和32KB L1数据缓存
    • 1MB统一L2缓存
  • Cortex A53
    • 每个核心有32KB L1指令缓存和32KB L1数据缓存
    • 512KB统一L2缓存

测试脚本

该脚本在 /rockchip-test/cpu/cpu_stress_test.sh中,请在root权限下执行该脚本,可对CPU进行压力测试

. /rockchip-test/cpu/cpu_stress_test.sh

NPU推理测试

RK3576内置NPU支持INT4/INT8/INT16/FP16/BF16/TF32混合操作。此外,凭借其强大的兼容性,基于TensorFlow/MXNet/PyTorch/Caffe等一系列框架的网络模型可以轻松转换。

  • 支持6TOPS@INT8的稀疏算例
  • 支持双核协同工作或单核独立工作
  • 支持INT4/INT8/INT16/FP16/BF16/TF32混合操作
  • 支持1MB内部SRAM
  • 支持多场景、多任务并行运行
  • 支持深度学习框架:TensorFlow, Caffe, Tflite, Pytorch, Onnx NN, Android NN

测试脚本

该脚本在 /rockchip-test/npu2/npu_stress_test.sh中,请在root权限下执行该脚本,可看到NPU推理性能

. /rockchip-test/npu2/npu_stress_test.sh