前言
上手教程
介绍
串口调试
ADB 调试
升级固件
更新固件介绍
使用USB线缆升级固件
MaskRom模式
使用SD卡升级固件
制作SD启动卡
Linux开发
编译 Linux 固件 (内核版本 6.1)
编译 Linux 固件 (内核版本 5.10)
Firefly Linux 开发指南
驱动开发
Camera 使用
CAN 使用
I2C 使用
GPIO 使用
RTC 使用
UART 使用
配件
串口模块
屏幕模组
摄像头模组
无线模块
12V电源适配器
其他
常见问题解答
参考资料
资源下载
iCore-3562JQ
产品规格书

前言

前言

概述

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

OS 版本

OS 名称 内核版本 支持情况 维护情况
Linux 5.10 主要维护

文档当前版本

  当前版本
文档名称 iCore-3562JQ 开发手册
版本号 V1.0.0
作者 Firefly Team
修改日期 2024-04-02

修订记录

  • V1.0.0

    • 更新时间:2024-04-02

    • 更新内容:

      • 最初版本。

上手教程

1. 介绍

iCore-3562JQ采用 RK3562J 四核 64 位 Cortex-A53 处理器,主频最高 1.2GHz,集成 GPU 支持 OpenGL ES 1.1/2.0/3.2、OpenCL 2.0 和 Vulkan 1.1;最大支持8G大内存。拥有 13M ISP 图像信号处理器,支持宽温度 -40℃~85℃ 长时间稳定运行,满足各种工业级应用场景需求。

_images/iCore-3562JQ.jpg

AIO-3562JQ开发板由核心板 iCore-3562JQ 底板 MB-Q-RK3562 组成。采用 BTB 结构,传输能力更强,拥有工业级的稳定性。在 -40℃ 至 85℃ 工作温度下可长时间运行。拥有丰富的接口,支持多种视频输出接口、支持多摄像头、千兆网、WiFi、4GLTE 扩展。支持多种操作系统,广泛适用于智慧商显、工业控制、工业 PLC、能源电力/集中器、智慧医疗、自助终端等领域。

_images/AIO-3562JQ.jpg

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

  • iCore-3562JQ 核心板一块

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

  • MB-Q-RK3562 底板一块

  • 铜管天线 x 1

  • 双公头 USB 线一条

另外可以选购的配件有:

  • Firefly 串口模块

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

  • 显示设备

    • DM-M10R800 V2 MIPI 屏幕

  • 网络

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

    • WiFi 路由器

  • 输入设备

    • 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-3562JQ 默认的波特率是 1500000,有些USB转串口芯片波特率无法达到 1500000,同一芯片的不同系列也可能会有差异,所以在选购之前一定要确认是否支持。

2.2. 硬件连接

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

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

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

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

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

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

AIO-3562JQ 串口连接图:

_images/debug_connection.jpg

2.3. 串口参数配置

AIO-3562JQ 使用以下串口参数:

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

3. ADB 调试

3.1. 连接 ADB

用 双公头 USB 数据线 连接 AIO-3562JQ 的 OTG 口和电脑的 USB 口。

_images/adb_connection.jpg

3.2. 开启 ADB 调试

3.2.1. Linux

3. ADB 调试

3.1. 连接 ADB

用 双公头 USB 数据线 连接 AIO-3562JQ 的 OTG 口和电脑的 USB 口。

_images/adb_connection.jpg

3.2. 开启 ADB 调试

3.2.1. Linux

linux 一般默认开启了 adb 调试,使用 USB 线连接后,电脑上执行adb devices即可看到设备。

如果电脑无法检测到 adb 设备,可能是 OTG 口设置成了 HOST 模式。可以在iCore-3562JQ中执行以下操作转换为 OTG 模式:

升级固件

1. 更新固件介绍

1.1. 前言

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

_images/working_mode.png

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卡槽)
进入方法 需要硬件或串口操作 按键或软件进入 上电直接进入
使用条件 硬件或串口操作进入 能正常使用uboot
使用场景推荐 1. 当板子无法正常启动时候;
2. loader 模式无法使用的时候
1. 有完整uboot或能正常进入系统;
2. 需要单独烧写分区(uboot或boot分区等)。
1. 工人操作方便,适合产品批量生产时候;
2. 产品定型后升级,方便最终客户操作。
优点 1. 最底层的烧写方式;
2. 非固件或硬件问题,一般都能成功烧写;
3. 不需要uboot支持,拯救变砖的单板。
1. 最常用的烧写方式;
2. 能单独烧写分区;
3. 进入loader模式方便。
1. 操作方便,只需插卡启动;
2.集合了MaskRom 升级模式的优点。
缺点 1. 进入方式麻烦,不适难拆除外壳的产品;
2. 烧写分区表麻烦,较难单独烧写分区;
3. 操作复杂,不慎可能导致无法启动。
1. 需要完整的loader(通常指uboot)。 1. 需要另外准备 tf/sd 卡。

