本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
===== NK-RK3399-V0C ===== ==== Motherboard frame diagram ==== {{:pasted:20221214-220552.png}} ==== Interface definition ==== {{page>:template:temp_hw}} === 插针pin定义 === {{page>:template:temp_hw_pin}} === Jump_sel === {{page>:template:temp_hw_jump}} ==== 硬件特性 ==== {{page>:template:temp_hwspec}} ==== 快速上手 ==== === 系统下载 === {{page>:template:temp_download}} === 系统烧录 === {{page>:template:temp_burn}} === Debug串口调试 === 1、通过串口进入系统后台,需要利用板子的Debug接口,接口位置和定义如图: {{:arm:rk3399:android:ser-1.png?600|}} * 接口只需要用到3个引脚,TX、RX、GND 2、需要用到串口小板工具 * A部分需要接入TX、RX、GND * B部分连接电脑USB口 {{:arm:rk3399:android:ser-3.png?600×356|}} 3、硬件部分连接效果图 {{:arm:rk3399:android:ser-tu.png?600|}} 4、在电脑的设备管理器->端口 中看有没有串口信息 {{:arm:rk3399:android:ser-4.png?600×356|}} 5、打开Xshell新建一个会话,在连接下选择协议为SERIAL,操作如图: {{:arm:rk3399:android:ser-5.png?600×356|}} 6、点击串口,端口号为设备管理器看到的串口号,波特率为:1500000 {{:arm:rk3399:android:ser-6.png?600×356|}} 7、最后点击连接,串口进入后台 {{:arm:rk3399:android:ser-7.png?600×356|}} === Android ADB === {{page>:template:temp_adb}} === Linux SSH === {{page>:template:temp_ssh}} ==== Android 使用指南 ==== === 接口功能测试 === == UART == {{page>:template:temp_android_uart}} == LAN == {{:arm:rk3399:android:lan_1.jpg?600|}} == WIFI == 1.打开设置,点击WLAN {{:arm:rk3399:android:wifi_1.png?600|}} 2.点击开启 {{:arm:rk3399:android:wifi_2.png?600|}} 3.浏览可用的WIFI路由,然后点击,输入密码 {{:arm:rk3399:android:wifi_3.png?600|}} 4.连接成功右上角状态栏图标变为这样 {{:arm:rk3399:android:wifi_4.png?600|}} == 4G/5G == {{page>:template:temp_android_4g5g}} == Can == {{page>:template:temp_android_can}} == GPIO/DIO == {{:arm:rk3399:linux:io.png?600|}} == Audio == {{page>:template:temp_android_audio}} == Mic == {{page>:template:temp_android_mic}} == USB == {{:arm:rk3399:android:usb-1.jpg?600|}} == SDCARD == {{page>:template:temp_android_sdcard}} == Bluetooth == {{page>:template:temp_android_bluetooch}} == WatchDog == {{page>:template:temp_android_watchdog}} == Key == {{page>:template:temp_android_key}} == LCD == {{page>:template:temp_android_lcd}} == PowerManager == {{page>:template:temp_android_pm}} == RTC == {{page>:template:temp_android_rtc}} === 系统基本功能设置 === {{page>:template:temp_android_system}} === 系统性能测试 === {{page>:template:temp_android_perf}} ==== Android API 使用说明 ==== {{page>:template:temp_android_api}} ==== Linux 使用指南 ==== === 接口功能测试 === == GPIO == 1.IO控制节点都在/sys/class/io_control {{:arm:rk3399:linux:io.png?600|}} 2. IO 对应表如下: ^ 功能 ^ 主板丝印 ^ 节点名 ^ ^ 输入 | IO1 | gpio_ip0 | | ::: | IO2 | gpio_ip1 | | ::: | IO3 | gpio_ip2 | | ::: | IO4 | gpio_ip3 | | ::: | IO5 | gpio_ip4 | | ::: | IO6 | gpio_ip5 | ^ 输出 | IO7 | gpio_op0 | | ::: | IO8 | gpio_op1 | | ::: | IO9 | gpio_op2 | | ::: | IO10 | gpio_op3 | | ::: | IO11 | gpio_op4 | | ::: | IO12 | gpio_op5 | 3. IO控制方法: *输出低电平: echo 0 >/sys/class/io_control/gpio_op0 *输出高电平: echo 1 >/sys/class/io_control/gpio_op0 *查看输入电平: cat /sys/class/io_control/gpio_ip0 == UART == 1. 串口定义参考: * [[:nk-rk3399-v0c#接口定义|主板接口定义]] 2. 串口设备节点系统对应表: ^ 主板丝印 ^ 设备节点 ^ | COM1 | /dev/ttyXRUSB0 | | COM2 | /dev/ttyXRUSB1 | | COM3 | /dev/ttyXRUSB2 | | COM4 | /dev/ttyXRUSB3 | 3. CuTecom 测试串口,以COM2回环测试为例 * 参考步骤1~2短接COM2的 TX & RX (2~3 pin); * 双击桌面CuteCom图标,打开APP,Device选择测试端口对应的设备节点(见步骤2); * 点击Settings,设置串口参数,如下图所示: {{:arm:rk3399:linux:cutecom_1.png?600|}} * 设置好以后点击Open 打开串口,在input 文本输入框中输入字符,按回车发送数据: {{:arm:rk3399:linux:cutecom_2.png?600|}} 4. 命令行方式测试串口,同样以COM2回环测试为例 打开终端输入如下指令接收数据: com_recv /dev/ttyXRUSB1 115200 打开另一个终端发送数据: com_send /dev/ttyXRUSB1 115200 测试结果如下: {{:arm:rk3399:com_cmd.png?600|}} {{page>:template:temp_linux_uart}} == LAN == 1. 查看网卡IP地址,系统默认都为动态获取IP地址 #ifconfig -a {{:arm:rk3399:linux:ifconfig.png?600|}} 2. 设置网卡静态IP地址 * 方法1 -- 使用图形界面工具设置 双击桌面图标Advanced Network Configuration {{:arm:rk3399:linux:network_ip1.png?600|}} {{:arm:rk3399:linux:network_ip2.png?600|}} * 方法2 -- 修改配置文件的方式: vim /etc/network/interfaces {{:arm:rk3399:linux:interfaces.png?600|}} * 修改完成后输入重启生效。 == WIFI == 1. 点击右下角网络图标,浏览可用WIFI路由: {{:arm:rk3399:linux:wifi1.png?600|}} * 输入WIFI密码,点击connect {{:arm:rk3399:linux:wifi2.png?600|}} 2. 方法2 -- 命令行连接wifi nmcli d wifi connect "SSID" password "PASSWROD" == 4G/5G == 1. 系统已带自动拨号,打开终端,输入命令4g 即可自动拨号: root@rk3399:~# 4g 2. 拨号完成后,查看IP地址: {{:arm:rk3399:linux:4g.png?600|}} 3. 打开浏览器,浏览任意网站。 {{:arm:rk3399:linux:baidu.png?600|}} 4. 5G测试方法与4G类似,输入命令5g即可自动拨号: root@rk3399:~# 5g == Can == {{page>:template:temp_linux_can}} == GPIO/DIO == 1. IO 控制节点都在/sys/class/io_control/ {{:arm:rk3399:linux:io.png?600|}} 2. IO 对应表如下: ^ 功能 ^ 主板丝印 ^ 节点名 ^ ^ 输入 | IO1 | gpio_ip0 | | ::: | IO2 | gpio_ip1 | | ::: | IO3 | gpio_ip2 | | ::: | IO4 | gpio_ip3 | | ::: | IO5 | gpio_ip4 | | ::: | IO6 | gpio_ip5 | ^ 输出 | IO7 | gpio_op0 | | ::: | IO8 | gpio_op1 | | ::: | IO9 | gpio_op2 | | ::: | IO10 | gpio_op3 | | ::: | IO11 | gpio_op4 | | ::: | IO12 | gpio_op5 | 3. IO控制方法: *输出低电平: echo 0 >/sys/class/io_control/gpio_op0 *输出高电平: echo 1 >/sys/class/io_control/gpio_op0 *查看输入电平: cat /sys/class/io_control/gpio_ip0 == Audio == * 将喇叭连接板子上的 SPK 端口 1. 方法① -- 使用系统自带SMPayer播放器,以及音频测试文件,可以做简单音频功能测试 {{:arm:rk3399:linux:smplayer.png?600|}} 2. 方法② -- 使用命令方式播放: aplay /nodka_test/LR_audio.wav -D hw:0,0 == Mic == * 录音测试 arecord -d 5 -f cd -r 44100 -c 2 -t wav test.wav aplay test.wav == 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 == Bluetooth == 1. 打开蓝牙管理器,搜索附近蓝牙设备: {{:arm:rk3399:linux:bt1.png?600|}} 2. 选中蓝牙设备,配对然后选择信任: {{:arm:rk3399:linux:bt2.png?600|}} 3. 设置蓝牙连接类型: {{:arm:rk3399:linux:bt3.png?600|}} == WatchDog == {{page>:template:temp_linux_watchdog}} == Key == 1. 输入命令evtest 查看系统下所有按键、输入设备: root@rk3399:~# evtest No device specified, trying to scan all of /dev/input/event* Available devices: /dev/input/event0: ff420030.pwm /dev/input/event1: USB Optical Wheel Mouse /dev/input/event2: SIGMACH1P USB Keyboard /dev/input/event3: rk29-keypad /dev/input/event4: SIGMACH1P USB Keyboard Select the device event number [0-4]: 2. 按照上面提示选择测试按键,如RK3399 boot按键为 /dev/input/event3: rk29-keypad 则event number 为3:按下按键会打印value 1,松开按键则会打印value 0,如下图: {{:template:key.png?600|}} 3. 自定义按键功能,配置文件为 /etc/triggerhappy/triggers.d/example.conf 如下为定义按键为reboot功能,亦为系统默认配置,用户可以根据需要自定义。 KEY_VOLUMEUP 1 reboot == LCD/Backlight == 1. 系统支持使用APP切换不同的LCD屏,输入dis命令打开APP如下图: * 选择对应的eDP/LVDS 屏分辨率,然后点击保存,系统自动重启后即可切换到指定的LCD: {{:arm:rk3399:linux:dis.png?600|}} 2. 背光亮度调节: * 方法①:点击右下角系统托盘如下图标,打开背光调节APP {{:template:backlight.png?600|}} * 方法②:控制驱动应用层接口: echo 100 > /sys/class/backlight/backlight1/brightness (注:写入数值越大亮度越大,max_brightness 为250) == PowerManager == 1. 电源管理设置: {{:template:suspend.png?600|}} {{:template:pm.png?600|}} 休眠后按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改为对应的时区城市即可。 * 方法② -- 在图形界面依次打开首选项->时间和日期,选择时区如下图: {{:arm:rk3399:linux:timezone.png?600|}} 选择完成后关闭窗口,使用date命令查看时区变化: {{:arm:rk3399:linux:timezone1.png?600|}} == CPU == 查看CPU信息: cat /proc/cpuinfo == Memory == 查看内存容量大小: free -h == EMMC == 查看EMMC可用容量大小 df -h ==== Linux编程指南 ==== ==== Linux 编程指南 ==== === GPIO 应用编程 === C参考代码如下: <code 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_op%s:\n",argv[1]); if (gpio_get("direction")) exit(-1); if (gpio_get("value")) exit(-1); exit(0); } </code> 交叉编译源码: aarch64-linux-gnu-gcc -o a.out gpio.c 将编译好的gpio程序使用scp拷贝到 rk3399 主板上,执行测试: 使用方法: 0:./gpio 0 out 0 1:./gpio 0 out 1 {{:arm:rk3399:linux:r39s2_gpio20.png?600|}} === UART 应用编程 === 系统下操作 UART 的测试串口,以 COM2 测试为例: COM2 设备节点为: /dev/ttyXRUSB1 C参考UART高低电平输入代码如下: <code C> #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/ttyXRUSB1" //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; } } </code> 交叉编译源码: aarch64-linux-gnu-gcc -o uart uart.c 将编译好的程序使用 scp 拷贝到 3399 主板上,执行测试: {{:arm:rk3399:linux:uart编程-1.png?600|}} === KEY 应用编程 === 参考系统下操作Key的方法,获取到key的设备节点为 <code> /dev/input/event2 </code> C参考代码如下: <code 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/event2" 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; } </code> 交叉编译源码: <code> aarch64-linux-gnu-gcc -o key key.c </code> 将编译好的程序使用 scp 拷贝到 r39s2 主板上,执行测试,按动 key 打印如下: {{:arm:rk3399:linux:key编程.png?600|}} *按下按键时显示:key pressed *松开按键时显示:key released ==== Linux 应用支持 ==== === QT交叉编译环境 === {{page>:template:temp_Linux_qt}} === QT Creator === {{page>:template:temp_Linux_qt_creator}} === 高清硬解码 === {{page>:template:temp_Linux_dec}} === Docker === {{page>:template:temp_Linux_docker}} ===OpenCL=== * 系统已经支持OpenCL,输入命令clinfo即可查看支持详情: {{:arm:rk3399:linux:opencl.png?600|}} ==== Linux OTA 在线升级 ==== {{page>:template:temp_Linux_upgrade}} 终端输入 ota 进行固件在线升级 {{:arm:rk3399:linux:linux_ota.png?600|}}
您的足迹:
登录
文章
讨论
阅读
显示源文件
修订记录
搜索
导航
首页
Main_En
帮助
联系我们
打印/导出
可打印版本
工具
最近更改
媒体管理器
网站地图
永久链接
引用此文