前言
libgpiod 是用于與 Linux GPIO 字符設(shè)備交互的 C 庫和工具庫;此項(xiàng)目包含六種命令行工具(gpiodetect、gpioinfo、gpioset、gpioget、gpiomon),使用這些工具可以在命令行設(shè)置和獲取GPIO的狀態(tài)信息;在程序開發(fā)中也可以調(diào)用庫提供的API接口來控制GPIO。本文內(nèi)容可適用于RK3566系列開發(fā)板 Android11 系統(tǒng)上添加libgpiod庫和使用API來測(cè)試GPIO。
Purple Pi OH作為一款兼容樹莓派的開源主板,采用瑞芯微RK3566 (Cortex-A55) 四核64位超強(qiáng)CPU,主頻最高達(dá)1.8 GHz,算力高達(dá)1Tops,支持INT8/INT16,支持TensorFlow/MXNet/PyTorch/Caffe框架,多路視頻輸出和輸入,支持4K、H.265/H.264視頻解碼,接口豐富。
玩法豐富,支持Android 11、Debian 10、OpenHarmony3.2、Ubuntu、麒麟OS等多種系統(tǒng),提供豐富開源資料。
產(chǎn)品規(guī)格書:Purple Pi OH 產(chǎn)品手冊(cè)


Android 移植 libgpiod 庫和測(cè)試工具
下載源碼到 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
命令行工具使用測(cè)試
使用gpioget 獲取 GPIO0_A6 的電平狀態(tài)
#gpioget gpiochip0 6
1
程序中調(diào)用庫的接口使用測(cè)試
編寫gpiotest.c 實(shí)現(xiàn)多組GPIO之間的輸入輸出對(duì)測(cè)功能
src/tools/gpiotest.h

src/tools/gpiotest.c 函數(shù)簡單說明,#define LEN 45需要修改
#include
#include
#include
#include"gpiotest.h"
#defineLEN 45 // GPIO 數(shù)組總數(shù),可以用sizeof獲取數(shù)組大小
#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;
// 反轉(zhuǎn)測(cè)試,將原來輸出改為輸入
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);
//測(cè)試?yán)摺⒗?/i>
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 驗(yàn)證拉高、拉低
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/
編譯完成后,可執(zhí)行文件產(chǎn)生的路徑為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 使用

數(shù)組第十項(xiàng)測(cè)試失敗,其余通過,通過gpiotest.h可以找到對(duì)應(yīng)的 GPIO
-
主板
+關(guān)注
關(guān)注
54文章
2361瀏覽量
76854 -
開源
+關(guān)注
關(guān)注
3文章
4207瀏覽量
46143 -
RK3566
+關(guān)注
關(guān)注
0文章
159瀏覽量
6647
發(fā)布評(píng)論請(qǐng)先 登錄
RK356x CPU高溫配置補(bǔ)丁解析:補(bǔ)全高溫電壓管控,筑牢運(yùn)行穩(wěn)定性(官方補(bǔ)丁)
一文搞定RK平臺(tái)Wi-Fi/BT調(diào)試!從配置到問題解決全攻略
RK平臺(tái)ROS2適配全指南:從編譯到運(yùn)行,手把手搞定嵌入式機(jī)器人開發(fā)
技術(shù)分享 | RK3568 Android11 如何實(shí)現(xiàn)自啟動(dòng)應(yīng)用
RK3568 Android11編譯環(huán)境搭建及報(bào)錯(cuò)解決指南
深入解析RK平臺(tái)GPIO驅(qū)動(dòng):從原理到調(diào)試,開發(fā)者必看指南
【VisionFive 2單板計(jì)算機(jī)試用體驗(yàn)】移植libgpiod
RK3568驅(qū)動(dòng)指南|第十二篇 GPIO子系統(tǒng)-第130章 GPIO的調(diào)試方法
迅為RK3568開發(fā)板驅(qū)動(dòng)指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入
迅為RK3568驅(qū)動(dòng)指南GPIO子系統(tǒng) GPIO操作函數(shù)實(shí)驗(yàn)
RK3568驅(qū)動(dòng)指南|第十二篇 GPIO子系統(tǒng)-第135章 GPIO子系統(tǒng)與pinctrl子系統(tǒng)相結(jié)合實(shí)驗(yàn)
基于小凌派RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制GPIO中斷
基于小凌派RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制GPIO外設(shè)
瑞芯微RK356X主板復(fù)用接口配置方法,觸覺智能嵌入式方案商
迅為iTOP-RK3576人工智能開發(fā)板Android?系統(tǒng)接口功能測(cè)試
RK356X Android 使用 libgpiod 測(cè)試gpio
評(píng)論