上手教程
入手指南
串口调试
升级固件
启动模式说明
MaskRom模式
Android开发
ADB 使用
编译 Android 固件
定制 Android 固件
硬件资料
驱动开发
ADC 使用
GPIO 使用
I2C 使用
LED 使用
MIPI DSI 使用
PWM 使用
SPI 使用
UART 使用
配件
其他
常见问题解答
FireflyApi
资源下载
AIO-3128C
产品规格书

上手教程

入手指南

配件

AIO-3128C 的标准套装包含以下配件:

  • AIO-3128C 开发板一块

  • WiFi 天线

另外可以选购的配件有:

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

  • 显示设备

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

  • 网络

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

    • WiFi 路由器

  • 输入设备

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

    • 红外遥控器

  • 升级固件,调试

    • Micro USB 连接线

    • 串口转 USB 适配器

发货清单参考如下 

_images/aio_3128c_1.png

开机

确认主板配件连接无误后,将电源适配器插入带电的插座上,电源线接口插入开发板,开发板第一次加电会自动开机。在 Android 系统选择关机后,维持开发板供电,AIO-3128C可以选择长按power键3秒的方式开机(需要外接power键,接口如图红色方框所示): 

_images/power.png

开机时,蓝色的电源指示灯会亮起。

串口调试

注意事项

AIO-3128C 开发板的调试串口与 TF 卡接口有信号引脚复用,因此无法同时使用,即: 使用调试串口时必须拔掉 TF 卡,而使用 TF 卡时不要连接调试串口。

选购适配器

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

硬件连接

串口转 USB 适配器,有四根不同颜色的连接线:

  • 红色:3.3V 电源,不需要连接

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

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

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

注:如使用其它串口适配器遇到TX和RX不能输入和输出的问题,可以尝试对调TX和RX的链接线,AIO-3128C串口连接如图所示: 

_images/AIO-3128C-serial.jpg

连接参数

AIO-3128C 使用以下串口参数:

  • 波特率:115200

  • 数据位:8

  • 停止位:1

  • 奇偶校验:无

  • 流控:无

Windows 上使用串口调试

安装驱动

下载驱动并安装:

如果在 Win8 上不能正常使用 PL2303,参考这篇文章, 采用 3.3.5.122 或更老版本的旧驱动即可。插入适配器后,系统会提示发现新硬件,并初始化,之后可以在设备管理器找到对应的 COM 口:

_images/win_com.png

安装软件

Windows 上一般用 putty 或 SecureCRT。其中 putty 是开源软件,在这里介绍一下,SecureCRT 的使用方法与之类似。到这里 [3] 下载 putty,建议下载 putty.zip,它包含了其它有用的工具。解压后运行PUTTY.exe,选择 Connection type(连接类型)为 Serial(串口),将 Serial line(串口线)设置成设备管理器所看到的 COM 口,并将 Speed(波特率)设置为 115200,按 Open(打开)即可:

_images/win_putty.png

Ubuntu 上使用串口调试

在 Ubuntu 上可以有多种选择:

  • picocom

  • minicom

  • kermit

picocom 的使用比较简单,以下就介绍 picocom,其它软件也是类似的。安装:

升级固件

前言

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

准备工作

固件文件一般有两种:

  • 单个统一固件 update.img, 将启动加载器、参数和所有分区镜像都打包到一起,用于固件发布。

  • 多个分区镜像,如 kernel.img, boot.img, recovery.img 等,在开发阶段生成。

这里可以找到已编译好的统一固件,下载后解压。也可以参考编译固件的说明自行编译。 主机操作系统支持:

  • Windows XP (32/64位)

  • Windows 7 (32/64位)

  • Windows 8 (32/64位)

  • Linux (32/64位)

Windows 主机烧录固件

之前烧写 RK 的固件,需要用到以下两种工具:

  • 量产工具 RKBatchTool,用于烧写统一固件(update.img)

  • 开发者工具 RKDevelopTool,可单独烧写分区固件

后来 RK 发布了 AndroidTool 工具,在 RKDevelopTool 的基础上增加了统一固件(update.img)的烧写支持,因此现在仅需要这个工具即可。

使用烧写工具前需要安装 RK USB 驱动。如果驱动已经安装好,可以跳过这步。

安装 RK USB 驱动

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

_images/win_tool_devices.png

