Difference between revisions of "FriendlyThings for Rockchip/zh"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
(updated by API)
Line 1: Line 1:
 
[[FriendlyThings for RK3399|English]]
 
[[FriendlyThings for RK3399|English]]
 +
注:本篇所述仅适用于友善电子出品的RK3399系列主板,若需其他平台请参考 [[Android Hardware Access APIs/zh]]
  
 
==简介==
 
==简介==
友善电子开发了一个名为libfriendlyarm-hardware.so的函数库,用于Android应用程序访问开发板上的硬件资源,该函数库基于Android-NDK技术开发,提供便利的硬件访问接口,开发者无需掌握过多的嵌入式知识便可使用,有效提高开发进度。<br /><br />
+
FriendlyThings是友善电子开发的一套安卓硬件开发SDK(函数库),安卓软件开发者可以通过它在Android应用程序中编程访问和控制ARM主板上的各种硬件资源,比如Uart, SPI, I2C, GPIO等接口,它基于Android-NDK技术开发,开发者无需掌握底层的嵌入式知识(尤其是驱动程序),就可以构建基于安卓系统的各种IoT物联网应用。
本篇文章仅适用于RK3399开发板,包括 NanoPi-NEO4, NanoPi-M4 和 NanoPC-T4。<br />
+
其他平台也有相应的支持,请移步这里查看:[[Android Hardware Access APIs/zh]]
+
  
==支持如下RK3399官方Android BSP==
+
==Android版本==
* Android 7.1.2
+
我们提供的Android BSP已经包含FriendlyThings SDK(libfriendlyarm-things-rk3399.so),可支持运行于如下两个Android平台版本:
* Android 8.1
+
* Android 7.1.2-rk3399
<br />
+
BSP source code download link: https://gitlab.com/friendlyelec/rk3399-nougat
为方便测试,BSP中已集成了各个硬件资源的开源示例程序:<br />
+
Latest ROM download link: http://download.friendlyarm.com/NanoPC-T4
[[File:Android8-hw-demos.png|frameless|600px]]
+
* Android 8.1-rk3399
 +
BSP source code download link: https://gitlab.com/friendlyelec/rk3399-android-8.1
 +
Latest ROM download link: http://download.friendlyarm.com/NanoPC-T4
  
==支持如下RK3399硬件资源==
+
==开发板型号列表==
* Serial Port
+
FriendlyThings SDK(libfriendlyarm-things-rk3399.so)适用于友善电子出品的如下RK3399系列主板:<br />
* GPIO
+
* ADC
+
* PWM
+
* I2C
+
* RTC
+
* Watch dog
+
* SPI
+
 
+
==支持的开发板==
+
* NanoPi-NEO4
+
* NanoPi-M4
+
 
* NanoPC-T4
 
* NanoPC-T4
* 其他开发板请移步这里查看:[[Android Hardware Access APIs/zh]]
+
* NanoPi M4 (需外接eMMC模块)
 +
* NanoPi NEO4 (需外接eMMC模块)
 +
<br />
 +
FriendlyThings也可以支持其他平台安卓主板,如三星S5P4418/S5P6818,三星S5PV210,全志H3/H5等平台,具体请查看这里[[Android Hardware Access APIs/zh]]
  
==示例程序下载地址==
+
==快速使用入门==
 +
===示例程序下载地址===
 
所有硬件访问的示例程序均已集成到 Android 的源代码当中,位于 Android7.1.2 和 Android8.1 源代码的以下目录:vendor/friendlyelec/apps,也可以单独网上下载,下表中列出各个 Demo 的源代码地址:
 
所有硬件访问的示例程序均已集成到 Android 的源代码当中,位于 Android7.1.2 和 Android8.1 源代码的以下目录:vendor/friendlyelec/apps,也可以单独网上下载,下表中列出各个 Demo 的源代码地址:
 
{{FriendlyThings Android8 Demos}}
 
{{FriendlyThings Android8 Demos}}
Line 35: Line 29:
 
{{FriendlyThings Installation Guide/zh}}
 
{{FriendlyThings Installation Guide/zh}}
  
==RK3399平台Android硬件资源的程序访问==
+
===RK3399平台Android硬件资源的程序访问===
===Serial Port===
+
====Serial Port====
 
