0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RK356X Android 使用 libgpiod 测试gpio

触觉智能 2023-11-04 08:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

libgpiod 是用于与 Linux GPIO 字符设备交互的 C 库和工具库;此项目包含六种命令行工具(gpiodetect、gpioinfo、gpioset、gpioget、gpiomon),使用这些工具可以在命令行设置和获取GPIO的状态信息;在程序开发中也可以调用库提供的API接口来控制GPIO。本文内容可适用于RK3566系列开发板 Android11 系统上添加libgpiod库和使用API来测试GPIO。

Purple Pi OH作为一款兼容树莓派的开源主板,采用瑞芯微RK3566 (Cortex-A55) 四核64位超强CPU,主频最高达1.8 GHz,算力高达1Tops,支持INT8/INT16,支持TensorFlow/MXNet/PyTorch/Caffe框架,多路视频输出和输入,支持4K、H.265/H.264视频解码,接口丰富。

玩法丰富,支持Android 11、Debian 10、OpenHarmony3.2、Ubuntu、麒麟OS等多种系统,提供丰富开源资料。

产品规格书:Purple Pi OH 产品手册

cf0cfb00-7aa9-11ee-9788-92fbcf53809c.jpg

cf23856e-7aa9-11ee-9788-92fbcf53809c.jpg

Android 移植 libgpiod 库和测试工具

下载源码到 external目录下:

cdexternal
git clone https://github.com/technexion-android/platform_external_libgpiod.git
#git clone https://kernel.googlesource.com/pub/scm/libs/libgpiod/libgpiod

仓库链接:platform_external_libgpiod

添加到 PRODUCT_PACKAGES

在mk文件中添加编译 libgpiod及工具

PRODUCT_PACKAGES+= \
RockchipPinnerService \
gpioset \
gpiomon \
gpioinfo \
gpioget \
gpiofind \
gpiodetect \
libgpiod

源码

libgpiod-git.7z

命令行工具使用测试

使用gpioget 获取 GPIO0_A6 的电平状态

#gpioget gpiochip0 6
1

程序中调用库的接口使用测试

编写gpiotest.c 实现多组GPIO之间的输入输出对测功能

src/tools/gpiotest.h

cf2cdd12-7aa9-11ee-9788-92fbcf53809c.png

src/tools/gpiotest.c 函数简单说明,#define LEN 45需要修改

#include
#include
#include
#include"gpiotest.h"

#defineLEN 45 // GPIO 数组总数,可以用sizeof获取数组大小
#defineHIGH 1

intmain()
{

structgpiod_chip*input_chip, *output_chip;
structgpiod_line*input_line, *output_line;

booloutput_value, input_value;
intret,test_res = 0, total = 0;

for(intnum = 0; num < 2; num++ ){
intin_chip = 0;
intin_line = 1;
intout_chip = 2;
intout_line = 3;

// 反转测试,将原来输出改为输入
if( 1== num ){
in_chip = 2;
in_line = 3;
out_chip = 0;
out_line = 1;
}

for(inti = 0; i < LEN; i++){
// 将 GPIO 配置为 输入
input_chip = gpiod_chip_open_by_number(test_gpio[i][in_chip]);
if(!input_chip)
return-1;

input_line = gpiod_chip_get_line(input_chip,test_gpio[i][in_line]);
if(!input_line){
gpiod_chip_close(input_chip);
return-1;
}

ret = gpiod_line_request_input(input_line,"input");
if(ret){
gpiod_chip_close(input_chip);
return-1;
}

// 将 GPIO 配置为 输出
output_chip = gpiod_chip_open_by_number(test_gpio[i][out_chip]);
if(!output_chip)
return-1;

output_line = gpiod_chip_get_line(output_chip,test_gpio[i][out_line]);
if(!output_line){
gpiod_chip_close(output_chip);
return-1;
}

ret = gpiod_line_request_output(output_line,"output",HIGH);
if(ret){
gpiod_chip_close(output_chip);
return-1;
}

test_res = 1;
for(intj = 0;j < 2; j++){
output_value = gpiod_line_get_value(output_line);

//测试拉高、拉低
gpiod_line_set_value(output_line, !output_value);
//printf("output gpio[%d]: %d\t",i, !output_value);
sleep(1);

input_value = gpiod_line_get_value(input_line);
//printf("input gpio[%d]: %d\n",i, input_value);

//用输入 GPIO 验证拉高、拉低
if( output_value != !input_value){
printf("test fail array [%d]\n",i);
test_res = -1;
break;
}
}

if( 1== test_res ){
printf("PASS gpio array %d\n",i);
total += 1;
}

// release gpio
gpiod_chip_close(input_chip);
gpiod_chip_close(output_chip);
}
}

printf("total pass gpio number %d\n",total);
return0;
}

