sTPC-EXXX-3568B Series

Product Series: sTPC-EXXX-3568B (E101 / E121 / E150 / E156 / E170 / E215) · Rockchip RK3568 · 10.1″ ~ 21.5″ Fanless ARM Touch Panel PC (PANEL PC)

Contents [hide]

1 Resources and Features

1.1 Product Overview

sTPC-EXXX-3568B Series (Production Models: sTPC-E101-3568B / E121-3568B / E150-3568B / E156-3568B / E170-3568B / E215-3568B) is based on the Rockchip RK3568 platform, a Fanless ARM Touch Panel PC (PANEL PC), with screen sizes covering 10.1″ / 12.1″ / 15″ / 15.6″ / 17″ / 21.5″ in six specifications.

The unit combines an aluminum-magnesium alloy front frame with a fully sealed rear enclosure. The front holds a multi-point capacitive touch screen; the lower rear concentrates the power supply, serial port, USB, HDMI, Ethernet and other external interfaces; the antenna and SIM card are located on the upper rear. Two installation methods are supported, VESA mount and embedded (cutout) mounting, making the unit suitable for production line dashboards, equipment HMI, self-service query terminals and other industrial sites.

Product Features

  • Supports Rockchip RK3568: 4 × Cortex-A55 @2.0GHz, 1 TOPS NPU
  • Fully onboard I/O design, interfaces concentrated on the lower rear, maintenance requires no disassembly
  • Fanless fully sealed structure, support for VESA / embedded mounting
  • Android 11 and Ubuntu 20.04, dual OS optional

Model Naming Rules

Field Meaning
sTPC Touch Panel PC Series (SmartLinc Touch Panel Computer)
E101 / E121 / E150 / E156 / E170 / E215 Screen Size: 10.1″ / 12.1″ / 15″ / 15.6″ / 17″ / 21.5″
3568B Main Control Platform: Rockchip RK3568, version B unit

1.2 Unit Specifications

Item Specifications
Processor Rockchip RK3568, 4 cores 4 × Cortex-A55, max frequency 2.0GHz
GPU Mali-G52
NPU 1 TOPS (INT8)
Memory 2GB / 4GB (onboard)
Storage Onboard 32GB eMMC
Storage Expansion 1 × Micro SD (TF) card slot
Display Output 1 × HDMI, up to 3840 × 2160
Ethernet 1 × 10/100/1000Mbps auto-negotiation
Wireless Onboard 2.4G/5G dual-band Wi-Fi, 802.11 a/b/g/n/ac + Bluetooth 5.0
4G LTE 4G module EG800AK-C (auto-dial), see 4.4
USB 2 × USB3.0 (1 channel multiplexed with OTG) + 2 × USB2.0
Serial Port 4 × Serial Port: 2 × RS485 + 2 × RS232 (3.5mm pitch 3P pluggable terminal), ttyS1 ~ ttyS4
Audio 1 × SPK (8Ω 6W, PH2.0-4P), 1 × Ø3.5 Mic in
SIM 2 × Micro SIM slots (one of two)
Indicator LED 1 × power supply indicator LED (green), 1 × system indicator LED (blue)
Button 1 × Recover flash button (pinhole), 1 × Return button (short press to return / hold 3s at power-on to enter flashing)
GPIO 16 pins (PH2.0-16P) terminal, odd pins GPO / even pins GPI, optional breakout, see 2.3
Touch Screen multi-point capacitive, transmittance ≥ 87%, USB controller
Operating System Android 11 / Ubuntu 20.04 (standard); Debian 11 available per project
Video Codec H.264 / H.265 hardware codec (VPU), see 5.13
Power Supply Input DC 12V (±0.3V), 5.5×2.1mm barrel plug, with over-current, over-voltage protection; E150 (15″) supports DC 12~24V wide voltage
Unit Power Consumption ≤ 20W
Structure Aluminum-Magnesium Alloy Enclosure, Fanless, Supports VESA / Embedded Mounting
Operating Temperature -20 ~ 70℃ (10.1″ / 12.1″ / 15″); 0 ~ 50℃ (15.6″ / 17″ / 21.5″)
Storage Temperature -20 ~ 70℃ (10.1″ / 12.1″ / 15″); -20 ~ 60℃ (15.6″ / 17″ / 21.5″)
Relative Humidity 5 ~ 95% @40℃ (Non-Condensing)
Vibration 1.5Grms, IEC 60068-2-64, Random 5~500Hz, 1hr/Axis
Shock 10G, IEC 60068-2-27, Half-Sine Wave, 11ms Duration
EMC CE / FCC Class A

Note: Specifications are subject to change without prior notice. Data in this section corresponds to specification sheet v1.3 (updated 2026-06-24).

1.3 Model and Configuration

Model Size Resolution Brightness Backlight MTBF Operating Temperature 2GB Memory Part Number 4GB Memory Part Number
sTPC-E101-3568B 10.1″ 1280 × 800 350cd/m² 30000hrs -20 ~ 70℃ B11.AE101.38.0024 B11.AE101.38.0025
sTPC-E121-3568B 12.1″ 1024 × 768 500cd/m² 50000hrs -20 ~ 70℃ B11.AE121.38.0004 B11.AE121.38.0005
sTPC-E150-3568B 15″ 1024 × 768 350cd/m² 50000hrs -20 ~ 70℃ B11.AE150.38.0018 B11.AE150.38.0019
sTPC-E156-3568B 15.6″ 1920 × 1080 250cd/m² 15000hrs 0 ~ 50℃ B11.AE156.38.0012 B11.AE156.38.0013
sTPC-E170-3568B 17″ 1280 × 1024 250cd/m² 30000hrs 0 ~ 50℃ B11.AE170.38.0010 B11.AE170.38.0011
sTPC-E215-3568B 21.5″ 1920 × 1080 250cd/m² 30000hrs 0 ~ 50℃ B11.AE215.38.0006 B11.AE215.38.0007

Note: All models use a capacitive touch screen + 32GB onboard eMMC, in two memory configurations (2GB / 4GB); actual part numbers are listed in the table above; see 1.2, 2.3 for wide-range power input and interface group count differences of the 15″ model (E150).

1.4 Optional Accessories

Option Description
Power Adapter 12V 3A power adapter, with a GB-standard power cord
4G Kit EG800AK-C module + 4G external antenna (SMA)
Wi-Fi Antenna Rubber duck antenna, 3M suction-mount antenna

2 Interface Layout and Dimensions

2.1 Unit Appearance

The unit uses a flat-front + rear-cable-outlet design: the front holds only the touch screen and the aluminum-alloy front frame; the upper rear houses the antenna, SIM card slot and speaker connector area; the lower rear houses the external interface area (power supply, serial port, USB, HDMI, Ethernet port); the four corners have VESA mounting holes.

Unit Front Perspective View
stpc_e156_front_view.jpg
Front: Multi-Point Capacitive Touch Screen + Aluminum-Magnesium Alloy Front Frame
stpc_e156_3568b_perspective.jpg
Perspective: Unit Structure and Rear Expansion Bay
Unit Rear Interface Area (Front View)
stpc_e156_3568b_back.jpg
Rear: VESA Holes + Interface Area
stpc_e156_3568b_io_lower.jpg
Interface Area: DC 12V / Serial Port / HDMI / Ethernet / USB Arranged in a Single Row

2.2 Interface Overview

The external interfaces on the lower rear of the unit, from left to right, are: DC 12V → PWR / SYS indicator LEDs → Recover → Return → MIC → RS485 → RS232 → HDMI → LAN → USB3.0 → USB2.0; on the upper rear, from left to right: SIM card slot → 4G antenna → Wi-Fi / BT antenna → SPK speaker connector → GPIO breakout connector. Labels in the figure correspond one-to-one with the numbers in the table below; click an image to view the high-resolution version.

Interface Layout (Front View) Interface Layout (Angled View)

Front View: External Interfaces Lined Up in a Row on the Lower Rear

