NK-6A12

RK3568芯片架构

RK3568

主板框架图

框架图

接口概览

接口概览1 接口概览2

接口定义

插针pin定义

RS485&232 J_LED-IR1 J_GPIO1 SPK1 UART1
1 RS485_A1 1 VCC3_IR 1 GPIO1 1 L_SPK+ 1 UART0_RX_CON
2 RS485_B1 2 IR 2 GPIO3 2 L_SPK- 2 UART0_TX_CON
3 RS485_A2 3 GND 3 GPIO2 3 R_SPK+ 3 VCC3_TTL
4 RS485_B2 4 AD 4 GPIO4 4 R_SPK- 4 GND
5 UART_RX3_232 5 LEDB 5 SPI2_MOSI_CN J_KEY1 J_RS232
6 UART_TX3_232 6 P_LED 6 SPI2_MISO_CN 1 GND 1 UART_RX5_232
7 UART_RX4_232 I2C-TP 7 SPI2_CLK_CN 2 P3V3 2 UART_TX5_232
8 UART_TX4_232 1 GND 8 SPI2_CS_CN 3 POWER_ON_BT 3 VCC5_232
9 GND 2 I2C1_SDA_TP_C 9 VCC5_GPIO 4 Reset 4 GND
10 GND 3 I2C1_SCL_TP_C 10 VCC5_GPIO 5 RECOVER_BUTTON PUSB
debug 4 TP_RST_C 11 GND HOST1 1 USB_VCC5
1 NC 5 TP_INT_C 12 GND 1 HOST1_VCC5 2 USB_D2N
2 UART2_TX_ 6 TP_VDD 2 HOST1_D1N_CON 3 USB_D2P
3 UART2_RX 3 HOST1_D1P_CON 4 GND
4 GND 4 GND

Jump_sel

eDP/LVDS VDD_JU BLK_JU
1 3 eDP 1 2 3.3V 1 2 5V
2 4 3 4 5V 2 3 12V
3 5 LVDS 5 6 12V 5G_PWR
4 6 1 2 5G

硬件特性

CPU Rockchip RK3568 ARM Quad Cortex-A55 up to 2.0GHz (HKMG 22 nm)
GPU Mali-G52 support OpenGL ES 1.1/2.0/3.2, Vulkan 1.0/1.1, OpenCL 2.0
NPU Up to 1.0 Tops.Supports INT8/INT16 hybrid operation
Memory Onboard 2/4/8GB LPDDR4
eMMC Onboard 16/32/64GB eMMC
TF Socket 1 x TF card Socket,Support 128G TF card
Display 1 x HDMI 2.0,up to 4096×2304@60fps;1 x LVDS;1 x eDP,up to 2560×1600@60Hz;1 x Mipi-DSI,up to 1920×1080@60Hz
Ethernet 1 x GbE (10/100/1000 Mbps);1 x Onboard AW-NM372 IC,Support 2.4G WiFi,support WiFi 802.11b/g/n protocol,Support BT5.0(2.4G/5G option)
Mini-PCIe 1 x MINI-PCIE with USB 3.0 signal for LTE/5G Modules,1 x SIM card socket
USB 1 x USB3.0, OTG Colay,2 x USB2.0,3 x USB2.0 pin header
Serial Port 2 x RS485, 3 x RS232, 1 x TTL
O.S Support Android 7.1.2,Android 11,Android 13,Debian 10
Power 12~24V power input
Operating -20℃ ~ 60℃
Storage -30℃ ~ 80℃
Humidity 5~95% (Non-condensing)
Vibration 5~500Hz,3Grms operating

快速上手

系统烧录

1.下载并安装USB驱动DriverAssitant_v5.0(Windows 系统可能会自动安装),解压后点击DriverInstall.exe安装驱动;再安装烧录工具RKDevTool

driver

rkdevtool

2.开始烧录:

  A.将双公头USB数据线一端与主板OTG连接,另一端连接电脑,长按Recovery_key按键,再上电后2-3s松开,进入烧录模式
  B.打开RKDevTool烧录工具,下方提示:发现一个LOADER设备,提示进入LOADER烧录模式,再选择固件:开发工具 » 升级固件 » 点击固件并选择好固件 » 点升级,开始烧录

loader

  C.烧录过程会显示进度

rkdevtool

3.完成烧录:

  • 烧录过程不需要任何操作,烧录完成后右侧会显示设备自动重启,第一次开机过程会慢些,请不要断开电源,耐心等待进入系统

rkdevtool

  • 注意:更换系统平台(例如Android切换Linux)时,可能出现无法烧录的情况,此时打开开发工具 » 高级功能 » 点击进入Maskrom烧录模式后烧录系统,如下图

maskrom

SD卡烧录

  • 下载需要升级到主板上的升级固件
  • 将MicroSD插入USB读卡器,再插入到电脑USB口上
打开SD_Firmware_Tool,勾选“固件升级”框,选择正确的可移动磁盘设备和升级固件;
点击开始创建之后,等待创建结束;
取出MicroSD卡,插入主板的MicroSD卡插槽,对主板上电开机,主板自动开始升级;
升级完成后,取出MicroSD卡,主板自动重启,完成整个更新固件的流程。

如下图:
sdtool

本地登录

