Difference between revisions of "APITestPage"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
(updated by API)
Line 1: Line 1:
[[Android Hardware Programming for RK3399|English]]
+
===2018-12-17===
 
+
* Android 8.1更新如下:
==简介==
+
1) 更新AOSP源码版本到 Android8.1-SDK v5.00-20181109<br />
[[File:rk3399-android-gpio.png|thumb|GPIO]]
+
2) 增加HDMI分辨率与边界调节的设置界面<br />
[[File:rk3399-android-pwm.png|thumb|PWM]]
+
3) 增加音频输出设置,可设置默认输出到耳机或者HDMI<br />
[[File:rk3399-android-rtc.png|thumb|RTC]]
+
4) 增加OV13850和和宽动态OV4689摄像头支持,可任意连接到CSI1或CSI2接口<br />
[[File:rk3399-android-watchdog.png|thumb|WatchDog]]
+
 
+
友善电子开发了一个名为libfriendlyarm-hardware.so的函数库,用于Android应用程序访问开发板上的硬件资源,该函数库基于Android-NDK技术开发,提供便利的硬件访问接口,开发者无需掌握过多的嵌入式知识便可使用,有效提高开发进度。<br /><br />
+
本篇文章仅适用于RK3399开发板,包括 NanoPi-NEO4, NanoPi-M4 和 NanoPC-T4。<br />
+
其他平台也有相应的支持,请移步这里查看:[[Android Hardware Access APIs/zh]]
+
 
+
==支持如下RK3399官方Android BSP==
+
* Android 7.1.2
+
* Android 8.1
+
 
<br />
 
<br />
为方便测试,BSP中已集成了各个硬件资源的开源示例程序:<br />
+
* FriendlyCore更新如下:
[[File:Android8-hw-demos.png|frameless|600px]]
+
1) 增加OV13850和和宽动态OV4689摄像头支持,可任意连接到CSI1或CSI2接口<br />
 
+
2)增加ffmpeg支持,提供静态库和头文件,支持4K硬解(不支持硬编码)<br />
==支持如下RK3399硬件资源==
+
3)增加命令行mpv播放器,支持4K硬解<br />
* Serial Port
+
* GPIO
+
* ADC
+
* PWM
+
* I2C
+
* RTC
+
* Watch dog
+
* SPI
+
 
+
==支持的开发板==
+
* NanoPi-NEO4
+
* NanoPi-M4
+
* NanoPC-T4
+
* 其他开发板请移步这里查看:[[Android Hardware Access APIs/zh]]
+
 
+
==示例程序下载地址==
+
所有硬件访问的示例程序均已集成到 Android 的源代码当中,位于 Android7.1.2 和 Android8.1 源代码的以下目录:vendor/friendlyelec/apps,也可以单独网上下载,下表中列出各个 Demo 的源代码地址:
+
{{libfriendlyarm-hardware.so Android8 Demos}}
+
{{libfriendlyarm-hardware.so Android7 Demos}}
+
{{libfriendlyarm-hardware.so Installation Guide/zh}}
+
 
+
==RK3399平台Android硬件资源的程序访问==
+
===Serial Port===
+
目前可直接使用的串口是UART4,设备名称为/dev/ttyS4,其他串口资源已被分配给其它功能,如下表所示,你也可以使用USB转串口来扩展:
+
::{| class="wikitable"
+
|-
+
|串口设备 || 串口资源占用情况
+
|-
+
|UART0  || 已被蓝牙占用
+
|-
+
|UART1  ||  已被千兆以太网占用 
+
|-
+
|UART2  ||  已被作为调试串口
+
|-
+
|UART3  ||  已被千兆以太网占用
+
|-
+
|UART4  ||  空闲,设备名称为 /dev/ttyS4 (注:需使用20180618之后的ROM)
+
|}
+
 
+
====串口读写的接口说明====
+
<syntaxhighlight lang="c">
+
HardwareControler.openSerialPortEx //打开串口设备
+
HardwareControler.select  //轮询串口是否有数据可写或可读
+
HardwareControler.read    //读取串口数据
+
HardwareControler.write    //写数据到串口
+
HardwareControler.close    //关闭设备
+
</syntaxhighlight>
+
接口说明请参考:[[Android Hardware Access APIs/zh]]
+
 
+
 
+
===GPIO===
+
 
