APEX AD10 GPIO数字输出#

硬件连接#

电气特性#


说明

Vout

输出电压

GND

emitt

Emitter的缩写,发射极

colle

Collector的缩写,集电极


Vout结果

高电平=1

3.3V

低电平=0

0V

接口引脚定义#

接口名称

DB9针脚序号

接口说明

设备节点

DI_0

1

GPIO IN

/dev/gpio/di0

DI_1

2

GPIO IN

/dev/gpio/di1

DO_0

3

GPIO OUT

/dev/gpio/do0

DO_1

4

GPIO OUT

/dev/gpio/do1

DO_2

5

GPIO OUT

/dev/gpio/do2

GND

6-9


接口名称

DB9针脚序号

接口说明

设备节点

DO_3

1

GPIO OUT

/dev/gpio/do3

DI_2

3

GPIO IN

/dev/gpio/di2

DI_3

5

GPIO IN

/dev/gpio/di3

GND

6/8


使用方式#

系统版本5.xx-x.x.x及以下#

对GPIO接口使用的示例如下

# 切换到root用户
sudo su -
# 设置为高电平(DO)
echo 1 > /dev/gpio/<设备节点名>/value
# 例子:echo 1 > /dev/gpio/do0/value
# 设置为低电平(DO)
echo 0 > /dev/gpio/<设备节点名>/value
# 例子:echo 1 > /dev/gpio/do0/value

系统版本6.x.x-x.x.x及以上#

对GPIO接口使用的示例如下

sudo /opt/miivii/features/gpio/bin/miivii_set_do_level <DO number> <level: 0/1> <duration(seconds) of level>

# <DO number>:表示DO的序号,0表示DO1,1表示DO1,以此类推;
# <level: 0/1>:表示需要设置的电平,0表示低电平,1表示高电平;
# <duration(seconds) of level>:电平持续时间,单位为秒。在此期间,DO的电平为<level: 0/1>的状态;超过电平持续时间后,DO恢复为之前状态。
# 请注意,Linux内核从4.8版本开始,GPIO  SYSFS接口被标为过时,并且在Jetpack 6.0开始不再支持,并推荐通过libgpiod来进行GPIO操作。因此不支持不设置保持时间的方式。

# 例: 设置DO0为高电平,保持时间为20秒。
#sudo /opt/miivii/features/gpio/bin/miivii_set_do_level 0 1 20

示例代码编译

cp -r /opt/miivii/features ~/
cd ~/features/gpio
sudo make;

GPIO问题排查#

一、权限与引脚占用类问题#

现象

原因分析

解决方法

执行echo X > export

返回 ‘”Device or resource busy”

GPIO已被其他驱动/进程占用

1. 检查占用源:cat /sys/kernel/debug/gpio

2. 终止占用进程:lsof /sys/class/gpio/gpioX/value

3. 强制释放:echo X > unexport → 重启系统

操作/sys/class/gpio文件时 ​权限不足

用户未加入gpio组或未用sudo

1. 添加用户组:sudo usermod -aG gpio <user>

2. 修改文件权限:sudo chmod 0660 /sys/class/gpio/gpioX/value

二、电平异常类问题#

现象

原因分析

解决方法

输出电平不稳定

1. 电源干扰/接地不良

2. PCB跨分割导致阻抗突变<br>3. 负载电流超限

1. 增加去耦电容滤波

2. 检查PCB布线,避免信号线跨越电源分割区

3. 外接MOSFET驱动高负载设备

输入值错误

1. 未配置上下拉电阻

2. 外部电压超范围

1. 软件配置上拉:echo pullup > /sys/class/gpio/gpioX/direction

2. 硬件增加4.7kΩ上拉电阻,或使用电平转换器

输出模式下读取电平导致死机

1. 错误访问输入寄存器(IDR)

2. 外部电路短路

1. 改用输出数据寄存器读取状态

2. 硬件串联100Ω限流电阻,避免过流

三、中断与事件检测故障#

现象

原因分析

解决方法

中断无响应​(边缘触发失效)

1. 中断类型配置错误

2. ISR阻塞过久

1. 确认触发边沿:echo rising > /sys/class/gpio/gpioX/edge

2. 优化ISR:用perf top分析耗时,拆分长任务

事件检测误触发​(如无故触发高电平)

1. 信号噪声干扰

2. 引脚虚焊/接触不良

1. 软件添加消抖:sysfs中设置debounce

2. 硬件屏蔽线隔离干扰源,或增加RC滤波电路

四、功能配置冲突#

现象

原因分析

解决方法

GPIO方向设置无效​(无法切输入/输出)

1. 复用功能冲突(如被占用为I2C)

2. 驱动未加载

1. 检查设备树:确认apex_ad10.dts中未复用引脚

2. 加载驱动:modprobe gpio_chip_cdev

同一引脚输出/输入切换失败

1. 模式切换时序冲突

2. 中断抢占导致状态错乱

1. 关闭中断期间操作:local_irq_save()

2. 用全局变量缓存状态,避免频繁切换