程序编译

使用mmm 命令指定目录编译

$mmm external/libgpiod/

编译完成后,可执行文件产生的路径为out/target/product/rk3566_r/system/bin/gpiotest

将程序push到主板中使用

adb root
adb remount
adb push out/target/product/rk3566_r/system/bin/gpiotest /system/bin
adb shellchmod +x/system/bin/gpiotest

gpiotest 使用

cf37fbd4-7aa9-11ee-9788-92fbcf53809c.png

数组第十项测试失败,其余通过,通过gpiotest.h可以找到对应的 GPIO

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 主板
    +关注

    关注

    54

    文章

    2272

    浏览量

    76135
  • 开源
    +关注

    关注

    3

    文章

    4032

    浏览量

    45569
  • RK3566
    +关注

    关注

    0

    文章

    157

    浏览量

    6359
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    迅为RK3588开发板Android系统烧写及注意事项

    迅为RK3588开发板Android系统烧写及注意事项
    的头像 发表于 12-03 15:17 5380次阅读
    迅为<b class='flag-5'>RK</b>3588开发板<b class='flag-5'>Android</b>系统烧写及注意事项

    【VisionFive 2单板计算机试用体验】移植libgpiod

    官方有VisionFive.gpio,尝试下移植libgpiod到开发板。 一、安装GPIO库 1.1、下载源码 执行命令: root@starfive:~# wget https
    发表于 07-02 07:16

    RK3568驱动指南|第十二篇 GPIO子系统-第130章 GPIO的调试方法

    RK3568驱动指南|第十二篇 GPIO子系统-第130章 GPIO的调试方法
    的头像 发表于 06-03 11:32 989次阅读
    <b class='flag-5'>RK</b>3568驱动指南|第十二篇 <b class='flag-5'>GPIO</b>子系统-第130章 <b class='flag-5'>GPIO</b>的调试方法

    迅为RK3568开发板驱动指南GPIO子系统GPIO子系统API函数的引入

    迅为RK3568开发板驱动指南GPIO子系统GPIO子系统API函数的引入
    的头像 发表于 05-29 14:05 834次阅读
    迅为<b class='flag-5'>RK</b>3568开发板驱动指南<b class='flag-5'>GPIO</b>子系统<b class='flag-5'>GPIO</b>子系统API函数的引入

    迅为RK3568驱动指南GPIO子系统 GPIO操作函数实验

    迅为电子RK3568开发板驱动指南GPIO子系统 GPIO操作函数实验
    的头像 发表于 05-28 15:24 1046次阅读
    迅为<b class='flag-5'>RK</b>3568驱动指南<b class='flag-5'>GPIO</b>子系统 <b class='flag-5'>GPIO</b>操作函数实验

    RK3568驱动指南|第十二篇 GPIO子系统-第135章 GPIO子系统与pinctrl子系统相结合实验

    RK3568驱动指南|第十二篇 GPIO子系统-第135章 GPIO子系统与pinctrl子系统相结合实验
    的头像 发表于 05-23 13:47 748次阅读
    <b class='flag-5'>RK</b>3568驱动指南|第十二篇 <b class='flag-5'>GPIO</b>子系统-第135章 <b class='flag-5'>GPIO</b>子系统与pinctrl子系统相结合实验

    基于小凌派RK2206开发板:OpenHarmony如何使用IoT接口控制GPIO中断

    1、实验简介本实验将演示如何在小凌派-RK2206开发板上使用IOT库的GPIO中断模式,进行GPIO编程开发。例程将创建一个任务,通过配置GPIO引脚为中断模式,实现
    的头像 发表于 04-21 10:39 892次阅读
    基于小凌派<b class='flag-5'>RK</b>2206开发板:OpenHarmony如何使用IoT接口控制<b class='flag-5'>GPIO</b>中断

    基于小凌派RK2206开发板:OpenHarmony如何使用IoT接口控制GPIO外设

    1、案例简介本案例主要是如何在小凌派-RK2206开发板上使用IOT库的GPIO接口,进行GPIO编程开发。例程将创建一个任务,通过配置GPIO引脚,实现
    的头像 发表于 04-11 15:36 1614次阅读
    基于小凌派<b class='flag-5'>RK</b>2206开发板:OpenHarmony如何使用IoT接口控制<b class='flag-5'>GPIO</b>外设

    瑞芯微RK356X主板复用接口配置方法,触觉智能嵌入式方案商

    本文介绍瑞芯微RK356X系列复用接口配置的方法,基于触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居
    的头像 发表于 03-28 18:04 899次阅读
    瑞芯微<b class='flag-5'>RK356X</b>主板复用接口配置方法,触觉智能嵌入式方案商

    迅为iTOP-RK3576人工智能开发板Android 系统接口功能测试

    迅为iTOP-RK3576人工智能开发板Android 系统接口功能测试
    的头像 发表于 03-28 14:45 3477次阅读
    迅为iTOP-<b class='flag-5'>RK</b>3576人工智能开发板<b class='flag-5'>Android</b> 系统接口功能<b class='flag-5'>测试</b>

    【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发GPIO基础知识

    【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发GPIO基础知识
    的头像 发表于 03-06 11:23 1009次阅读
    【北京迅为】iTOP-<b class='flag-5'>RK</b>3568OpenHarmony系统南向驱动开发<b class='flag-5'>GPIO</b>基础知识

    瑞芯微RK安卓Android主板GPIO按键配置方法,触觉智能嵌入式开发

    触觉智能分享,瑞芯微RK安卓Android主板GPIO按键配置方法,方便大家更好利用主板空闲IO!
    的头像 发表于 02-26 16:29 1112次阅读
    瑞芯微<b class='flag-5'>RK</b>安卓<b class='flag-5'>Android</b>主板<b class='flag-5'>GPIO</b>按键配置方法,触觉智能嵌入式开发

    快速上手RK3588常用接口测试

    以及GPIO测试。EVM-RK3588评估板外观(正面)一、USB2.0接口测试眺望电子EVM-RK3588底板支持一个USB2.0接口,用
    的头像 发表于 12-26 08:33 4278次阅读
    快速上手<b class='flag-5'>RK</b>3588常用接口<b class='flag-5'>测试</b>

    瑞芯微平台Android系统串口测试方法,触觉智能RK3562开发板演示

    瑞芯微方案主板Android系统串口测试方法,通用RK3568、RK3566、RK3588、RK
    的头像 发表于 12-24 11:51 1433次阅读
    瑞芯微平台<b class='flag-5'>Android</b>系统串口<b class='flag-5'>测试</b>方法,触觉智能<b class='flag-5'>RK</b>3562开发板演示

    RK3568的显示问题及其解决方法

    /rockchip/rk356x/overlay/frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.png 对于屏幕宽度至少为600dp
    发表于 12-16 09:14