目前可直接使用的串口是UART4,设备名称为/dev/ttyS4,其他串口资源已被分配给其它功能,如下表所示,你也可以使用USB转串口来扩展:
 
目前可直接使用的串口是UART4,设备名称为/dev/ttyS4,其他串口资源已被分配给其它功能,如下表所示,你也可以使用USB转串口来扩展:
 
::{| class="wikitable"
 
::{| class="wikitable"
Line 53: Line 47:
 
|}
 
|}
  
====串口读写的接口说明====
+
=====串口读写的接口说明=====
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
HardwareControler.openSerialPortEx //打开串口设备
 
HardwareControler.openSerialPortEx //打开串口设备
Line 64: Line 58:
  
  
===GPIO===
+
====GPIO====
  
 
通过 sysfs 方式控制来 GPIO,是先访问 /sys/class/gpio 目录,向 export 文件写入 GPIO编号,使得该 GPIO 的操作接口从内核空间暴露到用户空间,然后就可以操作引脚的 direction 和 value 等,direction 控制 GPIO 方向,而 value 可控制 GPIO 输出或获得 GPIO 输入。<br />
 
通过 sysfs 方式控制来 GPIO,是先访问 /sys/class/gpio 目录,向 export 文件写入 GPIO编号,使得该 GPIO 的操作接口从内核空间暴露到用户空间,然后就可以操作引脚的 direction 和 value 等,direction 控制 GPIO 方向,而 value 可控制 GPIO 输出或获得 GPIO 输入。<br />
Line 112: Line 106:
 
|}
 
|}
  
====GPIO接口说明====
+
=====GPIO接口说明=====
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
HardwareControler.exportGPIOPin      //导出GPIO
 
HardwareControler.exportGPIOPin      //导出GPIO
Line 123: Line 117:
 
接口说明请参考:[[Android Hardware Access APIs/zh]]
 
接口说明请参考:[[Android Hardware Access APIs/zh]]
  
====GPIO示例说明====
+
=====GPIO示例说明=====
 
可以用LED配件来测试GPIO示例,在界面上对引脚输出高电平时,LED亮,低电平时,LCD灭。
 
可以用LED配件来测试GPIO示例,在界面上对引脚输出高电平时,LED亮,低电平时,LCD灭。
 
[[File:rk3399-android-gpio.png|thumb|GPIO]]
 
[[File:rk3399-android-gpio.png|thumb|GPIO]]
===ADC===
+
====ADC====
  
 
RK3399引出了三路ADC,channel为0, 2, 3,对应的文件节点为:
 
RK3399引出了三路ADC,channel为0, 2, 3,对应的文件节点为:
Line 143: Line 137:
 
在 Android 下用标准的文件读取接口就可以读取,你可以将一个可调电阻配件连接到开发板上进行测试。
 
在 Android 下用标准的文件读取接口就可以读取,你可以将一个可调电阻配件连接到开发板上进行测试。
  
===PWM===
+
====PWM====
 
RK3399开发板也是通过sysfs方式来控制PWM,直接操作 /sys/class/pwm/pwmchip1 下的文件节点即可,下面以在命令行操作PWM风扇风速作为示例:
 
RK3399开发板也是通过sysfs方式来控制PWM,直接操作 /sys/class/pwm/pwmchip1 下的文件节点即可,下面以在命令行操作PWM风扇风速作为示例:
  
====PWM接口说明====
+
=====PWM接口说明=====
 
* 将PWM0暴露到用户空间
 
* 将PWM0暴露到用户空间
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 158: Line 152:
 
echo 45000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
 
echo 45000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
 
</syntaxhighlight>
 
</syntaxhighlight>
====PWM示例说明====
+
=====PWM示例说明=====
 
可以连接一个PWM风扇(3针)到NanoPC-T4的风扇接口来测试PWM示例。
 
可以连接一个PWM风扇(3针)到NanoPC-T4的风扇接口来测试PWM示例。
 
[[File:rk3399-android-pwm.png|thumb|PWM]]
 
[[File:rk3399-android-pwm.png|thumb|PWM]]
  