Angled View: Positions of RS485 / SIM / Speaker / Antenna Connectors
No. Silkscreen Label Interface Qty Description
1 DC 12V Power Input 1 5.5×2.1mm barrel connector, center positive, outer negative
2 PWR Power Indicator LED 1 Green, steady on when powered
3 SYS System Indicator LED 1 Blue, steady on while the system is running
4 Recover Flash Button 1 Pinhole type; power off, hold and power on to enter Loader / Maskrom
5 Return Back Button 1 Tactile button, equivalent to BACK under Android
6 MIC Microphone Input 1 Ø3.5 phone jack
7 RS485 RS485 serial port 2 3.5mm 3P terminal, A1 / B1 / G1, ttyS1
8 RS232 RS232 serial port 2 3.5mm 3P terminal, R2 / T2 / G2, ttyS2
9 HDMI HDMI Output 1 Standard Type A, up to 3840×2160
10 LAN Ethernet 1 RJ45, 10/100/1000M auto-negotiation
11 USB3.0 USB3.0 2 Blue dual-stack, lower port multiplexed as OTG (flashing / ADB)
12 USB2.0 USB2.0 2 Black dual-stack
13 SIM Micro SIM 2 Use one of the two
14 4G 4G Antenna 1 SMA connector
15 Wi-Fi/BT Wi-Fi Antenna 1 SMA connector
16 SPK Speaker 1 PH2.0-4P, 8Ω 6W
17 GPIO GPIO Expansion 1 Optional breakout
18 GND Grounding Stud 1 M4 grounding screw

Note: Quantities in the table are the maximum configuration for the series; the actual number of groups varies by model and configuration (the 10.1″ sample in the figure has one group each of RS485 and RS232). Wiring and device nodes follow the silkscreen labels on the unit; see 4.5 for the node mapping.

2.3 Interface Pin Definitions

All external connectors on the unit are finished connectors; no bare board pin headers. The serial ports and speaker use pluggable terminal blocks with 3.5mm / 2.0mm pitch; align wiring with the silkscreen labels. Recommended wire gauge: 0.2 ~ 1.5mm²; strip length: 6 ~ 7mm.

DC 12V (5.5×2.1mm Barrel Connector)

Item Definition
Center Pin +12V
Outer Ring GND
Input Range DC 12V ±0.3V (15″ model: 12 ~ 24V)
Protection Overvoltage protection, overcurrent protection

RS485 (3.5mm 3P Terminal, 2 Groups: ttyS1 / ttyS3)

Pin RS485-1 (ttyS1) RS485-2 (ttyS3) Description
1 A1 A3 Differential Positive (485_A)
2 B1 B3 Differential Negative (485_B)
3 G1 G3 Signal Ground

Half duplex; transmit/receive direction is switched automatically by hardware; no software RTS control is required.

RS232 (3.5mm 3P Terminal, 2 Groups: ttyS2 / ttyS4)

Pin RS232-1 (ttyS2) RS232-2 (ttyS4) Description
1 R2 R4 Receive RXD, connect to peer TXD
2 T2 T4 Transmit TXD, connect to peer RXD
3 G2 G4 Signal Ground

Full duplex; when connecting to external devices, cross R/T and share GND.

Note: The silkscreen suffix matches the device node number (A1 → ttyS1, R2 → ttyS2, A3 → ttyS3, R4 → ttyS4); therefore RS485 uses ttyS1 / ttyS3 and RS232 uses ttyS2 / ttyS4. Non-consecutive numbering is normal.

SPK (PH2.0-4P)

Pin Silkscreen Label Signal Description
1 L+ Left Channel + 8Ω 6W
2 L- Left Channel - —
3 R- Right Channel - —
4 R+ Right Channel + 8Ω 6W

MIC (Ø3.5 phone jack)

Part Signal Description
TIP MIC+ Microphone Signal
SLEEVE GND Ground

USB

Interface Mode Description
USB3.0 (Upper Row) Host 5Gbps; connect USB flash drives / keyboard and mouse / industrial cameras
USB3.0/OTG (Lower Row) Host / Device In Device mode, used for system flashing and ADB debugging
USB2.0 (Dual-Stack) Host 480Mbps; connect USB flash drives / keyboard and mouse / printers

HDMI / LAN / SIM

Interface Specifications
HDMI Standard Type A 19-pin, up to 3840×2160
LAN RJ45 8P8C, 10/100/1000M auto-negotiation, supports Auto-MDIX, with Link/Act indicator LEDs
SIM 2 × Micro SIM, use one of the two, insertion direction follows the silkscreen label on the socket

GPIO (PH2.0-16P Terminal, Optional Breakout)

The unit GPIO is an optional breakout (rear GPIO connector / internal pin header); align wiring with the silkscreen labels on the unit.

Pin Direction Description
Odd pins 1 / 3 / 5 / 7 / 9 / 11 / 13 / 15 GPO General-purpose output, fixed by hardware, output only
Even pins 2 / 4 / 6 / 8 / 10 / 12 / 14 / 16 GPI General-purpose input, fixed by hardware, input only

GPO / GPI are fixed by hardware and cannot be swapped by software; the table below lists system-side GPIO numbers, which are a different concept from terminal pin numbers.

System GPIO Numbers

Purpose System GPIO Numbers
GPO (Digital Output) 95, 94, 21, 22, 140, 141
GPO / GPI (Output / Input) 13, 14, 96, 93, 108, 107

GPIO numbers are kernel gpiochip global numbers and may shift as a whole across firmware versions; unexported pins must be exported before use.

2.4 Mechanical Dimensions

Model Unit Dimensions W×H×D (mm) Cutout Dimensions (mm) Net Weight
sTPC-E101-3568B 269 × 188 × 39 261 × 180 1kg
sTPC-E121-3568B 315 × 250 × 44 307 × 242 2kg
sTPC-E150-3568B 368 × 292 × 46 358 × 282 2.5kg
sTPC-E156-3568B 400 × 257 × 39 392 × 249 3kg
sTPC-E170-3568B 408 × 341 × 46 398 × 331 4kg
sTPC-E215-3568B 549 × 341 × 46 539 × 330 5kg

Dimension drawing for the 10.1″ model (unit: mm): unit 269 × 188 × 39, cutout 261±2 × 180±2, mounting holes 4 × Ø10, VESA holes 4 × M4 depth 6mm. For dimension drawings of other sizes, see pages 2~3 of the specification sheet.

Structural Description

  • Enclosure material: aluminum-magnesium alloy front frame + metal rear enclosure, fanless and fully sealed
  • Mounting: VESA bracket (4 × M4, depth 6mm) or embedded cutout mounting (clip-fixed)
  • Cooling: natural cooling for the unit; reserve ≥ 50mm ventilation space at the rear

3 Quick Start

3.1 System Download

Android System

  • Android 11 firmware (with root access): contact Sales / Technical Support for the download link

Linux System

  • Ubuntu 20.04 firmware (with Qt 5.12.8, GStreamer): contact Sales / Technical Support for the download link
  • Debian 11 firmware: provided separately per project requirements

3.2 Flashing Tool Download

Both tools are official Rockchip releases, uploaded as attachments on this site; download links are at the end of each item:

Note: If the driver is not installed successfully, an unknown device appears in Device Manager; reinstall the driver before flashing.

3.3 System Flashing

Linux and Android use the same Rockchip tools for flashing; the unit requires no disassembly: connect via the USB3.0/OTG port and enter flashing mode via the Recover pinhole.

① Connect the OTG Port

Take a USB3.0 male-to-male cable; connect one end to the blue USB3.0/OTG port in the lower row of the rear interface area and the other end to a PC USB port:

② Install the Rockchip USB Driver

Enter the driver package directory and double-click DriverInstall.exe:

When the “Rockchip Driver Assistant” dialog appears, click “Install Driver” and wait for the progress bar to complete:

Note: If the device is not recognized due to a driver error or after switching PCs, click “Uninstall Driver” in Driver Assistant first, then click “Install Driver” again.

③ Open the Flashing Tool

Extract the tool package and double-click RKDevTool.exe:

④ Put the Unit into Loader Mode

Power off the unit first, hold the rear Recover hole with a pin without releasing, then connect DC 12V to power on, and release after about 2 seconds:

⑤ Confirm the Device Is Recognized

After entering Loader mode, check the status bar at the bottom of RKDevTool: No Devices Found means the unit is not recognized yet, while Found One LOADER Device means it is ready to flash:

If “No Devices Found” keeps showing, go back to step ④ and re-enter, or change the USB port and data cable.

⑥ Select Firmware and Upgrade

Switch to the “Upgrade Firmware” tab, first click “Firmware” to select update.img, then click “Upgrade”:

After flashing reaches 100%, the device reboots automatically; first boot takes about 30 ~ 60 seconds.

Note:

  1. If the device is not recognized when switching from Android to Linux (or vice versa), run “Enter Maskrom” in “Advanced Features” and re-flash
  2. Do not cut power or unplug the cable during flashing; otherwise the unit may fail to boot and must be re-flashed after re-entering Loader
  3. Advanced users can flash via the upgrade_tool command line under Linux: sudo upgrade_tool uf update.img

3.4 USB Drive Upgrade

The Android unit can be upgraded offline via USB drive without connecting to a PC. This section applies only to Android firmware; for the corresponding Linux procedure see 5.10, for OTA update see 4.13.

3.4.1 Prepare update.img

Choose one of the two firmware sources:

  1. Obtain a ready-made update.img from SmartInc (see 3.1 for how to get it)
  2. Build it yourself with the SDK: run a full build in the SDK root directory to generate the rockdev/Image-xxx/ directory, then run ./mkupdate.sh (or make otapackage)
# Build the full image
./build.sh updateimg
ls -lh rockdev/update.img

USB drive requirements: FAT32 format, available capacity ≥ 4GB (≤ 32GB recommended), place update.img in the root directory with the filename unchanged.

3.4.2 Local Upgrade via USB Drive

  1. Copy update.img to the root directory of the USB drive
  2. Insert the USB drive into a USB port on the unit (either USB3.0 / USB2.0 port works)
  3. After the system detects the update package, confirm as prompted in the pop-up; keep the power supply on during the update, and the unit reboots automatically when done

Note: If no upgrade prompt appears after inserting the USB drive, first check the filename and USB drive format, then reboot the unit and retry; for Android OTA update see 4.13.

4 Android System Usage

This chapter applies only to the Android system (Android 11). Equivalent functions under Linux (Ubuntu / Debian) are grouped in Chapter 5; interfaces, tools and commands are not mixed between the two chapters; Android application-layer API calls are all documented in 4.12.

4.1 Enable ADB Debugging

4.1.1 USB ADB Usage

  1. Use a USB data cable to connect the USB3.0/OTG port of the unit (blue port on the lower row) to the PC
  2. Under “Settings → About tablet”, tap “Build number” 7 times consecutively to enable Developer options
  3. Enter “Developer options” and enable “USB debugging”
  4. On the PC, run adb devices; on first connection, tap “Allow” in the pop-up on the unit
adb devices
# List of devices attached
# 0123456789ABCDEF	device

4.1.2 Network ADB Usage

When the unit and PC are on the same network segment, debug wirelessly without a data cable.

adb connect 192.168.8.55:5555
adb devices

4.2 WiFi Usage

  1. Go to “Settings → Network & Internet → WLAN” and turn on the switch
  2. Select the target hotspot and enter the password (onboard 2.4G/5G dual-band, 802.11 a/b/g/n/ac)
  3. After connecting, check the IP address in “Network details”
  4. If the signal is weak, adjust the angle of the rear Wi-Fi/BT SMA antenna, or use a suction-cup antenna instead
adb shell dumpsys wifi | grep -i "curState"
adb shell ifconfig wlan0

4.3 Ethernet Usage

The unit has a single network port (LAN, Gigabit auto-negotiation); under Android the device name is eth0. All commands below run in adb shell; changing settings requires su privileges.

View Device

ip link show

Usage (Dynamic IP)

su
ifconfig eth0 up
ifconfig eth0 dhcp      # Some firmware requires dhcpcd eth0 instead

Usage (Static IP)

su
ifconfig eth0 down
ifconfig eth0 192.168.8.55 netmask 255.255.255.0
ifconfig eth0 up

Test

ping -c 4 192.168.8.1

Note: To make a static IP take effect automatically at boot, configure a static eth0 address in the system, or set the Ethernet static IP via ConnectivityManager at the application layer.

4.4 4G Module Usage

The unit's 4G uses a Quectel EG800AK-C module (mounted on the 6A12-J carrier board); the system dials automatically after power-on, with no manual configuration required.

4.4.1 Support List

The unit supports only the 4G modules listed below; the USB ID is used to confirm in the board-side lsusb output whether the module is recognized:

Module Model Standard USB ID
Quectel EG800AK-C LTE 4G 2c7c:6002

4.4.2 Steps

4G Module

  1. Attach the 4G antenna, and insert the SIM card into the socket with the notch facing outward and the chip facing the board
  2. After power-on, confirm the SIM card is recognized in “Settings → Network & Internet → Mobile network”
  3. Turn on mobile data; once the 4G icon appears in the status bar, you can access the Internet
adb shell lsusb
# Bus 002 Device 002: ID 2c7c:6002 Quectel Wireless Solutions Co., Ltd. EG800AK-C

Check Signal and Network Registration (AT Commands)

The module AT port is generally /dev/ttyUSB2 and requires root privileges:

echo -e "AT+CPIN?\r\n"   > /dev/ttyUSB2   # Check whether the SIM card is inserted properly
echo -e "AT+CSQ\r\n"     > /dev/ttyUSB2   # Signal strength, 0~99 is normal
echo -e "AT+COPS?\r\n"   > /dev/ttyUSB2   # Whether registered on the carrier network
echo -e "AT+CGREG?\r\n"  > /dev/ttyUSB2   # Whether the data network is ready

Note: Insert or remove the SIM card only with power off; hot-plugging may cause the module to be unrecognized, requiring a power cycle.

4.5 Serial Port Usage

The unit provides 2 × RS485 and 2 × RS232; Android node and terminal definitions are as follows (the rear silkscreen label takes precedence):

Interface Device Node Pin Definition
RS485-1 /dev/ttyS1 A1 / B1 / G1
RS485-2 /dev/ttyS3 A3 / B3 / G3
RS232-1 /dev/ttyS2 R2 / T2 / G2
RS232-2 /dev/ttyS4 R4 / T4 / G4

4.5.1 Test Tool ComAssistant

Serial port testing under Android uses ComAssistant (a serial assistant app) throughout:

  1. Install and open ComAssistant; on first run, grant storage and serial port device permissions
  2. Select the target node in the device list: RS485 uses /dev/ttyS1 or /dev/ttyS3; RS232 uses /dev/ttyS2 or /dev/ttyS4
  3. Set the parameters to 115200, 8 data bits, 1 stop bit, no parity (8N1)
  4. Tap “Open serial port”, enter content in the send area and tap “Send”; during loopback or mutual transmission, observe the receive area at the same time

Note: ComAssistant requires Root privileges to access /dev/ttyS*; if opening fails, first run su and ls -l /dev/ttyS* in adb shell to check node permissions.

4.5.2 Test Method

  1. RS232 loopback: short R and T of the same 232 node with a jumper cap
  2. RS232 — RS232 mutual transmission: cross wiring (R↔T, common GND)
  3. RS232 — RS485 mutual transmission: via a 232-to-485 converter module
  4. RS232 — RS232-to-USB — serial port assistant on the PC
  5. RS485 — RS485-to-USB — serial port assistant on the PC
  6. RS485 loopback: short A and B