1.3.1. MaskRom 升级模式

2. 使用USB线缆升级固件

2.1. 前言

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

2.2. 准备工具

  • AIO-3562JQ 开发板

  • 处理器架构为 X86_64 的电脑

  • 良好的双公头 USB 数据线

2.3. 准备固件

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

  • 统一固件

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

SDK 可编译出分区镜像

  • 分区镜像

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

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

通常固件压缩包中会放有烧录工具,建议使用固件附带的工具进行操作。

2.4. 安装烧写工具

2.4.1. Windows操作系统

  • 安装RK USB驱动

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

_images/upgrade_firmware_install_RK_USB.png

  • 运行 RKDevTool.exe

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

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

_images/upgrade_firmware_rkdevtool_zh.png

2.4.2. Linux操作系统

Linux 下无须安装设备驱动

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

2.5.1.3. 查看Loader模式

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

Windows操作系统

通过 RKDevTool 工具可以看到下方提示发现一个LOADER设备 

_images/upgrade_firmware_rkdevtool_loader_zh.png

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

_images/upgrade_firmware_new_equipment.png

Linux操作系统

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

2.5.2. MaskRom模式

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

2.6. 烧写固件

2.6.1. windows操作系统

2.6.1.1. 烧写统一固件 update.img

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

_images/upgrade_firmware_rkdevtool_zh.png

2.6.2. Linux操作系统

2.6.2.1. 烧写统一固件 update.img

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

3. MaskRom模式

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

3.1. 简介

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

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

操作步骤如下:

  • 设备断开电源

  • 使用双公头 USB 数据线连接板子的 otg 口和电脑

  • 按住设备上的 Maskrom 按键

  • 设备插入电源

  • 稍候几秒,之后松开按键

_images/maskrom_test_points.jpg

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

_images/maskrom_zh.png

4. 使用SD卡升级固件

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

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

4.1. 准备工具

4.2. 操作步骤

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

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

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

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

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

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

_images/SD_Firmware_Tool_zh.png

5. 制作SD启动卡

承接上一步的使用SD卡来更新固件,本文主要介绍如何实现使用MicroSD卡,制作用于启动并运行系统的SD启动卡。 制作启动卡的准备工作和操作步骤一致,唯一一点不同的是,在打开SD_Firmware_Tool 的时候,需要勾选的是SD卡启动框,如下图所示:

_images/SD_Firmware_Tool_SDBOOT.png

选择正确的可移动磁盘设备和升级固件后,点击开始创建即可, 注意:不是每一款设备和SDK都支持SD启动卡的功能

注意:因为做SD启动卡会重写卡上的分区,所以如果想恢复SD卡的正常使用,可以点击SD_Firmware_Tool的恢复磁盘功能即可。

Linux开发

1. 编译 Linux 固件 (内核版本 6.1)

1.1. 获取 SDK

请联系销售(sales@t-firefly.com)获取 SDK 下载链接。

注意:

1. SDK 采用交叉编译,所以要在 X86_64 电脑上使用 SDK,不要将 SDK 下载到板子上

2. 编译环境请使用 Ubuntu20.04(真机或 docker 容器),如果使用其他版本可能导致编译出错

3. 不要在虚拟机共享文件夹以及非英文目录存放、解压SDK

4. 获取、编译 SDK 请全程使用普通用户,不允许也不需要使用 root 权限(除非需要 apt 安装软件)

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

1.1.1. 校验与解压

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

1.2. SDK 配置介绍

1.2.1. 目录介绍

配置文件内容介绍,比如 firefly_rk3562_aio-3562jq_debian_defconfig :

FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3562
MACHINE_ID: 007
MANUFACTURER: RK3562
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),0x00040000@0x00048000(recovery),0x00010000@0x00088000(backup),0x00c00000@0x00098000(rootfs),-@0x00c98000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

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

