GPIO是嵌入式系统开发中最基础且重要的功能模块。在EASY EAI Nano-TB开发板上,GPIO提供了与外部世界交互的直接通道。
RV1126B处理器提供了丰富的GPIO资源,具有以下显著特性:
EASY EAI Nano-TB开发板通过40Pin扩展接口引出多个GPIO,其中专门为用户预留的GPIO引脚如下:
| 引脚编号 | GPIO名称 | 系统节点 | 物理引脚 | 备注 |
|---|---|---|---|---|
| 7 | GPIO5_C0 | gpio176 | Pin7 | 用户LED控制 |
| 11 | GPIO5_C1 | gpio177 | Pin11 | 通用GPIO |
| 12 | GPIO5_C2 | gpio178 | Pin12 | 通用GPIO |
RV1126B的GPIO命名采用层次化结构:
例如:GPIO5_C0表示:
对应的Linux系统节点计算公式为:
gpio_number = (group_index * 32) + (port_index * 8) + pin_index
因此GPIO5_C0 = (5 × 32) + (2 × 8) + 0 = 176
导出GPIO :
# 将GPIO176导出到用户空间
echo 176 > /sys/class/gpio/export
配置方向 :
# 设置为输出模式
echo out > /sys/class/gpio/gpio176/direction
# 设置为输入模式
echo in > /sys/class/gpio/gpio176/direction
读写GPIO值 :
# 输出高电平
echo 1 > /sys/class/gpio/gpio176/value
# 输出低电平
echo 0 > /sys/class/gpio/gpio176/value
# 读取输入值
cat /sys/class/gpio/gpio176/value
取消导出 :
echo 176 > /sys/class/gpio/unexport
#!/bin/bash
# led_control.sh - 完整的GPIO LED控制脚本
LED_GPIO="176"
LED_PATH="/sys/class/gpio/gpio${LED_GPIO}"
# 初始化GPIO
init_gpio() {
# 检查GPIO是否已导出
if [ ! -d "$LED_PATH" ]; then
echo "Exporting GPIO${LED_GPIO}"
echo $LED_GPIO > /sys/class/gpio/export
sleep 1 # 等待系统创建文件
fi
# 设置为输出模式
echo "out" > ${LED_PATH}/direction
echo "GPIO${LED_GPIO} initialized as output"
}
# 控制LED状态
set_led() {
local state=$1
echo $state > ${LED_PATH}/value
echo "LED set to: $state"
}
# LED闪烁功能
blink_led() {
local count=${1:-5} # 默认闪烁5次
local delay=${2:-0.5} # 默认间隔0.5秒
echo "Blinking LED $count times with ${delay}s interval"
for ((i=1; i<=count; i++)); do
set_led 1
sleep $delay
set_led 0
sleep $delay
done
}
# 清理函数
cleanup() {
echo "Cleaning up GPIO${LED_GPIO}"
set_led 0
echo $LED_GPIO > /sys/class/gpio/unexport
}
# 信号处理
trap cleanup EXIT
# 主程序
case "$1" in
"on")
init_gpio
set_led 1
;;
"off")
init_gpio
set_led 0
;;
"blink")
init_gpio
blink_led $2 $3
;;
"status")
if [ -d "$LED_PATH" ]; then
current_value=$(cat ${LED_PATH}/value)
direction=$(cat ${LED_PATH}/direction)
echo "GPIO${LED_GPIO}: direction=$direction, value=$current_value"
else
echo "GPIO${LED_GPIO} not exported"
fi
;;
*)
echo "Usage: $0 {on|off|blink [count] [interval]|status}"
exit 1
;;
esac
使用方法:
chmod +x led_control.sh
./led_control.sh on # 点亮LED
./led_control.sh off # 熄灭LED
./led_control.sh blink # 闪烁5次
./led_control.sh blink 10 0.2 # 闪烁10次,间隔0.2秒
./led_control.sh status # 查看状态
更多回帖