Getting Started with ArmSoM-w3

From ArmSoM Wiki
Revision as of 15:05, 7 October 2023 by Peter (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)


ArmSoM-W3_Overview[Rockchip RK3588]
ArmSoM-W3_interface[Rockchip RK3588]
ArmSoM-W3_Front[Rockchip RK3588]
ArmSoM-W3_Back[Rockchip RK3588]

The ArmSoM-W3 single board computer is designed and developed by ArmSoM team for professional and enterprise users, powered by Rockchip RK3588 SoC quad ARM Cortex-A76 and quad Cortex-A55 consists of an eight-core CPU processor with dynamic frequency scaling up to 2.4GHz. Embedded high -performance 3D and 2D image acceleration module, AI accelerator NPU with a built -in 6 TOPS computing power.

ArmSoM-W3 up to 32GB 64bit LPDDR4X ram, up to 8K@60 HDMI OUT, HDMI IN, MIPI DSI, MIPI CSI, 3.5mm jack with mic, USB Port, 2.5GbE LAN, PCIe 3.0 x4, PCIe 2.0x2, 40-pin expansion header, RTC, POE, SD card, DC power, typec.

Get Started

Essentials You Need

Before starting to use your ArmSoM-W3 get the following items ready

  • ArmSoM-W3
  • power supply(choose one of three)
  1. 12 volt @2/3A via DC Power
  2. USB C PD Charger (15W & above)
  3. 12 volt PoE
  • If you wish to boot from sd card:MicroSD Card/TF Card: Class 10 or Above, minimum 8GB SDHC

TF Cards We Tested

Refer to: TFCardsWeTested

PD Power Adapters We Tested

Refer to: PD Power Adapters We Tested

Configure parameters for serial port

Use the following serial parameters:

Baud rate 1500000
Data bit 8
Parity check None
Stop bit 1
Flow control None

Install OS

Install OS to eMMC

Please check this guide, Install rockchip flash tools under Windows/Linux/MacOS PC.

Visit download link to download image files and utilities.

Image Files
armsom-w3-emmc-Android12-rkr12-20230420.img.xz Android 12 image file, kernel version 5.10.y
armsom-w3-emmc-AndroidTv12-rkr12-20230420.img.xz Android TV image file, kernel version 5.10.y
armsom-w3-emmc-buildroot-20230420.img.xz buildroot, kernel version 5.10.y
armsom-w3-emmc-debian-bullseye-xfce4-arm64-20230420.img.xz debian bullseys xfce4, kernel version 5.10.y

Install OS to TF

Please check this guide, Install rockchip tf tools under Windows/Linux.

Image Files
Armbian_23.05.0-trunk_Armsomw3_bullseye_legacy_5.10.110_gnome_desktop.img.xz Armbian, debian 11, kernel 5.10, desktop
Armbian_23.05.0-trunk_Armsomw3_bullseye_legacy_5.10.110.img.xz Armbian, debian 11, kernel 5.10
Armbian_23.05.0-trunk_Armsomw3_bookworm_legacy_5.10.110_cinnamon_desktop.img Armbian, debian 12, kernel 5.10, desktop
Armbian_23.05.0-trunk_Armsomw3_bookworm_legacy_5.10.110.img Armbian, debian 12, kernel 5.10
Armbian_23.05.0-trunk_Armsomw3_jammy_legacy_5.10.110_gnome_desktop.img.xz Armbian, Ubuntu 22.04, kernel 5.10, desktop
Armbian_23.05.0-trunk_Armsomw3_jammy_legacy_5.10.110.img.xz Armbian, Ubuntu 22.04, kernel 5.10

Boot the board

  • (Optional)if use SD Card boot,need into the socket on the board.
  • (Optional) Use the USB to TTL serial cable to setup a connection between PC and ArmSoM-w3 board.
  • Power on ArmSoM by adapter with type C port or PoE or DC power
  • ArmSoM-w3 will boot with the green power LED on. And after a while, another blue LED starts blinking,red led user control

interface use

Access from the Host PC/Laptop

Option 1: HDMI monitor and Mouse

