前言
上手教程
介绍
串口调试
升级固件
更新固件介绍
使用USB线缆升级固件
MaskRom模式
切换升级存储器
使用SD卡升级固件
Linux开发
编译 Linux 4.19 固件
编译 Linux 5.10 固件
编译 Linux AMP 固件
Firefly Linux 开发指南
技术案例
Android开发
ADB 使用
编译环境搭建
编译 Android 11.0 固件
Firefly Android 开发指南
FireflyApi2 使用手册
驱动开发
ADC 使用
Csmera 使用
CAN 使用
I2C 使用
IR 使用
LCD 使用
Ethernet 使用
GPIO 使用
LED 使用
PWM 使用
RTC 使用
UART 使用
配件
串口模块
屏幕模组
摄像头模组
无线模块
12V电源适配器
红外遥控器
SATA转接板
HDMI 转 MIPI CSI 驱动板
其他
Kernel 使用
U-Boot 使用
NPU使用
常见问题解答
参考资料
接口定义
文档
资源下载
Core-3568J
产品规格书

前言

概述

本文档主要介绍基于 Core-3568J 平台的开发方法。

OS 版本

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

文档当前版本

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

修订记录

  • V2.0.2

    • 更新时间:2022-05-10

    • 更新内容:

      • 修改串口调试内容

      • 修正部分下载链接。

  • V2.0.1

    • 更新时间:2022-05-09

    • 更新内容:

      • 增加《修订记录》

上手教程

1. 介绍

Core-3568J采用RK3568四核64位Cortex-A55 处理器, 22 nm 先进工艺,主频最高2.0GHz,,集成双核心架构GPU以及高效能NPU;最大支持8G大内存;支持WiFi6,5G/4G等高速无线网络通讯;拥有丰富的 接口扩展,支持多种视频输入输出接口,可适用于智能NVR、云终端、物联网网关、工业控制等场景

_images/Core-3568J.jpg

AIO-3568J开发板由核心板Core-3568J 底板MB-JM3-RK3568组成, AIO-3568J拥有RGMII、PCIE3.0、USB3.0、I2C、SPI、UART、GPIO、MIPI-DSI等丰富接口,可直接应用到各种智能产品中,加速产品落地

_images/AIO-3568J.jpg

1.1. AIO-3568J 标准套装包含以下配件(仅供参考):

  • Core-3568J 核心板一块

  • 12V-2A电源适配器一个

  • MB-JM3-RK3568 底板一块

  • 铜管天线x2

  • 双公头 USB 线一条

另外可以选购的配件有:

  • Firefly 串口模块

另外,在使用过程中,你可能需要以下配件:

  • 显示设备

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

  • 网络

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

    • WiFi 路由器

  • 输入设备

    • USB 无线/有线的鼠标/键盘

    • 红外遥控器(需要接上红外接收器)

  • 升级固件,调试

    • 双公头 USB 数据线

    • 串口转 USB 适配器

2. 串口调试

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

2.1. 选购适配器

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

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

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

2.2. 硬件连接

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

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

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

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

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

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

AIO-3568J 串口连接图:

_images/debug_connection.jpg

2.3. 串口参数配置

AIO-3568J 使用以下串口参数:

  • 波特率: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

1. 更新固件介绍

1.1. 前言

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

  • 注意:AIO-3568J出厂默认安装 Android 操作系统,如果用户要运行其他操作系统,需要使用对应的固件烧写到主板。可以前往固件下载页面下载更多固件。

_images/working_mode.png

AIO-3568J按工作模式进行分类,可以分为二种工作模式:

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. 前言

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

2.2. 准备工具

  • AIO-3568J 开发板

  • 主机

  • 良好的双公头USB数据线

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升级模式步骤如下:

  • 先断开电源适配器连接

  • 双公头 USB 数据线一端连接主机,一端连接开发板 

  • _images/otg_interface.png

  • 按住设备上的 RECOVERY (恢复)键并保持 

  • _images/recovery_key.png

  • 接上电源

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

2.5.1.2. 软件方式进入Loader模式

双公头USB数据线接好后在串口调试终端或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烧写固件前先确定板子AIO-3568J是否有贴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 数据。

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

操作步骤如下:

  • 设备断开电源

  • 使用双公头USB数据线连接设备和电脑

  • 用金属镊子接通Core-3568J上的如下图所示的两个测试点并保持(如下图所示)。

  • 设备插入电源

  • 稍候片刻,之后松开镊子。

短接EMMC附近的D0和GND 测试点

_images/maskrom_test_points.png

此时设备就会进入 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

2.点击下载工具的Advanced Function,然后将准备好的MiniLoaderAll.bin下载到存储器中,见下图

_images/load_emmc_with_flash01.png

3.点击List Storage读取存储器,此时存储列表选中的是SPINOR,为确保Nor flash为空,我们选择EraseAll擦除

_images/maskrom_erease_spinor_flash.png

  • X 表示设备不存在该存储器

  • 0 表示存在该存储器,但未选中

  • 表示存在该存储器并处于被选中状态

4.在存储列表中选中Emmc后点击Switch Storage

_images/load_emmc_with_flash02.png

可以看到存储列表中的Emmc状态就会从0切到,表示选择将固件下载到eMMC

_images/load_emmc_with_flash03.png

5.点击EraseAll擦除

_images/load_emmc_with_flash04.png

6.点击下载工具的Upgrade Firmware,然后选择我们想要下载进eMMC中的固件进行升级

_images/load_emmc_with_flash05.png

4.4. FAQ

4.4.1. Maskrom模式烧写失败

_images/maskrom_download_failed_with_flash.png

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

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

可以直接点击EraseFlash擦除NOR flash

_images/Maskrom_EraseFlash.png

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

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

通过Recovery按键进入Loader模式, 然后点击AndroidTool的Go maskrom进入Maskrom模式

_images/Go_maskrom.png

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

如果大家有接串口,可以查看一下log信息,其中Bootdev(atags): mtd 2说明系统启动到NOR flash存储器的uboot中

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

4.4.2. Go Maskrom无效