1、硬件连接:将USB键盘和USB鼠标连接NK-6A12的USB接口。

2、开启NK-6A12:连接显示器和电源适配器(在首次开机时,请耐心等待片刻,直到桌面加载完成。在此期间,请不要拔掉电源)

3、打开终端:

  • Linux:Terminal
  • Android:终端模拟器APP

Debug串口登录

1、通过Debug串口登录系统,需要要到串口小板工具,连接开发板的Debug接口(交叉连接),连接如图:

Debug

2、打开设备管理器,查看串口小板对应的 COM 口并记录下来

3、Windows 上一般用 putty 或 Xshell。以 Xshell 为例介绍如何使用串口调试功能,打开Xshell新建一个会话,在 连接 » 常规 » 协议为SERIAL,如图:

4、连接 » 串口 » 常规 » 端口号,输入设备管理器上对应的串口号,设置串口的波特率为1500000(1.5Mbps)

5、按以上步骤操作后,点击连接,串口登录后台

xshell

Android ADB 登录

  • 在RK的Android 11系统中:设置 》 USB OTG切换(开:OTG模式,关:HOST模式)打开OTG模式,使用双公头USB数据线连接开发板OTG接口和电脑端
  • 下载ADB驱动以及工具
  • 安装ADB驱动以及工具
    • 将驱动解压得到可执行文件,打开软件,点击[install]即可

adb

  • 将工具解压至任意盘符,打开命令提示符(win + r 键输入cmd),依次进入到该目录下,输入adb devices查看是否发现设备

adb

  • 再输入adb shell进入

adb

Linux SSH 远程登录

1. 开发板LAN口连接好网线,进入系统桌面打开LXTerminal,输入命令:ifconfig 查看IP地址

ip

2. 在PC端打开SSH连接工具,如putty等,在此以Xshell为例:

  • 如图所示,连接 » 常规 » 主机 输入开发板的IP地址,端口号22

ssh

3. 连接 » 用户身份验证

用户名:root
密码: 123456

ssh

4. 点击连接,提示ssh密钥认证,输入yes后登录系统

ssh


Android 使用指南

接口功能测试

1 USB

1.1 硬件支持:2*USB2.0(USB-A),1*USB3.0(USB-A),3*USB2.0(PH2.0-4P)

1.2 连接键盘和鼠标,U盘,USB摄像头等外设

1.3 切换USB3.0模式:系统设置–>USB OTG开关–>切换USB3.0接口的HOST模式和OTG模式(默认HOST模式)

2 LCD

2.1 HDMI

系统默认支持HDMI显示,自适应屏幕分辨率,设置屏幕分辨率:设置 » 显示 » 高级 » HDMI » 分辨率设置

2.2 eDP

a) 如图,开发板断电状态下接好eDP屏数据线和背光线,支持USB触控屏线,注意跳线帽短接位置 ,背光电压和数据线电压是根据屏参确定的,这里以12V背光和3.3V数据线为例

eDP

b) 默认 eDP屏分辨率:1920 * 1080,支持eDP + HDMI 复制双显,支持12.5“1366 * 768, 12.5”1920 * 1080, 13.3“1920 * 1080, 15.6”1920 * 1080

注意:如果上电后屏幕不亮,需要在HDMI上调整 eDP 屏幕对应的分辨率

c) 设置屏幕分辨率:设置 » 显示 » 分辨率 » 输入密码,进入屏参切换界面,选择eDP + HDMI 复制双显,右侧选择使用的 eDP 屏幕对应的分辨率,点击确定,等待系统自动重启生效

2.3 LVDS

a) 如图,开发板断电状态下接好 LVDS屏数据线和背光线,支持USB触控屏线,注意跳线帽短接位置 ,背光电压和数据线电压是根据屏参确定的,这里以12V背光和3.3V数据线为例

LVDS

b) 默认 LVDS屏分辨率:1920 * 1080,支持LVDS + HDMI 复制双显,支持12.5“1366 * 768, 12.5”1920 * 1080, 13.3“1920 * 1080, 15.6”1920 * 1080

注意:如果上电后屏幕不亮,需要在HDMI上调整LVDS屏幕对应的分辨率

c) 设置屏幕分辨率:设置 » 显示 » 分辨率 » 输入密码,进入屏参切换界面,选择LVDS + HDMI 复制双显,右侧选择使用的 LVDS屏幕对应的分辨率,点击确定,等待系统自动重启生效

2.4 MiPi

a) 如图,开发板断电状态下接好MiPi屏线

mipi

b) 默认 MiPi屏分辨率:800 * 1280,支持 10.1“800 * 1280

c) 设置屏幕分辨率:设置 » 显示 » 分辨率 » 输入密码,进入屏参切换界面,选择MIPI + HDMI 复制双显,右侧选择10.1 mipi 800×1280,点击确定,等待系统自动重启生效

  • 以上eDP,LVDS,MiPi屏可在 设置 » 显示 » 亮度,调节屏幕亮度。
3 Audio

连接扬声器后,可播放音视频,测试左右声道

4 Mic

接好麦克风和一对喇叭后,使用系统内置的录音机APP,录音和播放测试

5 SDCARD

5.1 插入TF卡至设备TF卡卡槽

5.2 上滑至应用页面 » 文件 » 查看外接TF卡信息