parameter 中数字的单位是 “块”,每块 512 字节。所以 uboot 分区大小为 0x00002000,即 8192 块,共 8192 x 512 / 1024 / 1024 = 4 MiB

1.3. 编译 Debian 固件

1.3.1. 准备工作

执行下面两条命令来安装需要的工具

下载根文件系统:Debian 根文件系统,请使用网盘中 kernel-6.1 目录下的文件系统。

下载后将文件系统解压到 SDK/prebuilt_rootfs/ 下,并创建链接

1.3.3. 编译

1.3.3.1. 完整编译

执行如下命令即可

1.4. 编译 Buildroot 固件

1.4.1. 准备工作

执行下面两条命令来安装需要的工具

1.4.3. 编译

1.4.3.1. 完整编译

执行如下命令即可

但是如果你修改了 buildroot,需要重新进行完整编译。

2. 编译 Linux 固件 (内核版本 5.10)

2.1. 编译环境搭建

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

注意:

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

(2)使用普通用户进行解压和编译,不要使用 root 用户权限进行解压和编译。不要解压到虚拟机的共享文件夹。

2.1.1. 获取 SDK

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

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

获取 SDK 需要先安装:

  • 方法二

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

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

2.1.3. 目录结构

  • 方法二:使用 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. 下载 Ubuntu 根文件系统


2.2.2.4. 部分编译

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

FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3562
MACHINE_ID: 007
MANUFACTURER: RK3562
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),0x00040000@0x00048000(recovery),0x00010000@0x00088000(backup),0x00c00000@0x00098000(rootfs),-@0x00c98000(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

git clone https://gitlab.com/firefly-linux/git-repo.git
./git-repo/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 rk3562_yocto_kirkstone_release.xml
.repo/repo/repo sync -c --no-tags

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 通外网

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

2.3.4. 调整编译速度

2.3.5. 更多 bitbake 选项

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

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

2.3.6. 分区固件烧写

2.3.8. 相关概述

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

2.3.9. Yocto Project Release layer 介绍

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

2.4. 编译 Buildroot 固件

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

2.4.1. 编译 SDK

2.4.1.1. 编译前配置

2.4.1.2. 全自动编译

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

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

2.4.2. 分区说明

2.4.2.1. parameter 分区表

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

路径:device/rockchip/rk3562/parameter-buildroot-fit.txt

FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3562
MACHINE_ID: 007
MANUFACTURER: RK3562
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),0x00040000@0x00008000(boot:bootable),0x00040000@0x00048000(recovery),0x00010000@0x00088000(backup),0x00040000@0x00098000(oem),0x00c00000@0x000d8000(rootfs),-@0x00cd8000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

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

Firefly Linux 开发指南

Firefly Linux 开发指南

驱动开发

1. Camera 使用

  • 接口效果图

_images/mipicsi.jpg

1.1. MIPI CSI 用法

RK3562 平台有 2 个 4 lane dphy,每 lane 最高 2.5Gbps

1.1.1. dphy

RK3562 有两个 4 lane 的 dphy,csi2_dphy0 和 csi2_dphy3,直接使用就是 full mode。

如果拆分使用就是 split mode:

csi2_dphy0 可以拆成 2 个 2 lane 的 dphy,分别为 csi2_dphy1 和 csi2_dphy2;

csi2_dphy3 可以拆成 2 个 2 lane 的 dphy,分别为 csi2_dphy4 和 csi2_dphy5。

1.1.2. mipi_csi

RK3562 有 4 个 mipi_csi

来自 csi2_dphy0 (csi2_dphy1 csi2_dphy2) 的数据使用 mipi0_csi2 和 mipi1_csi2;

来自 csi2_dphy3 (csi2_dphy4 csi2_dphy5) 的数据使用 mipi2_csi2 和 mipi3_csi2。

1.1.3. vicap

同理 vicap 有 4 个节点

来自 mipi0_csi2 和 mipi1_csi2 的数据使用 rkcif_mipi_lvds 和 rkcif_mipi_lvds1;

来自 mipi2_csi2 和 mipi3_csi2 的数据使用 rkcif_mipi_lvds2 和 rkcif_mipi_lvds3。

1.1.4. rkisp_vir

isp 只有一个但支持 4 个节点:rkisp_vir0~3

_images/rk3562_mipi_csi_mode.png

1.2. 配置举例

教程文档位于 SDK/docs/cn/Common/ISP/ISP32-lite/Rockchip_Driver_Guide_VI_CN_v1.1.4.pdf