连接设备

有两种方法可以使设备进入升级模式。一种方法是设备先断开电源适配器和双公头USB数据线的连接:

  • 双公头USB数据线的一端连接主机。

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

  • 双公头USB数据线的另一端连接设备。

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

另一种方法,无需断开电源适配器和双公头USB数据线的连接:

  • 用双公头USB数据线连接好设备和主机。

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

  • 短按一下 RESET(复位)键。

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

如图(红色方框)RESET(复位)键和RECOVERY 键位置:

_images/loader.png

烧录固件时应该使用双公头USB数据线,连接接口如图所示:

_images/AIO-3128C-OTG&USB.jpg

主机应该会提示发现新硬件并配置驱动。打开设备管理器,会见到新设备”Rockusb Device” 出现,如下图。如果没有,则需要返回上一步重新安装驱动。

_images/win_rockusb_driver.png

烧写固件

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

_images/win_3128_tool_download.png

烧写统一固件 update.img

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

  • 切换至”升级固件”页。

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

  • 按”升级”按钮开始升级。

  • 如果升级失败,可以尝试先按”擦除Flash”按钮来擦除 Flash,然后再升级。

注意:如果你烧写的固件laoder版本与原来的机器的不一致,请在升级固件前先执行”擦除Flash”。

_images/win_3128_tool_upgrade.png

烧写分区映像

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

  • 切换至”下载镜像”页。

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

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

  • 点击”执行”按钮开始升级,升级结束后设备会自动重启。

_images/win_3128_tool_download.png

Linux 主机烧录固件

RK 提供了一个 Linux 下的命令行工具 upgrade_tool,支持统一固件 update.img 和分区镜像的烧写。

开源工具则有两个选择:

它们都仅支持分区映像烧写,不支持统一固件。rkflashtool 是命令行工具,rkflashkit 有图形界面,后加了命令行支持,更是好用。以下仅对 rkflashkit 做介绍。

Linux 下无须安装设备驱动,参照 Windows 章节连接设备则可。

upgrade_tool

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

_images/Fireprime_rkflashkit.png

帮助信息里有使用示例,可以看出,一条命令就可以烧写多个映像文件并重启设备,对需要经常编译和烧写内核的开发者来说,是一大福音。

常见问题

如何强行进入 MaskRom 模式

如果板子进入不了 Loader 模式,SD 卡启动也失效,此时可以尝试强行进入 MaskRom 模式。操作方法见《如何进入 MaskRom 模式》

启动模式说明

前言

AIO-3128C 有灵活的启动方式。一般情况下,除非硬件损坏,AIO-3128C 开发板是不会变砖的。如果在升级过程中出现意外,bootloader 损坏,导致无法重新升级,此时仍可以进入 MaskRom 模式来修复。

加载方式

AIO-3128C 有 20KB 的 BootRom 和 100KB 的内部 SRAM,支持从以下设备加载系统:

  • 8位 Async Nand Flash

  • 8位 toggle Nand Flash

  • SPI 接口

  • eMMC 接口

  • SDMMC 接口

也就是说,除了支持从 Nand Flash、SPI Flash、eMMC Flash 启动外,还支持 SD 卡启动。另外 AIO-3128C 支持从 USB OTG 接口下载系统代码。

启动次序

启动的次序是这样的:

  • 主控上电初始化

  • BootRom 代码在 SRAM 上运行,校验存储设备里的 bootloader

  • 校验通过,加载并运行 bootloader 引导代码

  • bootloader 引导代码负责初始化 DDR 内存,加载 bootloader 完整代码到 DDR 内存中并运行

  • bootloader 加载存储设备上的 Linux 内核,并将执行权交给 Linux 内核

启动模式

AIO-3128C 有三种启动模式:

  • Normal 模式

  • Loader 模式

  • MaskRom 模式

Normal 模式

Normal 模式就是正常的启动过程,各个组件依次加载,正常进入系统。

Loader 模式

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

  • 一种方法是设备先断开电源适配器和双公头USB数据线的连接:

    • 双公头USB数据线的一端连接主机。

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

    • 双公头USB数据线的另一端连接设备。

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

  • 另一种方法,无需断开电源适配器和双公头USB数据线的连接:

    • 用双公头USB数据线连接好设备和主机。

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

    • 短按一下 RESET(复位)键。

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

