前言
上手教程
介绍
串口调试
升级固件
更新固件介绍
使用USB线缆升级固件
MaskRom模式
切换升级存储器
使用SD卡升级固件
Linux开发
编译 Linux4.19 固件
编译 Linux5.10 固件
Firefly Linux 开发指南
技术案例
Android开发
ADB 使用
编译环境搭建
编译 Android11.0 固件
Firefly Android 开发指南
FireflyApi2 使用手册
驱动开发
ADC 使用
Camera 使用
I2C 使用
IR 使用
LCD使用
GPIO 使用
LED 使用
PWM 使用
RTC 使用
配件
串口模块
屏幕模组
摄像头模组
无线模块
USB电源适配器
红外遥控器
HDMI 转MIPI CSI 驱动板
其他
Kernel 使用
U-Boot 使用
NPU使用
常见问题解答
参考资料
资源下载
ROC-RK3566-PC
产品规格书

前言

概述

本文档主要介绍基于 ROC-RK3566-PC 平台的开发方法。

OS 版本

OS 名称 内核版本 支持情况 维护情况
Linux 4.19 主要维护
Android11.0 4.19 主要维护

文档当前版本

  当前版本
文档名称 ROC-RK3566-PC 开发手册
版本号 V2.0.2
作者 Firefly Team
修改日期 2022-05-10

修订记录

  • V2.0.2

    • 更新时间:2022-05-10

    • 更新内容:

      • 修改串口调试内容

      • 修正部分下载链接。

  • V2.0.1

    • 更新时间:2022-05-09

    • 更新内容:

      • 增加《修订记录》

上手教程

1. 介绍

ROC-RK3566-PC 是一款迷你PC主板,体积只有小型手机的大小,主控采用Rockchip RK3566四核处理器,集成双核心架构GPU以及高效能NPU,支持8G大内存,板载M.2,支持2.4/5G WIFI,4G无线网络通讯,可应用于智能NVR、云终端、物联网网关、工业控制等场景,详细资料可参考《接口定义》《文档》

_images/front.jpg

1.1. 发货清单(仅供参考)

  • 1 x ROC-RK3566-PC

  • 1 x USB Type-A to Type-C 数据线

1.2. 配件

可能你还需要另外购买以下配件:

  • USB 电源5V/2A

  • SD卡

  • 串口模块

  • 显示设备

    • 带 HDMI 接口的显示器或电视,及 HDMI 连接线

  • 网络

    • 100M/1000M 以太网线缆,及有线路由器

    • WiFi 路由器

  • 输入设备

注意:开发板使用USB电源供电(5V/2A),请搭配合适的电源使用,可以参考《USB电源》

2. 串口调试