5.3 在系统下拷贝文件至TF卡,进行读写测试

5.4 上滑至应用页面 » 文件 » TF卡挂载名称 » 点击旁边的弹出图标,弹出TF卡

6 LAN

6.1 RJ45接口连接网线

6.2 查看以太网IP地址:

方式一:设置 » 网络和互联网 » 有线网络
方式二:打开终端模拟器,输入su 获取权限,再输入ifconfig查看eth0

6.3 设置以太网静态IP地址:设置 » 网络和互联网 » 有线网络:上网模式 » 选择静态IP,输入静态IP数据,点击连接

6.4 联网

方式一:终端模拟器输入命令:

ping www.baidu.com

方式二:打开浏览器联网测试

lan

7 WIFI

7.1 连接好WIFI天线,设置 » 网络和互联网 » WLAN

7.2 打开WiFi开关

7.3 输入密码,连接WiFi

7.4 连接成功

7.5 联网

方式一:终端模拟器输入命令:

ping www.baidu.com

方式二:打开浏览器联网测试

lan

8 Bluetooth

8.1 设置 » 已连接的设备 » 连接偏好设置 » 打开蓝牙

8.2 开启蓝牙

8.3 选择与新设备配对,选择要配对的蓝牙设备名,点击配对即可

9 MiniPCIE:4G/5G

9.1 4G

a) 支持4G模组型号:EC20,ME3630-W,L716-CN

b) 固定好4G模组与天线,插入SIM卡,再上电

c) 进入系统后,等待自动拨号完成,状态栏显示4G图标,如下图:

9.2 5G

a) 支持5G模组型号:FG650-CN

b) 5G模组需要加跳线帽

c) 固定好5G模组与天线(至少接入4根5G天线),插入5G_SIM卡,再上电

d) 进入系统后,等待自动拨号完成,状态栏显示5G图标(需网络环境支持),如下图:

9.3 4G/5G联网

拨号成功后,查看IP地址

ip

方式一:终端模拟器输入命令:

ping www.baidu.com

方式二:打开浏览器联网测试

lan

10 UART

1. 串口定义参考:

2. 安卓系统串口设备节点对应表:

主板丝印 设备节点
UART0_TTL /dev/ttyS0
RS232_Rx5/Tx5 /dev/ttyS1
RS232_Rx3/Tx3 /dev/ttyS2
RS232_Rx4/Tx4 /dev/ttyS3
RS485_A1/B1 /dev/ttyS4
RS485_A2/B2 /dev/ttyS5

3. ComAssistant 测试串口通讯,以232_Rx5\Tx5回环测试为例

  • 参考步骤1~2短接232_Rx5\Tx5的 Tx & Rx (1-2 pin)
  • 打开ComAssistant APP,设置好串口参数:
  波特率:9600
  数据位:8bit
  起始位:1bit
  校验位:none
  • 设置好串口参数后,打开串口,在数据发送区输入框中输入字符,点击发送,可以发送数据。如下图所示:

232

4. RS485测试通讯,不支持回环测试,测试方式:

  • 通过USB转RS485工具,与上位机(Windows端)互测
  • 通过RS485转RS232工具,与RS232互测
  • 两个RS485对发测试
11 GPIO/SPI

1.导出节点(编号为56、57、58、59)

先获取权限:su
再输入导出命令:echo 56 >/sys/class/gpio/export
也可以使用for循环一次性导出所有IO节点:
  $:cd /sys/class/gpio
  $:for i in {56,57,58,59}; do echo $i >export; done

2. IO 控制节点在目录:/sys/class/gpio/

gpio

3. IO 对应表如下:

功能 主板丝印 节点编号
输入\输出 J_GPIO1 gpio56
J_GPIO2 gpio57
J_GPIO3 gpio58
J_GPIO4 gpio59
  • 设置IO方向为输出:
echo out >/sys/class/gpio/gpio56/direction
  • 输出低电平:
echo 0 >/sys/class/gpio/gpio56/value
  • 输出高电平:
echo 1 >/sys/class/gpio/gpio56/value
  • 查看输出电平的值是否可控:
cat /sys/class/gpio/gpio56/value
  • 使用电压表测量IO对应的针脚对GND的电压值
0 对应高电平 1.8V
1 对应低电平 0V
12 WatchDog
  • 打开“定时开关机”APP
  • 点击停止喂狗按钮
  • 60秒内系统重启

timer

13 Key
  • 3pin-GND:power_on功能:poweroff状态下启动系统
  • 4pin-GND:Reset功能:重启
  • 5pin-GND:Recovery_key:Android-返回键;Linux-无
14 OTA update

支持在线升级,系统内置升级APP,打开可查看是否有最新系统版本

15 RTC
  • 在终端输入date查看系统时间(软件时间)
  • 输入hwclock 查看RTC时间(硬件时间)
  • 设置时间和时间格式:
date MMddHHmmyyyy.ss set(月日时分年.秒)
例如:date 052514192023.00 set
  • 输入“hwclock -w”,保存时间。重启系统后,再查看当前时间是否保存,用于验证RTC时间是否生效
hwclock -w  --从系统时间同步到硬件时钟
hwclock -s  --从硬件时钟同步到系统时间

系统基本功能设置