+
通过 sysfs 方式控制来 GPIO,是先访问 /sys/class/gpio 目录,向 export 文件写入 GPIO编号,使得该 GPIO 的操作接口从内核空间暴露到用户空间,然后就可以操作引脚的 direction 和 value 等,direction 控制 GPIO 方向,而 value 可控制 GPIO 输出或获得 GPIO 输入。<br />
+
 
<br />
 
<br />
下面中列出RK3399可直接操作的GPIO编号:
+
* FriendlyDesktop更新如下:
* NanoPC T4
+
1) 增加OV13850和和宽动态OV4689摄像头支持,可任意连接到CSI1或CSI2接口<br />
::{| class="wikitable"
+
2) 增加chromium-browser浏览器,支持网页1080P硬解播放, 支持WebGL<br />
|-
+
3)增加ffmpeg支持,提供静态库和头文件,支持4K硬解(不支持硬编码)<br />
| style="background: PaleTurquoise; color: black" | '''物理序号'''
+
4) 修正音量调节Issue<br />
| style="background: PaleTurquoise; color: black" |'''GPIO编号'''
+
5) 将音频输出通道默认设置为HDMI (可通过/etc/pulse/default.pa修改配置)<br />
|-
+
6) 优化本地硬解播放器,与本地mp4文件关联,双击本地视频默认会启动本地硬解播放器播放(仅支持mp4文件)<br />
|Pin11||33
+
7) 为NEO4自动启用 swap 分区<br />
|-
+
8) 修正 hostapd 相关的issue<br />
|Pin12||50
+
9) 调整DPMS设置,默认关闭自动休眠<br />
|-
+
* Lubuntu更新如下:
|Pin15||36
+
1) 增加OV13850和宽动态OV4689摄像头支持,可任意连接到CSI1或CSI2接口<br />
|-
+
2) 增加chromium-browser浏览器,支持网页1080P硬解播放, 支持WebGL<br />
|Pin16||54
+
3) 将音频输出通道默认设置为HDMI(可通过/etc/asound.conf修改配置)<br />
|-
+
4) 优化本地硬解播放器,与本地mp4文件关联,双击本地视频默认会启动本地硬解播放器播放(仅支持mp4文件)<br />
|Pin18||55
+
5) 修正前一版本中存在的一些关于软件包报错的issue<br />
|-
+
6) 调整DPMS设置,默认关闭自动休眠<br />
|Pin22||56
+
|-
+
|Pin37||96
+
|-
+
|Pin38||125
+
|-
+
|Pin40||126
+
|}
+
* NanoPi M4和NanoPi NEO4
+
::{| class="wikitable"
+
|-
+
| style="background: PaleTurquoise; color: black" | '''物理序号'''
+
| style="background: PaleTurquoise; color: black" |'''Linux索引号'''
+
|-
+
|Pin11||33
+
|-
+
|Pin12||50
+
|-
+
|Pin15||36
+
|-
+
|Pin16||54
+
|-
+
|Pin18||55
+
|-
+
|Pin22||56
+
|}
+
 
+
====GPIO接口说明====
+
<syntaxhighlight lang="c">
+
HardwareControler.exportGPIOPin      //导出GPIO
+
HardwareControler.setGPIODirection  //改变GPIO的方向
+
HardwareControler.getGPIODirection  //获得当前GPIO的方向
+
HardwareControler.setGPIOValue    //向引脚输出高电平或低电平
+
HardwareControler.getGPIOValue    //获得引脚的输入(当前的值)
+
HardwareControler.unexportGPIOPin //取消导出
+
</syntaxhighlight>
+
接口说明请参考:[[Android Hardware Access APIs/zh]]
+
 
+
====GPIO示例说明====
+
可以用LED配件来测试GPIO示例,在界面上对引脚输出高电平时,LED亮,低电平时,LCD灭。
+
 
+
===ADC===
+
 