1.2.1. 双路 8MS1M 摄像头

800W 摄像头 8MS1M (XC7160_SC8238),该摄像头自带 isp,所以链路走到 vicap 即可,如下:

详细配置请查看 SDK/kernel/arch/arm64/boot/dts/rockchip/rk3562-firefly-aio-3562jq-dual-imx415.dtsi

rkisp 需要应用层 rkaiq_3A_server 服务处理数据才能出图(目前未完善)

1.3. 摄像头配置的选择

设备树 SDK/kernel/arch/arm64/boot/dts/rockchip/rk3562-firefly-aio-3562jq.dts 中默认 include rk3562-firefly-aio-3562jq-dual-xc7160.dtsi

也就是默认使用双路 8MS1M,可修改成其他摄像头的 dtsi,并重新编译。

1.4. Camera 底层调试

使用 v4l2-ctl 抓取 camera 数据帧

# 首先 v4l2-ctl 可以列出所有可用 video 设备
v4l2-ctl --list-devices

# 抓帧到文件 out.yuv
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 文件拷贝出来可通过 ffmpeg 去播放

1.5. Android 系统使用 camera 应用

Android 系统使用 camera 的 apk 打开摄像头即可。

1.6. Linux 系统预览摄像头

摄像头预览可以使用如下脚本,可自行修改其中 video 设备:

#!/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

1.7. IQ 文件

raw 摄像头支持的 iq 文件路径external/camera_engine_rkaiq/rkaiq/iqfiles/isp32_lite/

若使用 raw 摄像头 sensor,请留意该摄像头对应的 iq 文件需要在设备/etc/iqfiles/

2. CAN 使用

2.1. CAN 简介

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

2.2. CAN FD 简介

CAN FD 是 CAN with Flexible Data rate 的缩写。也可以简单的认为是传统 CAN 的升级版。对比传统 CAN 总线技术,CAN FD 有两方面的升级:

  • CAN FD 采用可变速率,最高速率可达 10Mb/s,而传统的CAN协议只有 1Mb/s。

  • 能够支持更高的负载,在单个数据框架内传送率可达64字节,避免了经常发生的数据分裂状况。

2.3. 硬件连接

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

2.4. DTS 节点配置

只有 RK3562J 芯片才有 CAN 功能

2.5. 通信测试

2.5.1. CAN FD 通信测试

使用 candump 和 cansend 工具进行收发报文测试即可。安装工具:

2.5.2. CAN 通信测试

同样使用 candump 和 cansend 工具进行收发报文测试。

2.6. FAQS

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

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

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

2.6.2. CAN 时钟频率配置

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

修改 dts 配置中 can 的 assigned-clock-rates 属性即可修改时钟。

3. I2C 使用

3.1. 简介

AIO-3562JQ开发板上有 6 个片上 I2C 控制器。

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

配置 I2C 可分为两大步骤:

  • 定义和注册 I2C 设备

  • 定义和注册 I2C 驱动

下面以配置 GSL3680 为例。

3.2. 定义和注册 I2C 设备

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

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

3.3. 定义和注册 I2C 驱动

3.3.1. 定义 I2C 驱动

3.3.2. 注册 I2C 驱动

3.3.3. 通过 I2C 收发数据

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

3.4. FAQs

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

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

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

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

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

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

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

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

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

4. GPIO 使用

4.1. 简介

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

4.3. 用户空间使用 GPIO

当引脚没有被其它外设复用时, 我们可以通过export导出该引脚去使用。

4.4. 内核空间使用

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

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

4.5. 中断

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

4.6. 复用

GPIO 口除了通用输入输出、中断功能外,还可能有其它复用功能,如 GPIO0_B4, 除了 GPIO 的功能,它还能作为 I2C1_SDA_M0

那么在使用作 GPIO 口时,就需要注意是否被复用为其他功能了。

例如使用 GPIO0_B4 作 GPIO 功能时就需要在设备树中将 I2C1 disabled 掉。

所以如果没有 disabled 掉 i2c1 的话,i2c1 中的 pinctrl 就会生效,将 GPIO0_B4 配置成了 i2c 的功能。

更多内容请查看文档 SDK/docs/cn/Common/PINCTRL/Rockchip_Developer_Guide_Linux_Pinctrl_CN.pdf

4.7. 调试方法

4.7.1. IO 指令

