Difference between revisions of "APITestPage"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
(updated by API)
 
(231 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Android Hardware Programming for RK3399|English]]
 
  
==简介==
+
{{RockchipUnbrick|NanoPC-T4}}
友善电子开发了一个名为libfriendlyarm-hardware.so的函数库,用于Android应用程序访问开发板上的硬件资源,该函数库基于Android-NDK技术开发,提供便利的硬件访问接口,开发者无需掌握过多的嵌入式知识便可使用,有效提高开发进度。<br /><br />
+
本篇文章仅适用于RK3399开发板,包括 NanoPi-NEO4, NanoPi-M4 和 NanoPC-T4。<br />
+
其他平台也有相应的支持,请移步这里查看:[[Android Thing: Android Hardware Programming]]
+
 
+
==支持如下RK3399官方Android BSP==
+
* Android 7.1.2
+
* Android 8.1
+
 
+
==支持如下RK3399硬件资源==
+
* Serial Port
+
* GPIO
+
* ADC
+
* PWM
+
* I2C
+
* RTC
+
* Watch dog
+
* SPI
+
等等, 接口包括I2C, SPI, GPIO常用的接口。<br />
+
[[File:NanoPC-T4+OLED.jpg|frameless|450px|Smart4418SDK+OLED]]
+
 
+
==支持的开发板==
+
* NanoPi-NEO4
+
* NanoPi-M4
+
* NanoPC-T4
+
* 其他开发板请移步这里查看:[[Android Thing: Android Hardware Programming]]
+
 
+
==开源Android示例==
+
所有硬件访问的示例程序均已集成到 Android 的源代码当中,位于 Android7.1.2 和 Android8.1 源代码的以下目录:vendor/friendlyelec/apps,也可以单独网上下载,下表中列出各个 Demo 的源代码地址:
+
===Android8.1===
+
::{| class="wikitable"
+
|-
+
| style="background: PaleTurquoise; color: black" colspan="2"| '''Android8.1示例'''       
+
|-
+
|Serial Port
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/SerialPortDemo
+
|-
+
|GPIO
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/GPIO_LED_Demo
+
|-
+
|ADC
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/ADCDemo
+
|-
+
|PWM
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/PWMDemo
+
|-
+
|I2C
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/I2C_LCD1602_Demo
+
|-
+
|RTC
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/RTC_Demo
+
|-
+
|Watch dog
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/WatchDogDemo
+
|-
+
|SPI
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/SPI_OLED_Demo
+
|-
+
|}
+
===Android7.1.2===
+
::{| class="wikitable"
+
|-
+
| style="background: PaleTurquoise; color: black" colspan="2"| '''Android7.1.2示例'''       
+
|-
+
|Serial Port
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/SerialPortDemo
+
|-
+
|GPIO
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/GPIO_LED_Demo
+
|-
+
|ADC
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/ADCDemo
+
|-
+
|PWM
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/PWMDemo
+
|-
+
|I2C
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/I2C_LCD1602_Demo
+
|-
+
|RTC
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/RTC_Demo
+
|-
+
|Watch dog
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/WatchDogDemo
+
|-
+
|SPI
+
|style="width: 90%;"|
+
https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/SPI_OLED_Demo
+
|-
+
|}
+
 
+
 
+
==如何在自已的程序中使用硬件访问库==
+
===集成libfriendlyarm-hardware.so到你的工程目录===
+
克隆以下仓库到本地:
+
<syntaxhighlight lang="bash">
+
git clone https://github.com/friendlyarm/android-libfriendlyarm-hardware.git
+
</syntaxhighlight>
+
接着复制 libs 目录下的所有内容到你的工程目录下,然后在你的Android项目的src目录下创建com/friendlyarm目录,将java/AndroidSDK目录拷贝进去即可,最后的目录的结构看上去是这样的 (注:AndroidStudio的项目可能会稍有不同,但大致如此):<br />
+
<syntaxhighlight lang="bash">
+
YourProject/
+
├── AndroidManifest.xml
+
├── libs
+
│   ├── arm64-v8a
+
│   │   └── libfriendlyarm-hardware.so
+
│   └── armeabi
+
│      └── libfriendlyarm-hardware.so
+
├── src
+
│   └── com
+
│      └── friendlyarm
+
│          ├── AndroidSDK
+
│          │   ├── BoardType.java
+
│          │   ├── FileCtlEnum.java
+
│          │   ├── GPIOEnum.java
+
│          │   ├── HardwareControler.java
+
│          │   ├── SPIEnum.java
+
│          │   ├── SPI.java
+
│          │   └── WatchDogEnum.java
+
</syntaxhighlight>
+
使用以下方法导入它们,主要的接口都集中在 HardwareControler.java文件中:
+
<syntaxhighlight lang="java">
+
import com.friendlyarm.AndroidSDK.HardwareControler;
+
import com.friendlyarm.AndroidSDK.SPIEnum;
+
import com.friendlyarm.AndroidSDK.GPIOEnum;
+
import com.friendlyarm.AndroidSDK.FileCtlEnum;
+
import com.friendlyarm.AndroidSDK.BoardType;
+
</syntaxhighlight>
+
===让你的app拥有system权限===
+
需要将你的 app提升至 system权限,否则会无法访问硬件,需要修改你的 app 的 AndroidManifest.xml 和 Android.mk这两个文件,同时,你的app需要到Android源码中编译,参考示例的方式部署即可。
+
====修改AndroidManifest.xml====
+
在应用程序的AndroidManifest.xml中的manifest节点中加入以下属性:
+
<syntaxhighlight lang="bash">
+
android:sharedUserId="android.uid.system"
+
</syntaxhighlight>
+
====修改Android.mk====
+
编写一个Android.mk文件(最简单的方法就是拷贝示例中的Android.mk文件),修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行:
+
<syntaxhighlight lang="java">
+
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)
+
</syntaxhighlight>
+
 