如果正在进行 U-Boot 或内核开发,USB 串口适配器( USB 转串口 TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。

2.1. 选购适配器

网店上有许多 USB 转串口的适配器,按芯片来分,有以下几种:

串口 最高波特率 是否推荐 评价 购买链接
CP2104 2Mbps 推荐 支持高波特率通信,稳定性好耐用 点击购买
CH340 2Mbps 不推荐 firefly和许多客户在实际使用中发现,市面上很多CH340的实际波特率达不到1.5Mbps,这给开发过程造成很多麻烦  
PL2303 1.2Mbps 不推荐 最高波特率达不到1.5Mbps  

注意: ROC-RK3566-PC 默认的波特率是 1500000,有些USB转串口芯片波特率无法达到 1500000,同一芯片的不同系列也可能会有差异,所以在选购之前一定要确认是否支持。

2.2. 硬件连接

串口转 USB 适配器,有四个引脚:

  • 3.3V 电源(NC),不需要连接

  • GND,串口的地线,接开发板串口的 GND 针

  • TXD,串口的输出线,接开发板串口的 TX 针

  • RXD,串口的输入线,接开发板串口的 RX 针

注意: 如使用其它串口适配器遇到 TX 和 RX 不能输入和输出的问题,可以尝试对调 TX 和 RX 的连接。

ROC-RK3566-PC 串口连接图:

_images/debug_connection.jpg

2.3. 串口参数配置

ROC-RK3566-PC 使用以下串口参数:

  • 波特率:1500000

  • 数据位:8

  • 停止位:1

  • 奇偶校验:无

  • 流控:无

2.4. Windows 上使用串口调试

2.4.1. 安装驱动

下载驱动并安装:

如果在 Win8 上不能正常使用 PL2303,参考这篇文章, 采用 3.3.5.122 或更老版本的旧驱动即可。

如果在 Windows 系统上安装官网的 CP210X 驱动,使用 PUTTY 或 SecureCRT 等工具设置串口波特率为 1500000,如果出现设置不了或无效的问题,可以下载旧版本驱动

插入适配器后,系统会提示发现新硬件,并初始化,之后可以在设备管理器找到对应的 COM 口:

_images/debug_find_com.png

2.4.2. 安装软件

Windows 上一般用 putty 或 SecureCRT。其中我们推荐使用 MobaXterm 免费版本。这是一款功能强大的终端软件,在这里介绍一下,MobaXterm 的使用方法与之类似。

到这里下载 MobaXterm

  1. 选择 sessionSerial

  2. Serial port 修改为在设备管理器中找到的 COM 端口。

  3. 设置 Speed (bsp) 为 1500000。

  4. 点击 OK 按钮。

_images/debug_set_MobaXterm1.png

_images/debug_set_MobaXterm2.PNG

2.5. Ubuntu 上使用串口调试

在 Ubuntu 上可以有多种选择:

  • minicom

  • picocom

  • kermit

篇幅关系,以下就介绍 minicom 的使用。

2.5.1. 安装 minicom

根据提示按O进入设置界面,如下:

升级固件

1. 更新固件介绍

1.1. 前言

ROC-RK3566-PC 有2种工作模式。一般情况下,开机直接进入Normal 模式正常启动系统。如需对板子系统进行升级,可以根据情况选择合适的升级模式进行固件升级。

  • 注意:ROC-RK3566-PC低内存版本出厂默认安装 Ubuntu 操作系统,高内存版本默认安装 Android 操作系统。如果用户要运行其他操作系统,需要使用对应的固件烧写到主板。可以前往固件下载页面下载更多固件。

_images/working_mode.png

ROC-RK3566-PC按工作模式进行分类,可以分为二种工作模式:

1.2. Normal 模式

工作模式 Normal 模式 升级模式
启动介质 eMMC 接口/SDMMC 接口  
描述 Normal 模式就是正常的启动过程,
各个组件依次加载,正常进入系统。
目前支持3种升级模式,各有优缺点:
1. MaskRom 升级模式
2. Loader 升级模式
3. SD 升级模式

1.3. 升级模式

其中升级模式中,不同升级模式之间的对比:

升级模式 MaskRom 升级模式 Loader 升级模式 SD 升级模式
简单描述 1. 使用USB线将主板连接到电脑上;
2. 硬件操作使板子进入升级模式;
3. 在PC上使用USB升级单板固件。
1. 使用USB线将主板连接到电脑上;
2. 软件或按键操作使板子进入升级模式;
3. 在PC上使用USB升级单板固件。
1.通过升级卡制作工具,将MicroSD卡制作为升级卡;
2. 将升级卡插入主板,上电开机,机器自动执行升级。
连接方式 USB USB TF卡(少数为SD卡槽)
升级工具
Windows PC
Linux PC

Windows 上升级固件
Linux 上升级固件

Windows 上升级固件
Linux 上升级固件

Windows 上制作升级卡
不支持
进入方法 需要硬件操作 按键或软件进入 上电直接进入
使用条件 硬件操作进入 能正常使用uboot
使用场景推荐 1. 当板子无法正常启动时候;
2. 在切换烧写Linux和Android固件的情况下。
1. 有完整uboot或能正常进入系统;
2. 需要单独烧写分区(uboot或boot分区等)。
1. 工人操作方便,适合产品批量生产时候;
2. 产品定型后升级,方便最终客户操作。
优点 1. 最基本的烧写方式;
2. 非固件和硬件问题,一般都能成功烧写;
3. 不需要uboot支持,拯救变砖的单板;
4. 支持跨系统升级(Linux和安卓等)。
1. 烧写效果MaskRom 升级模式差不多;
2. 能单独烧写分区;
3. 进入loader模式方便。
1. 操作方便,只需插卡启动;
2.集合了MaskRom 升级模式的优点。
缺点 1. 进入方式麻烦,不适难拆除外壳的产品;
2. 烧写分区表麻烦,较难单独烧写分区;
3. 需要完全擦除设备再烧写。
1. 需要完整的loader(通常指uboot);
2. 跨系统升级需要完全擦除设备再烧写。
1. 需要合成完整固件。

1.3.1. MaskRom 升级模式

一般情况下是不用进入 MaskRom 升级模式的,只有在 bootloader 校验失败(读取不了 IDB 块,或 bootloader 损坏) 的情况下,BootRom 代码 就会进入此模式。此时 BootRom 代码等待主机通过 USB 接口传送 bootloader 代码,加载并运行之。当板子变砖无法正常启动或升级程序时,也可以手动进入MaskRom 升级模式.

要强行进入 MaskRom 升级模式,请参阅《MaskRom 升级模式》一章。

1.3.2. Loader 升级模式

在 Loader 升级模式下,bootloader 会进入升级状态,等待主机命令,用于固件升级等。要进入此模式,必须让 bootloader 在启动时检测到 RECOVERY(恢复)键按下,且 USB 处于连接状态。

要强行进入 Loader 升级模式,请参阅《Loader 升级模式》一章。

1.3.3. SD 升级模式

使用SD升级,本质上是制作一个可启动的SD启动的升级固件,让板子SD启动,擦除和烧写EMMC。

要强行进入 SD 升级模式,请参阅《使用SD卡更新固件》一章。

2. 使用USB线缆升级固件

2.1. 前言

本文介绍了如何将主机上的固件,通过Type-C 数据线烧录到 ROC-RK3566-PC 开发板的存储器中。升级时,需要根据主机操作系统和固件类型来选择合适的升级方式。

2.2. 准备工具

  • ROC-RK3566-PC 开发板

  • 主机

  • 良好的Type-C 数据线

2.3. 准备固件

固件可以通过编译SDK获得,也可以通过资源下载处下载公版固件(统一固件)。固件文件一般有两种:

  • 单个统一固件

    统一固件是由分区表、bootloader、uboot、kernel、system等所有文件打包合并成的单个文件。Firefly正式发布的固件都是采用统一固件格式,升级统一固件将会更新主板上所有分区的数据和分区表,并且擦除主板上所有数据。

  • 多个分区镜像

    即各个功能独立的文件,如分区表、bootloader、kernel等,在开发阶段生成。独立分区镜像可以只更新指定的分区,而保持其它分区数据不被破坏,在开发过程中会很方便调试。

通过统一固件解包/打包工具,可以把统一固件解包为多个分区镜像,也可以将多个分区镜像合并为一个统一固件。

2.4. 安装烧写工具

2.4.1. Windows操作系统

  • 安装RK USB驱动

下载 Release_DriverAssistant.zip,解压,然后运行里面的 DriverInstall.exe 。为了所有设备都使用更新的驱动,请先选择驱动卸载,然后再选择驱动安装

_images/upgrade_firmware_install_RK_USB.png

  • 运行AndroidTool的RKDevTool.exe

为避免由下载工具版本引起的烧写问题,推荐使用公版固件压缩包内部打包好的工具进行烧写,例如安卓公版固件压缩包解压后如下:

也可以单独下载 AndroidTool,解压,运行 RKDevTool_Release_v2.xx 目录里面的 RKDevTool.exe(注意,如果是 Windows 7/8,需要按鼠标右键,选择以管理员身份运行),如下图:

_images/upgrade_firmware_androidtool_zh.png

2.4.2. Linux操作系统

Linux 下无须安装设备驱动

下载 Linux_Upgrade_Tool, 并按以下方法安装到系统中,方便调用:

下载 Linux_adb_fastboot, 并按以下方法安装到系统中,方便调用:

2.5. 进入升级模式

通常我们升级固件的模式有两种,分别是Loader模式和MaskRom模式。烧写固件前,我们需要连接好设备,并让板子进入到可升级模式。

2.5.1. Loader模式

2.5.1.1. 硬件方式进入Loader模式

连接设备并通过RECOVERY按键进入Loader升级模式步骤如下:

  • 先断开 Type-C 数据线连接:

    • 按住设备上的 RECOVERY (恢复)键(靠近耳机处)并保持

    • 接上 Type-C 数据线

    • 大约两秒钟后,松开 RECOVERY 键

2.5.1.2. 软件方式进入Loader模式

Type-C 数据线接好后在串口调试终端或adb shell给板子运行以下命令

2.5.1.3. 查看Loader模式

如何确定板子是否进入Loader模式,我们可以通过工具去查看

Windows操作系统

通过AndroidTool工具可以看到下方提示Found One LOADER Device 

_images/upgrade_firmware_androidtool_zh.png

如果有进行”进入Loader模式”的操作,仍旧没有看到烧写工具提示LOADER,此时可以可以看一下Windows主机是否有提示发现新硬件并配置驱动。打开设备管理器,会见到新设备 Rockusb Device 出现,如下图。如果没有,可返回上一步重新安装驱动

_images/upgrade_firmware_new_equipment.png

Linux操作系统

运行upgrade_tool后可以看到连接设备中有个Loader的提示

2.5.2. MaskRom模式

进入MaskRom模式的方法,请参考《MaskRom模式》

MaskRom烧写固件前先确定板子ROC-RK3566-PC是否有贴Nor Flash存储器,如下图:

_images/nor_flash-position.jpg

如果有贴Nor Flash请参考切换升级存储器章节烧写统一固件,没有贴Nor Flash可按以下步骤继续操作

2.6. 烧写固件

注意:Linux SDK v1.2.4a 及之后版本采用 extboot,烧写内核请使用 extboot.img 取代后文中所有的 boot.img(仅限 Linux,Android 请无视)

如何查看版本:

  1. 版本格式为 vx.x.xx,例如 v1.2.4a

  2. 固件文件名称中存在版本号(…_vx.x.xx_日期.img)

  3. Buildroot 使用cat /etc/version获取版本(rk356x_linux_release_日期_vx.x.xx.xml)

  4. Ubuntu 使用ffgo version获取版本(rk356x_linux_release_日期_vx.x.xx.xml)

  5. SDK 中可以在 SDK 根目录通过命令查看:ls -l .repo/manifests/rk356x_linux_release.xml

  6. 如果上述方法找不到格式为 vx.x.xx 的版本,说明是旧版本,不支持 extboot

不要将 extboot.img 烧录进旧版本固件!

除此之外,extboot ubuntu 还支持以安装包的形式更新内核,详情查看Ubuntu 使用手册

2.6.1. windows操作系统

2.6.1.1. 烧写统一固件 update.img

烧写统一固件 update.img 的步骤如下:

  1. 切换至Upgrade Firmware页。

  2. Firmware按钮,打开要升级的固件文件。升级工具会显示详细的固件信息。

  3. Upgrade按钮开始升级。

  4. 如果升级失败,可以尝试使用切换升级存储器里面的方法

2.6.1.2. 烧写分区映像

烧写分区映像的步骤如下:

  1. 切换至Upgrade Firmware页。

  2. 点击设备分区表按钮(Dev Partition)

  3. 勾选需要烧录的分区,可以多选。

  4. 确保映像文件的路径正确,需要的话,点路径右边的空白表格单元格来重新选择。

  5. 点击Run按钮开始升级,升级结束后设备会自动重启。

_images/upgrade_firmware_androidtool_zh.png

2.6.2. Linux操作系统

2.6.2.1. 烧写统一固件 update.img

如果升级失败,可以尝试使用切换升级存储器里面的方法

2.6.2.2. 烧写分区镜像

2.7. 常见问题

2.7.1. 1. 如何强行进入 MaskRom 模式

如果板子进入不了 Loader 模式,此时可以尝试强行进入 MaskRom 模式。操作方法见《MaskRom模式》

2.7.2. 2. 烧写失败分析

如果烧写过程中出现Download Boot Fail, 或者烧写过程中出错,如下图所示,通常是由于使用的USB线连接不良、劣质线材,或者电脑USB口驱动能力不足导致的,请更换USB线或者电脑USB端口排查。 

_images/upgrade_downloadfail.png

2.7.3. 3. 贴有Spi Flash(Nor Flash),进入 MaskRom 后,烧录异常

如果板子同时贴有 Spi Flash(Nor Flash) 和 eMMC时,当进入 MaskRom 后,需要切换存储设备,操作方法见《切换升级设备》

3. MaskRom模式

有关启动模式的介绍,请参阅《升级固件介绍》一章

3.1. 简介

MaskRom 模式是设备变砖的最后一条防线。强行进入 MaskRom 涉及硬件操作,有一定风险,因此仅在设备进入不了 Loader 模式的情况下,方可尝试 MaskRom 模式。进入 MaskRom 的原理是人为的把 EMMC 的数据脚与地线短接,系统会认为 EMMC 数据出错,从而清除 EMMC 数据。

请小心阅读,并谨慎操作!

操作步骤如下:

  • 设备断开 Type-C 数据线(电源)

  • 按住 设备上的 Maskrom 按键 。

  • 设备插入Type-C 数据线(电源)。

  • 稍候片刻,之后松开按键。

_images/maskrom_test_points.jpg

板子同时贴有NOR flash,若EMMC为空,而NOR flash中有烧录过文件,则需要短接NOR flash附近的D0和GND测试点进入Maskrom模式,下图为短接点。此时升级固件需要参考章节《切换升级存储器》

_images/maskrom_test_points_flash.jpg

此时设备就会进入 MaskRom 模式。

_images/maskrom_zh.png

4. 切换升级存储器

4.1. 前言

本文介绍当主机同时存在 eMMC(默认) 和 NOR Flash 这两种存储器的时候,在烧录固件的时候,需根据以下的启动模式和情况来升级固件。

如下图,则设备有贴 Nor Falsh 存储器。

_images/nor_flash-position.jpg

4.2. Loader 模式

如果是通过 软件执行 reboot loader 或者 通过硬件Recovery 按键进入的Loader 下载模式的话,可不需要看接下来的内容,直接跳到 《使用USB线缆升级固件》 操作。

4.3. Maskrom 模式

如果是通过 《MaskRom模式》 章节进入了Maskrom 模式(或设备异常,经过擦除设备进入Maskrom),而板子同时存在NOR flash和 eMMC 两种存储器,这个时候想要烧录固件,需要区分存储器:

4.3.1. 固件下载到NOR flash

系统在Maskrom模式下默认将固件下载到NOR flash中,不过由于NOR flash 比较小,不足以装载系统镜像,所以一般只会烧写比较小的文件,如MiniLoaderAll.bin。如果不小心将整个固件下载到NOR flash中,会出现下载固件失败的现象, 此时大家可以参考FAQ去处理

4.3.2. 固件下载到eMMC

有两种方法可以将固件烧写进eMMC中,一种是RK原厂提供的烧写方法,需要烧写MiniLoaderAll.bin并切换存储器;另一种是Firefly为了方便大家烧写,提供的一种参考烧写方法,该方法操作上无需要切换存储器,也可以使用Linux端的烧写工具upgrade_tool进行烧写

4.3.2.1. 方法一(Firefly)

此方法仅在官方最新SDK编译或者最新的官方固件中可用。如果在Maskrom模式下不慎将固件下载到NOR flash中,导致重启后无法正常启动, 那么可以进入《MaskRom模式》,烧录最新SDK编译或者官方提供的固件;不管烧录成功还是失败,当机器重启后,假如NOR flash 存在数据则自动擦除,擦除时间大概30~60s,擦除成功后,自动进入Loader模式,之后直接烧录固件即可。

4.3.2.2. 方法二(原厂)

若要将固件下载到eMMC中,需要先下载MiniLoaderAll.bin, 然后选择将存储器切换到eMMC。具体操作步骤如下:

1.先准备好 MiniLoaderAll.bin,一般存放在以下路径(需提前编译固件):


如果还没有编译SDK,可以从以下链接下载 一个对应CPU型号的MiniLoaderAll.bin

_images/load_emmc_with_flash03.png

4.4. FAQ

4.4.1. Maskrom模式烧写失败

_images/maskrom_download_failed_with_flash.png

该现象是因为固件直接烧写进NOR flash中引起的,出现该现象时大家可以根据当前的情况进行处理:

情况一下载失败时没有断电或重启

之后按照章节固件下载到eMMC的步骤进行固件升级即可

情况二有进行过重启或断电的操作

之后按照章节固件下载到eMMC的步骤进行固件升级即可。若不清楚如何通过Recovery按键进入Loader模式请参考使用USB线缆升级固件章节

进入到Maskrom模式后,固件升级都需要按照固件下载到eMMC的步骤进行操作

4.4.2. Go Maskrom无效

4.4.3. 其它

烧写异常问题可参考帖子rk3566/rk3568 烧写异常问题,若遇到其它问题也可以到社区论坛对应的板块发帖

5. 使用SD卡升级固件

本文主要介绍如何通过MicroSD卡,升级主板上的固件。

使用MicroSD升级固件,需要在电脑上,通过做卡工具,将统一固件写入MicroSD卡,目前此操作只支持在Windows操作系统上完成。

5.1. 准备工具

5.2. 操作步骤

Linux开发

1. 编译 Linux4.19 固件

1.1. 编译环境搭建

本章介绍 Linux SDK 的编译环境搭建

注意:

(1)推荐在 X86_64 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。

(2)使用普通用户进行编译,不要使用 root 用户权限进行编译。

1.1.1. 获取 SDK

首先准备一个空文件夹用于存放 SDK,建议在 home 目录下,本文以~/proj为例

不要在虚拟机共享文件夹以及非英文目录存放、解压SDK,避免产生不必要的错误

获取 SDK 需要先安装:

  • 方法一(推荐)

由于 Firefly_Linux_SDK 源码包比较大,部分用户电脑不支持4G以上文件或单个文件网络传输较慢, 所以我们采用分卷压缩的方法来打包 SDK。用户可以通过如下方式获取 Firefly_Linux_SDK 源码包:Firefly_Linux_SDK源码包

下载完成后先验证一下 MD5 码:

确认无误后,就可以解压:

  • 方法二

通过 repo 拉取代码,此方法对网络要求较高,有条件可以使用

可选择获取完整 SDK 或者 BSP:

mkdir ~/proj/rk356x_linux_release_v1.3.0b_20221213/
cd ~/proj/rk356x_linux_release_v1.3.0b_20221213/

## 完整 SDK
repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git --no-repo-verify -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_linux_release.xml

## BSP ( 只包含基础仓库和编译工具 )
## BSP 包括 device/rockchip 、docs 、 kernel 、 u-boot 、 rkbin 、 tools 和交叉编译链
repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git --no-repo-verify -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_linux_bsp_release.xml

1.1.2. 同步代码

执行如下命令同步代码:

1.1.3. 目录结构

1.1.4. 安装依赖

  • 方法一:

在 PC 中自行安装环境:

  • 方法二:使用 Docker

使用 dockerfile 创建容器,在容器中进行编译,完美解决编译环境问题,并且与主机环境隔离,互不影响。

首先在主机中安装 docker,请参考:安装教程

创建镜像

镜像创建完毕后,创建容器并启动

现在就可以在容器中进行 SDK 的编译了。

退出容器、重启容器的方法:

1.2. 编译 Ubuntu 固件

本章介绍 Ubuntu 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。

1.2.2. 编译 SDK

1.2.2.1. 编译前配置

1.2.2.2. 选择编译配件

1.2.2.3. 下载 Ubuntu 根文件系统


1.2.2.4. 全自动编译

  • 编译 kernel

注意:Firefly kernel 没有开启全部的内核功能,有需求请查看Kernel 使用

不要将 extboot.img 烧录进旧版本固件!

除此之外,extboot ubuntu 还支持以安装包的形式更新内核,详情查看Ubuntu 使用手册

1.2.2.7.2. RAW 固件

RAW 固件,是一种能以逐位复制的方式烧写到存储设备的固件,是存储设备的原始映像。不同于 RK 固件,目前仅支持通过 Etcher 工具烧写至 SD 卡启动。

Etcher 官方下载链接

FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3568
MACHINE_ID: 007
MANUFACTURER: RK3568
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00c00000@0x00038000(rootfs),-@0x00c38000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

CMDLINE 属性是我们关注的地方,以 uboot 为例, 0x00002000@0x00004000(uboot) 中 0x00004000 为uboot 分区的起始位置,0x00002000 为分区的大小,以此类推。

1.2.3.2. package-file

package-file 文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与 parameter.txt 文件保持一致。

1.3. 编译 Yocto 固件

1.3.1. 获取SDK

repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_yocto_kirkstone_release.xml
.repo/repo/repo sync -c

1.3.2. 编译

1.3.2.1. 选择映像

Yocto 项目提供了一些可用于不 layer 的映像。下表列出目前支持构建的映像和相关配方。

映像名字 描述 提供的layer
core-image-minimal A small image that only allows a device to boot Poky
core-image-minimal-xfce A XFCE minimal demo image meta-openembedded/meta-xfce
core-image-sato Image with Sato, a mobile environment and visual style for mobile devices. The image supports X11 with a Sato theme, Pimlico applications, and contains terminal, editor, and file manager Poky
core-image-weston A very basic Wayland image with a terminal Poky
core-image-x11 A very basic X11 image with a terminal Poky

1.3.3. 编译映像文件

使用 bitbake 命令构建的过程需要保证网络连接正常,如果是中国内陆客户需要保证能 ping 通外网

完成上述修改后,执行命令编译 core-image-weston

1.3.4. 调整编译速度

1.3.5. 更多 bitbake 选项

从根本上说,BitBake 是一个通用任务执行引擎,它允许 shell 和 Python 任务高效并行运行,同时在复杂的任务间依赖约束下工作。 BitBake 的主要用户之一,OpenEmbedded,利用这个核心并使用面向任务的方法构建嵌入式 Linux 软件堆栈。更多详细使用方法请查看《bitbake-user-manual》

Bitbake paramater 描述
-c fetch 拉取目标所需要的代码
-c clean 清除目标的输出文件
-c cleanall 删除目标所有输出文件、共享高速缓存(shared state cache)和源代码
-c compile -f 使用此选项可在部署映像后强制重新编译,但不建议使用,除非 Yocto Project 不知道目标代码已经发生改变
-c listtasks 列出目标定义的所有 target

1.3.6. 分区固件烧写

  • 分区烧写适用于调试阶段,固件验证请使用下文的统一固件烧写

  • rootfs 不支持单独烧写,需要打包完整固件再烧写

1.3.7. 统一固件烧写

1.3.8. 相关概述

Yocto Project 是一个专注于嵌入式 Linux® 操作系统开发的开源协作项目,它提供灵活的工具集和开发环境,允许全球的嵌入式设备开发人员通过共享技术,软件堆栈,配置和用于创建这些定制的Linux映像的最佳实践进行协作。有关 Yocto 项目的更多信息,请参阅 Yocto Project 官网:www.yoctoproject.org/。 Yocto Project 官网上有 Yocto Project Reference ManualYocto Project Overview 等相关文档详细描述了如何构建系统。

1.3.9. Yocto Project Release layer 介绍

layer 路径 优先级(数字越大优先级越高) 描述
meta-oe meta-openembedded/meta-oe 6 contains a large amount of additional recipes
meta-python meta-openembedded/meta-python 7 Provide Python recipes
meta-qt5 meta-qt5 7 Provides QT5 recipes
meta-clang meta-clang 7 clang compiler
meta-rockchip meta-rockchip 9 Rockchip board level support available
meta meta 5 Contains the OpenEmbedded-Core metadata
meta-poky meta-poky 5 Holds the configuration for the Poky reference distribution
meta-yocto-bsp meta-yocto-bsp 5 Configuration for the Yocto Project reference hardware board support package.
meta-chromium meta-chromium 7 Provide chromium browser recipe

1.4. 编译 Debian 固件

本章介绍 Debian 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。

1.4.1. 编译

Debian 固件的编译方法和 Ubuntu 的唯一区别是使用的文件系统不一样,其他步骤包括配置文件完全一致

因此请参考 编译 Ubuntu 固件

下面只介绍不同点,文件系统的替换

1.4.1.1. 下载 Debian 根文件系统


之后按照正常编译 Ubuntu 固件的步骤执行即可

1.5. 编译 Buildroot 固件

本章介绍 Buildroot 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。

1.5.1. 编译 SDK

1.5.1.1. 编译前配置

1.5.1.2. 选择编译配件

注意:Firefly kernel 没有开启全部的内核功能,有需求请查看Kernel 使用

1.5.2. 分区说明

1.5.2.1. parameter 分区表

FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3568
MACHINE_ID: 007
MANUFACTURER: RK3568
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00040000@0x00038000(oem),0x00c00000@0x00078000(rootfs),-@0x00c78000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

CMDLINE 属性是我们关注的地方,以 uboot 为例, 0x00002000@0x00004000(uboot) 中 0x00004000 为uboot 分区的起始位置,0x00002000 为分区的大小,以此类推。

1.5.2.2. package-file

package-file 文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与 parameter.txt 文件保持一致。

2. 编译 Linux5.10 固件

2.1. 编译环境搭建

本章介绍 Linux SDK 的编译环境搭建

注意:

(1)推荐在 X86_64 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。

(2)使用普通用户进行编译,不要使用 root 用户权限进行编译。

2.1.1. 获取 SDK

首先准备一个空文件夹用于存放 SDK,建议在 home 目录下,本文以~/proj为例

不要在虚拟机共享文件夹以及非英文目录存放、解压SDK,避免产生不必要的错误

获取 SDK 需要先安装:

  • 方法一(推荐)

由于 Firefly_Linux_SDK 源码包比较大,部分用户电脑不支持4G以上文件或单个文件网络传输较慢, 所以我们采用分卷压缩的方法来打包 SDK。用户可以通过如下方式获取 Firefly_Linux_SDK 源码包:rk356x_linux5.10_release_20240319_v1.4.0b

下载完成后,提取 SDK:

  • 方法二

通过 repo 拉取代码,此方法对网络要求较高,有条件可以使用

可选择获取完整 SDK 或者 BSP:

# 创建 SDK 目录
mkdir ~/proj/rk356x_sdk-linux5.10
cd ~/proj/rk356x_sdk-linux5.10

## 完整 SDK
repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git --no-repo-verify -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_linux5.10_release.xml

## BSP ( 只包含基础仓库和编译工具 )
## BSP 包括 device/rockchip 、docs 、 kernel 、 u-boot 、 rkbin 、 tools 和交叉编译链
repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git --no-repo-verify -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_linux5.10_bsp_release.xml

2.1.2. 同步代码

执行如下命令同步代码:

2.1.3. 目录结构

2.1.4. 安装依赖

  • 方法一:

在 PC 中自行安装环境:

  • 方法二:使用 Docker

使用 dockerfile 创建容器,在容器中进行编译,完美解决编译环境问题,并且与主机环境隔离,互不影响。

首先在主机中安装 docker,请参考:安装教程

现在就可以在容器中进行 SDK 的编译了。

退出容器、重启容器的方法:

2.2. 编译 Ubuntu 固件

本章介绍 Ubuntu 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。

2.2.2. 编译 SDK

2.2.2.1. 编译前配置

2.2.2.2. 选择编译配件

2.2.2.3. 下载 Ubuntu 根文件系统


2.2.2.5. 部分编译

注意:Firefly kernel 没有开启全部的内核功能,有需求请查看Kernel 使用

2.2.3. 分区说明

2.2.3.1. parameter 分区表

parameter.txt 文件中包含了固件的分区信息,以 parameter-ubuntu-fit.txt 为例:

FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3568
MACHINE_ID: 007
MANUFACTURER: RK3568
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
GROW_ALIGN: 0
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00040000@0x00008000(boot:bootable),0x00020000@0x00048000(recovery),0x00010000@0x00068000(backup),0x00c00000@0x00078000(rootfs),-@0x00c78000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

CMDLINE 属性是我们关注的地方,以 uboot 为例, 0x00002000@0x00004000(uboot) 中 0x00004000 为uboot 分区的起始位置,0x00002000 为分区的大小,以此类推。单位是块,每块 512 字节。

2.3. 编译 Yocto 固件

2.3.1. 获取SDK

repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_yocto_kirkstone_release.xml
.repo/repo/repo sync -c

2.3.2. 编译

2.3.2.1. 选择映像

Yocto 项目提供了一些可用于不 layer 的映像。下表列出目前支持构建的映像和相关配方。

映像名字 描述 提供的layer
core-image-minimal A small image that only allows a device to boot Poky
core-image-minimal-xfce A XFCE minimal demo image meta-openembedded/meta-xfce
core-image-sato Image with Sato, a mobile environment and visual style for mobile devices. The image supports X11 with a Sato theme, Pimlico applications, and contains terminal, editor, and file manager Poky
core-image-weston A very basic Wayland image with a terminal Poky
core-image-x11 A very basic X11 image with a terminal Poky

2.3.3. 编译映像文件

使用 bitbake 命令构建的过程需要保证网络连接正常,如果是中国内陆客户需要保证能 ping 通外网

完成上述修改后,执行命令编译 core-image-weston

2.3.4. 调整编译速度

2.3.5. 更多 bitbake 选项

从根本上说,BitBake 是一个通用任务执行引擎,它允许 shell 和 Python 任务高效并行运行,同时在复杂的任务间依赖约束下工作。 BitBake 的主要用户之一,OpenEmbedded,利用这个核心并使用面向任务的方法构建嵌入式 Linux 软件堆栈。更多详细使用方法请查看《bitbake-user-manual》

Bitbake paramater 描述
-c fetch 拉取目标所需要的代码
-c clean 清除目标的输出文件
-c cleanall 删除目标所有输出文件、共享高速缓存(shared state cache)和源代码
-c compile -f 使用此选项可在部署映像后强制重新编译,但不建议使用,除非 Yocto Project 不知道目标代码已经发生改变
-c listtasks 列出目标定义的所有 target

2.3.6. 分区固件烧写

2.3.8. 相关概述

Yocto Project 是一个专注于嵌入式 Linux® 操作系统开发的开源协作项目,它提供灵活的工具集和开发环境,允许全球的嵌入式设备开发人员通过共享技术,软件堆栈,配置和用于创建这些定制的Linux映像的最佳实践进行协作。有关 Yocto 项目的更多信息,请参阅 Yocto Project 官网:www.yoctoproject.org/。 Yocto Project 官网上有 Yocto Project Reference ManualYocto Project Overview 等相关文档详细描述了如何构建系统。

2.3.9. Yocto Project Release layer 介绍

layer 路径 优先级(数字越大优先级越高) 描述
meta-oe meta-openembedded/meta-oe 6 contains a large amount of additional recipes
meta-python meta-openembedded/meta-python 7 Provide Python recipes
meta-qt5 meta-qt5 7 Provides QT5 recipes
meta-clang meta-clang 7 clang compiler
meta-rockchip meta-rockchip 9 Rockchip board level support available
meta meta 5 Contains the OpenEmbedded-Core metadata
meta-poky meta-poky 5 Holds the configuration for the Poky reference distribution
meta-yocto-bsp meta-yocto-bsp 5 Configuration for the Yocto Project reference hardware board support package.
meta-chromium meta-chromium 7 Provide chromium browser recipe

2.4. 编译 Buildroot 固件

本章介绍 Buildroot 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。

2.4.1. 编译 SDK

2.4.1.1. 编译前配置

2.4.1.2. 选择编译配件

2.4.1.4. 部分编译

注意:Firefly kernel 没有开启全部的内核功能,有需求请查看Kernel 使用

编译目录在 buildroot/output/ 下

2.4.1.5. 打包固件

FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3568
MACHINE_ID: 007
MANUFACTURER: RK3568
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
GROW_ALIGN: 0
CMDLINE: mtdparts=:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00040000@0x00008000(boot:bootable),0x00020000@0x00048000(recovery),0x00010000@0x00068000(backup),0x00040000@0x00078000(oem),0x00c00000@0x000b8000(rootfs),-@0x00cb8000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

CMDLINE 属性是我们关注的地方,以 uboot 为例, 0x00002000@0x00004000(uboot) 中 0x00004000 为uboot 分区的起始位置,0x00002000 为分区的大小,以此类推。单位是块,每块 512 字节。

Firefly Linux 开发指南

Firefly Linux 开发指南

4. 技术案例

4.1. SSD 启动

本章节介绍如何把固件烧录到 SSD,并从 SSD 启动系统。

准备工作:

  • RK356x 平台

  • 良好的 M.2 SSD 或者 SATA SSD

  • 良好的 Type-C 数据线

  • 更新到最新的 Linux SDK,进入 u-boot 目录,确保有以下提交:


_images/rkdevtool_to_nor.png

注意的是如果设备使用了 extboot,则需要进行取消,目前 M.2 SSD 在 extboot 下兼容性较差。

取消 extboot:

4.1.2. SATA SSD 启动

SATA SSD 启动的操作步骤与 M.2 SSD 启动类似,不同点如下:

Android开发

1. ADB 使用

1.1. 前言

ADB,全称 Android Debug Bridge,是 Android 的命令行调试工具,可以完成多种功能,如跟踪系统日志,上传下载文件,安装应用等。

1.2. 准备连接

1.4. Windows下的 ADB 安装

首先参照安装 RK USB 驱动一节安装好驱动。

然后下载 adb.zip,解压到 C:adb 以方便调用。

打开命令行窗口,输入:

1.5. Ubuntu 下的 ADB 安装

1.6. 常用 ADB 命令

1.6.1. 连接管理

列出所有连接设备及其序列号:

1.7. 调试

1.7.1. 获取系统日志 adb logcat

1.7.2. 运行命令 adb shell

1.7.2.1. 获取详细运行信息 adb bugreport

1.8. 应用管理

1.8.1. 安装应用 adb install

1.8.2. 卸载应用 adb uninstall

前面是 apk 文件,后面则是对应的包名称。

1.8.3. 命令行帮助信息 adb help

2. 编译环境搭建

2.1. 准备工作

编译 Android 对机器的配置要求较高:

  • 64 位 CPU

  • 16GB 物理内存 交换内存

  • 250GB 空闲的磁盘空间

建议使用 Ubuntu 18.04 操作系统

  • Ubuntu 14.04 软件包安装参考:


此时视报错信息去安装缺少的软件包即可

3. 编译 Android11.0 固件

运行 Android11.0,ROC-RK3566-PC需要满足如下条件:

  • DDR至少需要 2GB

  • eMMC至少需要 16GB

3.1. Android SDK

SDK 源码与 bundle 压缩包均存放在云盘中。

3.1.1. 第一步,下载 SDK

 

3.1.2. 第二步,更新 SDK

下载 SDK 后,从 gitlab 处更新代码的方法:

随着 SDK 的更新,bundle 也会随之越来越大,可以去下载页面选择云盘下载 bundle

3.2. ROC-RK3566-PC 产品编译方法

注意:若是第一次编译该Android Product,请使用公版编译命令进行一次完整编译

3.2.1. 公版编译

3.2.1.1. HDMI

3.2.4. 双目摄像头 CAM-2MS2MF 编译

3.2.4.1. HDMI CAM-2MS2MF

3.2.5. HDMI TO MIPI_CSI(RK628D) 编译

3.3. 手动编译 ROC-RK3566-PC Android 11.0

编译前执行如下命令配置环境变量:

注意:进行内核debug的时候,单编译生成boot.img如果出现运行错误,可参考FAQs

打包完成后将在rockdev/Image-XXX/ 目录下生成统一固件: product名XXX_XXX_日期XXX.img

在 Windows 下打包统一固件 update.img 也很简单,将编译生成的文件拷贝到 AndroidTool 的 rockdevImage 目录中,然后运行 rockdev 目录下的 mkupdate.bat 批处理文件即可创建 update.img 并存放到 rockdevImage 目录里。

Firefly Android 开发指南

Firefly Android 开发指南

FireflyApi2 使用手册

FireflyApi2 使用手册

驱动开发

1. ADC 使用

1.1. 简介

ROC-RK3566-PC 开发板上的 AD 接口有两种,分别为:温度传感器 (Temperature Sensor)、逐次逼近ADC (Successive Approximation Register)。其中:

  • TS-ADC(Temperature Sensor):支持两通道,时钟频率必须低于800KHZ

  • SAR-ADC(Successive Approximation Register):支持六通道单端10位的SAR-ADC,时钟频率必须小于13MHZ。

内核采用工业 I/O 子系统来控制 ADC,该子系统主要为 AD 转换或者 DA 转换的传感器设计。 下面以 SAR-ADC 为例子,介绍 ADC 的基本配置方法。

1.2. DTS配置

1.2.1. 配置DTS节点

用户首先需在 DTS 文件中添加 ADC 的资源描述:

Linux DTS: kernel/arch/arm64/boot/dts/rockchip/rk3566-firefly-roc-pc.dts

Android DTS: kernel/arch/arm64/boot/dts/rockchip/rk3566-roc-pc.dts

这里申请的是SARADC通道5,在 ROC-RK3566-PC 中是不提供给客户外部使用的,而且也没有风扇接口,这里只是提供一个参考,客户可自行参考这个例子去做自己的一些开发。

1.2.2. 在驱动文件中匹配 DTS 节点

接着在 firefly_adc_probe 中对 DTS 所添加的资源进行解析:

1.3. 驱动说明

1.3.1. 获取 AD 通道

调用 iio_read_channel_raw 函数读取 AD 采集的原始数据并存入 val 中。

1.3.3. 计算采集到的电压

使用标准电压将 AD 转换的值转换为用户所需要的电压值。其计算公式如下:

1.5.2. 获取所有 ADC 值

有个便捷的方法可以查询到每个 SARADC 的值:

1.6. FAQs

1.6.1. 为何按上面的步骤申请 SARADC,会出现申请报错的情况?

驱动需要获取ADC通道来使用时,需要对驱动的加载时间进行控制,必须要在saradc初始化之后。saradc是使用module_platform_driver()进行平台设备驱动注册,最终调用的是module_init()。所以用户的驱动加载函数只需使用比module_init()优先级低的,例如:late_initcall(),就能保证驱动的加载的时间比saradc初始化时间晚,可避免出错。

2. Camera 使用

2.1. MIPI CSI用法

RK3566/RK3568平台仅有一个标准物理mipi csi2 dphy,可以工作在两个模式: full mode 和split mode, 拆分为csi2_dphy0/csi2_dphy1/csi2_dphy2三个逻辑dphy(参见rk3568.dtsi)

2.1.1. Full Mode

  • 仅使用csi2_dphy0,csi2_dphy0与csi2_dphy1/csi2_dphy2互斥,不可同时使用;

  • data lane最大4 lanes;

  • 最大速率2.5Gbps/lane;

2.1.2. Split Mode

  • 仅使用csi2_dphy1和csi2_dphy2, 与csi2_dphy0互斥,不可同时使用;

  • csi2_dphy1和csi2_dphy2可同时使用;

  • csi2_dphy1和csi2_dphy2各自的data lane最大是2 lanes;

  • csi2_dphy1对应物理dphy的lane0/lane1;

  • csi2_dphy2对应物理dphy的lane2/lane3;

  • 最大速率2.5Gbps/lane

_images/rk356x_mipi_csi_mode.png

简单点来讲,如果用单目摄像头我们可以配置full mode,若使用双目摄像头我们可以配置split mode

2.2. Full Mode配置

链接关系: sensor->csi2_dphy0->isp

2.2.1. Full Mode设备树配置要点

2.2.2. 配置sensor端

我们需要根据板子原理图的MIPI CSI接口找到sensor是挂在哪个I2C总线上,然后在对应的I2C节点配置camera节点,正确配置camera模组的I2C设备地址、引脚等属性。如下ROC-RK3566-PC的xc7160配置:

2.2.3. csi2_dphy0相关配置

csi2_dphy0与csi2_dphy1/csi2_dphy2互斥,不可同时使用。另外需要使能csi2_dphy_hw节点

2.2.4. isp相关配置

2.3. Split Mode配置

链接关系:

sensor1->csi_dphy1->isp_vir0

sensor2->csi_dphy2->mipi_csi2->vicap->isp_vir1

2.3.1. Split Mode设备树配置要点

2.3.2. 配置sensor端

我们需要根据板子原理图的MIPI CSI接口找到两个sensor是挂在哪个I2C总线上,然后在对应的I2C节点配置两个camera节点,正确配置camera模组的I2C设备地址、引脚等属性。如下ROC-RK3566-PC的gc2053/gc2093配置:

2.3.3. csi2_dphy1/csi2_dphy2相关配置

csi2_dphy0与csi2_dphy1/csi2_dphy2互斥,不可同时使用

2.3.4. isp相关配置

2.4. 软件相关目录

2.5. 单目CAM-8MS1M/双目CAM-2MS2MF摄像头的使用

firefly已经配置好相应的dts,单目摄像头CAM-8MS1M和双目摄像头CAM-2MS2MF使用互斥,只需包含相应的dtsi文件即可使用单目摄像头CAM-8MS1M或双目摄像头CAM-2MS2MF

Linux 已经配置好各种组合的 dts 和 mk 文件,编译前按需选择,不用修改文件

Android 需要如下修改:

2.5.1. 使用单目摄像头CAM-8MS1M

dts的配置默认使用单目摄像头

2.6. Camera底层调试

使用v4l2-ctl抓取camera数据帧

v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='NV12' --stream-mmap=4 --set-selection=target=crop,flags=0,top=0,left=0,width=1920,height=1080 --stream-to=/data/out.yuv

把out.yuv文件拷贝出来通过ubuntu去查看

2.8. Linux系统预览摄像头

Buildroot直接使用qcamera打开摄像头,可进行拍摄与录制,详细参考 Buildroot使用手册

Ubuntu 单目摄像头预览可以使用如下脚本:

也可以使用之前提到的抓帧方法,抓到数据后用mpv播放:

2.9. IQ文件

若使用raw摄像头sensor,请留意isp21目录所支持的iq文件

3. I2C 使用

3.1. 简介

ROC-RK3566-PC开发板上有 6 个片上 I2C 控制器,各个 I2C 的使用情况如下表:

Port Pin name Device
I2C0 GPIO0_B1/I2C0_SCL
GPIO0_B2/I2C0_SDA
RK809
I2C1 GPIO0_B3/I2C1_SCL
GPIO0_B4/I2C1_SDA
复用为其他功能
I2C2_M0 GPIO0_B5/I2C2_SCL_M0
GPIO0_B6/I2C2_SDA_M0
RTC(HYM8563) /TP
I2C2_M1 GPIO4_B5/I2C2_SCL_M1
GPIO4_B4/I2C2_SDA_M1
Camera
I2C3_M0 GPIO1_A1/I2C3_SCL_M0
GPIO1_A0/I2C3_SDA_M0
复用为其他功能
I2C3_M1 GPIO3_B5/I2C3_SCL_M1
GPIO3_B6/I2C3_SDA_M1
复用为其他功能
I2C4_M0 GPIO4_B3/I2C4_SCL_M0
GPIO4_B2/I2C4_SDA_M0
复用为其他功能
I2C4_M1 GPIO2_B2/I2C4_SCL_M1
GPIO2_B1/I2C4_SDA_M1
复用为其他功能
I2C5_M0 GPIO3_B3/I2C5_SCL_M0
GPIO3_B4/I2C5_SDA_M0
复用为其他功能
I2C5_M1 GPIO4_C7/I2C5_SCL_M1
GPIO4_D0/I2C5_SDA_M1
复用为其他功能

本文主要描述如何在该开发板上配置 I2C。

配置 I2C 可分为两大步骤:

  • 定义和注册 I2C 设备

  • 定义和注册 I2C 驱动

下面以配置 GSL3680 为例。

3.2. 定义和注册 I2C 设备

3.3. 定义和注册 I2C 驱动

3.3.1. 定义 I2C 驱动

3.3.2. 注册 I2C 驱动

3.3.3. 通过 I2C 收发数据

在注册好 I2C 驱动后,即可进行 I2C 通讯。

3.4. FAQs

3.4.1. Q1: 通信失败,出现这种 log: “timeout, ipd: 0x00, state: 1” 该如何调试?

A1: 请检查硬件上拉是否给电。

3.4.2. Q2: 调用 i2c_transfer 返回值为 -6?

A2: 返回值为 -6 表示为 NACK 错误,即对方设备无应答响应,这种情况一般为外设的问题,常见的有以下几种情况:

  • I2C 地址错误,解决方法是测量 I2C 波形,确认是否 I2C 设备地址错误;

  • I2C slave 设备不处于正常工作状态,比如未给电,错误的上电时序等;

  • 时序不符合 I2C slave 设备所要求也会产生 Nack 信号。

3.4.3. Q3: 当外设对于读时序要求中间是 stop 信号不是 repeat start 信号的时候,该如何处理?

A3: 这时需要调用两次 i2c_transfer, I2C read 拆分成两次,修改如下:

4. IR 使用

4.1. 红外遥控配置

ROC-RK3566-PC 开发板上使用红外收发传感器 IR (在LED 灯旁边)实现遥控功能,在 IR 接口处接上红外接收器。本文主要描述在开发板上如何配置红外遥控器。

其配置步骤可分为两个部分:

  • 修改内核驱动:内核空间修改,Linux 和 Android 都要修改这部分的内容。

  • 修改键值映射:用户空间修改(仅限 Android 系统)。

4.2. 内核驱动

在 Linux 内核中,IR 驱动仅支持 NEC 编码格式。以下是在内核中配置红外遥控的方法。

Android系统kernel所涉及到的文件:

4.2.1. 定义相关数据结构

键值表结构体数组和配置参考如下:

注:rockchip,key_table第一列为键值,第二列为要响应的按键码。

4.2.2. 如何获取用户码和IR 键值

在rockchip_pwm_remotectl.c驱动中的 remotectl_do_something 函数获取用户码和键值:

4.2.3. 将 IR 驱动编译进内核

保存后,按照固件编译的方法编译kernel即可

4.2.4. Android 键值映射

注:通过 ADB 修改该文件重启后即可生效。

4.3. IR 使用

如下图是通过按红外遥控器按钮,所产生的波形,主要由 head, Control, information, signed free 这四部分组成,具体可以参考 RC6 Protocol。

_images/ir.jpg

5. LCD使用

5.1. Config配置

这里定义了LCD的控制引脚:

NAME GPIO GPIO_ACTIVE
reset-gpios GPIO0_C2 GPIO_ACTIVE_LOW
enable-gpios GPIO0_C7 GPIO_ACTIVE_HIGH

在硬件信号上enable引脚高电平有效,而reset引脚是低电平有效。

具体的引脚配置请参考《GPIO 使用》一节。

5.2.2. 背光配置

在DTS文件中配置了背光信息,如下:

详细说明可参考以下附件: Rockchip DRM Panel Porting Guide.pdf

6. GPIO 使用

6.1. 简介

GPIO, 全称 General-Purpose Input/Output(通用输入输出),是一种软件运行期间能够动态配置和控制的通用引脚。 所有的 GPIO 在上电后的初始状态都是输入模式,可以通过软件设为上拉或下拉,也可以设置为中断脚,驱动强度都是可编程的,其核心是填充 GPIO bank 的方法和参数,并调用 gpiochip_add 注册到内核中。

ROC-RK3566-PC 开发板为了方便用户开发使用,引出了一排扩展的GPIO口供用户调试和开发。

6.3. 输入输出

首先在 DTS 文件中增加驱动的资源描述:

6.4. 中断

在 Firefly 的例子程序中还包含了一个中断引脚,GPIO 口的中断使用与 GPIO 的输入输出类似,首先在 DTS 文件中增加驱动的资源描述:

然后在 probe 函数中对 DTS 所添加的资源进行解析,再做中断的注册申请,代码如下:

6.5. 复用

GPIO 口除了通用输入输出、中断功能外,还可能有其它复用功能,如GPIO0_B4, 就有如下几个功能:

func0 func1 func2 func3 func4
GPIO0_B4 I2C1_SDA CAN0_RX_M0 PCIE20_BUTTONRSTn MCU_JTAG_TCK

那么在使用作GPIO口时,就需要注意是否被复用为其他功能了,这里可以用io命令查看iomux来判断是否复用,在调试方法的章节中有相关说明,这里不多作说明。 假如通过io命令发现GPIO0_B4有复用作I2C1_SDA,使用GPIO0_B4作gpio或者其他功能时就需要将I2C1 disabled掉。

查规格表可知,I2C4_SDA_M0 与 I2C4_SCL_M0 的功能定义如下:

Pad# func0 func1 func2 func3 func4 func5
I2C4_SDA_M0/GPIO4_B2 GPIO4_B2 I2C4_SDA EBC_VCOM GMAC1_RXER_M1 SPI3_MOSI_M0 I2S2_SDI_M1
I2C4_SCL_M0/GPIO4_B3 GPIO4_B3 I2C4_SDA EBC_GDOE ETH1_REFCLKO_25MM1 SPI3_CLK_M0 I2S2_SDO_M1

我们看看如下 i2c 的驱动程序是如何切换复用功能的:

首先是调用 of_get_gpio 取出设备树中 i2c4 结点的 gpios 属于所定义的两个 gpio:

6.6. FAQs

6.6.1. Q1: 如何将 PIN 的 MUX 值切换为一般的 GPIO?

A1: 当使用 GPIO request 时候,会将该 PIN 的 MUX 值强制切换为 GPIO,所以使用该 PIN 脚为 GPIO 功能的时候确保该 PIN 脚没有被其他模块所使用。

6.6.2. Q2: 为什么我用 IO 指令读出来的值都是 0x00000000?

A2: 如果用 IO 命令读某个 GPIO 的寄存器,读出来的值异常,如 0x00000000 或 0xffffffff 等,请确认该 GPIO 的 CLK 是不是被关了,GPIO 的 CLK 是由 CRU 控制,可以通过读取 datasheet 下面 CRU_CLKGATE_CON* 寄存器来查到 CLK 是否开启,如果没有开启可以用 io 命令设置对应的寄存器,从而打开对应的 CLK,打开 CLK 之后应该就可以读到正确的寄存器值了。

6.6.3. Q3: 测量到 PIN 脚的电压不对应该怎么查?

A3: 测量该 PIN 脚的电压不对时,如果排除了外部因素,可以确认下该 PIN 所在的 IO 电压源是否正确,以及 IO-Domain 配置是否正确。

6.6.4. Q4: gpio_set_value() 与 gpio_direction_output() 有什么区别?

A4: 如果使用该 GPIO 时,不会动态的切换输入输出,建议在开始时就设置好 GPIO 输出方向,后面拉高拉低时使用 gpio_set_value() 接口,而不建议使用 gpio_direction_output(), 因为 gpio_direction_output 接口里面有 mutex 锁,对中断上下文调用会有错误异常,且相比 gpio_set_value,gpio_direction_output 所做事情更多,浪费。

7. LED 使用

7.1. 前言

ROC-RK3566-PC开发板上有 2 个 LED 灯,如下表所示:

LED Pin name Pin number
Blue GPIO0_D3 27
Yellow GPIO0_D4 28

可通过使用 LED 设备子系统或者直接操作 GPIO 控制该 LED。

7.2. 以设备的方式控制 LED

标准的 Linux 专门为 LED 设备定义了 LED 子系统。 在 ROC-RK3566-PC开发板中的两个 LED 均以设备的形式被定义。

7.3. 使用 trigger 方式控制 LED

Trigger 包含多种方式可以控制 LED,这里就用两个例子来说明。

  • Simple trigger LED

  • Complex trigger LED

7.3.1. Simple trigger LED

7.3.2. Complex trigger LED

8. PWM 使用

8.1. 前言

本章主要描述如何配置 PWM。

8.3. 接口说明

用户可在其它驱动文件中使用以上步骤生成的 PWM 节点。具体方法如下:

8.4. 调试方法

查看注册是否成功,成功则返回接口名和寄存器地址。

8.5. FAQs

8.5.1. PWM 无法注册成功:

  • dts 配置文件是否打开对应的 PWM。

  • PWM 所在的 IO 口是否被其他资源占用,可以根据报错的返回值去查看原因。

9. RTC 使用

9.1. 简介

ROC-RK3566-PC开发板采用HYM8563作为RTC(Real Time Clock),HYM8563是一款低功耗CMOS实时时钟/日历芯片,它提供一个可编程的时钟输出,一个中断 输出和一个掉电检测器,所有的地址和数据都通过I2C总线接口串行传递。最大总线速度为 400Kbits/s,每次读写数据后,内嵌的字地址寄存器会自动递增

  • 可计时基于 32.768kHz 晶体的秒,分,小时,星期,天,月和年

  • 宽工作电压范围:1.0~5.5V

  • 低休眠电流:典型值为 0.25μA(VDD =3.0V, TA =25°C)

  • 内部集成振荡电容

  • 漏极开路中断引脚

9.2. RTC驱动

9.3. 接口使用

Linux 提供了三种用户空间调用接口。在 ROC-RK3566-PC开发板中对应的路径为:

  • SYSFS接口:/sys/class/rtc/rtc0/

  • PROCFS接口: /proc/driver/rtc

  • IOCTL接口: /dev/rtc0

9.3.1. SYSFS接口

9.3.2. PROCFS 接口

打印 RTC 相关的信息:

9.4. FAQs

9.4.1. Q1: 开发板上电后时间不同步?

A1: 检查一下 RTC 电池是否正确接入。

配件

1. 串口模块

1.1. USB转TTL串口模块

1.1.1. 产品参数

  • 品牌:Firefly

  • 尺寸:29mm*19mm

1.1.2. 技术资料

1.1.3. 实物图

_images/module_serial_list.jpg

1.1.4. 连接方法

_images/debug_connection.jpg

2. 屏幕模组

2.1. DM-M10R800 V2 MIPI屏模组

2.1.1. 产品参数

  • 型号:M101014_BE45_A1

  • 尺寸:10.1寸

  • 分辨率:800x1280

  • 显示接口:MIPI

  • 面板材料:IPS面板

  • 可视角度:160°

  • 触摸屏:多点电容触摸

2.1.2. 参考固件

支持10.1寸屏的官方固件名带有MIPI字样,下面是固件的链接:固件链接

如需使用双屏显示,请先参考FAQ

2.1.3. 编译命令

用官网SDK编译支持的10.1 寸mipi屏的固件时使用以下命令:

2.1.5. 实物图

2.1.5.1. 正面

_images/mipi101_v2_M101014_BE45_A1_front.jpg

2.1.5.2. 背面

_images/mipi101_v2_M101014_BE45_A1_back.jpg

3. 摄像头模组

3.1. CAM-8MS1M 单目摄像头模组

3.1.1. 产品参数

  • 品牌:SV

  • ISP:xc7160

  • Sensor: sc8238

  • 接口: MIPI

  • 像素: 800W(当前仅支持1080P,4K仍在适配中)

3.1.3. 参考固件

公版固件默认支持 CAM-8MS1M 单目摄像头模组。若无法使用单目摄像头 CAM-8MS1M,请更新固件

固件下载: CAM-8MS1M

3.1.4. 实物图参考

_images/cam_8ms1m_front.jpg _images/cam_8ms1m_back.jpg

3.1.5. 连接方法

_images/roc_rk3566_pc_8ms1m.jpg

3.1.6. 实拍图片

_images/camera_8ms1m_shoot.jpg

3.2. CAM-2MS2MF 双目摄像头模组

3.2.1. 产品参数

  • 品牌:SV

  • Sensor: gc2053(IR)/gc2093(RGB)

  • 接口: MIPI

  • 像素: 200W

3.2.3. 参考固件

双目摄像头 CAM-2MS2MF Android11 固件下载

固件下载: CAM-2MS2MF

3.2.4. 实物图参考

_images/cam_2ms2m_front.jpg _images/cam_2ms2m_back.jpg

3.2.5. 连接方法

_images/roc_rk3566_pc_2ms2m.jpg

3.2.6. 实拍图片

_images/camera_2ms2m_shoot.png

4. 无线模块

4.1. EC20 4G模组套件

4.1.1. 产品参数

  • 型号

    • EC20-C R2.0 Mini PCIe-C

  • 电源电压

    • 3.3V~ 3.6V, 典型值: 3.3V

  • 工作频段

    • TDD-LTE: B38/B39/B40/B41

    • FDD-LTE: B1/B3/B8

    • WCDMA: B1/B8

    • TD-SCDMA: B34/B39

    • GSM: 900/1800 MHz

  • 数据传输

    • TDD-LTE: Max 130Mbps (DL) Max 35Mbps (UL)

    • FDD-LTE: Max 150Mbps (DL) Max 50Mbps (UL)

    • DC-HSPA : Max 42Mbps (DL) Max 5.76Mbps (UL)

    • UMTS: Max 384Kbps (DL) Max 384Kbps (UL)

    • TD-SCDMA: Max 4.2Mbps (DL) Max 2.2Mbps (UL)

    • CDMA: Max 3.1Mbps (DL) Max 1.8Mbps (UL)

    • EDGE: Max 236.8Kbps (DL) Max 236.8Kbps (UL)

    • GPRS: Max 85.6Kbps (DL) Max 85.6Kbps (UL)

  • 接口连接器

    • USB:USB 2.0 高速接口, 480Mbps

    • 数字语音:1个数字语音接口 (可选)

    • USIM:1.8V/3V

    • 网络指示:×2, NET_STATUS 和 NET_MODE

    • UART:×1 UART

    • 复位:低电平

    • PWRKEY:低电平

    • 天线接口:×3 (主天线, 分集天线和GNSS天线接口)

    • ADC:×2

  • 结构尺寸

    • 51.0mm × 30.0mm × 4.9mm

  • 重量

    • 约 10.5g

  • 认证

    • CCC/ NAL*/ TA

4.1.2. GNSS 功能

EC20 模组分带GNSS和不带GNSS两种,Firefly官网售卖的EC20 4G模组是不支持GNSS的,后缀为SNNS,支持GNSS功能的EC20 模组一般带有后缀SGNS,公版固件支持GNSS功能,但是默认关闭,使用方法可参考EC20 GNSS功能章节。

4.1.3. 实物图

_images/module_wireless_ec20.png

4.1.4. 连接方法

  • USB 接口连接

_images/module_wireless_ec20_usb.jpg

  • SIM 卡连接

_images/module_wireless_sim_connection.jpg

4.2. EC200T 4G模组套件

4.2.1. 产品参数

  • 型号

    • EC200T-CN Mini PCIe-D

  • 电源电压

    • 3.4V~ 4.3V, 典型值: 3.8V

  • 工作频段

    • TDD-LTE: B34/B38/B39/B40/B41

    • FDD-LTE: B1/B3/B5/B8

    • WCDMA: B1/B5/B8

    • GSM: 900/1800 MHz

  • 数据传输

    • TDD-LTE: Max 120Mbps (DL) Max 3Mbps (UL)

    • FDD-LTE: Max 150Mbps (DL) Max 50Mbps (UL)

    • DC-HSDPA: Max 21Mbps (DL)

    • HSDPA: Max 5.76 Mbps (UL)

    • WCDMA: Max 384Kbps (DL) Max 384Kbps (UL)

    • EDGE: Max 236.8Kbps (DL) Max 236.8Kbps (UL)

    • GPRS: Max 85.6Kbps (DL) Max 85.6Kbps (UL)

  • 接口连接器

    • USB:USB 2.0 高速接口, 480Mbps

    • 数字语音:1个数字语音接口 (可选)

    • USIM:1.8V/3V

    • UART:×1 UART

    • UART_DTR (睡眠控制)

    • W_DISABLE# (飞行模式控制)

    • LED_WWAN# (网络状态指示)

    • PERST# (模块复位)

    • RI (主机唤醒)

    • WAKEUP_IN (睡眠控制,低电平有效)

    • WAKEUP_OUT (睡眠状态指示)

    • 天线接口:×2 (主天线, 分集天线)

  • 结构尺寸

    • 51.0mm × 30.0mm × 4.9mm

  • 重量

    • 约 10.2g

  • 认证

    • CCC/SRRC/NAL

4.2.2. 实物图

_images/module_wireless_ec200t.jpg

4.2.3. 连接方法

参考EC20 4G模组套件

4.2.4. 参考固件

公版固件默认支持 EC20 4G 模组、EC200T 4G模组

4.3. GNSS 模块

4.3.1. EC20 GNSS功能

EC20模组支持GPS、GLONASS、GALILEO、BEIDOU,兼容标准 NMEA 0183 协议,可通过 USB NMEA 接口输出 1Hz 频率的 NMEA 信息,默认输出串口为/dev/ttyUSB1,波特率115200 bit/s。

4.3.1.1. 天线要求

  • 频率范围:1559MHz~1609MHz

  • 极化:RHCP 或 Linear

  • VSWR:< 2(典型值)

  • 有源天线噪声系数:< 1.5dB

  • 有源天线增益:> 0dB

  • 有源天线内嵌 LNA 增益:< 17dB

注意: GPS天线需要使用有源天线

4.3.1.2. 使用说明

4.3.1.2.1. 硬件连接

EC20模组根据EC20 4G模组套件章节的说明连接,天线接入带有GPS丝印的天线接口。

4.3.1.2.2. 软件配置

对于EC20模组,其GNSS 配置的串口节点和波特率分别为/dev/ttyUSB1115200,使用模组之前需要检查/system/etc/u-blox.confSERIAL_DEVICE或者SERIAL_BAUD_RATE的值是否与之匹配,确认匹配则使能GPS后即可使用,使能方法参考如何使能GPS和修改串口配置

注意:对于EC20模组,使用GNSS功能时,需要注意是否有接入其他的ttyUSB*设备,存在其他ttyUSB时,有可能会使EC20的默认ttyUSB设备号发生变化,导致GNSS功能无法使用

4.3.2. 如何使能GPS和修改串口配置

名词解释:

  • SERIAL_DEVICE: 串口节点

  • SERIAL_BAUD_RATE: 串口波特率

4.3.2.1. 临时修改

确保固件为最新公版固件,固件默认关闭GPS功能,需要手动使能,以下是修改方法:

 

5. USB电源适配器

5.1. 产品参数

  • 产品:USB充电头(美规)

  • 输入电压:110-240VAC

  • 输出电压:5V DC

  • 输出电流:2A

  • 额定功率:10W

  • DC接口 :USB口

  • 注意:ROC-RK3566-PC 正常工作需要的电源参数为5V/2A,电流低于2A可能会因电流过小而异常重启,为了保证开发板的正常工作,请使用电压为5V,电流大于2A的电源,推荐使用Firefly官网电源配件。

5.2. 实物图

_images/USB_adapter.jpg

6. 红外遥控器

6.1. 产品参数

  • 产品:12键红外遥控器

  • 版本:Firefly 定制版

  • 电源:两节7号电池

  • 适配:ROC-RK3566-PC

  • 描述:支持 ROC-RK3566-PC 开发板的遥控功能

6.2. 实物图

_images/module_ir.png

6.3. 键值码

_images/module_ir_remote_info.png

一、产品介绍

产品简介

HDMI TO MIPI CSI 驱动板

HDMI TO MIPI CSI驱动板,采用视频桥接芯片RK628D,可实现HDMI视频信号转换为MIPI CSI信号的转换需求,可极大简化硬件设计,提高硬件设计效率,并节约整机成本。可应用于智能微型投影仪、智能显示屏、视频采集转换类产品。

_images/rk628d_front.jpg

发货清单(仅供参考)

_images/rk628d_shipping_list.png

规格参数

  • 尺寸大小:43.5mm * 30 mm

  • HDMI RX 接口:

    • 兼容HDMI 1.4/HDMI 2.0

    • 支持8/10bit 视频格式

    • 支持RGB888/YUV420

    • 最大支持分辨率4K@60fps (YUV420)

  • MIPI CSI 接口:

    • 兼容MIPI DPHY V1.2

    • 支持YUV422

    • 主要分辨率支持:3840x2160@30fps,1920x1080@60fps,1280x720@60fps,720x480@60fps

  • LINEOUT 接口:

    • 同一路音频输出:3.5mm 耳机接口 * 1、3P-2mm * 1、2P-1.25mm * 1

接口定义

_images/rk628d_interface.jpg

Line Out:将声卡处理后的模拟信号通过此接口输出到音频设备上。

二、使用方法

主板支持列表详见固件制作章节

硬件连接

RK3566/RK3568/RK3588/RK3588S 系列主板

_images/rk628d_connection.jpg

RK3399系列主板

_images/rk628d_connection_30p-to-24p.jpg

注意:
1. 请在驱动板和开发板处于断电状态操作此步骤,避免烧坏驱动板和开发板;
2. RK3399 系列主板如存在两个MIPI CSI接口,默认接MIPI CSI0。

Android 使用HDMI-IN

系统默认内置HdmiIn2的应用,如图: 

_images/rk628d_HdmiIn2.png

点击进入应用后,就会有HDMI-IN 的图像显示,音频会从驱动板上的LineOut输出,最大支持输出分辨率3840x2160@30fps。

Linux 使用 HDMI-IN

在设备上运行如下脚本:

三、固件与资料下载

相关文档和固件下载,见官网的资料下载

四、入门教程

固件制作

RK3566 系列

系统 板卡型号
Android11.0 AIO-3566JD4, ROC-RK3566-PC
Ubuntu20.04 AIO-3566JD4, ROC-RK3566-PC

RK3568 系列

系统 板卡型号
Android11.0 AIO-3568J, ROC-RK3568-PC, ROC-RK3568-PC SE
Ubuntu20.04 AIO-3568J, ROC-RK3568-PC, ROC-RK3568-PC SE

RK3588 系列

系统 板卡型号
Android12.0 ITX-3588J, AIO-3588Q

RK3588S 系列

系统 板卡型号
Android12.0 AIO-3588SJD4, ROC-RK3588S-PC

其他

1. Kernel 使用

1.1. 前言

Firefly kernel 没有开启全部的内核功能选项,用户在使用官方默认固件发现内核不满足使用场景时,比如 USB CAN 相关功能,则需要自行开启并重新编译、烧录内核。下面介绍方法:

1.2. 定制

首先需要获取 SDK ,开发环境的准备和获取方法查看:

Linux 开发

Android 开发

之后开始新增内核选项:

之后会进入一个图形化界面进行配置 

_images/kernel_menuconfig.jpg

搜索结果中按下最左侧显示的数字,可以直接前往这个配置项所在位置:

_images/kernel_menuconfig_search.jpg

属于同一个组的多个选项建议全部打开,例如下图中所有选项都属于 CAN USB 接口支持,可以全部打开以获得完整支持

_images/kernel_menuconfig_demo.jpg

1.4. 烧录

参考分区烧写

2. U-Boot 使用

2.1. 前言

RK U-Boot 基于开源的 U-Boot 进行开发,工作模式有启动加载模式和下载模式。启动加载模式是 U-Boot 的正常工作模式,嵌入式产品发布时,U-Boot 都工作在此模式下,主要用于开机时把存储器中的内核加载到内存中,启动操作系统;下载模式主要用于将固件下载到存储器,开机时长按 Recovery 键可进入下载模式。本文简单说明 U-Boot 的使用,详细请参考Uboot开发

2.2. 编译

编译 U-Boot 与编译内核类似,编译前把默认配置写入 .config,执行:

2.3. 烧录

打开烧录工具,按住Recovery 按键,使用 Type-A to Type-C 线连接板子和PC 机上电,两秒后松开recovery按键.

_images/uboot_download.jpg

2.4. 确认是否正确烧写新的 Loader

如果你已经成功烧写你最新编译的 Loader,在开机的串口输出中可以看到类似如下信息:

如果打印的时间及版本与你编译的一致,说明你成功更新了 Loader。

2.5. 进入 U-Boot 命令行模式

2.6. 二级 Loader

RK3566 使用二级 Loader,编译生成的镜像为:

3. NPU使用

RK3566 内置 NPU 模块, 处理性能最高可达1TOPS。使用该NPU需要下载RKNN SDK,RKNN SDK 为带有 NPU 的 RK 系列芯片提供编程接口,能够帮助用户部署使用 RKNN-Toolkit2 导出的 RKNN 模型,加速 AI 应用的落地,具体支持平台列表可通过 SDK 中 README 文档或者访问airockchip 查看,开发建议以airockchip官方更新版本作为参考。

3.1. RKNN 模型

RKNN 是 Rockchip NPU 平台使用的模型类型,以.rknn后缀结尾的模型文件。用户可以通过RKNN SDK提供的工具将自主研发的算法模型转换成 RKNN 模型

RKNN 模型可以直接运行在 RK3566 平台上,在rknpu2/examples中有例子,根据README.md编译生成 Android 或 Linux Demo(需要交叉编译环境)。也可以直接下载编译好的 Demo

在 ROC-RK3566-PC 上运行yolov5 demo如下:

# Platform 为芯片平台,如RK3576,RK3588, RK3566_RK3568等
:/ # cd /data/rknn_yolov5_demo_Android  (Linux 系统使用 rknn_yolov5_demo_Linux 即可)
:/data/rknn_yolov5_demo_Android # chmod 777 rknn_yolov5_demo
:/data/rknn_yolov5_demo_Android # export LD_LIBRARY_PATH=./lib
:/data/rknn_yolov5_demo_Android # ./rknn_yolov5_demo model/Platform/yolov5s-640-640.rknn ./model/bus.jpg resize ./out.jpg
post process config: box_conf_threshold = 0.25, nms_threshold = 0.45
Loading mode...
sdk version: 2.3.0 (c949ad889d@2024-11-07T11:35:33) driver version: 0.9.3
model input num: 1, output num: 3
  index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
  index=0, name=output0, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, w_stride = 0, size_with_stride=1638400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
  index=1, name=286, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, w_stride = 0, size_with_stride=409600, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
  index=2, name=288, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, w_stride = 0, size_with_stride=122880, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
model is NHWC input fmt
model input height=640, width=640, channel=3
Read ./model/bus.jpg ...
img width = 640, img height = 640
once run use 67.055000 ms
loadLabelName ./model/coco_80_labels_list.txt
person @ (209 243 286 510) 0.879723
person @ (479 238 560 526) 0.870588
person @ (109 238 231 534) 0.839831
bus @ (91 129 555 464) 0.692042
person @ (79 353 121 517) 0.300961
save detect result to ./out.jpg
loop count = 10 , average run  59.530100 ms

3.2. 非 RKNN 模型

对于 Caffe、TensorFlow 等其他模型,想要在 RK3566 平台运行,需要先进行模型转换。可以使用 RKNN-Toolkit2 工具将模型转换成 RKNN 格式。

3.3. RKNN-Toolkit2工具

3.3.1. 工具介绍

RKNN-Toolkit2 是为用户提供在 PC、Rockchip NPU 平台上进行模型转换、推理和性能评估的开发套件,用户通过该工具提供的 Python 接口可以便捷地完成各种操作。

工具的全部功能简单介绍如下:

3.3.2. 环境依赖

3.3.3. RKNN-Toolkit2 安装

建议使用 virtualenv 管理 Python 环境,因为系统中可能同时有多个版本的 Python 环境,以 Python3.6 为例

3.3.4. 模型转换 Demo

3.3.4.2. 运行在与 PC 相连的 ROC-RK3566-PC NPU 平台上

RKNN-Toolkit2 通过 PC 的 USB 连接到 OTG 设备 ROC-RK3566-PC。RKNN-Toolkit2 将 RKNN 模型传到 ROC-RK3566-PC 的 NPU 上运行,再从 ROC-RK3566-PC 上获取推理结果、性能信息等:

3.3.5. 其他 Toolkit Demo

其他 Toolkit Demo 可以在rknn-toolkit2/examples/下找到,例如量化、精度评估等。具体实现以及使用方法请参考 Demo 内源代码以及详细开发文档。

3.4. 详细开发文档

ROC-RK3566-PC NPU 及 Toolkit 详细使用方法请参考RKNN SDK下

《Rockchip_RKNPU_User_Guide_RKNN_API_*.pdf》、《Rockchip_User_Guide_RKNN_Toolkit2_*.pdf》文档。

常见问题解答

1. FAQs

1.1. kernel 编译弹出 “IO-Domain Checklist” 对话框

kernel 新建了 dts 文件 arch/arm64/boot/dts/rockchip/rk3566-roc-pc-DEMO.dts,编译 kernel 时弹出如下对话框 

_images/faq_rk356x_io-domain_checklist.png

 

先进行如下操作,再编译 kernel 。

cp arch/arm64/boot/dts/rockchip/.rk3566-roc-pc.dtb.dts.tmp.domain arch/arm64/boot/dts/rockchip/.rk3566-roc-pc-DEMO.dtb.dts.tmp.domain

切记:不要轻易修改主控电源域的IO电平,否则,最坏的情况可能会导致IO的损坏。

1.2. ROC-RK3566-PC SPK和MIC的使用问题

如果需要使用ROC-RK3566-PC来调试 SPK 和 MIC功能,可以使用外部扩展出来的IO口进行调试,软件默认支持,由于硬件信号是直接从codec引出来的,所以SPK只需接上喇叭即可,MIC这部分需要增加偏置电路才可以录音,如下

_images/roc-rk3566-pc-spk_mic.png

 

注意: 硬件版本 ROC-RK3566-PC V1.2 2022.01.22 的 MIC这部分已经有了偏置电路。

1.3. RK3566 双屏显示问题

由于RK3566双屏幕显示是使用同一个内部输入源,即VOPSame Source, Dual Display,所以如果是使用MIPI屏幕作为主屏,会导致副屏HDMI画面会严重拉伸(如下图),所以想避免 这个问题,主副屏幕都应该使用同分辨率同方向(横竖屏一致)的屏幕。

_images/3566_dualscreen.png

1.4. 修改 kernel/buildroot 等配置后编译烧录发现不生效

1.5. V1.0版本的设备和V1.1版本的设备的区别

1.5.1. V1.0版本设备

在V1.0版本设备中,I2C2_M0和I2C2_M1被硬件同时引出,造成了复用,所以使用I2C2_M1的MIPI CSI和使用I2C2_M0的RTC和MIPI DSI触摸部分是不能同时使用,V1.0版本设备出厂固件默认是使能I2C2_M0(即支持RTC和MIPI DSI关闭MIPI CSI),如需要使能MIPI CSI,则SDK需要进行以下修改即可

这样I2C2就使用了M1通道,而RTC和MIPI DSI的触摸部分暂时用不了。

1.5.2. V1.1及以上版本设备

在V1.1及以上版本的设备中,MIPI CSI单独使用的I2C4_M0和RTC,MIPI DSI所使用的I2C2_M0是不冲突的,共用的,不需要使用上一步的配置来进行区分使用。

1.6. HDMI 无法 4K 显示?

暂时无法支持自动切换 4K, 默认 1080P 显示, 后续会更新支持。可以使用以下命令手动设置 4K 分辨率后,重新插拔 HDMI 线:

1.7. 3.5mm耳机座子接国标耳机有异常?

目前ROC-RK3566-PC仅支持美标类型(CTIA)的耳机,对于国标类型(OMTP)的耳机硬件不兼容,会出现左右声道同时存在双声道的现象。

1.8. 开机异常并循环重启怎么办?

有可能是电源电流不够,请使用PD 电源来供电。

1.9. Ubuntu 默认的用户名和密码是什么?

1.10. 写号工具写入SN,MAC地址

注意:如果开发板进行了eMMC擦除操作,之前写入的数据也会被清除。

1.10.1. Windows方式

  • 安装RKDevInfoWriteTool

  • RKDevInfoWriteTool的设置里选中”RPMB”

  • 根据需要在RKDevInfoWriteTool的设置里配置”SN”,”WIFI MAC”,”LAN MAC”,”BT MAC”等

  • 开发板进入loader模式

  • RKDevInfoWriteTool进行写入或者读取操作

具体操作可以参考RKDevInfoWriteTool安装目录下的《RKDevInfoWriteTool使用指南》PDF文档。

1.10.2. Linux方式

开发板自身写号方式

  • buildroot使能BR2_PACKAGE_VENDOR_STORAGE

  • 通过vendor_storage命令进行读写操作

    
    

 

参考资料

1. 接口定义

1.1. 整机接口定义

ROC-RK3566-PC 提供了丰富的接口,主要包括:

  • 1 x USB3.0 (host)

  • 1 x USB2.0 (host)

  • HDMI

  • MIPI 屏幕接口

  • TP 触摸接口

  • 以太网

  • WIFI 天线

  • 3.5mm 耳机接口

  • Type-C(PD)电源接口

  • IR 接口

  • TF 卡槽

  • Power 按键

  • Reset 按键

  • Recovery 按键

  • 调试串口

  • NOR flash

  • MIPI 摄像头接口

具体如下图:

_images/front_interface.jpg

_images/back_interface.jpg

资源下载

资料下载

电话咨询
微信咨询
留言