You can open the terminal on the HDMI display and enter commands on the keyboard.

Option 2: Serial console

See Serial Console

Option 3: ADB

Using the burning tool provided by RK, you can not see the line "Found an MSC device" at the bottom. Connect the computer to the development board using a USB-typeC cable. On the Windows page, use the combined key of "Windows+R" to open the command terminal and type adb shell to see "root@linaro-alip:/#".


On ArmSoM-W3 three-color LED is configured as LED class device. When the blue LED is not active a green LED will show to indicate the board has power. You can control the behavior mode of the blue LED by writing to /sys/class/leds/blue:status/trigger. By default only root users can write to the device. The default mode of the blue LED is heartbeat.

linaro@linaro-alip:/home/linaro# sudo su // linaro password
root@linaro-alip:/home/linaro# echo timer > /sys/class/leds/blue:status/trigger
root@linaro-alip:/home/linaro# echo activity > /sys/class/leds/blue:status/trigger

You can use cat on the trigger property to list all the available LED modes. The value in brackets is the currently active mode.

root@linaro-alip:/home/linaro# cat /sys/class/leds/blue:status/trigger
none rfkill-any rfkill-none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock tcpm-source-psy-4-0022-online mmc2 mmc1 timer oneshot disk-activity disk-read disk-write ide-disk mtd nand-disk heartbeat backlight gpio cpu cpu0 cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7 mmc0 [activity] default-on transient flash torch panic netdev rfkill0

In the None mode, writing to /sys/class/leds/blue:status/brightness can manually control the status of the blue LED.

root@linaro-alip:/home/linaro# echo none > /sys/class/leds/blue:status/trigger
root@linaro-alip:/home/linaro# echo 1 > /sys/class/leds/blue:status/brightness
root@linaro-alip:/home/linaro# echo 0 > /sys/class/leds/blue:status/brightness

red light is the same, class device /sys/class/leds/red:status/trigger

RTC Device

ArmSoM-w3 is equipped with one RTC IC hym8563

Firstly, plug in RTC battery to give power to RTC IC. Please note that we should keep the RTC battery in the RTC connector.

Secondly,Check whether the driver is successfully loaded.

root@linaro-alip:~# dmesg | grep rtc
[    3.149263] rtc-hym8563 6-0051: rtc information is valid
[    3.154624] rtc-hym8563 6-0051: registered as rtc0
[    3.155646] rtc-hym8563 6-0051: setting system clock to 2021-01-01T12:00:05 UTC (1609502405)

Finally, check whether you can view and set the time.

root@linaro-alip:~# hwclock -r
2022-08-07 13:38:24.370866+00:00
root@linaro-alip:~# date
2022年 08月 07日 星期日 13:38:41 UTC
root@linaro-alip:~# hwclock -w


ArmSoM-w3 is configured with one 2.5G Ethernet interface. You can connect ArmSoM-w3 to the network using a network cable (one end is connected to an external network port or a route). The ArmSoM-w3 automatically configures the network for your Internet access.

Check that the Ethernet is working by using the ifconfig command, which displays network card eth0 or enP4p65s0, along with the Ethernet IP address. In addition, you can use the ping tool to test network connectivity.


If the network cable is connected, no IP address is assigned to the node.

dhclient eth0
dhclient enP4p65s0


ArmSoM-w3 doesn't come with on board WiFi/BT. Currently the following WiFi Cards are tested and supported by the ArmSoM-w3.

1. RTL8852BE

2. AP6256

To test the WIFI performance, we need to follow the steps:

# 1. Switch to super user mode
root@linaro-alip:/# sudo su
# 2. Open the WIFI
root@linaro-alip:/# nmcli r wifi on
# 3. Scan WIFI
root@linaro-alip:/# nmcli dev wifi
# 4. Connect to WIFI network
root@linaro-alip:/# nmcli dev wifi connect "wifi_name" password "wifi_password"


View sound cards in the system.

root@linaro-alip:/# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: rockchipdp0 [rockchip,dp0], device 0: rockchip,dp0 spdif-hifi-0 [rockchip,dp0 spdif-hifi-0]
 Subdevices: 1/1
 Subdevice #0: subdevice #0
