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

前言

概述

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

OS 版本

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

文档当前版本

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

修订记录

  • V2.0.2

    • 更新时间:2022-05-10

    • 更新内容:

      • 修改串口调试内容

      • 修正部分下载链接。

  • V2.0.1

    • 更新时间:2022-05-09

    • 更新内容:

      • 增加《修订记录》

上手教程

1. 介绍

iCore-3568JQ板载 RK3568J 四核 64 位工业级处理器,支持 8GB 大内存;支持 WiFi6,5G/4G 等高速无线网络通讯;采用了 BTB 接口,传输能力更强; 拥有工业级的稳定性,在 -40°C 至 85°C 工作温度下可长时间稳定运行;提供底板参考设计资料,用户可自主深度化定制

_images/iCore-3568JQ.jpg

ITX-3568Q开发板由核心板 iCore-3568JQ 加底板组成, 标准 ITX 主板尺寸,标准的接口规范,可适配通用的ITX电脑机箱。提供丰富的拓展接口,让用户在创造时能有更大的想象空间

_images/ITX-3568Q.jpg

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

  • iCore-3568JQ 核心板一块

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

  • ITX-3568Q 底板一块

  • 散热风扇

  • SATA 电源线(1分5)和数据线

  • HDMI-2.0 4K 数据线

  • 铜管天线 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  

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

2.2. 硬件连接

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

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

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

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

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

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

ITX-3568Q 串口连接图:

_images/debug_connection.jpg

2.3. 串口参数配置

ITX-3568Q 使用以下串口参数:

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

设置完成后回到上一菜单,选择 Save setup as dfl 即可保存为默认配置,以后将默认使用该配置。

升级固件

1. 更新固件介绍

1.1. 前言

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

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

_images/working_mode.png

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

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数据线烧录到 iCore-3568JQ 开发板的存储器中。升级时,需要根据主机操作系统和固件类型来选择合适的升级方式。

2.2. 准备工具

  • ITX-3568Q 开发板

  • 主机

  • 良好的双公头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.jpg

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

  • _images/recovery_key.jpg

  • 接上电源

  • 大约两秒钟后,松开 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烧写固件前先确定板子ITX-3568Q是否有贴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 请无视)

如何查看版本:

不要将 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. 烧写分区映像

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数据线连接设备和电脑

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

  • 设备插入电源

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

短接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。具体操作步骤如下:

如果还没有编译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. 操作步骤

Linux开发

1. 编译 Linux4.19 固件

1.1. 编译环境搭建

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

注意:

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

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

1.1.1. 获取 SDK

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

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

获取 SDK 需要先安装:

  • 方法一(推荐)

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

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