+
==RK3399平台Android硬件资源的程序访问==
+
===Serial Port===
+
目前可用的串口是UART4,设备名称为/dev/ttyS4,其他串口资源如下表所示,你也可以使用USB转串口来扩展:
+
::{| class="wikitable"
+
|-
+
|串口设备 || 串口资源占用情况
+
|-
+
|UART0  || 已被蓝牙占用
+
|-
+
|UART1  ||  已被千兆以太网占用 
+
|-
+
|UART2  ||  已被作为调试串口
+
|-
+
|UART3  ||  已被千兆以太网占用
+
|-
+
|UART4  ||  空闲,设备名称为 /dev/ttyS4 (注:需使用20180618之后的ROM)
+
|}
+
 
+
Android硬件库为串口提供的开发接口如下:
+
 
+
 
+
===GPIO===
+
 
+
===ADC===
+
 
+
===PWM===
+
 
+
===I2C===
+
 
+
===RTC===
+
 
+
===Watch dog===
+
 
+
===SPI===
+
 
+
 
+
==开发资料==
+
* 中文API文档:https://github.com/friendlyarm/AndroidHardwareAccess/blob/master/友善电子Android硬件开发指南.pdf
+

Latest revision as of 09:23, 4 June 2024

1 Unbricking Method

If the ROM is not installed correctly, causing the development board to become bricked, and you might not have the opportunity to reinstall the ROM via an SD card, you need to enter Maskrom mode to unbrick it by erasing the storage device.

1.1 Windows Users

1.1.1 Download Required Files

  • Get the necessary tools: Visit here, find RKDevTool_v3.19_for_window.zip and DriverAssitant_v5.12.zip in the 05_Tools directory, and download them to your local machine.
  • Install Rockchip USB driver and RKDevTool: Extract DriverAssitant_v5.12.zip to install the Rockchip USB driver, and extract RKDevTool_v3.19_for_window.zip to obtain the Rockchip flashing tool RKDevTool.
  • Get the loader: Visit here, enter the tools directory corresponding to your CPU model, and download MiniLoaderAll.bin.

1.1.2 Enter Maskrom Mode to Erase the Storage Device

  • Connect NanoPC-T4 to your computer using a USB data cable.
  • Start RKDevTool on your computer.
  • Disconnect the power from NanoPC-T4, hold down the MASK button, connect the power, and release the button when you see Found One MASKROM Device displayed at the bottom of the interface, as shown below:

Rkdevtool found one maskrom device.png

  • Click the Advanced Function tab in the RKDevTool interface.
  • In the Boot text box, select MiniLoaderAll.bin, then click the Download button.
  • Select EMMC, click Switch Storage, then click the EraseAll button to erase the eMMC.

Rkdevtool erase emmc.png

  • At this point, NanoPC-T4 is restored to its initial state and can be normally booted via SD card or eMMC.

1.2 Linux/Mac Users

1.2.1 Download the Required Files

  • Get the necessary tools: Visit here and find upgrade_tool_v2.30_for_linux.tgz (or for Mac users, select upgrade_tool_v2.25_for_mac.tgz) in the 05_Tools directory and download it locally.
  • Get the loader: Visit here, enter the tools directory corresponding to your CPU model, and download MiniLoaderAll.bin.

1.2.2 Installation for upgrade_tool

The following commands are for Linux, with only slight differences in file and directory names for Mac users:

tar xzf upgrade_tool_v2.30_for_linux.tgz
cd upgrade_tool_v2.30_for_linux
sudo cp upgrade_tool /usr/local/sbin/
sudo chmod 755 /usr/local/sbin/upgrade_tool

1.2.3 Enter Maskrom Mode to Erase the Storage Device

  • Connect NanoPC-T4 to the computer using a USB data cable.
  • Disconnect the power from NanoPC-T4, hold down the MASK button, connect the power, and release the button after 4 seconds.
  • Check the connection with the following command:
upgrade_tool LD

A result similar to "DevNo=1 Vid=0x2207,Pid=0x350b,LocationID=13 Mode=Maskrom SerialNo=" indicates that the device has been detected.

  • Erase the eMMC with the following command:
upgrade_tool EF MiniLoaderAll.bin
  • At this point, NanoPC-T4 has been restored to its initial state and can boot the system normally via SD card or eMMC.