GPIO 调试有一个很好用的工具,那就是 IO 指令,iCore-3562JQ 的系统默认已经内置了 IO 指令,使用 IO 指令可以实时读取或写入每个 IO 口的状态,这里简单介绍 IO 指令的使用。首先查看 IO 指令的帮助:

因此可以确定该 GPIO 被复用为 i2c4sensor_sda。

4.8. FAQs

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

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

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

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

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

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

5. RTC 使用

5.1. 简介

AIO-3562JQ开发板采用 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)

  • 内部集成振荡电容

  • 漏极开路中断引脚

5.2. DTS 配置

例如:

5.3. 接口使用

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

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

  • PROCFS 接口: /proc/driver/rtc

  • IOCTL 接口: /dev/rtc0

5.3.1. SYSFS 接口

5.3.2. PROCFS 接口

打印 RTC 相关的信息:

用法非常简单,详细使用说明可上网搜索。

5.4. FAQs

5.4.1. Q1: 开发板断电一段时间后上电时间不同步?

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

6. UART 使用

6.1. 简介

AIO-3562JQ支持 UART、RS232、RS485 接口

  • UARTx1

  • RS485x2

  • RS232x2

其中 UART 为 uart7,开发板的 RS232 接口由主控的 uart8 和 uart9 扩展出来,而 RS485 由 uart5 和 uart6 扩展出来。

AIO-3562JQ开发板的串口接口图如下:

_images/uart_interface.jpg

6.2. DTS 配置

6.3. 收发控制

RS485 需要额外控制收发,拓展 gpio 芯片 PCA9555 的最后一个引脚控制 485A1/B1 的收发,倒数第二引脚控制 485A2/B2 的收发。

首先查找 PCA9555 GPIO 的编号,执行如下命令可以看到编号范围是 496-511。该范围可能会因为修改内核而变化,以实际情况为准。

上述操作可以通过代码读写文件完成。

配件

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_DSI 显示,下面是固件的链接:固件链接

2.1.4. 实物图

2.1.4.1. MIPI_DSI 正面

_images/module_display_mipi_DSI_front.jpg

2.1.4.2. MIPI_DSI 背面

_images/module_display_mipi_DSI_back.jpg

3. 摄像头模组

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

3.1.1. 产品参数

  • 品牌:SV

  • ISP:xc7160

  • Sensor: sc8238

  • 接口: MIPI

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

3.1.2. 参考固件

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

固件下载: CAM-8MS1M

3.1.3. 实物图参考

_images/cam_8ms1m_front.jpg _images/cam_8ms1m_back.jpg

3.1.4. 连接方法

_images/aio-3562jq_8ms1m.jpg

3.1.5. 实拍图片

_images/camera_8ms1m_shoot.jpg

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

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. 参考固件

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

固件下载

5. 12V电源适配器

5.1. 产品参数

  • 产品:电源适配器

  • 规格:美规/欧规

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

  • 输出标准:12V-2A

注意: iCore-3562JQ 一体机正常工作需要电源 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 开发

之后开始新增内核选项:

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

_images/kernel_menuconfig.jpg

_images/kernel_menuconfig_search.jpg

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

_images/kernel_menuconfig_demo.jpg

对选项有疑问可以移动光标到选项上,按查看说明

  • 保存

打开需要的配置后,按方向键左右将光标移动到Save并按下 3 次回车进行保存

之后持续双击Esc退出

退出后将修改内容保存到配置文件:

1.4. 烧录

参考分区烧写

常见问题解答

1. FAQs

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

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

有可能是电源电流不够,请确认电源适配器功率足够。

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

参考资料

1. 接口定义

1.1. 整机接口定义

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

  • 电源接口

  • 1 x USB3.0(host/otg)

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

  • MIPI-DSI 屏幕接口

  • 1000M 以太网口

  • 100M 以太网口

  • WiFi、蓝牙二合一天线

  • MIC 接口

  • 喇叭接口

  • TF 卡槽

  • SIM 卡槽

  • Power 按键

  • Reset 按键

  • Recovery 按键

  • Maskrom 按键

  • 调试串口

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

  • 光耦隔离 IO (输入x2,输出x2)

  • CAN/CANFD

  • 2x MIPI 摄像头接口

  • MINI-PCIE 座 (USB2.0)

  • I2C

  • 电池接口

具体如下图:

_images/interface_front.jpg

_images/interface_io.jpg

_images/interface_back.jpg

资源下载

资料下载

电话咨询
微信咨询
留言