Precautions

  1. The unit has a 3.5mm 3P pluggable terminal (no DB9); use a crimp terminal or adapter cable. Adapter cable pinouts may differ between manufacturers; reversing A / B or R / T directly causes communication failure
  2. RS485 is half-duplex; direction is switched automatically by hardware, so observe the frame interval when switching between transmit and receive

4.5.3 Application-Layer Calls

Do not open nodes directly via shell in the app; use the NodkaAPI uart_ interface (see 4.12.5):

NodkaAPI api = NodkaAPI.nodkaAPICreate(context);
api.uart_open("/dev/ttyS2", 115200);
api.uart_send("/dev/ttyS2", "hello".getBytes());
api.uart_receive("/dev/ttyS2", new UartReceiveDataCallback() {
    @Override
    public void onReceiveData(byte[] data) {
        // Process the received data
    }
});
api.uart_close("/dev/ttyS2");

4.6 USB and SD Card

The unit provides 2 × USB3.0 (lower row multiplexed with OTG) and 2 × USB2.0, plus SD card support.

USB Drive

  1. Insert the USB drive; “USB storage device” appears on the left side of the file manager
  2. If you can browse the USB drive contents after opening it, the drive is recognized correctly
  3. Before unplugging, unmount it in “Settings → Storage” to avoid data corruption
adb shell ls /storage          # Mount points such as udisk0 or 91A3-2B1C are visible
adb shell lsusb

SD Card

adb shell ls /storage          # SD card mount points such as xxxx-xxxx are visible
adb shell dumpsys mount | grep -i mmc

Note: The OTG port in Device mode (flashing / ADB) cannot act as Host at the same time; before inserting a USB drive, confirm the system has exited flashing mode. For manual mounting under Linux see 5.5.

4.7 Audio Test

Unit audio is output via SPK (PH2.0-4P, 8Ω 6W) and input via MIC (Ø3.5); connect an external speaker when no built-in speaker is present.

Speaker Output Test

  1. Connect an 8Ω speaker to the SPK terminal (L+ / L- / R+ / R-)
  2. Open the built-in “Music” player to play the test audio, and press the volume keys to confirm the volume is adjustable and the left/right channels are normal
  3. The test file is at /nodka_test/LR_audio.wav and can be played directly with the “Files” app

Microphone Recording Test

  1. Insert a Ø3.5 microphone or use the onboard MIC
  2. Open the built-in “Recorder” app, record about 5 seconds and play it back to confirm the audio is clear with no noise

View Audio Path

adb shell dumpsys media.audio_flinger | grep -i "Output thread"
adb shell getprop | grep -i audio

Note: If there is no sound, first confirm the SPK terminals L+ / L- / R+ / R- match the speaker wire sequence, then use adb shell tinymix to check whether the amplifier path is open. Under Linux, use aplay / arecord (see 5.1).

4.8 HDMI and Dual Display

The unit supports simultaneous output to the internal screen + HDMI, up to 3840 × 2160 on HDMI.

Set HDMI Output

  1. Connect an HDMI monitor and go to “Settings → Display → HDMI”
  2. Select the resolution and refresh rate (1920 × 1080 @ 60Hz recommended) and confirm the image is stable with no flicker
  3. Select the display mode: Mirror (Clone) or Extended (Expand)
Mode Description
Mirror (Clone) The internal screen and HDMI show the same image, with the lower resolution of the two
Extended (Expand) The two screens show independent images; the app must specify DisplayId

View via Command Line

adb shell wm size
adb shell wm density
adb shell dumpsys display | grep -i "mDisplayId"

Note: In the app, use interfaces such as display_setScreenRotation / display_setScreenBrightness to control the display (see 4.12.3). Under Linux, use xrandr or weston.ini (see 5.6).

4.9 Button and Indicator LED Test

Item Location Phenomenon / Action Verdict
PWR Indicator LED Left of the interface area Solid green after DC 12V is connected LED on indicates normal power supply
SYS Indicator LED Right of PWR Solid blue after system boot completes LED on indicates the system is running
Recover Pinhole right of the indicator LED Hold with power off + release 2 seconds after power-on RKDevTool detects the LOADER device
Return Right of Recover Press to go back one level; hold and power on for 3s to enter flashing mode UI returns / Enters Loader

Return Button Test (getevent)

adb shell getevent -l
# /dev/input/event2: EV_KEY       KEY_BACK         DOWN
# /dev/input/event2: EV_SYN       SYN_REPORT       00000000
# /dev/input/event2: EV_KEY       KEY_BACK         UP

Pressing Return produces DOWN; releasing it produces UP, indicating that the button and driver are normal.

Return Button: Enter Flashing Mode

Hold the Return button, power on and release after 3 seconds to enter flashing mode, without using the Recover pinhole.

Recover Quick Self-Test

Hold the Recover pinhole with power off, then power on; a LOADER device appearing in RKDevTool indicates normal operation (see 3.3 for flashing steps).

Note: Recover is a pinhole structure; use a needle with diameter ≤ 1.5mm to avoid damaging the internal tact switch.

4.10 Touch Screen Test

The unit has a multi-touch capacitive touch screen; the controller connects to the system via USB.

View Touch Device

adb shell getevent -pl /dev/input/event*
adb shell dumpsys input | grep -i -A2 "touch"

Line Drawing and Multi-Touch Detection

  1. In “Settings → Developer options → Pointer location”, swipe a finger to see the X / Y coordinates and trace
  2. Press and hold five fingers on the screen simultaneously and check whether multiple touch points are reported at the same time (multi-touch)
  3. Tap once on each of the four corners and the center to confirm there is no offset and no dead zone (touch calibration data is written at the factory, so recalibration is generally unnecessary)

Note: If touch does not respond, first confirm the touch USB cable is connected to the mainboard, then use adb shell lsusb to check whether the touch controller device exists.

4.11 GPIO Usage

The unit's GPIO is an optional breakout (rear GPIO socket / internal pin header). For the odd/even pin orientation of the 16-pin terminal, system GPIO numbers and terminal mapping, see 2.3; these details are not repeated in this section.

Android apps operate via the NodkaAPI gpio_ interface without shell (see 4.12.4):

NodkaAPI api = NodkaAPI.nodkaAPICreate(context);
api.gpio_export(95);                  // Export the pin
api.gpio_direction(95, "out");        // Set as output
api.gpio_write(95, 1);                // Output high level
int v = api.gpio_read(95);            // Read back the level
api.gpio_unExport(95);                // Unexport the pin

Note: GPIO numbers are global kernel gpiochip numbers and may shift as a whole across firmware versions; run gpio_export first on unexported pins before operating. For Linux command-line (/sys/class/gpio) operations see 5.4.

4.12 API Reference and Usage

For Android app development, hardware and system capabilities are wrapped as Java interfaces, so apps need not directly read/write /dev and /sys nodes. The Linux side does not provide this set of interfaces; use the command-line approach in Chapter 5.

Interface Source Package Download

AndroidAPI 1.5 Interface Source Package (18.7 MB)

The package contains AndroidAPI.jar, libandroid-jni.so, AndroidAPI-sources.jar, Javadoc documentation, the AndroidAPIDemo sample project and APK, the platform.jks signing file and readme.txt. Serial port, GPIO and system control interfaces require system signature or Root privileges.

4.12.1 Usage Instructions

Interface Categories

Prefix Category Description
devinfo_ Hardware and system information query System version, CPU, memory, storage, SN, etc.
display_ Display control Brightness, rotation, resolution, navigation bar and status bar
gpio_ GPIO control Export, direction, read/write level
uart_ Serial port control Open, send/receive, close serial port
sysctrl_ System control Scheduled power on/off, immediate reboot, silent install

1. Create the instance in Application's onCreate

public class APIApplication extends Application {
 
    private NodkaAPI mNodkaAPI;
 
    @Override
    public void onCreate() {
        super.onCreate();
        mNodkaAPI = NodkaAPI.nodkaAPICreate(this);
    }
 