$ md5sum rk356x_linux_release_v1.3.0b_20221213_split_dir/*firefly_split*
409b81a9ed3bb9a7d6af91223836cad5  rk356x_linux_release_v1.3.0b_20221213_split_dir/rk356x_linux_release_v1.3.0b_20221213_firefly_split.file00
75cef82f2bf91052a7d3c6f0b8405a89  rk356x_linux_release_v1.3.0b_20221213_split_dir/rk356x_linux_release_v1.3.0b_20221213_firefly_split.file01
6f20f62e9652f8f999692587a2ac4b79  rk356x_linux_release_v1.3.0b_20221213_split_dir/rk356x_linux_release_v1.3.0b_20221213_firefly_split.file02
113acbbcd18d3abe0552ef296e983a3f  rk356x_linux_release_v1.3.0b_20221213_split_dir/rk356x_linux_release_v1.3.0b_20221213_firefly_split.file03
624c88a4da2eaa4a48f380783b126d00  rk356x_linux_release_v1.3.0b_20221213_split_dir/rk356x_linux_release_v1.3.0b_20221213_firefly_split.file04
1cf861afb0b36c9ebcf26a7d6effb260  rk356x_linux_release_v1.3.0b_20221213_split_dir/rk356x_linux_release_v1.3.0b_20221213_firefly_split.file05
3009e46fc14481e77fe7ec143e217de4  rk356x_linux_release_v1.3.0b_20221213_split_dir/rk356x_linux_release_v1.3.0b_20221213_firefly_split.file06
5e1cc90b99e34f20b75fb506d3e9bcd7  rk356x_linux_release_v1.3.0b_20221213_split_dir/rk356x_linux_release_v1.3.0b_20221213_firefly_split.file07
1a512fa7c9e2fd1a0781f8d40e228402  rk356x_linux_release_v1.3.0b_20221213_split_dir/rk356x_linux_release_v1.3.0b_20221213_firefly_split.file08

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

  • 方法二

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

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

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

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

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

1.1.2. 同步代码

执行如下命令同步代码:

1.1.4. 安装依赖

  • 方法二:使用 Docker

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

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

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

# 此处将主机内 SDK 所在文件夹挂载到容器内,这样容器内就能访问主机中的 SDK 了
# source= 填 SDK 所在目录;target= 填容器内的一个目录,必须是空目录
# ubuntu18 是容器名,firefly 是容器 hostname,均可随意更改
# sdkcompiler 是上一步的镜像名
docker run --privileged --mount type=bind,source=/home/fierfly/proj,target=/home/firefly/proj --name="ubuntu18" -h firefly -it sdkcompiler

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

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

1.2. 编译 Ubuntu 固件

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

1.2.2. 编译 SDK

1.2.2.1. 编译前配置

1.2.2.2. 选择编译配件

1.2.2.3. 下载 Ubuntu 根文件系统


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

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

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

1.2.2.7.2. RAW 固件

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

Etcher 官方下载链接

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

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

1.2.3.2. package-file

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

1.3. 编译 Yocto 固件

1.3.1. 获取SDK

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

1.3.2. 编译

1.3.2.1. 选择映像

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

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

1.3.3. 编译映像文件

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

进入目录 ,按顺序执行如下命令

1.3.4. 调整编译速度

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

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. 编译 Buildroot 固件

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

1.4.1. 编译 SDK

1.4.1.1. 编译前配置

1.4.1.2. 选择编译配件

1.4.1.4. 部分编译

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

1.4.1.5. 打包固件

1.4.2. 分区说明

1.4.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.4.2.2. package-file

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

2. 编译 Linux5.10 固件

2.1. 编译环境搭建

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

注意:

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

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

2.1.1. 获取 SDK

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

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

获取 SDK 需要先安装:

  • 方法一(推荐)

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

下载完成后,提取 SDK:

  • 方法二

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

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

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

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

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

2.1.2. 同步代码

执行如下命令同步代码:

2.1.4. 安装依赖

  • 方法二:使用 Docker

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

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

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

# 此处将主机内 SDK 所在文件夹挂载到容器内,这样容器内就能访问主机中的 SDK 了
# source= 填 SDK 所在目录;target= 填容器内的一个目录,必须是空目录
# ubuntu18 是容器名,firefly 是容器 hostname,均可随意更改
# sdkcompiler 是上一步的镜像名
docker run --privileged --mount type=bind,source=/home/fierfly/proj,target=/home/firefly/proj --name="ubuntu18" -h firefly -it sdkcompiler

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

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

2.2. 编译 Ubuntu 固件

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

2.2.2. 编译 SDK

2.2.2.1. 编译前配置

2.2.2.2. 选择编译配件

2.2.2.3. 下载 Ubuntu 根文件系统


2.2.2.4. 全自动编译

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

  • 编译 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 通外网

进入目录 ,按顺序执行如下命令

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

2.3.8. 相关概述

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

2.3.9. Yocto Project Release layer 介绍

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

2.4. 编译 Buildroot 固件

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

2.4.1. 编译 SDK

2.4.1.1. 编译前配置

2.4.1.2. 选择编译配件

2.4.1.4. 部分编译

编译目录在 buildroot/output/ 下

2.4.1.5. 打包固件

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

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

Firefly Linux 开发指南

Firefly Linux 开发指南

4. 技术案例

4.1. SSD 启动

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

准备工作:

  • RK356x 平台

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

  • 良好的 Type-C 数据线

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


_images/rkdevtool_to_nor.png

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

取消 extboot:

4.1.2. SATA SSD 启动

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

Android开发

1. ADB 使用

1.1. 前言

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

1.2. 准备连接

使用 adb时,你需要:

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

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

_images/otg_interface.jpg

1.3. 网络 ADB

1.4. Windows下的 ADB 安装

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

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

打开命令行窗口,输入:

1.5. Ubuntu 下的 ADB 安装

1.6. 常用 ADB 命令

1.6.1. 连接管理

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

1.7. 调试

1.7.1. 获取系统日志 adb logcat

1.7.3. root 权限

如果 TARGET_BUILD_VARIANT 使用的是 userdebug 模式,要获得 root 权限,需要先运行:

1.8. 应用管理

1.8.1. 安装应用 adb install

1.8.2. 卸载应用 adb uninstall

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

1.8.3. 命令行帮助信息 adb help

2. 编译环境搭建

2.1. 准备工作

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

  • 64 位 CPU

  • 16GB 物理内存 交换内存

  • 250GB 空闲的磁盘空间

建议使用 Ubuntu 18.04 操作系统

  • Ubuntu 14.04 软件包安装参考:


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

3. 编译 Android11.0 固件

运行 Android11.0,iCore-3568JQ需要满足如下条件:

  • 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. iCore-3568JQ 产品编译方法

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

    3.2.1. 公版编译

    3.2.1.1. HDMI

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

    3.2.4.1. HDMI CAM-2MS2MF

    • 修改 dts

      diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-itx-3568q.dts b/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-itx-3568q.dts
      index d784287..fbe7b6b 100755
      --- a/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-itx-3568q.dts
          b/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-itx-3568q.dts
      @@ -21,8  21,8 @@
        * using dual camera gc2053/gc2093   ----> rk3568-firefly-itx-3568q-cam-2ms2m.dtsi
        * using hdmi-in module rk628d   ----> rk3568-firefly-itx-3568q-tf-hdmi-mipi-rk628.dtsi
        */
      -#include "rk3568-firefly-itx-3568q-cam-8ms1m.dtsi"
      -//#include "rk3568-firefly-itx-3568q-cam-2ms2m.dtsi"
       //#include "rk3568-firefly-itx-3568q-cam-8ms1m.dtsi"
       #include "rk3568-firefly-itx-3568q-cam-2ms2m.dtsi"
       //#include "rk3568-firefly-itx-3568q-tf-hdmi-mipi-rk628.dtsi"
      

      注意:进行内核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. 简介

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