点击AndroidTool的Go Maskrom无法进入Maskrom模式,rbrom命令同样也不行,原因是部分旧固件不支持从NOR flash的bootloader回到Maskrom模式,此时可通过Recovery按键重新进入Loader模式,点击AndroidTool的EraseFlash进行擦除

_images/Loader_EraseFlash.png

无论是否提示擦除IDB失败都重启一下板子,重启后可进入Maskrom模式

_images/EraseFlash_IDB_failed.png

4.4.3. 其它

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

5. 使用SD卡升级固件

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

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

5.1. 准备工具

5.2. 操作步骤

  • 下载需要升级到主板上的统一固件。

  • 打开SD_Firmware_Tool,勾选Upgrade Firmware框,点击Firmware选择正确升级固件。

  • 将MicroSD插入USB读卡器,再插入到电脑USB口上,在列表式组合框中选择正确的USB设备。

  • 点击Create之后,等待创建结束。

  • 取出MicroSD卡,插入主板的MicroSD卡插槽,对主板上电开机,主板自动开始升级。

  • 升级完成后,取出MicroSD卡,主板自动重启,完成整个升级固件的流程。

_images/SD_Firmware_Tool_zh.png

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. 同步代码

执行如下命令同步代码:

因为网络环境等原因,.repo/repo/repo sync -c --no-tags 命令更新代码可能会失败,可多次反复执行。


1.1.4. 安装依赖

  • 方法一:

在 PC 中自行安装环境

  • 方法二:使用 Docker

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

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

创建镜像

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


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

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

1.2. 编译 Ubuntu 固件

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

1.2.2. 编译 SDK

1.2.2.1. 编译前配置

不同板型的配置文件存放在device/rockchip/rk356x/目录下

回到 SDK 根目录执行build.sh选择配置文件:

配置文件会链接到 device/rockchip/.BoardConfig.mk,检查该文件可以验证是否配置成功。

相关配置介绍:

1.2.2.2. 选择编译配件

device/rockchip/rk356x/ 目录下,除了aio-3568j-ubuntu.mk之外,还有其他不同配件搭配的配置文件

配置文件的名称中会标明所使用的屏幕和摄像头。如果没有标明屏幕,说明使用的是默认 HDMI 显示;如果没有标明摄像头,说明使用的是默认单目摄像头

注意:AIO-3568J 硬件版本为V1.3及往后版本方可支持使用HDMI TO MIPI_CSI 驱动板。

选择好配置文件后,执行build.sh来使其生效:

1.2.2.3. 下载 Ubuntu 根文件系统


1.2.2.4. 全自动编译

全自动编译会执行所有编译、打包操作,直接生成 RK 固件。

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

Linux SDK v1.2.4a 及之后版本采用了 extboot, 编译内核请执行./build.sh extboot

生成的文件为 SDK/kernel/extboot.img,取代之前的 boot.img

如何查看版本:

  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 使用手册

编译 recovery

1.2.2.6. 更新链接

更新各部分镜像链接到 rockdev/ 目录:

1.2.2.7. 打包固件

打包固件,生成的完整固件会保存到 rockdev/pack/ 目录。

1.2.2.7.1. RK 固件

RK 固件,是以 Rockchip 专有格式打包的固件,使用 Rockchip 提供的工具可以烧写到 eMMC 或者 SD 卡中(:若无特殊说明,WIKI 上提及的固件默认为 RK 固件)。

1.2.2.7.2. RAW 固件

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

Etcher 官方下载链接

1.2.3. 分区说明

1.2.3.1. parameter 分区表

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

路径:device/rockchip/rk356x/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
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 文件保持一致。

路径:tools/linux/Linux_Pack_Firmware/rockdev/rk356x-ubuntu-package-file

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 的基础上,需要更换编译的 core-image recipes 。需要将当前编译过 core-image 的清理掉,再开始编译新的 core-image 。

例如:当前编译的是 core-image-minimal 。需要更换成 core-image-sato 。

1.3.4. 调整编译速度

修改文件/path/to/yocto/meta-rockchip/conf/machine/firefly-rk356x.conf 中的 BB_NUMBER_THREADS 和 PARALLEL_MAKE 变量配置。若线程数量设置过大可能会导致机器内存不足,导致编译失败。请根据编译机器的配置来设置编译速度。

  • BB_NUMBER_THREADS: The maximum number of threads BitBake simultaneously executes.

  • BB_NUMBER_PARSE_THREADS: The number of threads BitBake uses during parsing.

  • PARALLEL_MAKE: Extra options passed to the make command during the do_compile task in order to specify parallel compilation on the local build host.

  • PARALLEL_MAKEINST: Extra options passed to the make command during the do_install task in order to specify parallel installation on the local build host.

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. 分区固件烧写

编译生成的固件位于目录/build/tmp/deploy/images//

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

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

1.3.7. 统一固件烧写

编译生成的固件位于目录/build/tmp/deploy/images//,待下载的文件为.wic与update.img,进入loader模式后执行如下命令:

  • 固件默认登录账号为:root,密码为:firefly 。固件含有普通用户账号名称为:firefly ,密码为:firefly 。

注意:如果客户在 Windows PC 上开发,使用 RKdevtool 直接烧录 update.img 即可,不需要烧录 .wic。但是要注意一点是 update.img 是一个链接文件,实际得选择链接文件所指向的实际文件。

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. 编译前配置

不同板型的配置文件存放在device/rockchip/rk356x/目录下

回到 SDK 根目录执行build.sh选择配置文件:

配置文件会链接到 device/rockchip/.BoardConfig.mk,检查该文件可以验证是否配置成功。

相关配置介绍:

1.5.1.2. 选择编译配件

device/rockchip/rk356x/ 目录下,除了aio-3568j-buildroot.mk之外,还有其他不同配件搭配的配置文件

配置文件的名称中会标明所使用的屏幕和摄像头。如果没有标明屏幕,说明使用的是默认 HDMI 显示;如果没有标明摄像头,说明使用的是默认单目摄像头

选择好配置文件后,执行build.sh来使其生效:

  • 编译 kernel

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

1.5.1.5. 打包固件

更新各部分镜像链接到 rockdev/ 目录:

打包固件,生成的完整固件会保存到 rockdev/pack/ 目录。

1.5.2. 分区说明

1.5.2.1. parameter 分区表

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

路径:device/rockchip/rk356x/parameter-buildroot-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
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 文件保持一致。

路径:tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file

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:

# 创建 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. 编译前配置

不同板型的配置文件存放在device/rockchip/rk3566_rk3568/目录下

回到 SDK 根目录执行build.sh选择配置文件:

配置文件会链接到 output/defconfig,检查该文件可以验证是否配置成功。

相关配置介绍:

2.2.2.2. 选择编译配件

device/rockchip/rk3566_rk3568/ 目录下,除了firefly_rk3568_aio-3568j_ubuntu_defconfig之外,还有其他不同配件搭配的配置文件

配置文件的名称中会标明所使用的屏幕和摄像头。如果没有标明屏幕,说明使用的是默认 HDMI 显示;如果没有标明摄像头,说明使用的是默认单目摄像头

2.2.2.3. 下载 Ubuntu 根文件系统


2.2.2.4. 全自动编译

全自动编译会执行所有编译、打包操作,直接生成 RK 固件。

2.2.2.5. 部分编译

  • 编译 kernel

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

2.2.3. 分区说明

2.2.3.1. parameter 分区表

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

路径:device/rockchip/rk3566_rk3568/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 的基础上,需要更换编译的 core-image recipes 。需要将当前编译过 core-image 的清理掉,再开始编译新的 core-image 。

例如:当前编译的是 core-image-minimal 。需要更换成 core-image-sato 。

2.3.4. 调整编译速度

修改文件/path/to/yocto/meta-rockchip/conf/machine/firefly-rk356x-kernel5-10.conf 中的 BB_NUMBER_THREADS 和 PARALLEL_MAKE 变量配置。若线程数量设置过大可能会导致机器内存不足,导致编译失败。请根据编译机器的配置来设置编译速度。

  • BB_NUMBER_THREADS: The maximum number of threads BitBake simultaneously executes.

  • BB_NUMBER_PARSE_THREADS: The number of threads BitBake uses during parsing.

  • PARALLEL_MAKE: Extra options passed to the make command during the do_compile task in order to specify parallel compilation on the local build host.

  • PARALLEL_MAKEINST: Extra options passed to the make command during the do_install task in order to specify parallel installation on the local build host.

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. 分区固件烧写

编译生成的固件位于目录/build/tmp/deploy/images//

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

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

2.3.7. 统一固件烧写

编译生成的固件位于目录/build/tmp/deploy/images//,待下载的文件为.wic与update.img,进入loader模式后执行如下命令:

  • 固件默认登录账号为:root,密码为:firefly 。固件含有普通用户账号名称为:firefly ,密码为:firefly 。

注意:如果客户在 Windows PC 上开发,使用 RKdevtool 直接烧录 update.img 即可,不需要烧录 .wic。但是要注意一点是 update.img 是一个链接文件,实际得选择链接文件所指向的实际文件。

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. 编译前配置

不同板型的配置文件存放在device/rockchip/rk3566_rk3568/目录下

回到 SDK 根目录执行build.sh选择配置文件:

配置文件会链接到 output/defconfig,检查该文件可以验证是否配置成功。

相关配置介绍:

2.4.1.2. 选择编译配件

device/rockchip/rk3566_rk3568/ 目录下,除了firefly_rk3568_aio-3568j_buildroot_defconfig之外,还有其他不同配件搭配的配置文件

配置文件的名称中会标明所使用的屏幕和摄像头。如果没有标明屏幕,说明使用的是默认 HDMI 显示;如果没有标明摄像头,说明使用的是默认单目摄像头

选择好配置文件后,执行build.sh来使其生效:

2.4.1.3. 全自动编译

全自动编译会执行所有编译、打包操作,生成完整固件。

完整固件会保存到 output/update/ 目录。

2.4.1.3. 全自动编译

全自动编译会执行所有编译、打包操作,生成完整固件。

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

2.4.1.5. 打包固件

打包固件,生成的完整固件会保存到 output/update/ 目录。

2.4.2. 分区说明

2.4.2.1. parameter 分区表

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

路径:device/rockchip/rk3566_rk3568/parameter-buildroot-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=: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 字节。

3. 编译 Linux AMP 固件

3.1. 概述

AMP(Asymmetric Multi-Processing)系统是一种非对称多核异构系统,即在同一芯片内, 通过分组CPU,并在不同组的CPU内运行不同的系统,通过合理分配任务和资源,AMP系统 可以提供更好的性能表现。

rk3568芯片有Cortex-A55 * 4 RISC-V * 1 两类CPU,四个Cortex-A55核心支持linux(kernel-4.19)、Baremetal(HAL)、RTOS(RT-Thread) , RISC-V支持Baremetal(HAL)。 利用AMP特性,可在Cortex-A55 * 4运行linux, RISC-V * 1作为辅助核心跑裸机系统;也可在Cortex-A55 * 3运行linux, Cortex-A55 * 1作为辅助核心跑裸机或实时系统等多种组合AMP构建。

3.2. 编译环境搭建

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

注意:

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

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

3.2.1. 获取 SDK

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

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

获取 SDK 需要先安装:

  • 方法一(推荐)

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

下载完成后,提取 SDK:

  • 方法二

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

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

# 创建 SDK 目录
mkdir ~/proj/rk356x_amp_sdk
cd ~/proj/rk356x_amp_sdk

## 完整 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_amp_release.xml

## BSP ( 只包含基础仓库和编译工具 )
## BSP 包括 device/rockchip 、docs 、 kernel 、 u-boot 、hal、 rt-thread 、 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_amp_bsp_release.xml

3.2.2. 同步代码

执行如下命令同步代码:

因为网络环境等原因,.repo/repo/repo sync -c --no-tags 命令更新代码可能会失败,可多次反复执行。

3.2.3. 目录结构

  • 方法二:使用 Docker

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

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

创建一个目录作为 docker 工作目录,例如~/docker/,在其中创建文件dockerfile,内容如下:

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


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

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