    public NodkaAPI getNodkaAPI() {
        return mNodkaAPI;
    }
}

2. Retrieve it in an Activity or Fragment

private NodkaAPI mNodkaAPI = APIApplication.getApplication().getNodkaAPI();

Note: Set android:name to APIApplication in AndroidManifest.xml; serial port, GPIO and system control interfaces require system signature or Root privileges.

4.12.2 Hardware and System Information Query

Method Name Method Description
devinfo_getAndroidVersion() Get Android system version information
devinfo_getAvailMem() Get available memory capacity
devinfo_getBuildNumber() Get system build number information
devinfo_getCpuCores() Get CPU core count
devinfo_getCPUCurFreqKHz() Get current CPU frequency
devinfo_getCPUMaxFreqKHz() Get maximum CPU frequency
devinfo_getCPUMinFreqKHz() Get minimum CPU frequency
devinfo_getCPUTemp() Get CPU temperature
devinfo_getDeviceModel() Get device model information
devinfo_getKernelVersion() Get kernel version information
devinfo_getSerialNum() Get device SN
devinfo_getStorageAvailableSize() Get available local storage capacity
devinfo_getStorageTotalSize() Get local storage capacity (excluding system partition)
devinfo_getTotalMem() Get total memory capacity

4.12.3 Display Control (display_)

Method Name Method Description
display_getNavBar() Get whether the navigation bar and status bar are shown
display_getScreenBrightness() Get screen brightness
display_getScreenRotation() Get screen rotation direction
display_getWindowHeight() Get screen resolution height
display_getWindowWidth() Get screen resolution width
display_setNavBar(Boolean enable) Set whether to show the navigation bar and status bar
display_setNavBarSlideShow(Boolean enable) Set whether to show the navigation bar and status bar when sliding
display_setScreenBrightness(int screenBrightness) Set screen brightness
display_setScreenRotation(int rotation) Set screen rotation direction

4.12.4 GPIO Control (gpio_)

Method Name Method Description
gpio_direction(int gpioNumber, String direction) Set the direction of the specified GPIO (input / output)
gpio_export(int gpioNumber) Export the specified GPIO pin
gpio_read(int gpioNumber) Read the level of the specified GPIO
gpio_unExport(int gpioNumber) Unexport the specified GPIO pin
gpio_write(int gpioNumber, int value) Set the output level of the specified GPIO

See 4.11 for pin numbers.

4.12.5 Serial Port Control (uart_)

Method Name Method Description
uart_close(String uartNode) Close the uart device, e.g. /dev/ttyS2
uart_getAvailableDevices() Get available UART device nodes (returns a List<String>)
uart_IsOpen(String uartNode) Check whether the uart device is open
uart_open(String uartNode, int baudrate) Open the uart device and set the baud rate
uart_receive(String uartNode, UartReceiveDataCallback callback) Receive serial port data, returned via data callback
uart_send(String uartNode, byte[] buffer) Send serial port data
uart_stopReceive(String uartNode) Stop receiving data; no more callbacks after this call

See 4.5 for nodes and test methods.

4.12.6 System Control (sysctrl_)

Method Name Method Description
sysctrl_cancelReboot() Cancel device reboot
sysctrl_cancelShutdown() Cancel scheduled shutdown
sysctrl_powerOn(String time, boolean repeat) Set the device power-on time
sysctrl_reboot(String time, boolean repeat) Set the device reboot time
sysctrl_rebootNow() Reboot the device immediately
sysctrl_shutdown(String time, boolean repeat) Set the device shutdown time
sysctrl_shutdownNow() Shut down immediately
sysctrl_installApk(String apkPath) Silently install an application

4.13 OTA Update (Android)

OTA update on Android is performed by the preinstalled update app; the unit must be connected to the Internet first.

  1. Open the app list and find “update”
  2. Tap “UPDATE NOW” and follow the prompts to download and install
  3. Keep the power supply and network connected during the update; the unit reboots automatically when done

The update icon in the app list:

ota_app_drawer.jpg

SmartInc OTA update interface:

Note: This section covers Android online OTA update; for Android USB drive offline update, see 3.4; for Linux OTA update, see 5.10.

5 Linux System Usage

This chapter applies only to Linux systems (Ubuntu 20.04 / Debian 11, Buildroot for some projects). For the corresponding functions on Android, see Chapter 4.

Except for 5.11 Cross-compilation and 5.12.1 Docker Compilation, which run on the development host, all commands in this chapter are executed in the on-board terminal or via SSH. The criteria for buttons, indicator LEDs and the touch screen are the same as in Chapter 4 (see 4.9, 4.10) and are not repeated here. Sections from 5.8 onward are system customization items commonly used for factory projects.

5.1 Sound Card Usage

aplay -l                                    # List sound cards and devices
aplay /nodka_test/LR_audio.wav -D hw:0,0    # Play via the specified sound card device
arecord -d 5 -f cd -r 44100 -c 2 -t wav test.wav
aplay test.wav

Volume adjustment:

alsamixer
amixer -c 0 set 'Playback' 80%

Note: Unit playback outputs from the SPK terminal (PH2.0-4P); connect an external 8Ω speaker. MIC uses the Ø3.5 interface.

5.2 Network Usage

5.2.1 Ethernet

View network ports

ifconfig -a
ip link show

Set a static IP via command line

1. Open the network configuration file with vim: vim /etc/network/interfaces

2. Modify the IP, netmask and gateway according to the on-site network (the unit has a single network port; configure only eth0)

auto lo
iface lo inet loopback
 
auto eth0
iface eth0 inet static
	address 192.168.2.110
	netmask 255.255.255.0
	gateway 192.168.2.1

3. Save and exit (press Esc in vim, type :wq), then reboot the system for the configuration to take effect.

Note: On Ubuntu 20.04, NetworkManager manages the network by default, so the configuration in /etc/network/interfaces may not take effect; in this case use the nmcli method in 5.2.2, or disable NetworkManager first and then use the method in this section.

Set DNS

vi /etc/resolv.conf
nameserver 114.114.114.114

Network priority

# Temporary change; the smaller the value, the higher the priority
sudo ifmetric eth0 100
 
# Permanent modification
sudo nmcli connection modify "Wired connection name" connection.autoconnect-priority 1
sudo nmcli connection modify "Wired connection name" ipv4.route-metric 100
sudo nmcli connection modify "Wired connection name" connection.autoconnect yes
sudo systemctl restart NetworkManager

Verification

ping -c 4 192.168.2.1
ping -c 4 www.baidu.com

Note: In the graphical interface (Debian desktop), set the IP, netmask and gateway directly in “About NetworkManager Applet → Edit Connections…”; when no existing connection is available, click + in the bottom right to create one.

5.2.2 WiFi

Query and enable the wireless NIC

ifconfig -a          # Wireless NIC is usually wlan0
ifconfig wlan0 up    # Enable the wireless NIC
iw dev wlan0 scan    # Scan for hotspots to get SSID, signal strength, and encryption method

Connect to a wireless network

nmcli d wifi connect "SSID" password "PASSWORD"

Static IP

sudo nmcli connection modify NODKA ipv4.addresses 172.10.21.111/24                  # IP / subnet mask
sudo nmcli connection modify NODKA ipv4.gateway 172.10.21.1                         # Gateway
sudo nmcli connection modify NODKA ipv4.dns "114.114.114.114,61.177.7.1,8.8.8.8"    # DNS
sudo nmcli connection modify NODKA ipv4.method manual                               # Static
sudo nmcli device disconnect wlan0
sudo nmcli device connect wlan0

Dynamic IP (DHCP)

sudo nmcli connection modify NODKA ipv4.method auto
sudo nmcli connection modify NODKA ipv4.addresses ""    # Clear the static IP
sudo nmcli connection modify NODKA ipv4.gateway ""      # Clear the gateway
sudo nmcli connection modify NODKA ipv4.dns ""          # Clear DNS (optional)
sudo nmcli connection down NODKA
sudo nmcli connection up NODKA