card 1: rockchipes8316 [rockchip-es8316], device 0: fe470000.i2s-ES8316 HiFi es8316.7-0011-0 [fe470000.i2s-ES8316 HiFi es8316.7-0011-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 3: rockchiphdmi0 [rockchip-hdmi0], device 0: rockchip-hdmi0 i2s-hifi-0 [rockchip-hdmi0 i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 4: rockchiphdmi1 [rockchip-hdmi1], device 0: rockchip-hdmi1 i2s-hifi-0 [rockchip-hdmi1 i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Specify the sound card to play audio fiile.

aplay -D hw:0,0 /mnt/test.wav


root@linaro-alip:/root# arecord -D hw:1,0 -f S16_LE -t wav -c2 -r 16000 -d 3 t.wav
Recording WAVE 't.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Stereo
root@linaro-alip:/root# aplay t.wav
Playing WAVE 't.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Stereo

Storage device

Supports three types of storage devices

microSD card





root@linaro-alip:/home/linaro# mkdir temp
root@linaro-alip:/home/linaro# mount /dev/nvme0n1 temp



The camera uses the IMX415 module,After the camera module is connected and powered on, you can view the startup log.

root@linaro-alip:/# dmesg | grep imx415
[    2.547754] imx415 3-001a: driver version: 00.01.08
[    2.547767] imx415 3-001a:  Get hdr mode failed! no hdr default
[    2.547819] imx415 3-001a: Failed to get power-gpios
[    2.547826] imx415 3-001a: could not get default pinstate
[    2.547831] imx415 3-001a: could not get sleep pinstate
[    2.547850] imx415 3-001a: supply dvdd not found, using dummy regulator
[    2.547918] imx415 3-001a: supply dovdd not found, using dummy regulator
[    2.547945] imx415 3-001a: supply avdd not found, using dummy regulator
[    2.613843] imx415 3-001a: Detected imx415 id 0000e0
[    2.613890] rockchip-csi2-dphy csi2-dphy0: dphy0 matches m00_b_imx415 3-001a:bus type 5
[   18.386174] imx415 3-001a: set fmt: cur_mode: 3864x2192, hdr: 0
[   18.389067] imx415 3-001a: set exposure(shr0) 2047 = cur_vts(2250) - val(203)

The kernel assigns device information description files to the camera.

grep "" /sys/class/video4linux/v*/name | grep mainpath

Verify the functions of the camera

Grab a picture

 # v4l2-ctl -d /dev/video11 --set-fmt-video=width=3840,height=2160,pixelformat=NV12 --stream-mmap=3 --stream-skip=60 --stream-to=/tmp/cif73.out --stream-count=3 --stream-poll

Display on desktop using gst-launch-1.0

# gst-launch-1.0 v4l2src device=/dev/video11 ! video/x-raw,format=NV12,width=3840,height=2160, framerate=30/1 ! xvimagesink


2. USB3.0 Camera

After connecting the usb3.0 camera, open the Qt V4L2 test Utility application for testing


Then open the video node: video21


Then click the camera button, you will see the camera screen



The ArmSoM-w3 uses an hdmi_in port built into the rk3588 chip,You can use the v4l2 command to test the hdmi in interface.

View all video nodes

ls /dev/video*

Look for the rk hdmirx device

Run the v4l2-ctl -d command to specify the vidoe node. Run the -D command to view the node information. Check the rk_hdmirx device using the Driver name.

# v4l2-ctl -d /dev/video0 -D
Driver Info:
Driver name : rk_hdmirx
Card type : rk_hdmirx
Bus info : fdee0000.hdmirx-controller
Driver version : 5.10.66
Capabilities : 0x84201000
Video Capture Multiplanar
Extended Pix Format
Device Capabilities
Device Caps : 0x04201000
Video Capture Multiplanar
Extended Pix Format

Query resolution and image format

To query the current resolution and image format:

# v4l2-ctl -d /dev/video17 --get-fmt-video
Format Video Capture Multiplanar:
Width/Height : 3840/2160
Pixel Format : 'NV16'
Field : None
Number of planes : 1
Flags : premultiplied-alpha, 000000fe
Colorspace : Unknown (1025fcdc)
Transfer Function : Unknown (00000020)
YCbCr Encoding : Unknown (000000ff)
Quantization : Default
Plane 0 :
Bytes per Line : 3840
Size Image : 16588800

Grab image file

Save the image file to the device, adb pull to the PC, and view it through 7yuv and other tools:

v4l2-ctl --verbose -d /dev/video17 \
--set-fmt-video=width=3840,height=2160,pixelformat='NV16' \
--stream-mmap=4 --stream-skip=3 \
--stream-to=/data/4k60_nv16.yuv \
--stream-count=5 --stream-poll

Querying the HDMI RX status

Query the current status of HDMI RX, including signal locking, image format, Timings information, Pixl Clk, etc.

# cat /d/hdmirx/status
status: plugin
Clk-Ch:Lock Ch0:Lock Ch1:Lock Ch2:Lock
Ch0-Err:0 Ch1-Err:0 Ch2-Err:0
Color Format: YUV422 Store Format: YUV422 (8 bit)
Mode: 3840x2160p60 (4400x2250) hfp:172 hs:92 hbp:296 vfp:8 vs:10 vbp:72
Pixel Clk: 594024000


echo 0 > /sys/devices/platform/fd8b0010.pwm/pwm/pwmchip*/export
echo 10000 > /sys/devices/platform/fd8b0010.pwm/pwm/pwmchip*/pwm0/period
echo 5000 > /sys/devices/platform/fd8b0010.pwm/pwm/pwmchip*/pwm0/duty_cycle
echo inversed  > /sys/devices/platform/fd8b0010.pwm/pwm/pwmchip*/pwm0/polarity
echo 1 > /sys/devices/platform/fd8b0010.pwm/pwm/pwmchip*/pwm0/enable
#echo 0 > /sys/devices/platform/fd8b0010.pwm/pwm/pwmchip*/pwm0/enable

Post your issue on the


NPU usage

Prepare tools

1. Use the Ubuntu18.04 / Ubuntu20.04 operating system (OS).

2. An W3-PRO board

Preparation procedure

First make sure you have docker installed on your Ubuntu system,If not, refer to the Internet installation tutorial

We provide the source code and the docker image of the installed environment:docker image

Create a rknpu folder on the PC server and copy the firmware to the folder

rknpu/rknn-toolkit2-1.4.0/docker$ ls
md5sum.txt  rknn-toolkit2-1.4.0-cp36-docker.tar.gz  rknn-toolkit2-1.4.0-cp38-docker.tar.gz

Run the following command to run the docker image. After the Docker image is run, the bash environment of the image is displayed

docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb rknn-toolkit2:1.4.0-cp38 /bin/bash

Map examples code into a Docker environment by attaching "-v <host src folder>:<image dst folder>"Parameters, such as:

docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb -v /your/rknn-toolkit2-1.x.x/examples:/examples rknn-toolkit2:1.x.x /bin/bash

The code is synchronized after mapping

The rknn service needs to run on the development board

BOARD ARCH corresponds to the aarch64 directory on 64-bit Linux systems and to the armhf directory on 32-bit systems

1. adb push all files in Linux/rknn server/${B0ARD_ ARCH}/usr/bin/ to /usr/bin
2. adb push Linux/librknn api/${BOARD ARCH}/ librknrnt. so to /usr/1ib
3. Access the serial port terminal of the board and run the following command
 chmod +x /usr/bin/rknn server
 chmod +X /usr/bin/start_
 chmod +X /usr/bin/restart
 restart_ rknn. sh

run program

Execute adb devices in the docker image first, remembering the adb ID number

Go to /examples/onnx/yolov5 and change

ret = rknn.init_runtime(target='rk3588', device_id=DEVICE_ID, perf_debug=True,eval_mem=True)
outputs = rknn.inference(inputs=[img])
ret = rknn.eval_perf(inputs=[img], is_print=True)
cv2.imwrite("result.jpg", img_1)

The above four functions are not added

Run python3