+
RK3399引出了三路ADC,channel为0, 2, 3,对应的文件节点为:
+
::{| class="wikitable"
+
|-
+
| style="background: PaleTurquoise; color: black" | '''频道'''
+
| style="background: PaleTurquoise; color: black" |'''文件节点'''
+
|-
+
|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 下用标准的文件读取接口就可以读取,你可以将一个可调电阻配件连接到开发板上进行测试。
+
 
+
===PWM===
+
RK3399开发板也是通过sysfs方式来控制PWM,直接操作 /sys/class/pwm/pwmchip1 下的文件节点即可,下面以在命令行操作PWM风扇风速作为示例:
+
 
+
====PWM接口说明====
+
* 将PWM0暴露到用户空间
+
<syntaxhighlight lang="bash">
+
echo 0 > /sys/class/pwm/pwmchip1/export
+
</syntaxhighlight>
+
* 通过设置PWM的period和duty_cycle来控制风速
+
<syntaxhighlight lang="bash">
+
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
+
</syntaxhighlight>
+
====PWM示例说明====
+
可以连接一个PWM风扇(3针)到NanoPC-T4的风扇接口来测试PWM示例。
+
 
+
===I2C===
+
 
+
运行I2C Demo需要将一个LCD1602的模块连接到NanoPC-T4的以下引脚:
+
::{| class="wikitable"
+
|-
+
| style="background: PaleTurquoise; color: black" | '''物理序号'''
+
| style="background: PaleTurquoise; color: black" |'''I2C功能'''
+
|-
+
|Pin3||I2C2_SDA(3V)
+
|-
+
|Pin4||VCC5V0_SYS
+
|-
+
|Pin5||I2C2_SCL(3V)
+
|-
+
|Pin6||GND
+
|}
+
 
+
如下图所示:<br />
+
[[File:NanoPC-T4+OLED.jpg|frameless|450px]]
+
 
+
===RTC===
+
通过 /sys/class/rtc/rtc0/下面的接口来操作RTC,比如查看当前RTC的日期和时间:<br />
+
<syntaxhighlight lang="bash">
+
cat /sys/class/rtc/rtc0/date
+
# 2018-10-20                                                             
+
cat /sys/class/rtc/rtc0/time                                           
+
# 08:20:14
+
</syntaxhighlight>
+
设置开机时间,如设置120秒后开机:
+
<syntaxhighlight lang="bash">
+
#120秒后定时开机
+
echo +120 >  /sys/class/rtc/rtc0/wakealarm
+
</syntaxhighlight>
+
 
+
===Watch dog===
+
看门狗的操作比较简单,打开设备 /dev/watchdog 并定时写入字符即可,如果系统出现问题导致没有写入字符,设备会过一段时间自动重启:
+
<syntaxhighlight lang="java">
+
mWatchDogFD = HardwareControler.open("/dev/watchdog", FileCtlEnum.O_WRONLY);
+
HardwareControler.write(mWatchDogFD, "a".getBytes());
+
</syntaxhighlight>
+
===SPI===
+
====启用SPI====
+
SPI由于与UART4共用引脚,所以需要修改内核DTS文件,修改方法如下: <br />
+
编辑内核目录下的以下dts文件 arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi,首先找到 spi1 的定义:
+
<syntaxhighlight lang="c">
+
&spi1 {
+
    status = "disabled";  // 将其中的 disabled 改为 okay
+
</syntaxhighlight>
+
然后再在 rk3399-nanopi4-common.dtsi 文件到找到 uart4 的定义:
+
<syntaxhighlight lang="c">
+
&uart4 {
+
    status = "okay";  // 将其中的 okay 改为 disabled
+
</syntaxhighlight>
+
最后重新编译内核,更新 resource.img 到开发板即可。
+
 
+
====SPI示例====
+
运行SPI示例需要在NanoPC-T4上连接一个 SPI接口的OLED,规格为0.96寸的128x64屏。
+
 
<br />
 
<br />
====SPI接口说明====
+
===2018-11-12===
请参考:[[Android Hardware Access APIs/zh]]
+
* Android 8.1更新如下:
 
+
1) 增加USB-C显示器的支持<br />
 
+
2) 增加4G网络的支持,支持模块的型号为:Quectel EC20<br />
==函数库(libfriendlyarm-hardware.so)接口说明==
+
3) 增加Android硬件访问库FriendlyThing,用于在Android下编程访问各种硬件资源,比如Uart, SPI, I2C, GPIO等<br />
请参考这份WiKi文档:[[Android Hardware Access APIs/zh]]
+
4) 优化内核配置提升PCIe性能,连接NVME SSD会有较大幅度的性能提升<br />
 +
5) 集成Google Play应用商店<br />
 +