===I2C===
+
====I2C====
  
 
运行I2C Demo需要将一个LCD1602的模块连接到NanoPC-T4的以下引脚:
 
运行I2C Demo需要将一个LCD1602的模块连接到NanoPC-T4的以下引脚:
Line 182: Line 176:
 
[[File:NanoPC-T4+OLED.jpg|frameless|450px]]
 
[[File:NanoPC-T4+OLED.jpg|frameless|450px]]
  
===RTC===
+
====RTC====
 
通过 /sys/class/rtc/rtc0/下面的接口来操作RTC,比如查看当前RTC的日期和时间:<br />
 
通过 /sys/class/rtc/rtc0/下面的接口来操作RTC,比如查看当前RTC的日期和时间:<br />
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 197: Line 191:
 
[[File:rk3399-android-rtc.png|thumb|RTC]]
 
[[File:rk3399-android-rtc.png|thumb|RTC]]
  
===Watch dog===
+
====Watch dog====
 
看门狗的操作比较简单,打开设备 /dev/watchdog 并定时写入字符即可,如果系统出现问题导致没有写入字符,设备会过一段时间自动重启:
 
看门狗的操作比较简单,打开设备 /dev/watchdog 并定时写入字符即可,如果系统出现问题导致没有写入字符,设备会过一段时间自动重启:
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
Line 204: Line 198:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
[[File:rk3399-android-watchdog.png|thumb|WatchDog]]
 
[[File:rk3399-android-watchdog.png|thumb|WatchDog]]
===SPI===
+
====SPI====
====启用SPI====
+
=====启用SPI=====
 
SPI由于与UART4共用引脚,所以需要修改内核DTS文件,修改方法如下: <br />
 
SPI由于与UART4共用引脚,所以需要修改内核DTS文件,修改方法如下: <br />
 
编辑内核目录下的dts文件 arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi:
 
编辑内核目录下的dts文件 arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi:
Line 231: Line 225:
 
更新 rockdev/Image-nanopc_t4/resource.img 到开发板即可,可以将resource.img拷贝到安装有 eflasher 系统的TF卡中,位置是FriendlyARM分区的androidX 目录,替换里面的resource.img文件,然后用TF卡重刷系统。  
 
更新 rockdev/Image-nanopc_t4/resource.img 到开发板即可,可以将resource.img拷贝到安装有 eflasher 系统的TF卡中,位置是FriendlyARM分区的androidX 目录,替换里面的resource.img文件,然后用TF卡重刷系统。  
  
====SPI示例====
+
=====SPI示例=====
 
SPI示例默认没有预装,需要手动编译,方法是修改Android源代码的以下文件:<br />
 
SPI示例默认没有预装,需要手动编译,方法是修改Android源代码的以下文件:<br />
 
vendor/friendlyelec/apps# vi device-partial.mk<br />
 
vendor/friendlyelec/apps# vi device-partial.mk<br />
Line 265: Line 259:
 
|}
 
|}
 
<br />
 
<br />
====SPI接口说明====
+
=====SPI接口说明=====
 
请参考:[[Android Hardware Access APIs/zh]]
 
请参考:[[Android Hardware Access APIs/zh]]
  
 
+
===函数库(libfriendlyarm-hardware.so)接口说明===
==函数库(libfriendlyarm-hardware.so)接口说明==
+
 
请参考这份WiKi文档:[[Android Hardware Access APIs/zh]]
 
请参考这份WiKi文档:[[Android Hardware Access APIs/zh]]

Revision as of 06:28, 26 October 2018

English 注:本篇所述仅适用于友善电子出品的RK3399系列主板,若需其他平台请参考 Android Hardware Access APIs/zh

1 简介

FriendlyThings是友善电子开发的一套安卓硬件开发SDK(函数库),安卓软件开发者可以通过它在Android应用程序中编程访问和控制ARM主板上的各种硬件资源,比如Uart, SPI, I2C, GPIO等接口,它基于Android-NDK技术开发,开发者无需掌握底层的嵌入式知识(尤其是驱动程序),就可以构建基于安卓系统的各种IoT物联网应用。

2 Android版本