Configure as an AP hotspot

IFNAME="wlan0"    # Wireless NIC node
CON_NAME="One"    # Hotspot name
 
nmcli con add type wifi ifname $IFNAME con-name $CON_NAME autoconnect yes ssid $CON_NAME
nmcli con modify $CON_NAME 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared
nmcli con up $CON_NAME

Note: If the signal is weak, adjust the angle of the rear Wi-Fi/BT antenna or use a suction-cup antenna instead; after connecting, use ip addr show wlan0 to view the assigned address.

5.3 Serial Port Usage (Linux)

On Linux, the serial port nodes are the same as on Android: RS485 is /dev/ttyS1 or /dev/ttyS3; RS232 is /dev/ttyS2 or /dev/ttyS4 (refer to the rear silkscreen label).

Test tools

  1. GUI: CuteCom (sudo apt install cutecom); select /dev/ttyS2, 115200, 8N1, then open
  2. Command line: built-in com_send / com_recv
# Send
com_send /dev/ttyS2 115200
# Receive (open another terminal)
com_recv /dev/ttyS2 115200

Read/write nodes directly

stty -F /dev/ttyS2 115200 cs8 -cstopb -parenb
echo "hello" > /dev/ttyS2     # Send
cat /dev/ttyS2                # Receive

Test method

For loopback, peer-to-peer and adapter wiring, see 4.5.2; these are OS-independent and are not repeated in this section.

Precautions

  1. The unit uses a 3.5mm 3P pluggable terminal (no DB9); use with crimp terminals or an adapter cable; reversing the wire order (A / B, R / T) will directly cause communication failure
  2. RS485 is half-duplex; direction is switched automatically by hardware, so observe the frame interval when switching between transmit and receive
  3. If permission is denied, add the current user to the dialout group: sudo usermod -aG dialout $USER (takes effect after re-login)

5.4 GPIO Usage (sysfs)

On Linux, access is unified through /sys/class/gpio. For terminal pin assignment rules and system GPIO numbers, see 2.3; this section only provides the operation commands.

1. Check whether the relevant IO is exported

cd /sys/class/gpio
ls

2. Configure GPO (system configuration)

for i in {95,94,21,22,140,141}; do echo out >gpio$i/direction; done
for i in {13,14,96,93,108,107}; do echo out >gpio$i/direction; done

3. Set GPO high / low

Output high level:

for i in {95,94,21,22,140,141}; do echo 1 >gpio$i/value; done
for i in {13,14,96,93,108,107}; do echo 1 >gpio$i/value; done

Read back the current level:

for i in {95,94,21,22,140,141}; do cat /sys/class/gpio/gpio$i/value; done

Output low level:

for i in {95,94,21,22,140,141}; do echo 0 >gpio$i/value; done
for i in {13,14,96,93,108,107}; do echo 0 >gpio$i/value; done

4. Configure GPI (system configuration)

for i in {13,14,96,93,108,107}; do echo in >gpio$i/direction; done

5. Get GPI value

for i in {13,14,96,93,108,107}; do cat /sys/class/gpio/gpio$i/value; done
for i in {95,94,21,22,140,141,13,14,96,93,108,107}; do cat /sys/class/gpio/gpio$i/direction; done

Note: GPIO numbers follow the kernel's global gpiochip numbering and may shift as a whole across firmware versions; if the corresponding node does not exist under /sys/class/gpio, first run echo NUMBER > /sys/class/gpio/export to export it, then proceed.

5.5 USB and SD Card Mounting

USB drive detection

dmesg | tail -20     # After insertion, kernel messages show the device name sda / sda1
lsblk                # List block devices and mount points

Mount and unmount

mkdir -p /mnt/USB1
mount /dev/sda1 /mnt/USB1
df -h
umount /mnt/USB1

SD Card

fdisk -l                        # SD card device name is usually /dev/mmcblk1p1
mount /dev/mmcblk1p1 /mnt/sdcard
umount /mnt/sdcard

Note: ext4 / vfat can be mounted directly; NTFS requires ntfs-3g, exFAT requires exfat-fuse. See 4.6 for how to view the drives on Android.

5.6 Resolution and HDMI

The internal screen resolution is fixed by the model (see 1.3 Model and Configuration); HDMI external output can be adjusted with xrandr.

X11 desktop

xrandr                                             # List outputs and available modes
xrandr --output HDMI-1 --mode 1920x1080 --rate 60
xrandr -o left        # Rotate left 90°
xrandr -o right       # Rotate right 90°
xrandr -o inverted    # Flip 180°
xrandr -o normal      # Restore

Temporarily add a custom resolution

cvt 800 750
# 800x750 59.86 Hz (CVT) ... Modeline "800x750_60.00" 48.50 800 840 920 1040 750 753 763 779 -hsync +vsync
xrandr --newmode "800x750_60.00" 48.50 800 840 920 1040 750 753 763 779 -hsync +vsync
xrandr --addmode HDMI-1 800x750_60.00
xrandr --output HDMI-1 --mode 800x750_60.00

Wayland / Weston (when using a Wayland session)

Ubuntu 20.04 uses Xorg by default, so the xrandr method applies; if you switch to a Wayland session, xrandr is not supported under Wayland — edit /etc/xdg/weston/weston.ini:

[output]
name=HDMI-A-1
mode=1920x1080

Reboot the system or restart the weston service for the changes to take effect.

Dual display mode

For the definitions of the clone (mirror) and extended modes, see 4.8. On Linux, use the desktop display settings or xrandr to control the on/off and position of the two outputs.

5.7 Remote Access and File Transfer

sudo apt update && sudo apt install -y openssh-server
sudo systemctl enable --now ssh
ip addr show

Transfer from a PC:

scp ./update.img root@192.168.8.55:/home/root/

Graphical tools: WinSCP / FileZilla, protocol SFTP, port 22.

5.8 Auto-run Programs at Boot

There are three methods, grouped by startup timing; choose as needed, and the methods can be combined: before login → at login → after entering the graphical interface. Place the same program in only one of them.

5.8.1 Execute Before Login

Suitable for background services that do not depend on the desktop and must run at boot.

  1. Edit the /etc/rc.local file
  2. Add the program call before exit 0
  3. Save and exit (press Esc, type :wq and press Enter)
sudo vim /etc/rc.local
 
# Add before exit 0
/path/to/myprogram &
exit 0

Note: /path/to/myprogram is the full program path; the trailing & runs the program in the background; otherwise, it blocks the subsequent login process. The last line of the file must be exit 0 for the script to be executed.

Note: Ubuntu 20.04 does not enable /etc/rc.local by default; make sure rc-local.service is enabled. For systemd-only setups, use a custom service or the startup script in 5.8.3 instead.

5.8.2 Execute After Login

It applies only to the current user and runs once the user has logged in.

  1. Edit the user profile file ~/.profile
  2. Append the startup command at the end of the file
  3. Save and exit
  4. Run source ~/.profile to apply the changes immediately
vim ~/.profile
 
# Append at the end of the file
/path/to/myprogram &
 
source ~/.profile

Note: ~/.profile applies only to the current user; to apply to all users, use /etc/profile instead.

5.8.3 Execute After Entering the Graphical Interface

Use this for applications that need to display a UI only after the desktop is up (e.g. a full-screen main program).

Debian (LXDE)

  1. Edit the autostart file
  2. Append the startup command at the end
  3. Save and exit; reboot or re-login for the changes to take effect
vim /root/.config/lxsession/LXDE/autostart
 
# Append at the end
/path/to/myprogram > /dev/null 2>&1 &

Ubuntu

On Ubuntu, this is handled uniformly by a startup script; write the command into /nodka_test/autorun.sh (this script runs automatically after the desktop starts).

sudo vim /nodka_test/autorun.sh
 
