博航社区

 找回密码
 立即注册博航社区

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 6370|回复: 0
打印 上一主题 下一主题

博航嵌入式Nanopi M4 PC T4 SOM RK3399 Android硬件资源的程序访问 [复制链接]

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2020-6-3 14:17:18 |只看该作者 |倒序浏览
分享到:
6 RK3399平台Android硬件资源的程序访问6.1 Serial Port

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

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

接口说明请参考:FriendlyThings APIs/zh


6.2 GPIO

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

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

  • NanoPC T4
物理序号GPIO编号
Pin1133
Pin1250
Pin1536
Pin1654
Pin1855
Pin2256
Pin3796
Pin38125
Pin40126
  • NanoPi M4和NanoPi NEO4
物理序号Linux索引号
Pin1133
Pin1250
Pin1536
Pin1654
Pin1855
Pin2256
6.2.1 GPIO接口说明HardwareControler.exportGPIOPin      //导出GPIOHardwareControler.setGPIODirection   //改变GPIO的方向HardwareControler.getGPIODirection   //获得当前GPIO的方向HardwareControler.setGPIOValue    //向引脚输出高电平或低电平HardwareControler.getGPIOValue    //获得引脚的输入(当前的值)HardwareControler.unexportGPIOPin //取消导出

接口说明请参考:FriendlyThings APIs/zh

6.2.2 GPIO示例说明

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

6.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 下用标准的文件读取接口就可以读取,你可以将一个可调电阻配件连接到开发板上进行测试。

6.4 PWM

Note: 默认情况下,PWM接口已经用于连接风扇,如果您想自己控制PWM,则需要先禁用风扇,
请参考这篇文章:
Template:RK3399 Android PWMFan/zh
RK3399开发板也是通过sysfs方式来控制PWM,直接操作 /sys/class/pwm/pwmchip1 下的文件节点即可,下面以在命令行操作PWM风扇风速作为示例:

6.4.1 PWM接口说明
  • 将PWM0暴露到用户空间
echo 0 > /sys/class/pwm/pwmchip1/export

  • 通过设置PWM的period和duty_cycle来控制风速
echo 0 > /sys/class/pwm/pwmchip1/pwm0/enableecho 50000 > /sys/class/pwm/pwmchip1/pwm0/periodecho 1 > /sys/class/pwm/pwmchip1/pwm0/enableecho 45000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

6.4.2 PWM示例说明

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

6.5 I2C

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

物理序号I2C功能
Pin3I2C2_SDA(3V)
Pin4VCC5V0_SYS
Pin5I2C2_SCL(3V)
Pin6GND

如下图所示:

6.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

6.7 Watch dog

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

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

6.8 SPI6.8.1 启用SPI

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

cd ANDROID_SOURCE/kernelvim 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卡重刷系统。

6.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引脚编号备注
GNDPin6 GND
VCCPin2 VCC5V
DOSCLKPin23 (SPI1_CLK(3V)时钟信号,由主设备产生
DIMOSIPin19 (SPI1_TXD)主设备数据输出,从设备数据输入
RESPin16 (GPIO1_C6(3V))
D/CPin12 (GPIO1_C2)
CSCS0Pin24 (SPI1_CSn0)从设备使能信号,由主设备控制

6.8.3 SPI接口说明

请参考:FriendlyThings APIs/zh

7 示例程序下载地址

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

7.1 Android8.17.1.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

7.2 Android7.1.27.2.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


分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享分享0 收藏收藏0 转发到微博

使用道具 举报

Archiver|手机版|谷歌地图|百度地图|官网地图|淘宝链接|博航智能圈 - ARM嵌入式AI物联网IOT机器人

GMT+8, 2024-5-9 23:38 , Processed in 0.033802 second(s), 6 queries , Gzip On, Memcache On.

club.broadon.net

© 2007-2012 BroadOn

回顶部