我们提供的Android BSP已经包含FriendlyThings SDK(libfriendlyarm-things-rk3399.so),可支持运行于如下两个Android平台版本:

  • Android 7.1.2-rk3399

BSP source code download link: https://gitlab.com/friendlyelec/rk3399-nougat Latest ROM download link: http://download.friendlyarm.com/NanoPC-T4

  • Android 8.1-rk3399

BSP source code download link: https://gitlab.com/friendlyelec/rk3399-android-8.1 Latest ROM download link: http://download.friendlyarm.com/NanoPC-T4

3 开发板型号列表

FriendlyThings SDK(libfriendlyarm-things-rk3399.so)适用于友善电子出品的如下RK3399系列主板:

  • NanoPC-T4
  • NanoPi M4 (需外接eMMC模块)
  • NanoPi NEO4 (需外接eMMC模块)


FriendlyThings也可以支持其他平台安卓主板,如三星S5P4418/S5P6818,三星S5PV210,全志H3/H5等平台,具体请查看这里Android Hardware Access APIs/zh

4 快速使用入门

4.1 示例程序下载地址

所有硬件访问的示例程序均已集成到 Android 的源代码当中,位于 Android7.1.2 和 Android8.1 源代码的以下目录:vendor/friendlyelec/apps,也可以单独网上下载,下表中列出各个 Demo 的源代码地址:

4.2 Android8.1

4.2.1 Applicable Boards

  • NanoPC-T4/NanoPi-M4/NanoPi-NEO4
Android8.1 Demos
Serial Port

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/SerialPortDemo

GPIO

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/GPIO_LED_Demo

ADC

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/ADCDemo

PWM

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/PWMDemo

I2C

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/I2C_LCD1602_Demo

RTC

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/RTC_Demo-RK3399

Watch dog

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/WatchDogDemo-RK3399

SPI

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/SPI_OLED_Demo

4.3 Android7.1.2

4.3.1 Applicable Boards

  • NanoPC-T4/NanoPi-M4/NanoPi-NEO4
Android7.1.2 Demos
Serial Port

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/SerialPortDemo

GPIO

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/GPIO_LED_Demo

ADC

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/ADCDemo

PWM

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/PWMDemo

I2C

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/I2C_LCD1602_Demo

RTC

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/RTC_Demo-RK3399

Watch dog

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/WatchDogDemo-RK3399

SPI

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/SPI_OLED_Demo

5 快速使用入门

5.1 (第1步) 集成libfriendlyarm-things.so到你的app

克隆以下仓库到本地:

git clone https://github.com/friendlyarm/friendlythings-sdk

接着复制 libs 目录下的所有内容到你的工程目录下,然后在你的Android项目的src目录下创建com/friendlyarm目录,将java/FriendlyThings目录拷贝进去即可,最后的目录的结构看上去是这样的 (注:AndroidStudio的项目可能会稍有不同,但大致如此):

YourProject/
├── AndroidManifest.xml
├── libs
│   ├── arm64-v8a
│   │   └── libfriendlyarm-things.so
│   └── armeabi
│       └── libfriendlyarm-things.so
├── src
│   └── com
│       └── friendlyarm
│           ├── FriendlyThings
│           │   ├── BoardType.java
│           │   ├── FileCtlEnum.java
│           │   ├── GPIOEnum.java
│           │   ├── HardwareControler.java
│           │   ├── SPIEnum.java
│           │   ├── SPI.java
│           │   └── WatchDogEnum.java

使用以下方法导入它们,主要的接口都集中在 HardwareControler.java文件中:

import com.friendlyarm.FriendlyThings.HardwareControler;
import com.friendlyarm.FriendlyThings.SPIEnum;
import com.friendlyarm.FriendlyThings.GPIOEnum;
import com.friendlyarm.FriendlyThings.FileCtlEnum;
import com.friendlyarm.FriendlyThings.BoardType;

5.2 (第2步) 让你的app拥有system权限

你的app需要拥有system权限,才能访问硬件资源;
请参考下面的方法修改你 app 的 AndroidManifest.xml 和 Android.mk这两个文件;
并且最好将你的app放到Android源码中去编译,这一步不是必需的,但是建议这么做,如果你的app在外部编译,你需要对apk进行签名才能让你的app拥有system权限(新手不太建议,过程比较繁琐)。