# Append at the end
/path/to/myprogram > /dev/null 2>&1 &

Note: > /dev/null 2>&1 discards program output to avoid filling the partition with logs; & ensures background execution.

5.9 UI and Display Customization

5.9.1 Status Bar Customization

The LXDE panel (taskbar / menu bar) configuration is stored in:

$HOME/.config/lxpanel/LXDE/panels/panel

Open it with a text editor to add/remove plugins and adjust position and size; after editing, run lxpanelctl restart or log in again for the changes to take effect.

5.9.2 Disable the Desktop Environment

Default contents of the desktop autostart file /root/.config/lxsession/LXDE/autostart:

@lxpanel --profile LXDE
@pcmanfm --desktop --profile LXDE
@xscreensaver -no-splash
pulseaudio -D
/nodka_test/autorun.sh
Line Function
@lxpanel –profile LXDE Start the LXDE panel (taskbar and menu)
@pcmanfm –desktop –profile LXDE Let PCManFM manage the desktop, handling wallpaper and icons
@xscreensaver -no-splash Screen saver
pulseaudio -D Start the audio service
/nodka_test/autorun.sh Autostart script executed after the desktop is up

To disable the desktop and show only the application UI, simply comment out the first three lines:

#@lxpanel --profile LXDE
#@pcmanfm --desktop --profile LXDE
#@xscreensaver -no-splash
pulseaudio -D
/nodka_test/autorun.sh

Note: After commenting out the panel and PCManFM, the desktop has no taskbar and no wallpaper icons, showing only the autostart program window; this is suitable for units shipped with a full-screen application.

The boot LOGO is stored in the resource partition. Execute steps ① ~ ⑥ in order in the Linux terminal on the unit (root privileges required): for steps requiring commands, the description corresponds to the code block immediately following; see the table below for the file location in step ④.

① Prepare the BMP image

Prepare a BMP image and set its size to the screen resolution (e.g. HDMI 1920×1080).

② Copy the bmpconvert tool and grant execute permission

Download the bmpconvert conversion tool (2.3 KB, unzip to get the script). Then unzip the tool and copy it to /usr/bin:

sudo cp bmpconvert /usr/bin/
sudo chmod +x /usr/bin/bmpconvert

③ Mount the resource partition

sudo mount /dev/block/by-name/resource /mnt

④ Place the boot LOGO file

Place the BMP image into /mnt with the file name corresponding to the screen type:

Screen Type File Location
HDMI / eDP / LVDS /mnt/logo.bmp, /mnt/logo_kernel.bmp
MIPI /mnt/logo_mipi.bmp, /mnt/logo_kernel_mipi.bmp

⑤ Convert Images with bmpconvert

For HDMI / eDP / LVDS screens, run:

sudo bmpconvert /mnt/logo.bmp
sudo bmpconvert /mnt/logo_kernel.bmp

For MIPI screens, use the corresponding file name instead:

sudo bmpconvert /mnt/logo_mipi.bmp
sudo bmpconvert /mnt/logo_kernel_mipi.bmp

Error handling: If step ⑤ produces the following output, the system only has python3 and lacks the python command:

root@rk3568: bmpconvert /mnt/logo.bmp
/usr/bin/env: 'python': No such file or directory
root@rk3568: bmpconvert /mnt/logo_kernel.bmp
/usr/bin/env: 'python': No such file or directory

Create the python symlink first, then rerun the two commands in step ⑤:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1
sudo bmpconvert /mnt/logo.bmp
sudo bmpconvert /mnt/logo_kernel.bmp

⑥ Reboot the system

sudo reboot

Note: logo.bmp is displayed during the U-Boot stage and logo_kernel.bmp during the kernel boot stage; replace both. Back up the original files under /mnt before making changes.

5.9.4 Switching Between Different LCD Displays

HDMI: Supported by default; default output 1920×1080, no configuration needed.

eDP / LVDS: The display parameters must match the panel. Run dis in the terminal to open the display settings interface, select the matching parameters and click Save; reboot to apply.

dis

Display Settings interface: Select parameters matching the panel and click Save.

5.9.5 Screen Rotation

Debian: Modify the Xorg Configuration

  1. First use xrandr to check the screen node name (e.g. eDP-1, HDMI-1)
  2. Edit /etc/X11/xorg.conf.d/20-modesetting.conf
  3. Change the Option “Rotate” value and reboot
Section "Monitor"
    Identifier "eDP-1"              # Screen node name, query with xrandr
    Option "Rotate" "inverted"      # Rotation direction, see the table below
EndSection
Value Rotation Angle
normal 0° (default)
right 90° clockwise
inverted 180° clockwise
left 270° clockwise

Ubuntu: Use xrandr

xrandr --output HDMI-1 --rotate left       # Rotate left 90°
xrandr --output HDMI-1 --rotate right      # Rotate right 90°
xrandr --output HDMI-1 --rotate inverted   # Rotate 180°
xrandr --output HDMI-1 --rotate normal     # Restore default

Note: Add the rotation command to the end of /nodka_test/autorun.sh to apply it automatically at boot.

Touch Rotation

After screen rotation, touch coordinates will be misaligned; modify CalibrationMatrix in /usr/share/X11/xorg.conf.d/40-libinput.conf accordingly:

Section "InputClass"
    Identifier "libinput touchscreen catchall"
    Option "CalibrationMatrix" "-1 0 1 0 -1 1 0 0 1"
    MatchIsTouchscreen "on"
    MatchDevicePath "/dev/input/event*"
    Driver "libinput"
EndSection
Screen Orientation CalibrationMatrix
0° (default) 1 0 0 0 1 0 0 0 1
90° (clockwise) 0 1 0 -1 0 1 0 0 1
180° (upside down) -1 0 1 0 -1 1 0 0 1
270° (90° counterclockwise) 0 -1 1 1 0 0 0 0 1

5.10 OTA Firmware Update

5.10.1 OTA over Network

The upgrade is performed by the on-board /usr/bin/ota script. Edit the script as needed, set the FTP address and account, place the corresponding firmware at the FTP download location, then run ota. The files to modify and the corresponding code are as follows.

① Edit the upgrade script /usr/bin/ota

sudo vim /usr/bin/ota

② Set the following three items in the script

URL=ftp://<firmware server address>
USERNAME=<username>
PASSWORD=<password>

③ Save and run the upgrade

ota

Follow the prompts to complete the upgrade.

Note: The server address, account and firmware directory are provided by us; do not power off during the upgrade; the device reboots automatically when complete.

5.10.2 OTA Update via USB Drive

Under Linux, the on-board /usr/bin/ota script performs the OTA update, with the USB drive as temporary firmware storage. Follow steps ① ~ ⑤ in order: for steps requiring commands, the description corresponds one-to-one with the code block immediately following it; ③④ are condition checks and require no commands.

① Unmount the USB drive

sudo umount /dev/sdb

② Format the USB drive as ext4

sudo mkfs.ext4 /dev/sdb

③ Confirm the system supports OTA update

The board must already have the /usr/bin/ota script (see 5.10.1 for script configuration).

④ Confirm USB drive specifications

The USB drive must be formatted as Linux ext4 with more than 8G of free space; otherwise the upgrade package cannot be written.

⑤ Plug in the network cable and USB drive, then run the upgrade

ota

Follow the prompts to complete the upgrade; do not power off during the process; the device reboots automatically when complete.

Note: /dev/sdb is a common device node for USB drives; the actual node depends on the lsblk output. This section describes the Linux OTA update (ext4, ≥8G, ota command); it is a separate process from the Android USB drive upgrade in 3.4 (FAT32, update.img) and the Android OTA update in 4.13; do not mix them.

5.11 Cross-Compilation Environment

5.11.1 Install the Cross-Compilation Environment via apt

On a Debian / Ubuntu host, a single command installs the aarch64 cross toolchain; then confirm the version with -v:

sudo apt install -y crossbuild-essential-arm64
aarch64-linux-gnu-gcc -v