Android 基本命令

  • 查看CPU信息
cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq  //查看cpu频率
cat /sys/class/thermal/thermal_zone0/temp //查看CPU当前温度
  • 查看内存信息
free -h
  • 查看存储信息
df -h
  • 查看USB设备
lsusb

系统性能测试

1. BurnInTest: CPU/MEMERY/EMMC
2. PowerCycle:HW Auto,Power on/off
3. RTC
4. I/O BurninTest: COM,LAN,WIFI

Android API 使用说明

NodkaAPI入口类

NodkaAPI使用方法:

1、在Application的onCreate中创建NodkaAPI实例

mNodkaAPI = NodkaAPI.nodkaAPICreate(this);

2、在Activity或Fragment中使用API步驟:

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

NodkaAPI接口说明:

1、以devinfo开头的是硬件及系统信息查询类api

2、以display开头的是显示控制类api

3、以gpio开头的是GPIO控制类api

4、以uart开头的是串口控制类api

5、以sysctrl开头的是系统控制类api,包括定时开关机

接口类别 方法名 方法说明
硬件及系统信息查询类 devinfo_getAndroidVersion() 获取Android系统版本信息
devinfo_getAvailMem() 获取可用内存容量
devinfo_getBuildNumber() 获取系统版本号信息
devinfo_getCpuCores() 获取cpu核心数
devinfo_getCPUCurFreqKHz() 获取cpu当前运行主频
devinfo_getCPUMaxFreqKHz() 获取cpu最大主频
devinfo_getCPUMinFreqKHz() 获取cpu最小主频
devinfo_getCPUTemp() 获取cpu温度
devinfo_getDeviceModel() 获取设备型号信息
devinfo_getKernelVersion() 获取内核版本信息
devinfo_getSerialNum() 获取设备SN号
devinfo_getStorageAvailableSize() 获取本机可用存储容量
devinfo_getStorageTotalSize() 获取本机存储容量(不包括系统分区)
devinfo_getTotalMem() 获取内存总容量
显示控制类 display_getNavBar() 获取是否显示导航栏跟状态栏
display_getScreenBrightness() 获取屏幕亮度
display_getScreenRotation() 获取屏幕旋转方向
display_getWindowHeight() 获取屏幕分辨率高度
display_getWindowWidth() 获取屏幕分辨率宽度
display_setNavBar​(Boolean enable) 设置是否显示导航栏跟状态栏
display_setNavBarSlideShow​(Boolean enable) 设置滑动是否会显示导航栏跟状态栏
display_setScreenBrightness​(int screenBrightness) 设置屏幕亮度
display_setScreenRotation​(int rotation) 设置屏幕旋转方向
GPIO控制类 gpio_direction​(int gpioNumber, String direction) 设置GPIO的方向(输入输出),对指定的gpio号进行设置
gpio_export​(int gpioNumber) 导出控制的GPIO引脚,对指定的gpio号进行导出
gpio_read​(int gpioNumber) 读取GPIO的输出电平值,对指定的gpio号进行读取
gpio_unExport​(int gpioNumber) 取消导出控制的GPIO引脚,对指定的gpio号进行取消导出
gpio_write​(int gpioNumber, int value) 设置GPIO的输出电平,对指定的gpio号进行设置
串口控制类 uart_close​(String uartNode) 关闭uart设备,如/dev/ttyXRUSB2
List<String> uart_getAvailableDevices() 获取uart可用的设备节点
uart_IsOpen​(String uartNode) uart设备是否已经打开,如/dev/ttyXRUSB2
uart_open​(String uartNode, int baudrate) 打开uart设备,如/dev/ttyXRUSB2
uart_receive​(String uartNode, UartReceiveDataCallback callback) 接收串口数据,如从/dev/ttyXRUSB2接收数据
uart_send​(String uartNode, byte[] buffer) 发送串口数据,如向/dev/ttyXRUSB2发送数据
uart_stopReceive​(String uartNode) 停止接收数据,调用后,不再有数据回调
系统控制类 sysctrl_cancelReboot() 取消重启设备
sysctrl_cancelShutdown() 取消自动关机
sysctrl_powerOn​(String time, boolean repeat) 设置设备开机时间
sysctrl_reboot​(String time, boolean repeat) 设置重启设备时间
sysctrl_rebootNow() 立即重启设备
sysctrl_shutdown​(String time, boolean repeat) 设置设备关机时间
sysctrl_shutdownNow() 立即关机
sysctrl_installApk(String apkPath) 静默安装应用


Linux 使用指南

接口功能测试

USB

1. U盘 自动挂载/media/disk

root@rk3399:~# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/root        15G  3.6G   10G   27% /
devtmpfs        980M     0  980M    0% /dev
tmpfs           981M     0  981M    0% /dev/shm
tmpfs           981M  8.8M  972M    1% /run
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           981M     0  981M    0% /sys/fs/cgroup
tmpfs           197M   16K  197M    1% /run/user/0
/dev/sda1        57G  2.7G   54G    5% /media/disk
SDCARD

* SDcard 自动挂载:

root@rk3399:~# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/root        15G  3.6G   10G   27% /
devtmpfs        980M     0  980M    0% /dev
tmpfs           981M     0  981M    0% /dev/shm
tmpfs           981M  8.8M  972M    1% /run
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           981M     0  981M    0% /sys/fs/cgroup
tmpfs           197M   16K  197M    1% /run/user/0
/dev/mmcblk0p8   30G  3.8G   25G   14% /media/3699f79c-f05d-4948-89c9-04dc4b132a1f

解除挂载:

umount /dev/mmcblk0p8

挂载:

mount /dev/mmcblk0p8 /sdcard
LCD/Backlight

1. HDMI

系统默认支持HDMI显示,默认分辨率 1920 * 1080,设置屏幕分辨率:终端输入命令:dis ,调出设置屏参界面,点击保存

2. eDP

a) 如图,开发板断电状态下接好eDP屏数据线和背光线,支持USB触控屏线,注意跳线帽短接位置 ,背光电压和数据线电压是根据屏参确定的,这里以12V背光和3.3V数据线为例

eDP

b) 默认 eDP屏分辨率:1920 * 1080,支持eDP + HDMI 复制双显,支持12.5“1366 * 768, 12.5”1920 * 1080, 13.3“1920 * 1080, 15.6”1920 * 1080

注意:如果上电后屏幕不亮,需要在HDMI上调整 eDP 屏幕对应的分辨率

c) 设置屏幕分辨率:终端输入命令:dis ,调出设置屏参界面

3. LVDS

a) 如图,开发板断电状态下接好 LVDS屏数据线和背光线,支持USB触控屏线,注意跳线帽短接位置 ,背光电压和数据线电压是根据屏参确定的,这里以12V背光和3.3V数据线为例

LVDS

b) 默认 LVDS屏分辨率:1920 * 1080,支持LVDS + HDMI 复制双显,支持12.5“1366 * 768, 12.5”1920 * 1080, 13.3“1920 * 1080, 15.6”1920 * 1080

注意:如果上电后屏幕不亮,需要在HDMI上调整LVDS屏幕对应的分辨率

c) 设置屏幕分辨率:终端输入命令:dis ,调出设置屏参界面

4. MiPi

a) 如图,开发板断电状态下接好MiPi屏线

mipi

b) MiPi屏分辨率:800 * 1280,支持 10.1“800 * 1280

c) 设置屏幕分辨率:终端输入命令:dis ,调出设置屏参界面,进入屏参切换界面,选择选择10.1_mipi_1280x800,点击保存,等待系统自动重启生效

5. 系统支持使用APP切换不同的LCD屏,输入dis命令打开APP如下图:

  • 选择对应的 eDP/LVDS/MiPi 屏分辨率,然后点击保存,系统自动重启后即可切换到指定的LCD:

6. 背光亮度调节:

  • 方法①:点击右下角系统托盘如下图标,打开背光调节APP

  • 方法②:控制驱动应用层接口:
 echo 100 > /sys/class/backlight/backlight1/brightness  

(注:写入数值越大亮度越大,max_brightness 为250)

Audio
  • 将喇叭连接板子上的 SPK 端口

1. 方法① – 使用系统自带SMPayer播放器,以及音频测试文件,可以做简单音频功能测试

2. 方法② – 使用命令方式播放:

aplay  /nodka_test/LR_audio.wav  -D  hw:0,0
Mic
  • 录音测试
arecord  -D hw:0,0 -d 5 -f cd -r 44100 -c 2 -t wav test.wav   
aplay test.wav  -D hw:0,0
LAN

1. 查看网卡IP地址,系统默认都为动态获取IP地址

#ifconfig -a 

2. 设置网卡静态IP地址

  • 方法1 – 使用图形界面工具设置

双击桌面图标Advanced Network Configuration

  • 方法2 – 修改配置文件的方式:
vim /etc/network/interfaces

  • 修改完成后输入重启生效。
WIFI

1. 点击右下角网络图标,浏览可用WIFI路由:

  • 输入WIFI密码,点击connect

2. 方法2 – 命令行连接wifi

nmcli d wifi connect "SSID" password "PASSWROD"
Bluetooth

1. 打开蓝牙管理器,搜索附近蓝牙设备:

2. 选中蓝牙设备,配对然后选择信任:

3. 设置蓝牙连接类型:

MiniPCIE:4G/5G

1. 系统已带自动拨号,打开终端,输入命令4g 即可自动拨号:

root@rk3568:~# 4g

2. 拨号完成后,查看IP地址:

3. 打开浏览器,浏览任意网站。

4. 5G测试方法与4G类似,输入命令5g即可自动拨号:

root@rk3399:~# 5g
UART:COM/TTL/CAN

1. 串口定义参考:

2. 串口设备节点系统对应表:

主板丝印 设备节点
UART0_TTL /dev/ttyS0
RS232_RX3\TX3 /dev/ttyS5
RS232_RX4\TX4 /dev/ttyS9
RS232_RX5\TX5 /dev/ttyS7
RS485_A1\B1 /dev/ttyS3
RS485_A2\B2 /dev/ttyS4

3. CuTecom 测试串口,以232_RX5\TX5回环测试为例

  • 参考步骤1~2短接232_RX5\TX5的 TX & RX (2~3 pin);
  • 双击桌面CuteCom图标,打开APP,Device选择测试端口对应的设备节点(见步骤2);
  • 点击Settings,设置串口参数,如下图所示:

  • 设置好以后点击Open 打开串口,在input 文本输入框中输入字符,按回车发送数据:

4. 命令行方式测试串口,同样以UART_RX5\TX5_232回环测试为例

打开终端输入如下指令接收数据:

com_recv /dev/ttyS7 115200

打开另一个终端发送数据:

com_send /dev/ttyS7 115200

测试结果如下:

GPIO/SPI

1.导出节点(编号为56、57、58、59)

$:echo 56 >/sys/class/gpio/export

也可以使用for循环一次性导出所有IO节点:

  $:cd /sys/class/gpio
  $:for i in {56,57,58,59}; do echo $i >export; done

2. IO 控制节点在目录:/sys/class/gpio/

3. IO 对应表如下:

功能 主板丝印 节点编号
输入\输出 J_GPIO1 gpio56
J_GPIO2 gpio57
J_GPIO3 gpio58
J_GPIO4 gpio59

4. IO控制方法:

  • 设置IO方向为输出:
echo out >/sys/class/gpio/gpio56/direction
  • 输出低电平:
echo 0 >/sys/class/gpio/gpio56/value
  • 输出高电平:
echo 1 >/sys/class/gpio/gpio56/value
  • 查看输出电平的值是否可控:
cat /sys/class/gpio/gpio56/value
  • 使用电压表测量IO对应的针脚对GND的电压值
0 对应高电平 1.8V
1 对应低电平 0V
WatchDog
Key

1. 输入命令evtest 查看系统下所有按键、输入设备:

root@rk3568:~# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:      rk805 pwrkey
/dev/input/event1:      Lenovo Precision USB Mouse
/dev/input/event2:      HID 04f3:0103
/dev/input/event3:      HID 04f3:0103 Consumer Control
/dev/input/event4:      HID 04f3:0103 System Control
/dev/input/event5:      adc-keys
/dev/input/event6:      rk-headset
Select the device event number [0-6]: 

2. 按照上面提示选择测试按键,如RK3568 boot按键为 /dev/input/event5: adc-keys

则event number 为 5:按下按键会打印value 1,松开按键则会打印value 0,如下图:

key

3. 自定义按键功能,配置文件为:

/etc/triggerhappy/triggers.d/example.conf

如下,定义按键为reboot功能,也是系统默认配置,用户可以根据需要自定义

KEY_VOLUMEUP    1   reboot
PowerManager

1. 电源管理设置:

休眠后按POWER键唤醒 2. 电源管理功能非所有产品支持,需定制系统请联系业务窗口人员。

RTC/Timezone

1.查看当前系统时间:

[root@rk3399:~]# date
Wed Jun  8 15:54:09 CST 2022

2. 设置同步硬件时钟:

[root@rk3399:/]# date -s "2022-06-08 17:01:01"
Wed Jun  8 17:01:01 CST 2022
[root@rk3399:/]# hwclock -w
[root@rk3399:/]# hwclock -r
Wed Jun  8 17:01:09 2022  0.000000 seconds

3. 关机断电5秒以上,再开机查看系统时间是否保存:

[root@rk3399:/]# date 
 Wed Jun  8 17:02:30 CST 2022

注:系统默认为网络时间同步,以上RTC测试需要在断外网情况下测试。

4. 时区设置

  • 方法① – 修改link文件,如改为中国、上海:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
reboot

设置其他时区只需将上面命令中的Asia/Shanghai改为对应的时区城市即可。

  • 方法② – 在图形界面依次打开首选项→时间和日期,选择时区如下图:

选择完成后关闭窗口,使用date命令查看时区变化:

timezone

Linux OTA 在线升级

终端输入 ota 进行固件在线升级

Linux 基本命令

  • 查看CPU信息
cat /proc/cpuinfo
cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq  //查看cpu当前频率
cat /sys/class/thermal/thermal_zone0/temp //查看CPU当前温度
  • 查看内存信息
free -h
cat /proc/meminfo
  • 查看存储信息
df -h    //用于显示已挂载文件系统的使用情况,主要关注文件系统的使用率和可用空间
lsblk    //用于列出块设备的信息,提供更详细的设备层次结构,包括磁盘、分区和挂载点
fdisk -l //用于显示磁盘分区表的详细信息,包括分区的起始扇区、大小和文件系统类型等
  • 查看USB设备
lsusb

系统性能测试

1. BurnInTest: CPU/MEMERY/EMMC
2. PowerCycle:HW Auto,Power on/off
3. RTC
4. I/O BurninTest: COM,LAN,WIFI

Linux API 使用说明

Linux SDK文档

Linux 应用编程

GPIO 应用编程