这里申请的是 SARADC 通道2

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

1.3. 驱动说明

1.3.1. 获取 AD 通道

注意:

  • Vref 为标准电压

  • n 为 AD 转换的位数

  • Vresult 为用户所需要的采集电压

  • raw 为 AD 采集的原始数据

例如,标准电压为 1.8V,AD 采集位数为 10 位,AD 采集到的原始数据为 568,则:

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

2.2.3. csi2_dphy0相关配置

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

2.2.4. isp相关配置

2.3. Split Mode配置

链接关系:

sensor1->csi_dphy1->isp_vir0

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

2.3.1. Split Mode设备树配置要点

2.3.2. 配置sensor端

我们需要根据板子原理图的MIPI CSI接口找到两个sensor是挂在哪个I2C总线上,然后在对应的I2C节点配置两个camera节点,正确配置camera模组的I2C设备地址、引脚等属性。如下iCore-3568JQ的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的配置默认使用单目摄像头

diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-itx-3568q.dts b/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-itx-3568q.dts
index 7e2a8b2..14fa027 100755
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-itx-3568q.dts
    b/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-itx-3568q.dts
@@ -7,6  7,15 @@
 #include "rk3568-firefly-itx-3568q-cam-8ms1m.dtsi"
 //#include "rk3568-firefly-itx-3568q-cam-2ms2m.dtsi"

2.5.2. 使用双目摄像头CAM-2MS2MF

diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-itx-3568q.dts b/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-itx-3568q.dts
index 7e2a8b2..14fa027 100755
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-itx-3568q.dts
    b/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-itx-3568q.dts
@@ -7,6  7,15 @@
- #include "rk3568-firefly-itx-3568q-cam-8ms1m.dtsi"
 //#include "rk3568-firefly-itx-3568q-cam-8ms1m.dtsi"
- //#include "rk3568-firefly-itx-3568q-cam-2ms2m.dtsi"
  #include "rk3568-firefly-itx-3568q-cam-2ms2m.dtsi"

2.6. Camera底层调试

使用v4l2-ctl抓取camera数据帧

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

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

2.8. Linux系统预览摄像头

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

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

#!/bin/bash

export DISPLAY=:0
export XAUTHORITY=/home/firefly/.Xauthority
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/aarch64-linux-gnu/gstreamer-1.0
WIDTH=1920
HEIGHT=1080
SINK=xvimagesink

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=NV12,width=${WIDTH},height=${HEIGHT}, framerate=30/1 ! videoconvert ! $SINK &

wait

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

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

#!/bin/bash

export DISPLAY=:0
export XAUTHORITY=/home/firefly/.Xauthority
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/aarch64-linux-gnu/gstreamer-1.0
WIDTH=640
HEIGHT=480
SINK=xvimagesink