5.2.1 修改AndroidManifest.xml

在应用程序的AndroidManifest.xml中的manifest节点中加入以下属性:

android:sharedUserId="android.uid.system"

5.2.2 修改Android.mk

编写一个Android.mk文件(最简单的方法就是拷贝示例中的Android.mk文件),修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
 
LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
LOCAL_PACKAGE_NAME := 你的项目名
 
LOCAL_CERTIFICATE := platform
LOCAL_MODULE_TAGS := optional
LOCAL_CFLAGS := -lfriendlyarm-hardware
 
include $(BUILD_PACKAGE)

5.3 (最后1步) 在 Android源代码中编译你的app

先在 Android源代码根目录调用 setenv.sh 导出环境变量,然后进入你的 app 目录,使用mm命令编译;
例子:编译 GPIO_LED_Demo,以RK3399平台为例:

cd rk3399-android-8.1
. setenv.sh
cd vendor/friendlyelec/apps/GPIO_LED_Demo
mm

5.4 一个Android Studio的示例项目

https://github.com/friendlyarm/AndroidStudio-GPIODemo

5.5 RK3399平台Android硬件资源的程序访问

5.5.1 Serial Port

目前可直接使用的串口是UART4,设备名称为/dev/ttyS4,其他串口资源已被分配给其它功能,如下表所示,你也可以使用USB转串口来扩展:

串口设备 串口资源占用情况
UART0 已被蓝牙占用
UART1 已被千兆以太网占用
UART2 已被作为调试串口
UART3 已被千兆以太网占用
UART4 空闲,设备名称为 /dev/ttyS4 (注:需使用20180618之后的ROM)
5.5.1.1 串口读写的接口说明
HardwareControler.openSerialPortEx //打开串口设备
HardwareControler.select   //轮询串口是否有数据可写或可读
HardwareControler.read     //读取串口数据
HardwareControler.write    //写数据到串口
HardwareControler.close    //关闭设备

接口说明请参考:Android Hardware Access APIs/zh


5.5.2 GPIO

通过 sysfs 方式控制来 GPIO,是先访问 /sys/class/gpio 目录,向 export 文件写入 GPIO编号,使得该 GPIO 的操作接口从内核空间暴露到用户空间,然后就可以操作引脚的 direction 和 value 等,direction 控制 GPIO 方向,而 value 可控制 GPIO 输出或获得 GPIO 输入。

下面中列出RK3399可直接操作的GPIO编号:

  • NanoPC T4
物理序号 GPIO编号
Pin11 33
Pin12 50
Pin15 36
Pin16 54
Pin18 55
Pin22 56
Pin37 96
Pin38 125
Pin40 126
  • NanoPi M4和NanoPi NEO4
物理序号 Linux索引号
Pin11 33
Pin12 50
Pin15 36
Pin16 54
Pin18 55
Pin22 56
5.5.2.1 GPIO接口说明
HardwareControler.exportGPIOPin      //导出GPIO
HardwareControler.setGPIODirection   //改变GPIO的方向
HardwareControler.getGPIODirection   //获得当前GPIO的方向
HardwareControler.setGPIOValue    //向引脚输出高电平或低电平
HardwareControler.getGPIOValue    //获得引脚的输入(当前的值)
HardwareControler.unexportGPIOPin //取消导出

接口说明请参考:Android Hardware Access APIs/zh

5.5.2.2 GPIO示例说明

可以用LED配件来测试GPIO示例,在界面上对引脚输出高电平时,LED亮,低电平时,LCD灭。

GPIO

5.5.3 ADC

RK3399引出了三路ADC,channel为0, 2, 3,对应的文件节点为:

频道 文件节点
Channel 0 /sys/devices/platform/ff100000.saradc/iio:device0/in_voltage0_raw
Channel 2 /sys/devices/platform/ff100000.saradc/iio:device0/in_voltage2_raw
Channel 3 /sys/devices/platform/ff100000.saradc/iio:device0/in_voltage3_raw

在 Android 下用标准的文件读取接口就可以读取,你可以将一个可调电阻配件连接到开发板上进行测试。

5.5.4 PWM