6) 改进摄像头的底层支持,使之能自动适应竖屏(HD702E)和横屏(HDMI)<br />
 +
7) 修复Android8下接NVME SSD时分区表异常以及Android8无法启动的问题<br />
 +
* Android 7.1更新如下: 
 +
1) 增加4G网络的支持,支持模块的型号为:Quectel EC20<br />
 +
2) 增加Android硬件访问库FriendlyThing,用于在Android下编程访问各种硬件资源,比如Uart, SPI, I2C, GPIO等<br />
 +
3) 优化内核配置提升PCIe性能,连接NVME SSD会有较大幅度的性能提升<br />
 +
4) 改进摄像头的底层支持,使之能自动适应竖屏(HD702E)和横屏(HDMI)<br />
 +
5) 修复Android8下接NVME SSD时分区表异常以及Android8无法启动的问题<br />
 +
* FriendlyCore和FriendlyDesktop更新如下: 
 +
1) 增加OV13850摄像头的支持,提供支持ISP的gsteamer插件<br />
 +
2) 增加WiringPi的支持,用于C语言编程访问GPIO等硬件资源<br />
 +
3) 增加WiringPi-Python的支持,用于Python编程访问GPIO等硬件资源<br />
 +
4) 优化内核配置提升PCIe性能,连接NVME SSD会有较大幅度的性能提升<br />
 +
===2018-09-21===
 +
* 增加一款eDP屏的支持
 +
* Linux启用了PCI-E转Sata 功能 (AHCI SATA support)
 +
* Linux下的SquashFS启用了LZO/XZ/ZSTD压缩支持
 +
===2018-09-05===
 +
* 增加新OS: Android 8.1, 主要特性如下:
 +
1) 支持同时接2个CAM1320 (OV13850),可选择切换前后摄像头使用<br />
 +
2) 支持USB摄像头 (1路, 不能与CAM1320同时使用)<br />
 +
3) 支持AndroidNN GPU 加速方案,可为采用AndroidNN API开发的 AI 相关应用提供通用加速支持<br />
 +
4) 集成了Rockchip官方提供的Tensorflow Lite物品识别Demo: TfLiteCameraDemo (启动前须先连接CAM1320或USB摄像头)<br />
 +
5) 集成Lightning为缺省浏览器应用 (注:Android官方缺省不提供Browser应用)<br />
 +
6) 支持RC-100红外遥控器,支持下拉通知栏、截屏<br />
 +
7) 支持Android全盘加密功能,system分区已启用Verity特性,使用adb时,可通过adb root; adb disable-verity命令禁止Verity<br />
 +
8) 支持MTP功能,在连接Type-C后,可进入Settings -> Connected devices -> USB 选择相应功能<br />
 +
9) 内核版本升级到 4.4.126<br />
 +
10) 更新AOSP源码到版本 android-8.1.0_r41,并更新8月份安全补丁<br />
 +
* FriendlyCore 增加Qt双摄像头示例程序:示例位于/opt/dual-camera目录,通过run.sh运行 (启动前须先连接两个USB摄像头,建议使用罗技C270或罗技C922摄像头)<br />
 +
* FriendlyDesktop 默认设置HDMI分辨率为 1080P<br />

Revision as of 00:35, 20 December 2018

1 2018-12-17

  • Android 8.1更新如下:

1) 更新AOSP源码版本到 Android8.1-SDK v5.00-20181109
2) 增加HDMI分辨率与边界调节的设置界面
3) 增加音频输出设置,可设置默认输出到耳机或者HDMI
4) 增加OV13850和和宽动态OV4689摄像头支持,可任意连接到CSI1或CSI2接口

  • FriendlyCore更新如下:

1) 增加OV13850和和宽动态OV4689摄像头支持,可任意连接到CSI1或CSI2接口
2)增加ffmpeg支持,提供静态库和头文件,支持4K硬解(不支持硬编码)
3)增加命令行mpv播放器,支持4K硬解

  • FriendlyDesktop更新如下:

1) 增加OV13850和和宽动态OV4689摄像头支持,可任意连接到CSI1或CSI2接口
2) 增加chromium-browser浏览器,支持网页1080P硬解播放, 支持WebGL
3)增加ffmpeg支持,提供静态库和头文件,支持4K硬解(不支持硬编码)
4) 修正音量调节Issue
5) 将音频输出通道默认设置为HDMI (可通过/etc/pulse/default.pa修改配置)
6) 优化本地硬解播放器,与本地mp4文件关联,双击本地视频默认会启动本地硬解播放器播放(仅支持mp4文件)
7) 为NEO4自动启用 swap 分区
8) 修正 hostapd 相关的issue
9) 调整DPMS设置,默认关闭自动休眠

  • Lubuntu更新如下:

1) 增加OV13850和宽动态OV4689摄像头支持,可任意连接到CSI1或CSI2接口
2) 增加chromium-browser浏览器,支持网页1080P硬解播放, 支持WebGL
3) 将音频输出通道默认设置为HDMI(可通过/etc/asound.conf修改配置)
4) 优化本地硬解播放器,与本地mp4文件关联,双击本地视频默认会启动本地硬解播放器播放(仅支持mp4文件)
5) 修正前一版本中存在的一些关于软件包报错的issue
6) 调整DPMS设置,默认关闭自动休眠

2 2018-11-12

  • Android 8.1更新如下:

1) 增加USB-C显示器的支持
2) 增加4G网络的支持,支持模块的型号为:Quectel EC20
3) 增加Android硬件访问库FriendlyThing,用于在Android下编程访问各种硬件资源,比如Uart, SPI, I2C, GPIO等
4) 优化内核配置提升PCIe性能,连接NVME SSD会有较大幅度的性能提升
5) 集成Google Play应用商店
6) 改进摄像头的底层支持,使之能自动适应竖屏(HD702E)和横屏(HDMI)
7) 修复Android8下接NVME SSD时分区表异常以及Android8无法启动的问题

  • Android 7.1更新如下:

1) 增加4G网络的支持,支持模块的型号为:Quectel EC20
2) 增加Android硬件访问库FriendlyThing,用于在Android下编程访问各种硬件资源,比如Uart, SPI, I2C, GPIO等
3) 优化内核配置提升PCIe性能,连接NVME SSD会有较大幅度的性能提升
4) 改进摄像头的底层支持,使之能自动适应竖屏(HD702E)和横屏(HDMI)
5) 修复Android8下接NVME SSD时分区表异常以及Android8无法启动的问题

  • FriendlyCore和FriendlyDesktop更新如下:

1) 增加OV13850摄像头的支持,提供支持ISP的gsteamer插件
2) 增加WiringPi的支持,用于C语言编程访问GPIO等硬件资源
3) 增加WiringPi-Python的支持,用于Python编程访问GPIO等硬件资源
4) 优化内核配置提升PCIe性能,连接NVME SSD会有较大幅度的性能提升

3 2018-09-21

  • 增加一款eDP屏的支持
  • Linux启用了PCI-E转Sata 功能 (AHCI SATA support)
  • Linux下的SquashFS启用了LZO/XZ/ZSTD压缩支持

4 2018-09-05

  • 增加新OS: Android 8.1, 主要特性如下:

1) 支持同时接2个CAM1320 (OV13850),可选择切换前后摄像头使用
2) 支持USB摄像头 (1路, 不能与CAM1320同时使用)
3) 支持AndroidNN GPU 加速方案,可为采用AndroidNN API开发的 AI 相关应用提供通用加速支持
4) 集成了Rockchip官方提供的Tensorflow Lite物品识别Demo: TfLiteCameraDemo (启动前须先连接CAM1320或USB摄像头)
5) 集成Lightning为缺省浏览器应用 (注:Android官方缺省不提供Browser应用)
6) 支持RC-100红外遥控器,支持下拉通知栏、截屏
7) 支持Android全盘加密功能,system分区已启用Verity特性,使用adb时,可通过adb root; adb disable-verity命令禁止Verity
8) 支持MTP功能,在连接Type-C后,可进入Settings -> Connected devices -> USB 选择相应功能
9) 内核版本升级到 4.4.126
10) 更新AOSP源码到版本 android-8.1.0_r41,并更新8月份安全补丁

  • FriendlyCore 增加Qt双摄像头示例程序:示例位于/opt/dual-camera目录,通过run.sh运行 (启动前须先连接两个USB摄像头,建议使用罗技C270或罗技C922摄像头)
  • FriendlyDesktop 默认设置HDMI分辨率为 1080P