5.11.2 Download a Specific Toolchain Version

For a specific version, download the corresponding toolchain from ARM (developer.arm.com/downloads/-/gnu-a), extract it, then add the bin directory to PATH:

export PATH=$PATH:/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/
aarch64-none-linux-gnu-gcc --version

Note: Write it to ~/.bashrc or /etc/profile to make it permanent; replace the path with the actual extraction directory.

5.11.3 Toolchain Downloads

Common cross-compilation toolchains and how to obtain them:

  • aarch64-linux-gnu-gcc cross toolchain: Provided in the SDK prebuilts directory
  • arm-linux-gnueabihf cross toolchain: For compiling 32-bit user-space programs
  • x86 host arm64 cross-compilation toolchain: Released by ARM, for compiling aarch64 (arm64) programs on an x86_64 host

Download: gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz — Baidu Netdisk, extraction code hkku

Note: This toolchain requires no installation; extract it and add the bin directory inside the archive to PATH; call aarch64-none-linux-gnu-gcc when compiling.

5.12 Qt Application Development

Preinstalled environments: Debian 11 → Qt 5.15.2, Ubuntu 20.04 → Qt 5.12.8. Choose between the two methods as applicable.

5.12.1 Import a Docker Image for Compilation

Use a ready-made build image; the host does not need Qt installed, isolation is good, and it suits batch compilation.

  1. Import the image
  2. Start the container and mount the application directory to /mnt (replace source with the actual path)
  3. Inside the container, enter /mnt and run qmake and make
sudo docker load < nodka_docker_qt_build_20230223.tar
 
sudo docker run --rm --mount type=bind,source=/home/APP_PATH,target=/mnt/ -i -t 09a37c1b2fc3 /bin/bash
 
cd /mnt
qmake
make

Note: The image is large and is provided separately by us; the container ID (09a37c1b2fc3) is taken from the actual docker images output.

5.12.2 Set Up the Qt Build Environment on the Board

1. Install Qt Creator

sudo apt-get install qtcreator
sudo apt-get install qt5-default

If qt5-default has been removed from the official repository, use the following set of dependencies instead:

sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qtcreator

2. Add qmake

Qt Creator → Tools → Options → Kits → Qt Versions → Add, select the on-board qmake:

/usr/local/qt5.12-arm/bin/qmake

Add the on-board qmake path in Qt Versions.

3. Configure the Cross-Compiler

In the same window, switch to Compilers → Add → GCC and add g++ and gcc respectively:

g++: /usr/bin/aarch64-linux-gnu-g++
gcc: /usr/bin/aarch64-linux-gnu-gcc

g++ compiler location:

gcc compiler location:

Add the cross-compiler; when the host has crossbuild-essential-arm64 installed, the compiler is under /usr/bin; with a third-party toolchain, enter its installation path.

4. Configure the Debugger (optional, for online debugging)

sudo apt install -y gdb-multiarch

The board must have /usr/bin/gdbserver; if not, install gdbserver (included in Buildroot, no installation needed). Add /usr/bin/gdb-multiarch in Debuggers in Qt Creator.

5. Configure Devices

Enter the board IP and username root; set a static IP for the board to avoid disconnections during debugging.

6. Configure Kits

Combine the Qt version, compiler, debugger and device above into one Kit. When the target system is Ubuntu, also fill in the sysroot path in the Kit.

In Kits, combine the Qt version, compiler, debugger and device.

5.13 Video Hardware Codec Support

The on-board VPU supports H.264 / H.265 hardware encoding and decoding; the system ships with GStreamer plugins and OpenGL ES / OpenCL runtime libraries.

GStreamer Encoding/Decoding

The system includes test scripts; run them directly to verify hardware decoding and encoding:

/rockchip-test/video/test_dec-gst.sh    # Hardware decode test
/rockchip-test/video/test_enc-gst.sh    # Hardware encode test

OpenGL ES

Use glmark2 to benchmark and verify the GPU:

glmark2-es2

WebGL

Open Chromium, enter the following address in the address bar, and check WebGL and hardware acceleration status:

chrome://gpu

OpenCL

clinfo

clinfo output: confirm platform, device and OpenCL version information.

6 General Methods

This chapter covers query commands, which are basically the same under Android (adb shell) and in the Linux terminal; differences are noted in individual entries where applicable.

6.1 Check CPU Temperature

cat /sys/class/thermal/thermal_zone0/temp
# Output is in millidegrees Celsius; 45200 means 45.2℃

6.2 Check the CPU Serial Number

cat /proc/device-tree/serial-number
# On Android
getprop ro.serialno

6.3 Check CPU Frequency

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

6.4 Check Memory Capacity

free -h
cat /proc/meminfo | head -3

6.5 Check Storage Capacity

df -h
lsblk

6.6 Network Ping Test

ping -c 4 192.168.8.1
ping -c 4 www.baidu.com
ping -c 1 -W 1 8.8.8.8

6.7 Set System Time and Save to the RTC Chip

# Check the system time
date
# Set the system time and write it to the RTC chip
sudo date -s "2025-04-08 17:01:01"
sudo hwclock -w
sudo hwclock -r

Verification: Power off and disconnect power for more than 5 seconds, then power on and use date to check whether the time is retained.

Note: Network time synchronization is enabled by default; perform the RTC test with the external network disconnected.

Time Zone Settings

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
reboot

In the GUI, select the time zone under “Preferences → Time and Date”; to set another time zone, replace Asia/Shanghai in the command with the corresponding city.

7 Appendix

7.1 FAQ Troubleshooting

Symptom Possible Cause Solution
The flashing tool keeps showing “No device found” Not in Loader mode / USB driver error / cable issue Follow step ④ in 3.3 to re-enter Loader mode; uninstall and reinstall the driver; change the USB port and data cable
Unknown device appears in Device Manager Rockchip USB driver not installed properly See 3.2; reinstall DriverInstall
ADB cannot connect USB debugging not enabled / wrong USB port See 4.1; confirm connection to the blue USB3.0/OTG lower port
The serial port cannot be opened or returns no data Wrong node / no permission / A-B or R-T reversed See 4.5, 5.3; check the node and wiring against the silkscreen label
GPIO read/write no response Not exported / numbering offset varies with firmware See 2.3, 5.4; export first, then operate
Touch not responding or coordinates misaligned Loose touch USB cable / CalibrationMatrix not updated after rotation See 4.10, 5.9.5
After screen rotation the UI is normal but touch is reversed libinput calibration matrix not updated See the touch rotation table in 5.9.5
Boot LOGO not applied Only one of the images replaced / bmpconvert not run See 5.9.3; replace and convert both logo images
Static IP configuration not effective NetworkManager and ifupdown coexist See the note in 5.2.1
No prompt during USB drive upgrade File name is not update.img / format is not FAT32 See 3.4.1; rename and reformat as FAT32

7.2 Document Information and Revision History

Item Content
Applicable Products sTPC-E101 / E121 / E150 / E156 / E170 / E215-3568B
Main Control Platform Rockchip RK3568 (4 × Cortex-A55 @2.0GHz, 1 TOPS NPU)
Applicable Systems Android 11, Ubuntu 20.04 (Debian 11 per project configuration)
Document Version v1.4
Update Date 2026-11-11
Version Date Revision Details
v1.4 2026-11-11 Aligned wording throughout: unified serial port count and silkscreen labels, power supply range, system range and interface/port count conventions; removed duplicates in GPIO and OTA; added SD card / GPIO / codec specifications; added 4.13 and the Chapter 7 appendix

For previous versions, contact Technical Support.

7.3 Technical Support

  • Firmware, flashing tools, SDK and specifications: contact Sales or Technical Support
  • When reporting an issue, provide: unit SN (see 6.2 for how to view it), system version, reproduction steps and screenshots
  • If an exception occurs after modifying the system yourself, reflash the factory firmware first (see 3.3) before deciding whether it is a hardware issue

打印/导出