RK3399开发板也是通过sysfs方式来控制PWM,直接操作 /sys/class/pwm/pwmchip1 下的文件节点即可,下面以在命令行操作PWM风扇风速作为示例:

5.5.4.1 PWM接口说明
  • 将PWM0暴露到用户空间
echo 0 > /sys/class/pwm/pwmchip1/export
  • 通过设置PWM的period和duty_cycle来控制风速
echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable
echo 50000 > /sys/class/pwm/pwmchip1/pwm0/period
echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable
echo 45000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
5.5.4.2 PWM示例说明

可以连接一个PWM风扇(3针)到NanoPC-T4的风扇接口来测试PWM示例。

PWM

5.5.5 I2C

运行I2C Demo需要将一个LCD1602的模块连接到NanoPC-T4的以下引脚:

物理序号 I2C功能
Pin3 I2C2_SDA(3V)
Pin4 VCC5V0_SYS
Pin5 I2C2_SCL(3V)
Pin6 GND

如下图所示:
NanoPC-T4+OLED.jpg

5.5.6 RTC

通过 /sys/class/rtc/rtc0/下面的接口来操作RTC,比如查看当前RTC的日期和时间:

cat /sys/class/rtc/rtc0/date
# 2018-10-20                                                              
cat /sys/class/rtc/rtc0/time                                            
# 08:20:14

设置开机时间,如设置120秒后开机:

#120秒后定时开机
echo +120 >  /sys/class/rtc/rtc0/wakealarm
RTC

5.5.7 Watch dog

看门狗的操作比较简单,打开设备 /dev/watchdog 并定时写入字符即可,如果系统出现问题导致没有写入字符,设备会过一段时间自动重启:

mWatchDogFD = HardwareControler.open("/dev/watchdog", FileCtlEnum.O_WRONLY);
HardwareControler.write(mWatchDogFD, "a".getBytes());
WatchDog

5.5.8 SPI

5.5.8.1 启用SPI

SPI由于与UART4共用引脚,所以需要修改内核DTS文件,修改方法如下:
编辑内核目录下的dts文件 arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi:

cd ANDROID_SOURCE/kernel
vim arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi

其中,ANDROID_SOURCE请替换为真实的 Android7或Android8源代码目录。

首先找到 spi1 的定义:

&spi1 {
    status = "disabled";  // 将其中的 disabled 改为 okay

然后再在 rk3399-nanopi4-common.dtsi 文件到找到 uart4 的定义:

&uart4 {
    status = "okay";   // 将其中的 okay 改为 disabled

最后重新编译内核:

cd ANDROID_SOURCE/
./build-nanopc-t4.sh -K -M

更新 rockdev/Image-nanopc_t4/resource.img 到开发板即可,可以将resource.img拷贝到安装有 eflasher 系统的TF卡中,位置是FriendlyARM分区的androidX 目录,替换里面的resource.img文件,然后用TF卡重刷系统。

5.5.8.2 SPI示例

SPI示例默认没有预装,需要手动编译,方法是修改Android源代码的以下文件:
vendor/friendlyelec/apps# vi device-partial.mk
去掉前面的注释:

# PRODUCT_PACKAGES += SPI-OLED

然后重新编译 Android源代码。

运行SPI示例需要在NanoPC-T4上连接一个 SPI接口的OLED,规格为0.96寸的128x64屏。

屏幕上有7个引脚,与开发板用母对母杜邦线连接,接法如下表:

OLED引脚 功能 NanoPC-T4引脚编号 备注
GND Pin6 GND
VCC Pin2 VCC5V
DO SCLK Pin23 (SPI1_CLK(3V) 时钟信号,由主设备产生
DI MOSI Pin19 (SPI1_TXD) 主设备数据输出,从设备数据输入
RES Pin16 (GPIO1_C6(3V))
D/C Pin12 (GPIO1_C2)
CS CS0 Pin24 (SPI1_CSn0) 从设备使能信号,由主设备控制


5.5.8.3 SPI接口说明

请参考:Android Hardware Access APIs/zh

5.6 函数库(libfriendlyarm-hardware.so)接口说明

请参考这份WiKi文档:Android Hardware Access APIs/zh