MaskRom 模式

MaskRom 模式用于 bootloader 损坏时的系统修复。一般情况下是不用进入 MaskRom 模式的,只有在 bootloader 校验失败(读取不了 IDR 块,或 bootloader 损坏) 的情况下,BootRom 代码 就会进入 MaskRom 模式。此时 BootRom 代码等待主机通过 USB 接口传送 bootloader 代码,加载并运行之。要强行进入 MaskRom 模式,请参阅《MaskRom》一章。

MaskRom模式

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

MaskRom 模式是设备变砖的最后一条防线。强行进入 MaskRom 涉及硬件操作,有一定风险,因此仅在设备进入不了 Loader 模式的情况下,方可尝试 MaskRom 模式。

请小心阅读,并谨慎操作!操作步骤如下:

  1. 设备断开所有电源。

  2. 拔出 SD 卡。

  3. 用 双公头USB 线的一端插入开发板的 OTG 口,而一端暂不接。

  4. 用金属镊子接通核心板上的如下图所示的两个测试点,并保持。

  5. 将双公头USB线的另一端插入主机。

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

旧版本(V1.1):

_images/maskrom1.png

新版本(V1.2): 

_images/maskrom2.png

这时,设备应该就会进入 MaskRom 模式。 

_images/win_3128_tool_maskrom.png

Android开发

ADB 使用

前言

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

准备连接

在开发板上进入选项->开发人员选项,勾上 “USB 调试” 选项。用双公头USB数据线连接设备和主机。

Windows下的 ADB 安装

首先参照安装 RK USB 驱动一节安装好驱动。然后到 http://adbshell.com/download/download-adb-for-

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

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

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

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

卸载应用 adb uninstall

编译 Android 固件

准备工作

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

  • 64 位 CPU

  • 16GB 物理内存 交换内存

  • 30GB 空闲的磁盘空间用于构建,源码树另外占用大约 25GB

官方推荐 Ubuntu 14.04 操作系统,经测试,Ubuntu 12.04 也可以编译运行成功,只需要满足 http://source.android.com/source/building.html 里的软硬件配置即可。编译环境的初始化可参考 http://source.android.com/source/initializing.html

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

默认的目标构建变体(TARGET_BUILD_VARIANT)为 userdebug。常用变体有三种,分别是用户(user)、用户调试(userdebug)和工程模式(eng),其区别如下:

  • user

    • 仅安装标签为 user 的模块

    • 设定属性 ro.secure=1,打开安全检查功能

    • 设定属性 ro.debuggable=0,关闭应用调试功能

    • 默认关闭 adb 功能

    • 打开 Proguard 混淆器

    • 打开 DEXPREOPT 预先编译优化

  • userdebug

    • 安装标签为 user、debug 的模块

    • 设定属性 ro.secure=1,打开安全检查功能

    • 设定属性 ro.debuggable=1,启用应用调试功能

    • 默认打开 adb 功能

    • 打开 Proguard 混淆器

    • 打开 DEXPREOPT 预先编译优化

  • eng

    • 安装标签为 user、debug、eng 的模块

    • 设定属性 ro.secure=0,关闭安全检查功能

    • 设定属性 ro.debuggable=1,启用应用调试功能

    • 设定属性 ro.kernel.android.checkjni=1,启用 JNI 调用检查

    • 默认打开 adb 功能

    • 关闭 Proguard 混淆器

    • 关闭 DEXPREOPT 预先编译优化

如果目标构建变体为 user,则 adb 无法获取 root 权限。要选择目标构建变体,可以在 make 命令行加入参数,例如:

请参照 如何升级固件 一文来烧写分区映像文件。如果使用的是 Windows 系统,将上述映像文件拷贝到 AndroidTool (Windows 下的固件升级工具)的 rockdevImage 目录中,之后参照升级文档烧写分区映像即可,这样的好处是使用默认配置即可,不用修改文件的路径。

定制 Android 固件

前言

定制 Android 固件,有两种方法:

  • 改源码,然后编译生成固件。

  • 在现有固件的基础上进行裁剪。

前一种方法,可以从各个层面去定制 Android,自由度大,但对编译环境和技术要求比较高,参见《编译 Android 固件》一文。现在介绍后一种方法,分为解包、定制和打包三个阶段。主机操作系统为 Linux,采用的工具为开源软件。