gst-launch-1.0 v4l2src device=/dev/video14 ! video/x-raw,format=NV12,width=${WIDTH},height=${HEIGHT}, framerate=30/1 ! videoconvert ! $SINK &
gst-launch-1.0 v4l2src device=/dev/video5 ! video/x-raw,format=NV12,width=${WIDTH},height=${HEIGHT}, framerate=30/1 ! videoconvert ! $SINK &

wait

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 节点配置

ITX-3568Q 仅引出can1,因此仅使能can1

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. 简介

ITX-3568Q开发板上有 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/HYM8563
I2C2_M0 GPIO0_B5/I2C2_SCL_M0
GPIO0_B6/I2C2_SDA_M0
复用为其他功能
I2C2_M1 GPIO4_B5/I2C2_SCL_M1
GPIO4_B4/I2C2_SDA_M1
VGA
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
camera
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 为例。

4.2. 定义和注册 I2C 设备

在注册 I2C 设备时,需要结构体 i2c_client 来描述 I2C 设备。然而在标准 Linux 中,用户只需要提供相应的 I2C 设备信息,Linux 就会根据所提供的信息构造 i2c_client 结构体。

用户所提供的 I2C 设备信息以节点的形式写到 DTS 文件中,如下所示:

4.3. 定义和注册 I2C 驱动

4.3.1. 定义 I2C 驱动

4.3.3. 通过 I2C 收发数据

在注册好 I2C 驱动后,即可进行 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. LCD使用

5.1. Config配置

5.2. MIPI DTS配置

vp 是视频接口的意思,这一段表示 DSI0 关闭,DSI1 开启并使用 vp1,HDMI 开启并使用 vp0

DSI1 和 HDMI 交换 vp 也是可以的,要保证不同的屏幕需要使用不同的 vp

5.2.2. 引脚配置

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

NAME GPIO GPIO_ACTIVE
enable-gpios(LCD_EN) PCA_IO1_2 GPIO_ACTIVE_HIGH
reset-gpios(LCD_RST) GPIO0_B0 GPIO_ACTIVE_LOW

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

5.2.3. 背光配置

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

mipi-data-delay-ms为10.1寸 M101014-BE45-A1 MIPI屏所需时序,调试屏幕时可根据本身上下电时序是否需要再配置此属性。MIPI上下电后需要发送初始化或退出指令才能使之正常工作,列表如下:

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

6. Ethernet 使用

6.1. dts 配置

6.1.1. 公共的配置

6.1.2. 板级的配置

6.2. Android双以太网的使用

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

  • eth0 : 副网口,用于内网

  • eth1 : 主网口,用于外网

_images/eth0_eth1.jpg

Android 系统Settings -> Network & internet -> Ethernet/Ethernet2, 可以查看主副网口的 IP 地址。

6.2.1. 查看IP地址

6.2.2. 连通性测试

7. GPIO 使用

7.1. 简介

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

7.3. 输入输出

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

然后在 probe 函数中对 DTS 所添加的资源进行解析,代码如下:

7.4. 中断

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

7.5. 复用

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

func0 func1 func2 func3 func4
GPIO0_B4 I2C1_SDA CAN0_RX_M0 PCIE20_BUTTONRSTn MCU_JTAG_TCK

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

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

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

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

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

7.6. FAQs

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

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

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

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

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

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

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

8. LED 使用

8.1. 前言

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

LED Pin name Pin number
Blue GPIO0_B6 14
Yellow GPIO4_C4 148

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

8.2. 以设备的方式控制 LED

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

8.3. 使用 trigger 方式控制 LED

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

8.3.1. Simple trigger LED

按名字来是看就是简单的触发方式控制 LED,如下就默认打开黄灯,ITX-3568Q开机后黄灯就亮。

8.3.2. Complex trigger LED

9. PWM 使用

9.1. 前言

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

9.3. 接口说明

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

9.4. 调试方法

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

9.5. FAQs

9.5.1. PWM 无法注册成功:

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

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

10. RTC 使用

10.1. 简介

ITX-3568Q开发板采用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)

  • 内部集成振荡电容

  • 漏极开路中断引脚

10.2. RTC驱动

10.3. 接口使用

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

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

  • PROCFS接口: /proc/driver/rtc

  • IOCTL接口: /dev/rtc0

10.3.1. SYSFS接口

10.3.2. PROCFS 接口

打印 RTC 相关的信息:

10.4. FAQs

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

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

11. UART 使用

11.1. 简介