C参考代码如下:

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <unistd.h> 
#include <string.h> 
static char gpio_path[100];
//设置GPIO方向、高低电平
static int gpio_config(const char *file, const char *value) 
{ 
	char config_path[100]; 
	int len; 
	int fd; 
	sprintf(config_path, "%s/%s", gpio_path, file); 
	if (0 > (fd = open(config_path, O_WRONLY))) 
	{
		perror("open error"); 
		return fd; 
	} 
	len = strlen(value); 
	if (len != write(fd, value, len))
	{ 
		perror("write error"); 
		close(fd); 
		return -1; 
	} 
	close(fd); 
	return 0; 
} 
//获取GPIO的方向、电平
static int gpio_get(const char *file)
{ 
	char get_path[100]; 
	char buf[10]={"\0"};
	int len; 
	int fd; 
	sprintf(get_path, "%s/%s", gpio_path, file);
	if (0 > (fd = open(get_path, O_RDWR)))
	{
		perror("open error"); 
		return fd; 
	}
	if ( 0 > read(fd,buf,10))
	{
		perror("read error"); 
		return fd; 
	}
	printf("  %s : %s",file,buf);
	close(fd); 
	return 0; 
}
int main(int argc, char *argv[]) 
{ 
	 if (4 != argc) 
	{ 
		if (3 != argc)
		{
			fprintf(stderr, "set gpio out : %s <gpio> <out> <value>\n", argv[0]); 
			fprintf(stderr, "set gpio in  : %s <gpio> <in>\n", argv[0]); 
			exit(-1); 
		}
	}	 
	sprintf(gpio_path, "/sys/class/gpio/gpio%s", argv[1]); 
	if (access(gpio_path, F_OK)) 
	{ 
		printf("%s inexistence,export %s... \n",gpio_path,argv[1]);
		int fd; 
		int len; 
		if (0 > (fd = open("/sys/class/gpio/export", O_WRONLY))) 
		{
			perror("open error"); exit(-1); 
		} 
		len = strlen(argv[1]); 
		if (len != write(fd, argv[1], len)) 
		{
			perror("write error"); 
			close(fd);
			exit(-1); 
		} 
		close(fd);
	} 
	if (gpio_config("direction", argv[2])) 
		exit(-1);	
	if ( 0 == strcmp("out",argv[2] ) && argc == 4 )
	{
		if(gpio_config("value", argv[3]))
		exit(-1); 
	}
	printf("GPIO%s:\n",argv[1]);	
	if (gpio_get("direction"))
		exit(-1);
	if (gpio_get("value"))
		exit(-1);
	 exit(0); 
}

交叉编译源码:

aarch64-linux-gnu-gcc -o gpio gpio.c

将编译好的gpio程序使用scp拷贝到 r36s0 主板上,执行测试:

使用方法:

1:./gpio 56 out 1

0:./gpio 56 out 0

UART 应用编程

系统下操作 UART 的测试串口,以 232_RX5\TX5 测试为例:

232_RX5\TX5 设备节点为:

/dev/ttyS7

C参考UART高低电平输入代码如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define UART_DEVICE     "/dev/ttyS7" //uart设备文件名称
 
int main(int argc, char *argv[])
{
 
    int fd, res;
    struct termios  oldtio, newtio;
    char  ch;
    char buf[256] = {0};
 
//-----------打开uart设备文件------------------
    fd = open(UART_DEVICE, O_RDWR|O_NOCTTY);//没有设置O_NONBLOCK。所以这里read和write是堵塞操作
    if (fd < 0) {
        perror(UART_DEVICE);
        exit(1);
    }
    else
    	printf("Open %s successfully\n", UART_DEVICE);
 
//-----------设置操作?数-----------------------	
    tcgetattr(fd, &oldtio);//获取当前操作模式?数
    memset(&newtio, 0, sizeof(newtio));
 
	//波特率=115200 数据位=8 使能数据接收 
    newtio.c_cflag = B115200|CS8|CLOCAL|CREAD;
    newtio.c_iflag = IGNPAR; 
 
    tcflush(fd, TCIFLUSH);//清空输入缓冲区和输出缓冲区
    tcsetattr(fd, TCSANOW, &newtio);//设置新的操作?数
 
//------------向urat发送数据-------------------
    res=write(fd, "Begin Uart tx", 16);
    while(1) {
    	//从控制台终端获取数据,然后通过uart发送出去,直到接收到!字符
        while((ch=getchar()) != '!') {
            buf[0]=ch;
            res=write(fd, buf, 1);
        }
 
        buf[0]=ch;
        buf[1]=' ';
        res = write(fd, buf, 2);
        break;
    }
//-------------从uart接收数据-------------------
    while(1) {
    	res = read(fd, buf, 255);//程序将在这里挂起,直到从uart接收到数据(堵塞操作)
    	if (res == 0) 
  			continue;
 
  		buf[res] = ' ';
  		printf("res = %d, buf = %s\n", res, buf);//将uart接收到的字符打印出来
  		if (buf[0] == '!')//uart接收到!字符后退出while
  			break;
  	}
//------------关闭uart设备文件,恢复原先?数--------
    close(fd);
    printf("Close %s\n", UART_DEVICE);
    tcsetattr(fd, TCSANOW, &oldtio); //恢复原先的设置
 
    return 0;
}

交叉编译源码:

aarch64-linux-gnu-gcc -o uart uart.c

将编译好的程序使用 scp 拷贝到 r36s0 主板上,执行测试:

KEY 应用编程

参考系统下操作Key的方法,获取到key的设备节点为

/dev/input/event3

