前言
本文档主要介绍基于 ROC-RK3566-PC 平台的开发方法。
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
更新内容:
增加《修订记录》
如果正在进行 U-Boot 或内核开发,USB 串口适配器( USB 转串口 TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。
网店上有许多 USB 转串口的适配器,按芯片来分,有以下几种:
串口 | 最高波特率 | 是否推荐 | 评价 | 购买链接 |
---|---|---|---|---|
CP2104 | 2Mbps | 推荐 | 支持高波特率通信,稳定性好耐用 | 点击购买 |
CH340 | 2Mbps | 不推荐 | firefly和许多客户在实际使用中发现,市面上很多CH340的实际波特率达不到1.5Mbps,这给开发过程造成很多麻烦 | |
PL2303 | 1.2Mbps | 不推荐 | 最高波特率达不到1.5Mbps |
注意: ROC-RK3566-PC 默认的波特率是 1500000,有些USB转串口芯片波特率无法达到 1500000,同一芯片的不同系列也可能会有差异,所以在选购之前一定要确认是否支持。
串口转 USB 适配器,有四个引脚:
3.3V 电源(NC),不需要连接
GND,串口的地线,接开发板串口的 GND 针
TXD,串口的输出线,接开发板串口的 TX 针
RXD,串口的输入线,接开发板串口的 RX 针
注意: 如使用其它串口适配器遇到 TX 和 RX 不能输入和输出的问题,可以尝试对调 TX 和 RX 的连接。
ROC-RK3566-PC 串口连接图:
ROC-RK3566-PC 使用以下串口参数:
波特率:1500000
数据位:8
停止位:1
奇偶校验:无
流控:无
下载驱动并安装:
如果在 Win8 上不能正常使用 PL2303,参考这篇文章, 采用 3.3.5.122 或更老版本的旧驱动即可。
如果在 Windows 系统上安装官网的 CP210X 驱动,使用 PUTTY 或 SecureCRT 等工具设置串口波特率为 1500000,如果出现设置不了或无效的问题,可以下载旧版本驱动。
插入适配器后,系统会提示发现新硬件,并初始化,之后可以在设备管理器找到对应的 COM 口:
Windows 上一般用 putty 或 SecureCRT。其中我们推荐使用 MobaXterm 免费版本。这是一款功能强大的终端软件,在这里介绍一下,MobaXterm 的使用方法与之类似。
到这里下载 MobaXterm:
选择 session 为 Serial。
将 Serial port 修改为在设备管理器中找到的 COM 端口。
设置 Speed (bsp) 为 1500000。
点击 OK 按钮。
在 Ubuntu 上可以有多种选择:
minicom
picocom
kermit
篇幅关系,以下就介绍 minicom 的使用。
根据提示按O进入设置界面,如下:
升级固件
ROC-RK3566-PC 有2种工作模式。一般情况下,开机直接进入Normal 模式正常启动系统。如需对板子系统进行升级,可以根据情况选择合适的升级模式进行固件升级。
注意:ROC-RK3566-PC低内存版本出厂默认安装 Ubuntu 操作系统,高内存版本默认安装 Android 操作系统。如果用户要运行其他操作系统,需要使用对应的固件烧写到主板。可以前往固件下载页面下载更多固件。
ROC-RK3566-PC按工作模式进行分类,可以分为二种工作模式:
工作模式 | Normal 模式 | 升级模式 |
---|---|---|
启动介质 | eMMC 接口/SDMMC 接口 | |
描述 | Normal 模式就是正常的启动过程, 各个组件依次加载,正常进入系统。 |
目前支持3种升级模式,各有优缺点: 1. MaskRom 升级模式 2. Loader 升级模式 3. SD 升级模式 |
其中升级模式中,不同升级模式之间的对比:
升级模式 | 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. 需要合成完整固件。 |
一般情况下是不用进入 MaskRom 升级模式的,只有在 bootloader 校验失败(读取不了 IDB 块,或 bootloader 损坏) 的情况下,BootRom 代码 就会进入此模式。此时 BootRom 代码等待主机通过 USB 接口传送 bootloader 代码,加载并运行之。当板子变砖无法正常启动或升级程序时,也可以手动进入MaskRom 升级模式.
要强行进入 MaskRom 升级模式,请参阅《MaskRom 升级模式》一章。
在 Loader 升级模式下,bootloader 会进入升级状态,等待主机命令,用于固件升级等。要进入此模式,必须让 bootloader 在启动时检测到 RECOVERY(恢复)键按下,且 USB 处于连接状态。
要强行进入 Loader 升级模式,请参阅《Loader 升级模式》一章。
本文介绍了如何将主机上的固件,通过Type-C 数据线烧录到 ROC-RK3566-PC 开发板的存储器中。升级时,需要根据主机操作系统和固件类型来选择合适的升级方式。
ROC-RK3566-PC 开发板
主机
良好的Type-C 数据线
固件可以通过编译SDK获得,也可以通过资源下载处下载公版固件(统一固件)。固件文件一般有两种:
单个统一固件
统一固件是由分区表、bootloader、uboot、kernel、system等所有文件打包合并成的单个文件。Firefly正式发布的固件都是采用统一固件格式,升级统一固件将会更新主板上所有分区的数据和分区表,并且擦除主板上所有数据。
多个分区镜像
即各个功能独立的文件,如分区表、bootloader、kernel等,在开发阶段生成。独立分区镜像可以只更新指定的分区,而保持其它分区数据不被破坏,在开发过程中会很方便调试。
通过统一固件解包/打包工具,可以把统一固件解包为多个分区镜像,也可以将多个分区镜像合并为一个统一固件。
安装RK USB驱动
下载 Release_DriverAssistant.zip,解压,然后运行里面的 DriverInstall.exe 。为了所有设备都使用更新的驱动,请先选择驱动卸载,然后再选择驱动安装。
运行AndroidTool的RKDevTool.exe
为避免由下载工具版本引起的烧写问题,推荐使用公版固件压缩包内部打包好的工具进行烧写,例如安卓公版固件压缩包解压后如下:
也可以单独下载 AndroidTool,解压,运行 RKDevTool_Release_v2.xx 目录里面的 RKDevTool.exe(注意,如果是 Windows 7/8,需要按鼠标右键,选择以管理员身份运行),如下图:
Linux 下无须安装设备驱动
下载 Linux_Upgrade_Tool, 并按以下方法安装到系统中,方便调用:
下载 Linux_adb_fastboot, 并按以下方法安装到系统中,方便调用:
通常我们升级固件的模式有两种,分别是Loader模式和MaskRom模式。烧写固件前,我们需要连接好设备,并让板子进入到可升级模式。
连接设备并通过RECOVERY按键进入Loader升级模式步骤如下:
先断开 Type-C 数据线连接:
按住设备上的 RECOVERY (恢复)键(靠近耳机处)并保持
接上 Type-C 数据线
大约两秒钟后,松开 RECOVERY 键
Type-C 数据线接好后在串口调试终端或adb shell给板子运行以下命令
如何确定板子是否进入Loader模式,我们可以通过工具去查看
Windows操作系统
通过AndroidTool工具可以看到下方提示Found One LOADER Device
如果有进行”进入Loader模式”的操作,仍旧没有看到烧写工具提示LOADER,此时可以可以看一下Windows主机是否有提示发现新硬件并配置驱动。打开设备管理器,会见到新设备 Rockusb Device 出现,如下图。如果没有,可返回上一步重新安装驱动。
Linux操作系统
运行upgrade_tool后可以看到连接设备中有个Loader的提示
进入MaskRom模式的方法,请参考《MaskRom模式》
MaskRom烧写固件前先确定板子ROC-RK3566-PC是否有贴Nor Flash存储器,如下图:
如果有贴Nor Flash请参考切换升级存储器章节烧写统一固件,没有贴Nor Flash可按以下步骤继续操作
注意:Linux SDK v1.2.4a 及之后版本采用 extboot,烧写内核请使用 extboot.img 取代后文中所有的 boot.img(仅限 Linux,Android 请无视)
如何查看版本:
版本格式为 vx.x.xx,例如 v1.2.4a
固件文件名称中存在版本号(…_vx.x.xx_日期.img)
Buildroot 使用cat /etc/version获取版本(rk356x_linux_release_日期_vx.x.xx.xml)
Ubuntu 使用ffgo version获取版本(rk356x_linux_release_日期_vx.x.xx.xml)
SDK 中可以在 SDK 根目录通过命令查看:ls -l .repo/manifests/rk356x_linux_release.xml
如果上述方法找不到格式为 vx.x.xx 的版本,说明是旧版本,不支持 extboot
不要将 extboot.img 烧录进旧版本固件!
除此之外,extboot ubuntu 还支持以安装包的形式更新内核,详情查看Ubuntu 使用手册
烧写统一固件 update.img 的步骤如下:
切换至Upgrade Firmware页。
按Firmware按钮,打开要升级的固件文件。升级工具会显示详细的固件信息。
按Upgrade按钮开始升级。
如果升级失败,可以尝试使用切换升级存储器里面的方法
烧写分区映像的步骤如下:
切换至Upgrade Firmware页。
点击设备分区表按钮(Dev Partition)
勾选需要烧录的分区,可以多选。
确保映像文件的路径正确,需要的话,点路径右边的空白表格单元格来重新选择。
点击Run按钮开始升级,升级结束后设备会自动重启。
如果升级失败,可以尝试使用切换升级存储器里面的方法
如果板子进入不了 Loader 模式,此时可以尝试强行进入 MaskRom 模式。操作方法见《MaskRom模式》。
如果烧写过程中出现Download Boot Fail, 或者烧写过程中出错,如下图所示,通常是由于使用的USB线连接不良、劣质线材,或者电脑USB口驱动能力不足导致的,请更换USB线或者电脑USB端口排查。
如果板子同时贴有 Spi Flash(Nor Flash) 和 eMMC时,当进入 MaskRom 后,需要切换存储设备,操作方法见《切换升级设备》。
有关启动模式的介绍,请参阅《升级固件介绍》一章
MaskRom 模式是设备变砖的最后一条防线。强行进入 MaskRom 涉及硬件操作,有一定风险,因此仅在设备进入不了 Loader 模式的情况下,方可尝试 MaskRom 模式。进入 MaskRom 的原理是人为的把 EMMC 的数据脚与地线短接,系统会认为 EMMC 数据出错,从而清除 EMMC 数据。
请小心阅读,并谨慎操作!
操作步骤如下:
设备断开 Type-C 数据线(电源)
按住 设备上的 Maskrom 按键 。
设备插入Type-C 数据线(电源)。
稍候片刻,之后松开按键。
板子同时贴有NOR flash,若EMMC为空,而NOR flash中有烧录过文件,则需要短接NOR flash附近的D0和GND测试点进入Maskrom模式,下图为短接点。此时升级固件需要参考章节《切换升级存储器》
此时设备就会进入 MaskRom 模式。
本文介绍当主机同时存在 eMMC(默认) 和 NOR Flash 这两种存储器的时候,在烧录固件的时候,需根据以下的启动模式和情况来升级固件。
如下图,则设备有贴 Nor Falsh 存储器。
如果是通过 软件执行 reboot loader 或者 通过硬件Recovery 按键进入的Loader 下载模式的话,可不需要看接下来的内容,直接跳到 《使用USB线缆升级固件》 操作。
如果是通过 《MaskRom模式》 章节进入了Maskrom 模式(或设备异常,经过擦除设备进入Maskrom),而板子同时存在NOR flash和 eMMC 两种存储器,这个时候想要烧录固件,需要区分存储器:
系统在Maskrom模式下默认将固件下载到NOR flash中,不过由于NOR flash 比较小,不足以装载系统镜像,所以一般只会烧写比较小的文件,如MiniLoaderAll.bin。如果不小心将整个固件下载到NOR flash中,会出现下载固件失败的现象, 此时大家可以参考FAQ去处理
有两种方法可以将固件烧写进eMMC中,一种是RK原厂提供的烧写方法,需要烧写MiniLoaderAll.bin并切换存储器;另一种是Firefly为了方便大家烧写,提供的一种参考烧写方法,该方法操作上无需要切换存储器,也可以使用Linux端的烧写工具upgrade_tool进行烧写
此方法仅在官方最新SDK编译或者最新的官方固件中可用。如果在Maskrom模式下不慎将固件下载到NOR flash中,导致重启后无法正常启动, 那么可以进入《MaskRom模式》,烧录最新SDK编译或者官方提供的固件;不管烧录成功还是失败,当机器重启后,假如NOR flash 存在数据则自动擦除,擦除时间大概30~60s,擦除成功后,自动进入Loader模式,之后直接烧录固件即可。
若要将固件下载到eMMC中,需要先下载MiniLoaderAll.bin, 然后选择将存储器切换到eMMC。具体操作步骤如下:
1.先准备好 MiniLoaderAll.bin,一般存放在以下路径(需提前编译固件):
如果还没有编译SDK,可以从以下链接下载 一个对应CPU型号的MiniLoaderAll.bin。
该现象是因为固件直接烧写进NOR flash中引起的,出现该现象时大家可以根据当前的情况进行处理:
情况一:下载失败时没有断电或重启
之后按照章节固件下载到eMMC的步骤进行固件升级即可
情况二:有进行过重启或断电的操作
之后按照章节固件下载到eMMC的步骤进行固件升级即可。若不清楚如何通过Recovery按键进入Loader模式请参考使用USB线缆升级固件章节
进入到Maskrom模式后,固件升级都需要按照固件下载到eMMC的步骤进行操作
本文主要介绍如何通过MicroSD卡,升级主板上的固件。
使用MicroSD升级固件,需要在电脑上,通过做卡工具,将统一固件写入MicroSD卡,目前此操作只支持在Windows操作系统上完成。
主板
电脑
SD卡
USB读卡器
Linux开发
本章介绍 Linux SDK 的编译环境搭建
注意:
(1)推荐在 X86_64 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
(2)使用普通用户进行编译,不要使用 root 用户权限进行编译。
首先准备一个空文件夹用于存放 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
执行如下命令同步代码:
方法一:
在 PC 中自行安装环境:
方法二:使用 Docker
使用 dockerfile 创建容器,在容器中进行编译,完美解决编译环境问题,并且与主机环境隔离,互不影响。
首先在主机中安装 docker,请参考:安装教程
创建镜像
镜像创建完毕后,创建容器并启动
现在就可以在容器中进行 SDK 的编译了。
退出容器、重启容器的方法:
本章介绍 Ubuntu 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
下载根文件系统:Ubuntu 根文件系统(64位),放到 SDK 路径下
解压文件
编译 kernel
注意:Firefly kernel 没有开启全部的内核功能,有需求请查看Kernel 使用
不要将 extboot.img 烧录进旧版本固件!
除此之外,extboot ubuntu 还支持以安装包的形式更新内核,详情查看Ubuntu 使用手册
RAW 固件,是一种能以逐位复制的方式烧写到存储设备的固件,是存储设备的原始映像。不同于 RK 固件,目前仅支持通过 Etcher 工具烧写至 SD 卡启动。
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 为分区的大小,以此类推。
package-file 文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与 parameter.txt 文件保持一致。
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
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 |
使用 bitbake 命令构建的过程需要保证网络连接正常,如果是中国内陆客户需要保证能 ping 通外网
完成上述修改后,执行命令编译 core-image-weston
从根本上说,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 |
分区烧写适用于调试阶段,固件验证请使用下文的统一固件烧写
rootfs 不支持单独烧写,需要打包完整固件再烧写
Yocto Project 是一个专注于嵌入式 Linux® 操作系统开发的开源协作项目,它提供灵活的工具集和开发环境,允许全球的嵌入式设备开发人员通过共享技术,软件堆栈,配置和用于创建这些定制的Linux映像的最佳实践进行协作。有关 Yocto 项目的更多信息,请参阅 Yocto Project 官网:www.yoctoproject.org/。 Yocto Project 官网上有 Yocto Project Reference Manual 和 Yocto Project Overview 等相关文档详细描述了如何构建系统。
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 |
本章介绍 Debian 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
Debian 固件的编译方法和 Ubuntu 的唯一区别是使用的文件系统不一样,其他步骤包括配置文件完全一致
因此请参考 编译 Ubuntu 固件
下面只介绍不同点,文件系统的替换
下载根文件系统:Debian 根文件系统(64位),放到 SDK 路径下
解压文件
之后按照正常编译 Ubuntu 固件的步骤执行即可
本章介绍 Buildroot 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
注意:Firefly kernel 没有开启全部的内核功能,有需求请查看Kernel 使用
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 为分区的大小,以此类推。
package-file 文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与 parameter.txt 文件保持一致。
本章介绍 Linux SDK 的编译环境搭建
注意:
(1)推荐在 X86_64 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
(2)使用普通用户进行编译,不要使用 root 用户权限进行编译。
首先准备一个空文件夹用于存放 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
执行如下命令同步代码:
方法一:
在 PC 中自行安装环境:
方法二:使用 Docker
使用 dockerfile 创建容器,在容器中进行编译,完美解决编译环境问题,并且与主机环境隔离,互不影响。
首先在主机中安装 docker,请参考:安装教程
现在就可以在容器中进行 SDK 的编译了。
退出容器、重启容器的方法:
本章介绍 Ubuntu 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
下载根文件系统:Ubuntu 根文件系统(64位),放到 SDK 路径下
解压文件
注意:Firefly kernel 没有开启全部的内核功能,有需求请查看Kernel 使用
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 字节。
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
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 |
使用 bitbake 命令构建的过程需要保证网络连接正常,如果是中国内陆客户需要保证能 ping 通外网
完成上述修改后,执行命令编译 core-image-weston
从根本上说,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 |
Yocto Project 是一个专注于嵌入式 Linux® 操作系统开发的开源协作项目,它提供灵活的工具集和开发环境,允许全球的嵌入式设备开发人员通过共享技术,软件堆栈,配置和用于创建这些定制的Linux映像的最佳实践进行协作。有关 Yocto 项目的更多信息,请参阅 Yocto Project 官网:www.yoctoproject.org/。 Yocto Project 官网上有 Yocto Project Reference Manual 和 Yocto Project Overview 等相关文档详细描述了如何构建系统。
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 |
本章介绍 Buildroot 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
注意:Firefly kernel 没有开启全部的内核功能,有需求请查看Kernel 使用
编译目录在 buildroot/output/ 下
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 开发指南
本章节介绍如何把固件烧录到 SSD,并从 SSD 启动系统。
准备工作:
RK356x 平台
良好的 M.2 SSD 或者 SATA SSD
良好的 Type-C 数据线
更新到最新的 Linux SDK,进入 u-boot 目录,确保有以下提交:
注意的是如果设备使用了 extboot,则需要进行取消,目前 M.2 SSD 在 extboot 下兼容性较差。
取消 extboot:
SATA SSD 启动的操作步骤与 M.2 SSD 启动类似,不同点如下:
Android开发
ADB,全称 Android Debug Bridge,是 Android 的命令行调试工具,可以完成多种功能,如跟踪系统日志,上传下载文件,安装应用等。
首先参照安装 RK USB 驱动一节安装好驱动。
然后下载 adb.zip,解压到 C:adb 以方便调用。
打开命令行窗口,输入:
列出所有连接设备及其序列号:
前面是 apk 文件,后面则是对应的包名称。
编译 Android 对机器的配置要求较高:
64 位 CPU
16GB 物理内存 交换内存
250GB 空闲的磁盘空间
建议使用 Ubuntu 18.04 操作系统
Ubuntu 14.04 软件包安装参考:
此时视报错信息去安装缺少的软件包即可
运行 Android11.0,ROC-RK3566-PC需要满足如下条件:
DDR至少需要 2GB
eMMC至少需要 16GB
SDK 源码与 bundle 压缩包均存放在云盘中。
由于 SDK 较大,可以去下载页面选择云盘下载 Firefly-RK356X_Android11.0_git
下载完成后,在解压前先校验下 MD5 码:
下载 SDK 后,从 gitlab 处更新代码的方法:
随着 SDK 的更新,bundle 也会随之越来越大,可以去下载页面选择云盘下载 bundle。
注意:若是第一次编译该Android Product,请使用公版编译命令进行一次完整编译
编译前执行如下命令配置环境变量:
注意:进行内核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 开发指南
FireflyApi2 使用手册
驱动开发
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 的基本配置方法。
用户首先需在 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 中是不提供给客户外部使用的,而且也没有风扇接口,这里只是提供一个参考,客户可自行参考这个例子去做自己的一些开发。
接着在 firefly_adc_probe 中对 DTS 所添加的资源进行解析:
调用 iio_read_channel_raw 函数读取 AD 采集的原始数据并存入 val 中。
使用标准电压将 AD 转换的值转换为用户所需要的电压值。其计算公式如下:
有个便捷的方法可以查询到每个 SARADC 的值:
驱动需要获取ADC通道来使用时,需要对驱动的加载时间进行控制,必须要在saradc初始化之后。saradc是使用module_platform_driver()进行平台设备驱动注册,最终调用的是module_init()。所以用户的驱动加载函数只需使用比module_init()优先级低的,例如:late_initcall(),就能保证驱动的加载的时间比saradc初始化时间晚,可避免出错。
RK3566/RK3568平台仅有一个标准物理mipi csi2 dphy,可以工作在两个模式: full mode 和split mode, 拆分为csi2_dphy0/csi2_dphy1/csi2_dphy2三个逻辑dphy(参见rk3568.dtsi)
仅使用csi2_dphy0,csi2_dphy0与csi2_dphy1/csi2_dphy2互斥,不可同时使用;
data lane最大4 lanes;
最大速率2.5Gbps/lane;
仅使用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
简单点来讲,如果用单目摄像头我们可以配置full mode,若使用双目摄像头我们可以配置split mode
链接关系: sensor->csi2_dphy0->isp
我们需要根据板子原理图的MIPI CSI接口找到sensor是挂在哪个I2C总线上,然后在对应的I2C节点配置camera节点,正确配置camera模组的I2C设备地址、引脚等属性。如下ROC-RK3566-PC的xc7160配置:
csi2_dphy0与csi2_dphy1/csi2_dphy2互斥,不可同时使用。另外需要使能csi2_dphy_hw节点
链接关系:
sensor1->csi_dphy1->isp_vir0
sensor2->csi_dphy2->mipi_csi2->vicap->isp_vir1
我们需要根据板子原理图的MIPI CSI接口找到两个sensor是挂在哪个I2C总线上,然后在对应的I2C节点配置两个camera节点,正确配置camera模组的I2C设备地址、引脚等属性。如下ROC-RK3566-PC的gc2053/gc2093配置:
csi2_dphy0与csi2_dphy1/csi2_dphy2互斥,不可同时使用
firefly已经配置好相应的dts,单目摄像头CAM-8MS1M和双目摄像头CAM-2MS2MF使用互斥,只需包含相应的dtsi文件即可使用单目摄像头CAM-8MS1M或双目摄像头CAM-2MS2MF
Linux 已经配置好各种组合的 dts 和 mk 文件,编译前按需选择,不用修改文件
Android 需要如下修改:
dts的配置默认使用单目摄像头
使用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去查看
Buildroot直接使用qcamera打开摄像头,可进行拍摄与录制,详细参考 Buildroot使用手册
Ubuntu 单目摄像头预览可以使用如下脚本:
也可以使用之前提到的抓帧方法,抓到数据后用mpv播放:
若使用raw摄像头sensor,请留意isp21目录所支持的iq文件
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 为例。
在注册好 I2C 驱动后,即可进行 I2C 通讯。
A1: 请检查硬件上拉是否给电。
A2: 返回值为 -6 表示为 NACK 错误,即对方设备无应答响应,这种情况一般为外设的问题,常见的有以下几种情况:
I2C 地址错误,解决方法是测量 I2C 波形,确认是否 I2C 设备地址错误;
I2C slave 设备不处于正常工作状态,比如未给电,错误的上电时序等;
时序不符合 I2C slave 设备所要求也会产生 Nack 信号。
A3: 这时需要调用两次 i2c_transfer, I2C read 拆分成两次,修改如下:
ROC-RK3566-PC 开发板上使用红外收发传感器 IR (在LED 灯旁边)实现遥控功能,在 IR 接口处接上红外接收器。本文主要描述在开发板上如何配置红外遥控器。
其配置步骤可分为两个部分:
修改内核驱动:内核空间修改,Linux 和 Android 都要修改这部分的内容。
修改键值映射:用户空间修改(仅限 Android 系统)。
在 Linux 内核中,IR 驱动仅支持 NEC 编码格式。以下是在内核中配置红外遥控的方法。
Android系统kernel所涉及到的文件:
键值表结构体数组和配置参考如下:
注:rockchip,key_table第一列为键值,第二列为要响应的按键码。
在rockchip_pwm_remotectl.c驱动中的 remotectl_do_something 函数获取用户码和键值:
保存后,按照固件编译的方法编译kernel即可
注:通过 ADB 修改该文件重启后即可生效。
如下图是通过按红外遥控器按钮,所产生的波形,主要由 head, Control, information, signed free 这四部分组成,具体可以参考 RC6 Protocol。
这里定义了LCD的控制引脚:
NAME | GPIO | GPIO_ACTIVE |
---|---|---|
reset-gpios | GPIO0_C2 | GPIO_ACTIVE_LOW |
enable-gpios | GPIO0_C7 | GPIO_ACTIVE_HIGH |
在硬件信号上enable引脚高电平有效,而reset引脚是低电平有效。
具体的引脚配置请参考《GPIO 使用》一节。
GPIO, 全称 General-Purpose Input/Output(通用输入输出),是一种软件运行期间能够动态配置和控制的通用引脚。 所有的 GPIO 在上电后的初始状态都是输入模式,可以通过软件设为上拉或下拉,也可以设置为中断脚,驱动强度都是可编程的,其核心是填充 GPIO bank 的方法和参数,并调用 gpiochip_add 注册到内核中。
ROC-RK3566-PC 开发板为了方便用户开发使用,引出了一排扩展的GPIO口供用户调试和开发。
首先在 DTS 文件中增加驱动的资源描述:
在 Firefly 的例子程序中还包含了一个中断引脚,GPIO 口的中断使用与 GPIO 的输入输出类似,首先在 DTS 文件中增加驱动的资源描述:
然后在 probe 函数中对 DTS 所添加的资源进行解析,再做中断的注册申请,代码如下:
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:
A1: 当使用 GPIO request 时候,会将该 PIN 的 MUX 值强制切换为 GPIO,所以使用该 PIN 脚为 GPIO 功能的时候确保该 PIN 脚没有被其他模块所使用。
A2: 如果用 IO 命令读某个 GPIO 的寄存器,读出来的值异常,如 0x00000000 或 0xffffffff 等,请确认该 GPIO 的 CLK 是不是被关了,GPIO 的 CLK 是由 CRU 控制,可以通过读取 datasheet 下面 CRU_CLKGATE_CON* 寄存器来查到 CLK 是否开启,如果没有开启可以用 io 命令设置对应的寄存器,从而打开对应的 CLK,打开 CLK 之后应该就可以读到正确的寄存器值了。
A3: 测量该 PIN 脚的电压不对时,如果排除了外部因素,可以确认下该 PIN 所在的 IO 电压源是否正确,以及 IO-Domain 配置是否正确。
A4: 如果使用该 GPIO 时,不会动态的切换输入输出,建议在开始时就设置好 GPIO 输出方向,后面拉高拉低时使用 gpio_set_value() 接口,而不建议使用 gpio_direction_output(), 因为 gpio_direction_output 接口里面有 mutex 锁,对中断上下文调用会有错误异常,且相比 gpio_set_value,gpio_direction_output 所做事情更多,浪费。
ROC-RK3566-PC开发板上有 2 个 LED 灯,如下表所示:
LED | Pin name | Pin number |
---|---|---|
Blue | GPIO0_D3 | 27 |
Yellow | GPIO0_D4 | 28 |
可通过使用 LED 设备子系统或者直接操作 GPIO 控制该 LED。
标准的 Linux 专门为 LED 设备定义了 LED 子系统。 在 ROC-RK3566-PC开发板中的两个 LED 均以设备的形式被定义。
Trigger 包含多种方式可以控制 LED,这里就用两个例子来说明。
Simple trigger LED
Complex trigger LED
本章主要描述如何配置 PWM。
用户可在其它驱动文件中使用以上步骤生成的 PWM 节点。具体方法如下:
查看注册是否成功,成功则返回接口名和寄存器地址。
dts 配置文件是否打开对应的 PWM。
PWM 所在的 IO 口是否被其他资源占用,可以根据报错的返回值去查看原因。
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)
内部集成振荡电容
漏极开路中断引脚
Linux 提供了三种用户空间调用接口。在 ROC-RK3566-PC开发板中对应的路径为:
SYSFS接口:/sys/class/rtc/rtc0/
PROCFS接口: /proc/driver/rtc
IOCTL接口: /dev/rtc0
打印 RTC 相关的信息:
A1: 检查一下 RTC 电池是否正确接入。
配件
型号:M101014_BE45_A1
尺寸:10.1寸
分辨率:800x1280
显示接口:MIPI
面板材料:IPS面板
可视角度:160°
触摸屏:多点电容触摸
用官网SDK编译支持的10.1 寸mipi屏的固件时使用以下命令:
品牌:SV
ISP:xc7160
Sensor: sc8238
接口: MIPI
像素: 800W(当前仅支持1080P,4K仍在适配中)
品牌:SV
Sensor: gc2053(IR)/gc2093(RGB)
接口: MIPI
像素: 200W
型号
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
EC20 模组分带GNSS和不带GNSS两种,Firefly官网售卖的EC20 4G模组是不支持GNSS的,后缀为SNNS,支持GNSS功能的EC20 模组一般带有后缀SGNS,公版固件支持GNSS功能,但是默认关闭,使用方法可参考EC20 GNSS功能章节。
USB 接口连接
SIM 卡连接
型号
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
公版固件默认支持 EC20 4G 模组、EC200T 4G模组
EC20模组支持GPS、GLONASS、GALILEO、BEIDOU,兼容标准 NMEA 0183 协议,可通过 USB NMEA 接口输出 1Hz 频率的 NMEA 信息,默认输出串口为/dev/ttyUSB1,波特率115200 bit/s。
频率范围:1559MHz~1609MHz
极化:RHCP 或 Linear
VSWR:< 2(典型值)
有源天线噪声系数:< 1.5dB
有源天线增益:> 0dB
有源天线内嵌 LNA 增益:< 17dB
注意: GPS天线需要使用有源天线
EC20模组根据EC20 4G模组套件章节的说明连接,天线接入带有GPS丝印的天线接口。
对于EC20模组,其GNSS 配置的串口节点和波特率分别为/dev/ttyUSB1、115200,使用模组之前需要检查/system/etc/u-blox.conf中SERIAL_DEVICE或者SERIAL_BAUD_RATE的值是否与之匹配,确认匹配则使能GPS后即可使用,使能方法参考如何使能GPS和修改串口配置。
注意:对于EC20模组,使用GNSS功能时,需要注意是否有接入其他的ttyUSB*设备,存在其他ttyUSB时,有可能会使EC20的默认ttyUSB设备号发生变化,导致GNSS功能无法使用
产品:USB充电头(美规)
输入电压:110-240VAC
输出电压:5V DC
输出电流:2A
额定功率:10W
DC接口 :USB口
注意:ROC-RK3566-PC 正常工作需要的电源参数为5V/2A,电流低于2A可能会因电流过小而异常重启,为了保证开发板的正常工作,请使用电压为5V,电流大于2A的电源,推荐使用Firefly官网电源配件。
产品:12键红外遥控器
版本:Firefly 定制版
电源:两节7号电池
适配:ROC-RK3566-PC
描述:支持 ROC-RK3566-PC 开发板的遥控功能
HDMI TO MIPI CSI驱动板,采用视频桥接芯片RK628D,可实现HDMI视频信号转换为MIPI CSI信号的转换需求,可极大简化硬件设计,提高硬件设计效率,并节约整机成本。可应用于智能微型投影仪、智能显示屏、视频采集转换类产品。
尺寸大小: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
Line Out:将声卡处理后的模拟信号通过此接口输出到音频设备上。
主板支持列表详见固件制作章节
注意:
1. 请在驱动板和开发板处于断电状态操作此步骤,避免烧坏驱动板和开发板;
2. RK3399 系列主板如存在两个MIPI CSI接口,默认接MIPI CSI0。
系统默认内置HdmiIn2的应用,如图:
点击进入应用后,就会有HDMI-IN 的图像显示,音频会从驱动板上的LineOut输出,最大支持输出分辨率3840x2160@30fps。
在设备上运行如下脚本:
相关文档和固件下载,见官网的资料下载。
主控 | USB 线刷 | SD 卡升级 |
---|---|---|
RK3566 | AIO-3566JD4, ROC-RK3566-PC | AIO-3566JD4, ROC-RK3566-PC |
RK3568 | AIO-3568J, ROC-RK3568-PC, ROC-RK3568-PC SE | AIO-3568J, ROC-RK3568-PC, ROC-RK3568-PC SE |
RK3588 | ITX-3588J, AIO-3588Q | ITX-3588J, AIO-3588Q |
RK3588S | AIO-3588SJD4, ROC-RK3588S-PC | AIO-3588SJD4, ROC-RK3588S-PC |
系统 | 板卡型号 |
---|---|
Android11.0 | AIO-3566JD4, ROC-RK3566-PC |
Ubuntu20.04 | AIO-3566JD4, ROC-RK3566-PC |
系统 | 板卡型号 |
---|---|
Android11.0 | AIO-3568J, ROC-RK3568-PC, ROC-RK3568-PC SE |
Ubuntu20.04 | AIO-3568J, ROC-RK3568-PC, ROC-RK3568-PC SE |
系统 | 板卡型号 |
---|---|
Android12.0 | AIO-3588SJD4, ROC-RK3588S-PC |
其他
Firefly kernel 没有开启全部的内核功能选项,用户在使用官方默认固件发现内核不满足使用场景时,比如 USB CAN 相关功能,则需要自行开启并重新编译、烧录内核。下面介绍方法:
首先需要获取 SDK ,开发环境的准备和获取方法查看:
之后开始新增内核选项:
之后会进入一个图形化界面进行配置
搜索结果中按下最左侧显示的数字,可以直接前往这个配置项所在位置:
属于同一个组的多个选项建议全部打开,例如下图中所有选项都属于 CAN USB 接口支持,可以全部打开以获得完整支持
参考分区烧写
RK U-Boot 基于开源的 U-Boot 进行开发,工作模式有启动加载模式和下载模式。启动加载模式是 U-Boot 的正常工作模式,嵌入式产品发布时,U-Boot 都工作在此模式下,主要用于开机时把存储器中的内核加载到内存中,启动操作系统;下载模式主要用于将固件下载到存储器,开机时长按 Recovery 键可进入下载模式。本文简单说明 U-Boot 的使用,详细请参考Uboot开发
编译 U-Boot 与编译内核类似,编译前把默认配置写入 .config,执行:
打开烧录工具,按住Recovery 按键,使用 Type-A to Type-C 线连接板子和PC 机上电,两秒后松开recovery按键.
如果你已经成功烧写你最新编译的 Loader,在开机的串口输出中可以看到类似如下信息:
如果打印的时间及版本与你编译的一致,说明你成功更新了 Loader。
RK3566 使用二级 Loader,编译生成的镜像为:
RK3566 内置 NPU 模块, 处理性能最高可达1TOPS。使用该NPU需要下载RKNN SDK,RKNN SDK 为带有 NPU 的 RK 系列芯片提供编程接口,能够帮助用户部署使用 RKNN-Toolkit2 导出的 RKNN 模型,加速 AI 应用的落地,具体支持平台列表可通过 SDK 中 README 文档或者访问airockchip 查看,开发建议以airockchip官方更新版本作为参考。
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
对于 Caffe、TensorFlow 等其他模型,想要在 RK3566 平台运行,需要先进行模型转换。可以使用 RKNN-Toolkit2 工具将模型转换成 RKNN 格式。
RKNN-Toolkit2 是为用户提供在 PC、Rockchip NPU 平台上进行模型转换、推理和性能评估的开发套件,用户通过该工具提供的 Python 接口可以便捷地完成各种操作。
工具的全部功能简单介绍如下:
建议使用 virtualenv 管理 Python 环境,因为系统中可能同时有多个版本的 Python 环境,以 Python3.6 为例
RKNN-Toolkit2 通过 PC 的 USB 连接到 OTG 设备 ROC-RK3566-PC。RKNN-Toolkit2 将 RKNN 模型传到 ROC-RK3566-PC 的 NPU 上运行,再从 ROC-RK3566-PC 上获取推理结果、性能信息等:
其他 Toolkit Demo 可以在rknn-toolkit2/examples/下找到,例如量化、精度评估等。具体实现以及使用方法请参考 Demo 内源代码以及详细开发文档。
ROC-RK3566-PC NPU 及 Toolkit 详细使用方法请参考RKNN SDK下
《Rockchip_RKNPU_User_Guide_RKNN_API_*.pdf》、《Rockchip_User_Guide_RKNN_Toolkit2_*.pdf》文档。
常见问题解答
kernel 新建了 dts 文件 arch/arm64/boot/dts/rockchip/rk3566-roc-pc-DEMO.dts,编译 kernel 时弹出如下对话框
先进行如下操作,再编译 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的损坏。
如果需要使用ROC-RK3566-PC来调试 SPK 和 MIC功能,可以使用外部扩展出来的IO口进行调试,软件默认支持,由于硬件信号是直接从codec引出来的,所以SPK只需接上喇叭即可,MIC这部分需要增加偏置电路才可以录音,如下
注意: 硬件版本 ROC-RK3566-PC V1.2 2022.01.22 的 MIC这部分已经有了偏置电路。
由于RK3566双屏幕显示是使用同一个内部输入源,即VOP是Same Source, Dual Display,所以如果是使用MIPI屏幕作为主屏,会导致副屏HDMI画面会严重拉伸(如下图),所以想避免 这个问题,主副屏幕都应该使用同分辨率同方向(横竖屏一致)的屏幕。
在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的触摸部分暂时用不了。
在V1.1及以上版本的设备中,MIPI CSI单独使用的I2C4_M0和RTC,MIPI DSI所使用的I2C2_M0是不冲突的,共用的,不需要使用上一步的配置来进行区分使用。
暂时无法支持自动切换 4K, 默认 1080P 显示, 后续会更新支持。可以使用以下命令手动设置 4K 分辨率后,重新插拔 HDMI 线:
目前ROC-RK3566-PC仅支持美标类型(CTIA)的耳机,对于国标类型(OMTP)的耳机硬件不兼容,会出现左右声道同时存在双声道的现象。
有可能是电源电流不够,请使用PD 电源来供电。
注意:如果开发板进行了eMMC擦除操作,之前写入的数据也会被清除。
安装RKDevInfoWriteTool
RKDevInfoWriteTool的设置里选中”RPMB”
根据需要在RKDevInfoWriteTool的设置里配置”SN”,”WIFI MAC”,”LAN MAC”,”BT MAC”等
开发板进入loader模式
RKDevInfoWriteTool进行写入或者读取操作
具体操作可以参考RKDevInfoWriteTool安装目录下的《RKDevInfoWriteTool使用指南》PDF文档。
参考资料
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 摄像头接口
具体如下图:
资源下载