3.3. 编译 Ubuntu 固件

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

3.3.2. 编译 SDK

3.3.2.1. 编译前配置

不同板型的配置文件存放在device/rockchip/rk356x/目录下

回到 SDK 根目录执行build.sh选择配置文件:

3.3.2.2. 下载 Ubuntu 根文件系统


将根文件系统放到 ubuntu_rootfs/ 目录下

统一编译脚本工具支持一键编译及打包U-Boot、Kernel、HAL、RT-Thread、ROOTFS等,并生成对应的 Image镜像。

3.3.2.5. 打包固件

  • 更新链接

更新各部分镜像链接到 rockdev/ 目录:

  • 打包固件

打包固件,生成的完整固件会保存到 rockdev/pack/ 目录。

3.3.3. 分区说明

3.3.3.1. parameter 分区表

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

路径:device/rockchip/rk356x/parameter-amp-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
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00001000@0x00006000(misc),0x00001000@0x00007000(amp),0x00040000@0x00008000(boot:bootable),0x00020000@0x00048000(recovery),0x00010000@0x00068000(backup),0x49dc00@0x00078000(rootfs),-@0x515c00(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

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

3.3.3.2. package-file

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

路径:tools/linux/Linux_Pack_Firmware/rockdev/rk356x-amp-ubuntu-package-file

3.4. 编译 Buildroot 固件

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

3.4.1. 编译 SDK

3.4.1.1. 编译前配置

不同板型的配置文件存放在device/rockchip/rk356x/目录下

回到 SDK 根目录执行build.sh选择配置文件:

3.4.1.2. SDK统一编译与打包

RK3568 支持 Linux 、HAL 、RT-Thread的 AMP 混合架构设计,使得不同的 CPU 可以运行不同的系统,以满足灵活 的产品设计需求。该 SDK 目前默认使用 Linux RT-Thread 的混合结构模型,其中运行 Linux 的 CPU 为主核,运行 rtt 的 CPU 为从核;0~2核心运行Linux,3核心运行RT-Thread。

3.4.1.2.1. 编译配置

SDK 的统一编译配置脚本位于device/rockchip/rk356x/目录下,编译配置脚本内容包括U-Boot、Kernel、 HAL、RT-Thread的配置,以及AMP相关的CPU分配,内存分配等配置。用户可以根据需求增加或者修改 配置脚本文件,以满足自己的编译需求。主要的AMP配置文件如下:

3.4.1.3. 部分编译

使用rockdev/amp/amp.its配置文件打包出rockdev/amp/amp.img

3.4.1.3.1.4. 其他

hal或rt-thread默认使用uart4作为调试串口,波特率为115200

  • 更加详细说明请阅读SDK/docs/amp/manuals/rk3568下的amp相关文档

3.4.1.4. 打包固件

更新各部分镜像链接到 rockdev/ 目录:

3.4.2. 分区说明

3.4.2.1. parameter 分区表

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

路径:device/rockchip/rk356x/parameter-amp-buildroot-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
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 为分区的大小,以此类推。

3.4.2.2. package-file

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

路径:tools/linux/Linux_Pack_Firmware/rockdev/rk356x-amp-package-file

Firefly Linux 开发指南

Firefly Linux 开发指南

5. 技术案例

5.1. SSD 启动

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

准备工作:

  • RK356x 平台

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

  • 良好的 Type-C 数据线

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


5.1.1. M.2 SSD 启动

1、进入 u-boot 目录,执行如下命令编译与打包引导固件:

生成的固件有rk356x_spl_loader_*.binuboot.img

2、RK356x 进入 Maskrom 模式,把引导固件烧录到 Nor Flash(默认):

Windows 平台下选中LoaderParameter与Uboot并烧录:

_images/rkdevtool_to_nor.png

Linux 平台下烧录LoaderParameterUboot

然后重新烧录 boot.img

5、烧录固件成功后重启即可正常启动:

可以看到userdata分区挂载的设备为/dev/nvme0n1p7

5.1.2. SATA SSD 启动

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

1、编译引导固件命令如下:

5.1.3. 没有贴 Nor Flash 的情况

由于 Maskrom 不支持从 SSD 加载引导固件,因此如果没有 Nor Flash 需要把引导固件烧录到 eMMC 存储器。

  • 如果 eMMC 存储器本身有固件,那么直接进入 Loader 模式烧录rk356x_spl_loader_*.binuboot.img即可!

  • 如果 eMMC 存储器本身没有固件,那么 Maskrom 模式是默认烧录到 eMMC 存储器的。

Android开发

1. ADB 使用

1.1. 前言

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

1.2. 准备连接

使用 adb时,你需要:

  1. AIO-3568J用双公头USB数据线连接设备和主机;

  2. 基于你的主机系统安装 adb 驱动和命令。(后面会介绍到)

安卓系统还需要:

  1. 在开发板上系统中打开设置(Settings) -> 已连接设备(Connected devices) -> Connect to PC

  2. 在开发板上系统中打开设置(Settings) -> 关于平板电脑(About tablet) -> 连续点击7下版本号(Build number)

  3. 在开发板上进入设置(Settings) -> 系统(System) -> 高级(Advance) -> 开发者选项(Developer options),勾上 “USB 调试(USB debugging)” 选项(默认已勾选),Root 授权(Root access)勾选带有ADB的选项;

当设备端状态栏提示 USB debugging connected 时,便可进行调试:

_images/otg_interface.jpg

1.3. 网络 ADB

  • 设置 -> 开发者选项 -> 网络 ADB 调试

查看开发板 IP 地址,PC 端通过网络访问:

1.4. Windows下的 ADB 安装

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

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

打开命令行窗口,输入:

 如果一切正常,就可以进入 adb shell,在设备上面运行命令。

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

adb bugreport 用于错误报告,里面包含大量有用的信息。

让 ADB 的设备端切换到 root 权限模式,这样 adb remount 等需要 root 权限的命令才会成功。

1.8. 应用管理

1.8.1. 安装应用 adb install

如果安装成功,工具会返回成功提示 Success;失败的话,一般是以下几种情况:

  • INSTALL_FAILED_ALREADY_EXISTS: 此时需要用 -r 参数来重新安装。

  • INSTALL_FAILED_SIGNATURE_ERROR: 应用的签名不一致,可能是发布版和调试版签名不同所致。如果确认 APK 文件签名正常,可以用 adb uninstall 命令先卸载旧的应用,然后再安装。

  • INSTALL_FAILED_INSUFFICIENT_STORAGE: 存储空间不足,需要检查设备存储情况。

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,Core-3568J需要满足如下条件:

  • DDR至少需要 2GB

  • eMMC至少需要 16GB

3.1. Android SDK

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

3.1.1. 第一步,下载 SDK

  • 由于 SDK 较大,可以去下载页面选择云盘下载 Firefly-RK356X_Android11.0_git

  • 下载完成后,在解压前先校验下 MD5 码:

    
    

    3.1.2. 第二步,更新 SDK

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

    
    

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

    3.2. Core-3568J 产品编译方法

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

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

    3.2.5.1. HDMI CAM-2MS2MF

    • 修改 dts

      
      
    • 编译

      
      

    3.2.6. HDMI TO MIPI_CSI(RK628D) 编译

    注意:AIO-3568J 硬件版本为V1.3及往后版本方可支持使用HDMI TO MIPI_CSI 驱动板。

    3.3. 手动编译 Core-3568J 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. 简介

AIO-3568J 开发板上的 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节点

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

1.3. 驱动说明

1.3.1. 获取 AD 通道

1.4. 接口说明

1.5. 调试方法

1.5.1. Demo 程序使用

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设备地址、引脚等属性。如下Core-3568J的xc7160配置:

2.2.3. csi2_dphy0相关配置

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

2.2.4. isp相关配置

其中rkisp_vir0节点的remote-endpoint指向csidphy_out

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设备地址、引脚等属性。如下Core-3568J的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.7. Android系统使用camera应用

Android系统使用camera的apk打开摄像头需要配置camera3_profiles*.xml,具体可参考Android SDK hardware/rockchip/camera/etc/camera目录下的文件

2.8. Linux系统预览摄像头

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

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


对于双目摄像头预览,则使用如下脚本:


2.9. IQ文件

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

3. CAN 使用

3.1. CAN 简介

CAN(Controller Area Network)总线,即控制器局域网总线,是一种有效支持分布式控制或实时控制的串行通信网络。CAN总线是一种在汽车上广泛采用的总线协议,被设计作为汽车环境中的微控制器通讯。 如果想了解更多的内容可以参考CAN应用报告

注意: RK3568的CAN FD位填充功能与CAN FD标准协议不一样,不推荐使用CAN FD。

3.2. 硬件连接

CAN模块之间接线:CAN_H接CAN_H,CAN_L接CAN_L。

3.3. DTS 节点配置

3.4. 通信测试

3.4.1. CAN 通信测试

使用 candump 和 cansend 工具进行收发报文测试即可,将工具push到/system/bin/目录下执行。工具可以在 官方 或者 github 下载。

3.6. FAQS

总结调试过程中遇到的几个问题及解决方法:

3.6.1. 报文发送后很久才接收到,或者接收不到。

检查总线 CAN_H 和 CAN_L, 杜邦线是否松动或者接反。

3.6.2. CAN时钟频率配置

3.6.2.1. CAN

如果CAN的比特率1M建议修改CAN时钟到300M, 信号更稳定。低于1M比特率的, 时钟设置200M就可以。

3.6.3. CAN时钟频率修改

CAN时钟频率修改方法参考如下:

4. I2C 使用

4.1. 简介

AIO-3568J开发板上有 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
TP
I2C2_M0 GPIO0_B5/I2C2_SCL_M0
GPIO0_B6/I2C2_SDA_M0
复用为其他功能
I2C2_M1 GPIO4_B5/I2C2_SCL_M1
GPIO4_B4/I2C2_SDA_M1
复用为其他功能
I2C3_M0 GPIO1_A1/I2C3_SCL_M0
GPIO1_A0/I2C3_SDA_M0
BAT
I2C3_M1 GPIO3_B5/I2C3_SCL_M1
GPIO3_B6/I2C3_SDA_M1
复用为其他功能
I2C4_M0 GPIO4_B3/I2C4_SCL_M0
GPIO4_B2/I2C4_SDA_M0
TP
I2C4_M1 GPIO2_B2/I2C4_SCL_M1
GPIO2_B1/I2C4_SDA_M1
复用为其他功能
I2C5_M0 GPIO3_B3/I2C5_SCL_M0
GPIO3_B4/I2C5_SDA_M0
MC3230/HYM8563
I2C5_M1 GPIO4_C7/I2C5_SCL_M1
GPIO4_D0/I2C5_SDA_M1
复用为其他功能

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

配置 I2C 可分为两大步骤:

  • 定义和注册 I2C 设备

  • 定义和注册 I2C 驱动

下面以配置 GSL3680 为例。

4.2. 定义和注册 I2C 设备

4.4. FAQs

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

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

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

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

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

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

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

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

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

5. IR 使用

5.1. 红外遥控配置

Core-3568J 开发板上使用红外收发传感器 IR (在ADC接口下面)实现遥控功能,在 IR 接口处接上红外接收器。本文主要描述在开发板上如何配置红外遥控器。

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

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

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

5.2. 内核驱动

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

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

5.2.1. 定义相关数据结构

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

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

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

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

5.2.3. 将 IR 驱动编译进内核

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

5.2.4. Android 键值映射

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

5.3. IR 使用

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

_images/ir.jpg

6. LCD使用

6.1. Config配置

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

NAME GPIO GPIO_ACTIVE
enable-gpios(LCD_EN) GPIO0_C7 GPIO_ACTIVE_HIGH
reset-gpios(LCD_RST) GPIO0_C5 GPIO_ACTIVE_LOW

在硬件信号上LCD_EN引脚高电平有效,而LCD_RST引脚是低电平有效,具体的引脚配置请参考《GPIO 使用》一节。需要注意的是AIO-3568J的dsi1中,LCD_EN:(PCA_IO0_7)使用的是PCA9555扩展芯片引出来的gpio,需要PCA9555 驱动起来以后才能控制该gpio。

6.2.2. 背光配置

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

  • enable-gpios:背光使能脚,高电平有效。

  • pwms属性:配置PWM,范例里面默认使用pwm4,50000ns是周期(20 KHz),pwm为负极性。

  • brightness-levels属性:配置背光亮度数组,一般以值 255 为一个 scale,当 PWM 设置为正极性时,从 0~255 表示背光为正极,占空比从 0%~100% 变化,255~0 为负极性,占空比从 100%~0% 变化;当 PWM 设置为负极性时,反之。

  • default-brightness-level属性:开机时默认背光亮度,范围为0-255。

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

6.3. EDP DTS配置

6.3.1. 引脚配置

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

NAME GPIO GPIO_ACTIVE
vcc3v3_lcd_edp (LCD_EN) GPIO1_B1 GPIO_ACTIVE_HIGH
enable-gpios(BL_EN) GPIO1_A4 GPIO_ACTIVE_LOW
hpd-gpios(EDP_HPD) GPIO0_C2 GPIO_ACTIVE_HIGH

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

6.3.2. EDP背光配置

因为背光接口是公用的,所以可以参考上述MIPI的配置方法。

6.3.3. EDP显示时序配置

不同于MIPI屏,EDP屏对上下电时序没有那么高的要求,当然主要还是要看调试屏幕的上下电时序图来配置,示例EDP屏只需要如下配置Display-Timings:

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

7. Ethernet 使用

7.1. dts 配置

7.1.1. 公共的配置

7.2. Android双以太网的使用

此设备的双以太网口分内网和外网。 内网又称局域网(Local Area Network,LAN,是指在某一区域内由多台计算机以及网络设备构成的网络,无法连通外部网络;外网为广域网,又称公网,是连接不同地区局域网或城域网计算机通信的远程网,可以连通外部网络,如访问百度,搜狗。

  • eth0 : 副网口,用于内网

  • eth1 : 主网口,用于外网

_images/eth0_eth1.jpg

8. GPIO 使用

8.1. 简介

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

8.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

8.6. FAQs

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

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

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

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

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

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

8.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 所做事情更多,浪费。

9. LED 使用

9.1. 前言

AIO-3568J开发板上有 2 个 LED 灯,如下表所示:

LED Pin name Pin number
Blue GPIO0_C0 16
Yellow PCA_IO1_2 510

PCA_IO1_2 是从 GPIO 扩展芯片出来的。

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

9.2. 以设备的方式控制 LED

10. PWM 使用

10.1. 前言

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

10.3. 接口说明

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

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

10.5. FAQs

10.5.1. PWM 无法注册成功:

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

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

11. RTC 使用

11.1. 简介

AIO-3568J开发板采用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)

  • 内部集成振荡电容

  • 漏极开路中断引脚

11.2. RTC驱动

11.4. FAQs

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

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

12. UART 使用

12.1. 简介

AIO-3568J支持UART、RS232、RS485接口

  • UARTx2

  • RS485x2

  • RS232x2

其中开发板的RS232接口由主控的uart3和uart4扩展出来,而UART和RS485则由SPI 桥接/扩展芯片wk2124扩展出来,该芯片特性如下

  • 每个子通道 UART 的波特率、字长、校验格式可以独立设置,最高可以提供 2Mbps 的通信速率

  • 每个子通道具备收/发独立的 256 BYTE FIFO,FIFO 的中断可按用户需求进行编程触发点

  • 具备子串口接收 FIFO 超时中断

  • 支持起始位错误检测

AIO-3568J开发板的串口接口图如下:

_images/uart_interface.jpg

12.2. DTS配置

12.3. PIN 脚定义

  • RS232详细见下图的红框

_images/AIO-3568J_RS232_pins.jpg

 

  • RS485详细见下图的红框

 _images/AIO-3568J_RS485_pins.jpg

  • UART

    详细见下图的红框

 _images/AIO-3568J_uart_pins.jpg

12.4. 调试方法

用户可以根据不同的接口使用不同的主机的 USB 转串口适配器向开发板的串口收发数据,例如 RS485 的调试步骤如下:

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

  • 可视角度:160°

  • 触摸屏:多点电容触摸

2.1.2. 参考固件

官方的MIPI固件默认支持MIPI_DSI1 HDMI显示,MIPI屏连接AIO-3568J的MIPI_DSI1接口,下面是固件的链接:固件链接

注意: 接入HDMI时,HDMI的两边有可能会有黒边的现象,这是因为HDMI作为副屏会根据主屏MIPI的宽高比进行缩放,如果两者的宽高比不一致,就会导致黒边。

2.1.3. 编译命令

2.1.3.1. MIPI_DSI1 HDMI

注意:如果需要支持 CAM-2MS2M 摄像头模组,需要先做如下修改,再编译。

2.1.5. 实物图

2.1.5.1. MIPI_DSI1 正面

_images/module_display_mipi_DSI1_front.jpg

2.1.5.2. MIPI_DSI1 背面

_images/module_display_mipi_DSI1_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/core_3568j_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/core_3568j_2ms2m.jpg

3.2.6. 实拍图片

_images/camera_2ms2m_shoot.png

注意: 4G模组和5G模组使用的座子不一样,4G模组使用MINI PCIE接口,5G模组使用M.2(NGFF)接口,购买AIO-3568J主板时请根据所需的模组选择正确的接口座子

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

  • Mini-PCIe 接口连接

_images/module_wireless_4G-EC20_MiniPCIe_AntWord.png

  • 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.3. RM500Q-GL 5G模组套件

4.3.1. 产品参数

  • 型号

    • RM500QGLAB-M20-SGASA

  • 电源电压

    • 3.135~4.4 V , 典型值: 3.7V

  • 发射功率

    • WCDMA 频段:Class 3(24 dBm 1/-3 dB)

    • LTE 频段:Class 3(23 dBm ±2 dB)

    • 5G NR 频段:Class 3(23 dBm ±2 dB)

    • LTE B38/B40/B41/B42/B43 频段 HPUE:Class 2(26 dBm ±2 dB)

    • 5G NR n41/n77/n78/n79 bands HPUE:Class 2(26 dBm 2/-3 dB)

  • 5G NR 特性

    • 支持 3GPP Release 15

    • 调制方式:

      • 256QAM (UL)

      • 256QAM (DL)

    • SCS 支持 15 kHz 和 30 kHz

    • 正在开发的 5G NR 频段最大带宽支持 20MHz

    • 5G NR n41/n77/n78/n79 最大带宽支持 100 MHz

    • 支持 Option 3x、3a 和 Option 2

    • NSA TDD:Max 2.5 Gbps (DL) Max 650 Mbps (UL)

    • SA TDD: Max 2.1 Gbps (DL) Max 900 Mbps (UL)

    • n41/n77/n78/n79 频段支持上行 2 × 2 MIMO

    • n1/n2/n3/n7/25/n38/n40/n41/n48/n66/n77/n78/n79 频段支持下行 4 × 4 MIMO

    • 支持 SA 和 NSA 组网模式,所有 5G 频段均支持 SA,n38*/n41/n77/n78/n79 频段支持 NSA

  • LTE 特性

    • 最大支持 CA Cat 16 FDD 和 TDD

    • 调制方式:

      • (UL) QPSK、16QAM、64QAM、256QAM*

      • (DL) QPSK、16QAM、64QAM、256QAM

    • 支持 1.4~20 MHz(3 × CA)射频带宽

    • LTE: Max 1.0 Gbps (DL) Max 200 Mbps (UL)

    • B1/B2/B3/B4/B7/B25/B30/B38/B39/B40/B41/B42/B43/B48/B66 频段支持下行 4 × 4 MIMO

  • UMTS 特性

    • 支持 QPSK、16QAM 和 64QAM 调制

    • DC-HSDPA:Max 42 Mbps (DL)

    • HSUPA:Max 5.76 Mbps (UL)

    • WCDMA:Max (DL/UL) 384 kbps

    • 支持 3GPP R8 DC-HSDPA、HSPA 、HSDPA、HSUPA 和 WCDMA

  • 接口

    • USB 接口:符合 USB 3.1 和 USB 2.0 规范

    • (U)SIM 接口:支持Class B(3.0 V)和 Class C(1.8 V)

    • 分集接收天线接口:支持 5G NR/LTE/WCDMA 分集接收

    • PCIE接口:符合 PCIe Gen3 规范,每个通道传输速率可达 8 Gbps

    • 天线接口:×4 (ANT0、ANT1、ANT2_GNSSL1 和 ANT3 四个天线接口 )

  • 网络协议特性

    • 支持 QMI/NTP*协议

    • 支持 PAP 和 EIRP 协议,通常用于 PPP 连接

  • 内置GNSS

    • 支持GPS、GLONASS、BeiDou、Galileo和QZSS

  • 结构尺寸

    • (52.0 ±0.15) mm × (30.0 ±0.15) mm × (2.3 ±0.2) mm

  • 重量

    • 约 8.6g

  • RoHS

    • 符合 EU RoHS 标准

注意:* 表示移远官方正在开发中

4.3.2. 实物图

_images/module_wireless_5G.png

4.3.3. 连接方法

  • M.2(NGFF) 接口连接

_images/module_wireless_5G-RM500Q-GL_NGFF_AntWord.png

注意:5G-RM500Q-GL模块的使用需要接上4根天线

4.3.4. 参考固件

公版固件默认支持 EC20 4G 模组、EC200T 4G模组 、RM500Q-GL 5G模组

4.4. GNSS 模块

4.4.1. DELINCOMM 系列

4.4.1.1. 产品参数

_images/module_wireless_gps_delincomm.jpg

该系列各个模组型号的参数会存在差异,详情可参考DelinComm_gps.pdf

4.4.1.2. 接口定义

VCC (红线)、GND (黑线)、TX (白线)、RX(绿线)

4.4.1.3. 使用说明

4.4.1.3.1. 硬件连接

  • 将模组的VCC、GND、TX、RX分别接到AIO-3568J UART1(对应节点为/dev/ttysWK2)的3.3V、GND、RX、TX,注意避免接错VCC、GND、TX、RX导致烧坏模组

  • 对于UART的一些定义和说明可以参考Wiki教程《UART 使用》

4.4.1.3.2. 软件配置

DELINCOMM系列串口波特率配置为9600,公版固件已经默认配置好,使能GPS后即可使用,详情可以参考如何使能GPS和修改串口配置

注意:GPS功能会占用到 UART1,若需要用 UART1 作为其他用途,需要将GPS先禁止掉

4.4.2. DK2635U7F 模块

4.4.2.1. 产品参数

_images/module_wireless_gps.png

详细产品规格可参考DK2635U7F规格书.pdf

4.4.2.2. 接口定义

VCC (白线)、GND (黑线)、TX (蓝线)、RX(绿线)

4.4.2.3. 使用说明

4.4.2.3.1. 硬件连接
  • 将模组的VCC、GND、TX、RX分别接到AIO-3568J UART1(对应节点为/dev/ttysWK2)的3.3V、GND、RX、TX,注意避免接错VCC、GND、TX、RX导致烧坏模组

  • 对于UART的一些定义和说明可以参考Wiki教程《UART 使用》

4.4.2.3.2. 软件配置

UBLOX模块串口波特率配置为9600,公版固件已经默认配置好,使能GPS后即可使用,详情可以参考如何使能GPS和修改串口配置

注意:GPS功能会占用到 UART1,若需要用 UART1 作为其他用途,需要将GPS先禁止掉

4.4.3. EC20 GNSS功能

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

4.4.3.1. 天线要求

  • 频率范围:1559MHz~1609MHz

  • 极化:RHCP 或 Linear

  • VSWR:< 2(典型值)

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

  • 有源天线增益:> 0dB

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

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

4.4.3.2. 使用说明

4.4.3.2.1. 硬件连接

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

4.4.3.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.4.4. 如何使能GPS和修改串口配置

4.4.4.1. 临时修改

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

5. 12V电源适配器

5.1. 产品参数

  • 产品:电源适配器

  • 规格:美规/欧规

  • 输入标准:AC110-240V 50/60Hz

  • 输出标准:12V-2A

注意: Core-3568J 一体机正常工作需要电源 12V/2A,电流低于 2A 可能会因电流过小而异常重启,为了保证开发板的正常工作,请使用电压为 12V,电流为 2A~3A 的电源,推荐使用 Firefly 官网电源配件。

5.2. 实物图

_images/module_power_adapter1.png

_images/module_power_adapter2.png

6. 红外遥控器

6.1. 产品参数

  • 产品:12键红外遥控器

  • 版本:Firefly 定制版

  • 电源:两节7号电池

  • 适配:AIO-3568J

  • 描述:支持 AIO-3568J 开发板的遥控功能

6.2. 实物图

_images/module_ir.png

6.3. 键值码

_images/module_ir_remote_info.png

7. SATA转接板

AIO-3568J使用SATA硬盘时需要用到SATA转接板模块,SATA转接板模块适配Firefly具有FPC SATA接口的所有系列主板,可接2.5”或3.5” SSD/HDD。SATA转接板和AIO-3568J采用FPC排线连接,铝箔屏蔽,最大限度减少信号干扰

_images/TF-SATA-TRA_connection.jpg

7.1. SATA转接板模块实物图

  • SATA转接板正面 

  • _images/TF-SATA-TRA_front.jpg

  • SATA转接板背面 

  • _images/TF-SATA-TRA_back.jpg

7.2. AIO-3568J连接SATA硬盘

_images/TF-SATA-TRA_connect_mainboard.jpg

注意: 为防止烧坏的情况发生,板子请先断电再接上SATA硬盘

HDMI 转 MIPI CSI 驱动板

HDMI 转 MIPI CSI 驱动板

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. 编译

2.3. 烧录

打开烧录工具,板子接好 USB OTG 线,接通电源时按住 Recovery 键,使开发板进入 U-Boot 的下载模式,在烧录工具中选择编译好的 Loader 文件,点击执行即可,如下图:

_images/uboot_download.jpg

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

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

3. NPU使用

RK3568 内置 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 模型可以直接运行在 RK3568 平台上,在rknpu2/examples中有例子,根据README.md编译生成 Android 或 Linux Demo(需要交叉编译环境)。也可以直接下载编译好的 Demo

在 AIO-3568J 上运行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 等其他模型,想要在 RK3568 平台运行,需要先进行模型转换。可以使用 RKNN-Toolkit2 工具将模型转换成 RKNN 格式。

3.3. RKNN-Toolkit2工具

3.3.1. 工具介绍

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

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

  • 模型转换: 支持 CaffeTensorFlowTensorFlow LiteONNXDarkNetPyTorch 等模型转为 RKNN 模型,并支持 RKNN 模型导入导出,RKNN 模型能够在 Rockchip NPU 平台上加载使用
     

  • 量化功能: 支持将浮点模型量化为定点模型,目前支持的量化方法为非对称量化 ( asymmetric_quantized-8 及 asymmetric_quantized-16 ),并支持混合量化功能 。 asymmetric_quantized-16 目前版本暂不支持
     

  • 模型推理: 能够在 PC 上模拟 Rockchip NPU 运行 RKNN 模型并获取推理结果; 或将 RKNN 模型分发到指定的 NPU 设备上进行推理并获取推理结果
     

  • 性能评估: 将 RKNN 模型分发到指定 NPU 设备上运行,以评估模型在实际设备上运行时的性能
     

  • 内存评估: 评估模型运行时的内存的占用情况。使用该功能时,必须将 RKNN 模型分发到 NPU 设备中运行,并调用相关接口获取内存使用信息
     

  • 量化精度分析: 该功能将给出模型量化前后每一层推理结果与浮点模型推理结果的余弦距离,以便于分析量化误差是如何出现的,为提高量化模型的精度提供思路

3.3.2. 环境依赖

3.3.3. RKNN-Toolkit2 安装

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

3.3.4.2. 运行在与 PC 相连的 AIO-3568J NPU 平台上

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

AIO-3568J Android 系统需要参考 ADB 使用章节”准备连接”打开ADB功能,Linux 默认已经打开 ADB 功能。打开之后可以看到有adb设备。

3.4. 详细开发文档

AIO-3568J 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 。

cp arch/arm64/boot/dts/rockchip/.rk3568-firefly-aioj.dtb.dts.tmp.domain arch/arm64/boot/dts/rockchip/.rk3568-firefly-aioj-DEMO.dtb.dts.tmp.domain

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

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

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

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

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

有可能是电源电流不够,请使用电压为 12V,电流为 2.5A~3A 的电源。

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

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

1.7.1. Windows方式

  • 安装RKDevInfoWriteTool

  • RKDevInfoWriteTool的设置里选中”RPMB”

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

  • 开发板进入loader模式

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

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

1.7.2. Linux方式

开发板自身写号方式

  • buildroot使能BR2_PACKAGE_VENDOR_STORAGE

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

1. 接口定义

1.1. 整机接口定义

AIO-3568J 提供了丰富的接口,主要包括:

  • 电源接口

  • 1 x USB3.0(host/device)

  • 1 x USB3.0(host)

  • 4 x USB2.0(接口×2,座子×2)

  • HDMI

  • MIPI 屏幕接口

  • EDP 屏接口

  • TP 触摸接口

  • 以太网

  • WIFI 天线

  • 蓝牙天线

  • MIC 接口

  • 音频输入 (linein)

  • 3.5mm 耳机接口

  • 12V 电源接口

  • IR 接口

  • TF 卡槽

  • SIM 卡槽

  • SATA 接口

  • 喇叭接口

  • Power 按键

  • Reset 按键

  • Recovery 按键

  • 调试串口

  • 工业级串口 (RS485, RS232, TTL)

  • MIPI 摄像头接口

  • MINI-PCIE(可选M2 NGFF 5G座子)

  • M.2 PCIE 3.0接口

  • CAN/CANFD

具体如下图:

_images/interface_front.jpg

_images/interface_reverse.jpg

资源下载

资料下载

电话咨询
微信咨询
留言