C参考代码如下:

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <linux/input.h>
#include <sys/select.h>
#define INPUT_DEVICE "/dev/input/event3"
int main(int argc, char **argv){
	int fd;
	struct input_event event;
	ssize_t bytesRead;
	int ret;
	fd_set readfds;
	if ( 0 > (fd = open(INPUT_DEVICE,O_RDONLY)))
	{
		perror("open error"); 
		return fd; 
	}
	while(1){
		FD_ZERO(&readfds);
		FD_SET(fd,&readfds);
		ret = select(fd + 1, &readfds, NULL, NULL, NULL);
		if (ret == -1){
			fprintf(stderr,"select call on%s : an error ocurred",argv[1]);
		break;
		}	
		if(FD_ISSET(fd,&readfds)){
			bytesRead = read(fd, &event,sizeof(struct input_event));
			if(bytesRead == -1 )
				fprintf(stderr,"bytesRead :%ld : an error ocurred",bytesRead);
			}	
		if(event.type == EV_KEY && (event.value == 0 || event.value == 1))
		{
			printf("key %s\n",(event.value) ? "pressed" : "released");
		}
	}
	close(fd);
	return EXIT_SUCCESS;
}

交叉编译源码:

 
aarch64-linux-gnu-gcc -o key key.c

将编译好的程序使用 scp 拷贝到 r36e0 主板上,执行测试,按动 key 打印如下:

  • 按下按键时显示:key pressed
  • 松开按键时显示:key released

Linux 应用支持

QT交叉编译环境

* 主机环境推荐:Debian 10 x64 bit,

    
 本公司已配置好的QT编译环境 Docker image:

QT编译环境Docker

 ### load docker image 
 sudo docker load <nodka_docker_qt_build_20230223.tar
 
 ### 运行docker image,注意 : /home/APP_PATH为QT应用程序所在目录
 sudo docker run --rm --mount type=bind,source=/home/APP_PATH,target=/mnt/ -i -t 09a37c1b2fc3 /bin/bash 

 ###  编译QT 应用程序
 cd  /mnt
 qmake
 make

* 主机交叉编译环境配置参考步骤:

1. 安装交叉编译工具链:

  apt install -y crossbuild-essential-arm64
  

2. 拷贝平板系统内的/usr & /lib 到主机 /home/nodka/qt5/qt_sysroot 目录下

3. 配置以下环境变量

QTSYSROOT="/home/nodka/qt5/qt_sysroot"
QTPATH=$QTSYSROOT/usr/local/qt5.12-arm
  
LD_LIBRARY_PATH=$QTPATH/lib:$LIBRARY_PATH
LIBRARY_PATH=$QTPATH/lib:$LIBRARY_PATH
C_INCLUDE_PATH=$QTPATH/include:$C_INCLUDE_PATH
PATH=$QTPATH/bin:$PATH
  
PKG_CONFIG_PATH=$QTPATH/lib/pkgconfig:$PKG_CONFIG_PATH
  
export LD_LIBRARY_PATH
export LIBRARY_PATH
export C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH
  
export PKG_CONFIG_PATH
export PATH

4. 编译APP

qmake
make

QT Creator

1. 安装

进入Qt官方下载页面,选择一个版本下载 qt-creator-opensource-linux-x86_64-x.x.x.run,下载完成之后,在终端执行 ./xxxx.run 运行安装,注意文件需要有执行权限。

2.配置

安装完成后,启动 Qt Creator,打开菜单 Tools → Option ,找到Kits。

  • 配置 Qt Versions

点击右侧 add 按钮添加,选择 Qt 环境安装位置中的 qmake 即可

qmake:

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

  • 配置 Compilers

点击右侧 add 按钮添加 gcc 和 g++ 交叉编译器的位置

如果主机安装了 crossbuild-essential-arm64,则编译器就在 /usr/bin/ 下

如果使用了第三方的交叉编译器,找到安装位置并添加即可

如果目标平台是 Buildroot ,则需要使用 Buildroot Qt 环境包中的编译器

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

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

为方便调试,配置 Debeggers 和 Devices 用于在线调试:

  • 配置 Debuggers

点击右侧 add 按钮添加 gbd-multiarch: apt install -y gdb-multiarch

检查目标机上是否存在 /usr/bin/gdbserver, 没有的话需要安装:apt install -y gdbserver,没有的话需要安装:apt install -y gdbserver (Buildroot 自带,无需安装)

回到主机的 Qt Creator,点击右侧 add 按钮添加 gdb

选择主机中的 gdb-multiarch : /usr/bin/gdb-multierch

  • 配置 Devices

设置好设备的 IP 、用户名(root)。为了方便调试,可以在设备上设置静态 IP。

  • 配置Kits

将前面设置的配置项添加到 Kits。

如果目标平台是 Ubuntu 系统,这一步也需要添加 sysroot 的路径

高清硬解码

Docker

Docker English-Community 支持以下的 Ubuntu 版本:

  • Xenial 16.04(LTS)
  • Bionic 18.04(LTS)
  • Cosmic 18.04
  • Disco 19.04
  • 其他更新的版本…

安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --miror Aliyun

也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

测试 Docker 是否安装成功,输入以下指令,打印出以下信息则安装成功:

sudo docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete                                                                                                                                  
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest


Hello from Docker!
This message shows that your installation appears to be working correctly.


To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.


To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash


Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/


For more examples and ideas, visit:
 https://docs.docker.com/get-started/

OpenCL

  • 系统已经支持OpenCL,输入命令clinfo即可查看支持详情:

打印/导出