固件格式

统一固件 release_update.img,内含启动加载器 loader.img 和真正的固件数据 update.img

  • package-file

  • update.img 的打包说明文件,update.img 里也含有一份 package-file。

  • rk3128MiniLoaderAll(L)_V2.20.bin, Image/uboot.img

  • 启动加载器,即 bootloader。

  • rk312x.parameter.txt

  • 参数文件,可以设定内核启动参数,里面有重要的分区信息。

  • Image/misc.img

  • misc 分区的映像,用来控制 Android 是正常启动,还是进入急救模式(Recovery Mode)。

  • Image/kernel.img

  • Android 内核。

  • Image/resource.img

  • 资源映像,内有内核开机图片和内核设备树信息(Device Tree Blob)。

  • Image/boot.img

  • Android 内核的内存启动盘(initrd),是内核启动后最先加载的根文件系统,包含重要的初始化动作,一般不需要改动。

  • Image/recovery.img

  • Android 急救模式的映像,内含内核和急救模式的根文件系统。

  • Image/system.img

  • 对应于 Android 的 /system 分区,是以下的定制对象。

解包,就是提取 release_update.img 里的 update.img, 然后解压出内含 package-file 所声明的多个文件。打包,则是个逆过程,将 package-file 将所列的多个文件合成 update.img,加进 loader.img,最终生成 release_update.img 。

硬件资料

硬件资料

  • 正面视图

_images/AIO-3128C-front.jpg

  • 背面视图

_images/AIO-3128C-back.jpg

驱动开发

ADC 使用

前言

AIO-3128C 开发板有一个 3 通道(0/1/2)、10 比特精度的 SAR ADC (Successive Approximation Register,逐次逼近寄存器),其中:

  • ADCIN0: 引到RECOVER位置,如下图片红框位置

  • ADCIN1: 内部作 Recovery 键检测

  • ADCIN2: 未引出来

_images/driver_adc.png

本文主要介绍 ADC 的基本使用方法。

配置DTS节点

AIO-3128C ADC 的 DTS 节点在 kernel/arch/arm/boot/dts/rk312x.dtsi 文件中定义,如下所示:

GPIO 使用

简介

GPIO, 全称 General-Purpose Input/Output(通用输入输出),是一种软件运行期间能够动态配置和控制的通用引脚。

AIO-3128C 有 4 组 GPIO bank: GPIO0,GPIO1, GPIO2, GPIO3。每组又以 A0~A7, B0~B7, C0~C7, D0~D7 作为编号区分。

每个 GPIO 口除了通用输入输出功能外,还可能有其它复用功能,例如 GPIO1_C2,可以复用成以下功能之一:

  • GPIO1_C2

  • SDMMC0_D0

  • UART2_TX

每个 GPIO 口的驱动电流、上下拉和重置后的初始状态都不尽相同,详细情况请参考《RK3128 规格书》中的 “RK3128 function IO description” 一章。

AIO-3128C 的 GPIO 驱动是在以下 pinctrl 文件中实现的:

其核心是填充 GPIO bank 的方法和参数,并调用 gpiochip_add 注册到内核中。

使用

开发板有两个电源 LED 灯是 GPIO 口控制的,分别是:

_images/Firerprime_leds_schematic.png

从电路图上看,GPIO 口输出低电平时灯亮,高电平时灯灭。

输入输出

下面以电源 LED 灯的驱动为例,讲述如何在内核编写代码控制 GPIO 口的输出。

首先需要在 aio-3128c.dts 中增加驱动的资源描述:

of_get_named_gpio_flags 从设备树中读取 led-power 的 GPIO 配置编号和标志,gpio_is_valid 判断该 GPIO 编号是否有效,gpio_request 则申请占用该 GPIO。如果初始化过程出错,需要调用 gpio_free 来释放之前申请过且成功的 GPIO 。

调用 gpio_direction_output 就可以设置输出高还是低电平,因为是 GPIO_ACTIVE_LOW ,如果要灯亮,需要写入 0 。

实际中如果要读出 GPIO,需要先设置成输入模式,然后再读取值:

复用

如何定义 GPIO 有哪些功能可以复用,在运行时又如何切换功能呢?以 I2C1 为例作简单的介绍。查规格表可知,I2C1_SDA 与 I2C1_SCL 的功能定义如下:

_images/driver_table1.png

在 /kernel/arch/arm/boot/dts/rk312x.dtsi 里有:

I2C 使用

前言

AIO-3128C 开发板上有 4 个片上 I2C 控制器。本文主要描述如何在该开发板上配置 I2C。

配置 I2C 可分为两大步骤:

  • 定义和注册 I2C 设备

  • 定义和注册 I2C 驱动

下面以配置 lt8641ex 为例。

定义和注册 I2C 设备

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

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

定义和注册 I2C 驱动

定义 I2C 驱动

在定义 I2C 驱动之前,用户首先要定义变量 of_device_id 和 i2c_device_id 。of_device_id 用于在驱动中调用dts文件中定义的设备信息,其定义如下所示:

static const struct of_device_id of_rk_lt8641ex_match[] = { { .compatible = "firefly,lt8641ex" },{ /* Sentinel */ }};

定义变量 i2c_device_id:

注:msgs[0] 是要向从机发送的信息,告诉从机主机要读取信息。msgs[1] 是主机向从机读取到的信息。

至此,主机可以使用函数 i2c_master_reg8_send 和 i2c_master_reg8_recv 和从机进行通讯。

  • 实际通讯示例

例如主机和 LT8641EX 通讯,主机向 LT8641EX 发送信息,设置 LT8641EX 使用通道 1:

注:ch用于保存读取到的信息。

LED 使用

前言

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

_images/driver_table2.png

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

以设备的方式控制 LED

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

用户可以通过 /sys/class/leds/ 目录控制这两个 LED。

更详细的说明请参考 leds-class.txt

开发板上的 LED 的默认状态为:

  • Blue: 系统上电时打开

  • Yellow:用户自定义

用户可以通过 echo 向其 trigger 属性输入命令控制每一个 LED:

MIPI DSI 使用

Config配置

在arch/arm/configs/fireprime_defconfig添加配置:

驱动配置

新建DTS配置文件

在arch/arm/boot/dts/目录中新建dst配置文件,如lcd-xxx-mipi.dtsi。

添加DTS文件和关闭tve使能

在arch/arm/boot/dts/aio-3128c.dts中添加#include “lcd-xxx-mipi.dtsi”,如果原来include了其他屏的DTS配置,注释掉它们。使用MIPI屏显示。

添加背光节点信息

在lcd-xxx-mipi.dtsi中添加背光节点信息。

  • 属性:

    • pwms属性:配置PWM,AIO-3128C使用pwm0,范例中的25000是PWM频率,enable-gpios 是背光使能脚。

    • brightness-levels属性:配置背光亮度数组,最大值为255,配置暗区和亮区,并把亮区数组做255的比例调节。比如范例中暗区是255-221,亮区是220-0。

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

    • enable-gpios属性:配置背光使能引脚。

具体请参考kernel中的说明文档:

Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt

时序的在节点disp_timings配置。

  • 属性:

    • screen-type属性:显示屏类型,Firefly-RK3128只支持单通道MIPI屏,配置成SCREEN_MIPI即可。

    • lvds-format属性:无关选项。

    • out-face属性:配置颜色,可为OUT_P888(24位)、OUT_P666(18位)或者OUT_P565(16位)。

    • clock-frequency属性:屏时钟,单位Hz。

其他的时序属性参考下图:

_images/MIPI_DSI.png

dsihost配置

单MIPI屏,需要使能dsihost0,如:

PWM 使用

前言

AIO-3128C 开发板上有 4 路 PWM 输出,分别为 PWM0 ~ PWM3,其中:

  • PWM0/GPIO0_D2: 在扩展口中引出

  • PWM1/GPIO0_D3: 内部用作 AUX_DET 信号

  • PWM2/GPIO0_D4: 内部用作 RTC_INT 信号

本章主要描述如何配置 PWM。 AIO-3128C 的 PWM 驱动为:

配置步骤

配置 PWM 主要有以下三大步骤:配置 PWM DTS 节点、配置 PWM 内核驱动、控制 PWM 设备。

配置 PWM DTS节点

在 kernel/arch/arm/boot/dts/rk312x.dtsi 定义了以下 PWM 节点,如下所示:

pwm0: pwm@20050000 {compatible = "rockchip,rk-pwm";reg = <0x20050000 0x10>;#pwm-cells = <2>;pinctrl-names = "default";pinctrl-0 = <&pwm0_pin>;clocks = <&clk_gates7 10>;clock-names = "pclk_pwm";status = "disabled";}; 
pwm1: pwm@20050010 {compatible = "rockchip,rk-pwm";reg = <0x20050010 0x10>;#pwm-cells = <2>;pinctrl-names = "default";pinctrl-0 = <&pwm1_pin>;clocks = <&clk_gates7 10>;clock-names = "pclk_pwm";status = "disabled";}; 
pwm2: pwm@20050020 {compatible = "rockchip,rk-pwm";reg = <0x20050020 0x10>;#pwm-cells = <2>;pinctrl-names = "default";pinctrl-0 = <&pwm2_pin>;clocks = <&clk_gates7 10>;clock-names = "pclk_pwm";status = "disabled";}; 
pwm3: pwm@20050030 {compatible = "rockchip,rk-pwm";reg = <0x20050030 0x10>;#pwm-cells = <2>;pinctrl-names = "default";pinctrl-0 = <&pwm3_pin>;clocks = <&clk_gates7 10>;clock-names = "pclk_pwm";status = "disabled";}; 
remotectl: pwm@20050030 {compatible = "rockchip,remotectl-pwm";reg = <0x20050030 0x10>;#pwm-cells = <2>;pinctrl-names = "default";pinctrl-0 = <&pwm3_pin>;clocks = <&clk_gates7 10>;clock-names = "pclk_pwm";remote_pwm_id = <3>;interrupts = ;status = "okay";};

要使用 pwm0, 只需在 kernel/arch/arm/boot/dts/aio-3128c.dts 加入:

  • 功能:禁止 pwm

  • 参数:

    • pwm:要禁止的 pwm

SPI 使用

SPI是一种高速的,全双工,同步串行通信接口,用于连接微控制器、传感器、存储设备等,本文以指纹识别模块为例简单介绍SPI使用。

SPI工作方式

SPI以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,分别是:

CPOL:表示时钟信号的初始电平的状态,0为低电平,1为高电平。CPHA:表示在哪个时钟沿采样,0为第一个时钟沿采样,1为第二个时钟沿采样。SPI的四种工作模式波形图如下:

_images/SPI_work.jpg

在内核添加自己的驱动文件

在内核源码目录kernel/drivers/spi/中创建新的驱动文件,如:spi-rockchip-firefly.c 在驱动文件所在目录下的Kconfig文件添加对应的驱动文件配置,如:

  • 属性:

    • status:如果要启用SPI,则设为okay,如不启用,设为disable。

    • spidev@00:由于本例子使用的是SPI0,且使用CS0,故此处设为00,如果使用CS1,则设为01。

    • compatible:这里的属性必须与驱动中的结构体:of_device_id 中的成员compatible 保持一致。

    • reg:此处与spidev@00保持一致,本例设为:0x00;

    • spi-max-frequency:此处设置spi使用的最高频率。

    • spi-cpha,spi-cpol:SPI的工作模式在此设置,本例所用的模块SPI工作模式为 SPI_MODE_1,故设:spi-cpha = <1>,如果您所用设备工作模式为SPI_MODE0,则需在此把这两个注释掉,如果用SPI_MODE3,则设:spi-cpha = <1>;spi-cpol = <1>。

定义和注册SPI驱动

定义SPI驱动

在定义 SPI 驱动之前,用户首先要定义变量 of_device_id 。 of_device_id 用于在驱动中调用dts文件中定义的设备信息,其定义如下所示:

注:Firefly的SPI驱动是Linux下通用的驱动,可以参考源码:kernel/drivers/spi/spidev.c

UART 使用

板载资源介绍

AIO-3128C 开发板内置 3 路 UART,分别为 uart0,uart1,uart2。

uart0 用于蓝牙数据传输,如果要使用 uart0,必须关掉蓝牙,才可以使用扩展槽上的 UART0 针脚。

uart1, 因为存在以下复用:

  • SPI_TXD/UART1_TX

  • SPI_RXD/UART1_RX

  • SPI_CSN0/UART1_RTS

AIO-3128C 使用SPI桥接/扩展4个增强功能串口(UART)的功能,分别为UART1,RS232(上),RS232(下),RS485功能,其中RS232(下)口硬件可做修改为TTL功能。 每个UART都拥有256字节的FIFO缓冲区,用于数据接收和发送。 

_images/spi_uart1.png

uart2 一般用做调试串口,但同样存在复用,也就是说 TF 卡与调试串口不可以同时使用:

  • SDMMC_D0/UART2_TX

  • SDMMC_D1/UART2_RX

uart2 有 32 字节的 FIFO 收发缓冲区,uart0 则要有双 64 字节的 FIFO 用作蓝牙数据收发。所有 uart 均支持 5 位、6 位、7 位、8 位数据收发和 DMA 操作。

配置 DTS 节点

文件 kernel/arch/arm/boot/dts/aio-3128c.dtsi 中已经有 spi转uart 相关节点定义,如下所示:

把 kernel 目录下生成的 kernel.img 和 resource.img 烧录到开发板中即可。

测试串口通讯

配置好串口后,用户可以通过主机的 USB 转串口适配器向开发板的串口收发数据,以 uart0 为例,步骤如下:

连接硬件

将开发板 uart0 的 TX、RX、GND 引脚分别和主机串口适配器的 RX、TX、GND 引脚相连。注意:如果是使用 Firefly 的串口适配器,则是 TX 对 TX,RX 对 RX 连接。

打开主机的串口终端

在终端打开 kermit,并设置波特率:

配件

屏幕模组

10.1寸LVDS显示模组

产品参数

  • 型号:HSX101H40C-L28B

  • 尺寸:10.1 inch

  • 分辨率:1280x800

  • 接口:LVDS

  • 可视角度:170°

  • 触摸屏:多点电容触摸

注意:

1.支持10.1寸屏的官方固件[AIO-3128C LVDS 固件]

2.更新AIO-3128C最新代码后,支持使用10.1寸屏。

连接方法

_images/aio-3128c_lvds.png

其他

U-Boot使用

前言

RK U-Boot 基于开源的 U-Boot 进行开发,工作模式有启动加载模式和下载模式。启动加载模式是 U-Boot 的正常工作模式,嵌入式产品发布时,U-Boot 都工作在此模式下,主要用于开机时把内存中的内核加载到内存中,启动操作系统;下载模式主要用于将固件下载到闪存,开机时长按 Recovery 键可进入下载模式。本文简单说明 U-Boot 的使用,更多相关文档请看 SDK 下面的 RKDocs/common/uboot/RockChip_Uboot开发文档V3.0.pdf。

烧录

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

_images/win_tool_uboot.png

将 0 改成 3 即可在开机时有 3 秒的时延,在此时间内在串口输入任意键即可进入u-boot命令行模式。

常见问题解答

FAQs

开机异常并循环重启

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

ubuntu 用户名和密码

用户:root 密码:firefly 用户:firefly 密码:firefly

MAC 地址烧写

AIO-3128C 的 MAC 地址可以让用户自己更改,请使用 SDK 下的统一动态库工具 RKTools/windows/UpgradeDllTool_v1.35.zip 烧写 MAC 地址。

Android下如何让系统抓取LOG?

Settings(设置)->About phone(关于手机)->点击5下Build number(版本号)->Developer options(开发者选项)->Enable logging to save(启用日志保存) 打开功能后,系统的storage根目录下就会生成.LOGSAVE文件夹,里面包括系统logcat和内核kmsg。

打开Root权限

Android系统有很多很强大的功能都需要用到root权限,开发者经常在使用的时候遇到权限的问题, 那如何在Firefly平台上开启系统的root权限功能呢?Firefly已在系统添加启动root权限的功能,具体的步骤如下:

  1. 在Settgins apk里面找到About device然后点击进去

  2. 点击Build number 7次后会提示(you are now a developer)

  3. 然后返回上一级点击Developer options选项后,在选项中点击Enable ROOT就打开root权限功能 

_images/android_root.png

网络ADB的使用

adb调试模式有两种:1、使用usb线;2、使用网络。
使用网络adb模式:开发板跟PC端需处于同一局域网内,可以使用有线网的方式,或是让PC端跟开发板连接在同一wifi路由下,亦可通过PC端创建wifi热点让开发板连接都可以。

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

_images/net_adb.png

FireflyApi

FireflyApi

资源下载

资料下载

电话咨询
微信咨询
留言