ITX-3568Q支持UART、RS232、RS485接口

  • UARTx1

  • RS485x1

  • RS232x1

其中开发板的 RS232 接口由主控的 uart3 扩展出来,RS485 是由 uart0 扩展出来,UART 则是 uart9

11.2. DTS配置

11.3. PIN 脚定义

  • RS232 & RS485 

  • _images/iCore-3568JQ_RS232-RS485_pins.jpg

  • UART9 

  • _images/iCore-3568JQ_uart_pins.jpg

11.4. RS232/RS485 使用说明

使用如下指令切换RS485/RS232:

11.5. 调试方法

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

12. Watchdog 使用

12.1. 简介

看门狗(watchdog)实际是一个定时器,启动之后会开始计时,系统或者软件需要在规定时间内与看门狗通信(俗称喂狗)重置计时,如此反复下去,以此来确定系统和软件正常运行。

如果规定时间内没有喂狗,看门狗超时,说明系统或应用陷入循环、卡死,此时看门狗会发出复位信号让主控复位,脱离卡死。

iCore-3568JQ 带有一个内部看门狗和一个外部看门狗,外部看门狗的型号为:PC9202

12.2. 内部看门狗

注意事项: 内部看门狗在使用 open 函数打开后会立刻开始计时

参考文档:SDK/RKDocs(linux 为 docs)/common/watchdog

12.3. 外部看门狗

外部看门狗同样可以用程序控制,写法和内部看门狗一样,只需要修改设备名称和写入的内容

注意事项:

  1. 外部看门狗在使用 open 函数打开后不会开始计时,必须要写入数字才开始

  2. 外部看门狗只支持写入数字 0,1,2,3

  3. 目前 iCore-3568JQ v1.0 版本,外部看门狗开启后无法软件关闭,需要断电才能关闭

  4. 因此,如果开启外部看门狗之后想要烧写固件,请按住 recovery 断开电源再连接进入 loader 模式,使用 reboot loader 命令进入可能会被看门狗重启

配件

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屏连接 ITX-3568Q 的MIPI_DSI1接口,下面是固件的链接:固件链接

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

2.1.3. 编译命令

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

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


2.1.5. 连接方式

_images/module_display_mipi_DSI.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/icore_3568jq_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/icore_3568jq_2ms2m.jpg

3.2.6. 实拍图片

_images/camera_2ms2m_shoot.png

4. 无线模块

4.1. EC20 4G模组套件

4.1.1. 产品参数

  • 型号

    • EC20-C R2.0 Mini PCIe-C

  • 电源电压

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

  • 工作频段

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

    • FDD-LTE: B1/B3/B8

    • WCDMA: B1/B8

    • TD-SCDMA: B34/B39

    • GSM: 900/1800 MHz

  • 数据传输

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

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

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

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

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

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

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

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

  • 接口连接器

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

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

    • USIM:1.8V/3V

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

    • UART:×1 UART

    • 复位:低电平

    • PWRKEY:低电平

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

    • ADC:×2

  • 结构尺寸

    • 51.0mm × 30.0mm × 4.9mm

  • 重量

    • 约 10.5g

  • 认证

    • CCC/ NAL*/ TA

4.1.2. GNSS 功能

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

4.1.3. 实物图

_images/module_wireless_ec20.png

4.1.4. 连接方法

  • USB 接口连接

_images/module_wireless_ec20_usb.jpg

  • Mini-PCIe 接口连接

_images/module_wireless_4G-EC20_MiniPCIe_AntWord.jpg

  • SIM 卡连接

_images/module_wireless_sim_connection.jpg

4.2. EC200T 4G模组套件

4.2.1. 产品参数

  • 型号

    • EC200T-CN Mini PCIe-D

  • 电源电压

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

  • 工作频段

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

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

    • WCDMA: B1/B5/B8

    • GSM: 900/1800 MHz

  • 数据传输

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

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

    • DC-HSDPA: Max 21Mbps (DL)

    • HSDPA: Max 5.76 Mbps (UL)

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

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

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

  • 接口连接器

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

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

    • USIM:1.8V/3V

    • UART:×1 UART

    • UART_DTR (睡眠控制)

    • W_DISABLE# (飞行模式控制)

    • LED_WWAN# (网络状态指示)

    • PERST# (模块复位)

    • RI (主机唤醒)

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

    • WAKEUP_OUT (睡眠状态指示)

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

  • 结构尺寸

    • 51.0mm × 30.0mm × 4.9mm

  • 重量

    • 约 10.2g

  • 认证

    • CCC/SRRC/NAL

4.2.2. 实物图

_images/module_wireless_ec200t.jpg

4.2.3. 连接方法

参考EC20 4G模组套件

4.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分别接到ITX-3568Q UART9(对应节点为/dev/ttyS9)的3.3V、GND、RX、TX,注意避免接错VCC、GND、TX、RX导致烧坏模组

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

4.4.1.3.2. 软件配置

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

注意:GPS功能会占用到 UART9,若需要用 UART9 作为其他用途,需要将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分别接到ITX-3568Q UART9(对应节点为/dev/ttyS9)的3.3V、GND、RX、TX,注意避免接错VCC、GND、TX、RX导致烧坏模组

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

4.4.2.3.2. 软件配置

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

注意:GPS功能会占用到 UART9,若需要用 UART9 作为其他用途,需要将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和修改串口配置

名词解释:

  • SERIAL_DEVICE: 串口节点

  • SERIAL_BAUD_RATE: 串口波特率

4.4.4.1. 临时修改

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

5. 12V电源适配器

5.1. 产品参数

  • 产品:电源适配器

  • 规格:美规/欧规

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

  • 输出标准:12V-2A

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

5.2. 实物图

_images/module_power_adapter1.png

_images/module_power_adapter2.png

其他

1. Kernel 使用

1.1. 前言

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

1.2. 定制

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

Linux 开发

Android 开发

之后开始新增内核选项:

  • 首先进入 SDK/kernel 文件夹,将配置文件写入 .config :


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

_images/kernel_menuconfig.jpg

  • 注意事项

选择编译为模块(M)需要后续进行安装才能正常使用,所以添加少量配置建议使用编译进内核方式(Y),省去安装步骤

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

_images/kernel_menuconfig_search.jpg

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

_images/kernel_menuconfig_demo.jpg

1.4. 烧录

参考分区烧写

2. U-Boot 使用

2.1. 前言

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

2.2. 编译

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

2.3. 烧录

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

_images/uboot_download.jpg

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

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

2.6. 二级 Loader

RK3568 使用二级 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

在 ITX-3568Q 上运行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 接口可以便捷地完成各种操作。

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

3.3.2. 环境依赖

3.3.3. RKNN-Toolkit2 安装

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

3.3.4. 模型转换 Demo

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

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

3.3.5. 其他 Toolkit Demo

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

3.4. 详细开发文档

ITX-3568Q NPU 及 Toolkit 详细使用方法请参考RKNN SDK下《Rockchip_RKNPU_User_Guide_RKNN_API_*.pdf》、《Rockchip_User_Guide_RKNN_Toolkit2_*.pdf》文档。

常见问题解答

1. FAQs

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

kernel 新建了 dts 文件 arch/arm64/boot/dts/rockchip/rk3568-firefly-itx-3568q-DEMO.dts,编译 kernel 时弹出如下对话框 

_images/faq_rk356x_io-domain_checklist.png

 

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

cp arch/arm64/boot/dts/rockchip/.rk3568-firefly-itx-3568q.dtb.dts.tmp.domain arch/arm64/boot/dts/rockchip/.rk3568-firefly-itx-3568q-DEMO.dtb.dts.tmp.domain

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

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

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

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

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

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

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

  • 用户名:firefly

  • 密码:firefly

  • 切换超级用户 sudo -s

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方式

开发板自身写号方式

1.8. Ubuntu系统,如果插入耳机后,没有声音,该如何处理?

参考资料

1. 接口定义

1.1. 整机接口定义

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

  • 12V 电源接口

  • 4 x USB3.0(otg×1,host×3)

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

  • HDMI

  • VGA

  • MIPI 屏幕接口

  • LVDS 屏接口

  • 以太网

  • MIC 接口

  • 3.5mm 耳机接口

  • TF 卡槽

  • SIM 卡槽

  • SATA 3.0 接口

  • 风扇接口

  • 喇叭接口

  • Power 按键(座子)

  • Reset 按键

  • Recovery 按键

  • 调试串口

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

  • 扩展口(ADC,I2C,GPIO)

  • MIPI 摄像头接口

  • MINI-PCIE(4G LTE)

  • M.2(5G LTE)

  • PCIe 3.0 接口

  • M.2 SATA 3.0 接口

  • CAN/CANFD

具体如下图:

_images/interface_definition_cn.jpg

资源下载

资料下载

电话咨询
微信咨询
留言