news 2026/7/5 0:30:01

rk3568设备树修改

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
rk3568设备树修改

我要屏蔽spi0,spi1,uart4这几个功能,将其端口设置为普通io口。
首先要屏蔽其功能,

&uart4{// status = "okay";status="disabled";// pinctrl-names = "default";// pinctrl-0 = <&uart4m1_xfer>;};&spi0{status="disabled";/* status = "okay"; spi0_dev@0 { compatible = "rockchip,spidev"; reg = <0>; spi-max-frequency = <12000000>; spi-lsb-first; };*/};&spi1{status="disabled";/* status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi1m1_cs0 &spi1m1_pins>; spi1_dev@0 { compatible = "rockchip,spidev"; reg = <0>; spi-max-frequency = <12000000>; spi-lsb-first; };*/};

然后再根目录下,增加一下内容。
/* 新增GPIO,不改动下方rp_power原有内容 */

gpio_pb1_pb2:gpio-pb1-pb2{gpios=<&gpio3 RK_PB1 GPIO_ACTIVE_LOW>,<&gpio3 RK_PB2 GPIO_ACTIVE_LOW>;pinctrl-names="default";pinctrl-0=<&gpio_uart4_pb>;status="okay";};gpio_spi0:gpio-spi0{gpios=<&gpio0 RK_PB5 GPIO_ACTIVE_LOW>,<&gpio0 RK_PB6 GPIO_ACTIVE_LOW>,<&gpio0 RK_PC5 GPIO_ACTIVE_LOW>,<&gpio0 RK_PC6 GPIO_ACTIVE_LOW>;pinctrl-names="default";pinctrl-0=<&gpio_spi0_pins>;status="okay";};gpio_spi1:gpio-spi1{gpios=<&gpio3 RK_PA1 GPIO_ACTIVE_LOW>,<&gpio3 RK_PC1 GPIO_ACTIVE_LOW>,<&gpio3 RK_PC2 GPIO_ACTIVE_LOW>,<&gpio3 RK_PC3 GPIO_ACTIVE_LOW>;pinctrl-names="default";pinctrl-0=<&gpio_spi1_pins>;status="okay";};

然后在&pinctrl增加io模式 {
……
/* 只在这里添加引脚复用配置,只有rockchip,pins,没有

gpios*/gpio_uart4_pb:gpio-uart4-pb{rockchip,pins=<3RK_PB1 RK_FUNC_GPIO&pcfg_pull_up>,<3RK_PB2 RK_FUNC_GPIO&pcfg_pull_up>;};gpio_spi0_pins:gpio-spi0-pins{rockchip,pins=<0RK_PB5 RK_FUNC_GPIO&pcfg_pull_up>,<0RK_PB6 RK_FUNC_GPIO&pcfg_pull_up>,<0RK_PC5 RK_FUNC_GPIO&pcfg_pull_up>,<0RK_PC6 RK_FUNC_GPIO&pcfg_pull_up>;};gpio_spi1_pins:gpio-spi1-pins{rockchip,pins=<3RK_PA1 RK_FUNC_GPIO&pcfg_pull_up>,<3RK_PC1 RK_FUNC_GPIO&pcfg_pull_up>,<3RK_PC2 RK_FUNC_GPIO&pcfg_pull_up>,<3RK_PC3 RK_FUNC_GPIO&pcfg_pull_up>;};}

最后,
/* 在这里添加,确保gpio0和gpio3使用我们定义的pinctrl */

&gpio0{pinctrl-names="default";pinctrl-0=<&gpio_spi0_pins>;status="okay";};&gpio3{pinctrl-names="default";pinctrl-0=<&gpio_uart4_pb&gpio_spi1_pins>;status="okay";};

在运行时通过 /sys/class/gpio 修改方向:
echo 13 > /sys/class/gpio/export # gpio0 PB5

设置为输出echo out > /sys/class/gpio/gpio13/direction# 设置输出值

echo 1 > /sys/class/gpio/gpio13/value
echo 0 > /sys/class/gpio/gpio13/value# 读取输入值
cat /sys/class/gpio/gpio13/value

=== 测试 UART4 的 GPIO (gpio3 PB1, PB2) ===# 编号: 105, 106

echo 105 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio105/direction
echo 1 > /sys/class/gpio/gpio105/value
cat /sys/class/gpio/gpio105/value
echo 0 > /sys/class/gpio/gpio105/value# === 测试 SPI0 的 GPIO ===# 编号: 13, 14, 21, 22
echo 13 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio13/direction # 设置为输入
cat /sys/class/gpio/gpio13/value # 读取电平# 或者设置为输出
echo out > /sys/class/gpio/gpio13/direction
echo 1 > /sys/class/gpio/gpio13/value# === 测试 SPI1 的 GPIO ===# 编号: 97, 113, 114, 115
echo 97 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio97/direction
echo 1 > /sys/class/gpio/gpio97/value

Qt中读取GPIO电平的实现,下面是具体的代码实现和解释,它会做和命令行一样的操作:

// 同样三步操作// 1. 导出// 2. 设置方向为in// 3. 读取value导出(Export)GPIO:相当于执行 echo13>/sys/class/gpio/export。 设置方向为输入:相当于执行 echo in>/sys/class/gpio/gpio13/direction。 读取值(Value):相当于执行 cat/sys/class/gpio/gpio13/value。
#include<QFile>#include<QTextStream>#include<QDebug>// 假设要读取的GPIO编号是13intgpioNumber=13;QString gpioBasePath="/sys/class/gpio/";// 1. 导出GPIOQFileexportFile(gpioBasePath+"export");if(exportFile.open(QIODevice::WriteOnly)){QTextStreamout(&exportFile);out<<gpioNumber;exportFile.close();}// 2. 设置方向为输入QString directionPath=gpioBasePath+"gpio"+QString::number(gpioNumber)+"/direction";QFiledirectionFile(directionPath);if(directionFile.open(QIODevice::WriteOnly)){QTextStreamout(&directionFile);out<<"in";directionFile.close();}// 3. 读取电平值QString valuePath=gpioBasePath+"gpio"+QString::number(gpioNumber)+"/value";QFilevalueFile(valuePath);if(valueFile.open(QIODevice::ReadOnly)){QTextStreamin(&valueFile);QString value=in.readLine();qDebug()<<"GPIO"<<gpioNumber<<"value:"<<value;// 输出 "0" 或 "1"valueFile.close();}

测试GPIO13 (SPI0 PB5)

echo"=== Testing GPIO13 ==="echo13>/sys/class/gpio/export2>/dev/null echo in>/sys/class/gpio/gpio13/direction2>/dev/null value=$(cat/sys/class/gpio/gpio13/value2>/dev/null)echo"GPIO13 value: $value (0=LOW, 1=HIGH)"echo13>/sys/class/gpio/unexport2>/dev/null

测试所有GPIO

forgpio in1314212210510697113114115;doecho $gpio>/sys/class/gpio/export2>/dev/null echo in>/sys/class/gpio/gpio$gpio/direction2>/dev/null value=$(cat/sys/class/gpio/gpio$gpio/value2>/dev/null)echo"GPIO$gpio: $value"echo $gpio>/sys/class/gpio/unexport2>/dev/null done

也可以在在

rp_gpio{gpio3a7{// pcie clockgpio_num=<&gpio3 RK_PA7 GPIO_ACTIVE_HIGH>;gpio_function=<0>;bias-pull-up;// 内部上拉,保证空闲高电平 以下两句没有测试input-enable;// 明确设为输入方向(可选,驱动会自动处理)}

这个比较简单了。这个会在/proc/rp_gpio/gpio3a7.
然后,用cat, echo等实现读值和写值。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/29 0:55:30

5大核心技术:NSC_BUILDER构建Switch游戏文件管理的完整解决方案

5大核心技术&#xff1a;NSC_BUILDER构建Switch游戏文件管理的完整解决方案 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerights…

作者头像 李华
网站建设 2026/6/29 1:20:44

还在愁毕业论文写不完?9款AI论文写作工具一键生成覆盖全学科

还在为论文写作的低效重复、内容单薄、格式规范等问题焦虑&#xff1f;AI赋能学术写作的时代已来&#xff0c;9款免费AI工具可覆盖论文写作全流程&#xff0c;助你告别传统写作的痛苦循环。其中千笔AI能30分钟生成20万字全学科初稿&#xff0c;还集成改稿、降重、绘图等一站式功…

作者头像 李华
网站建设 2026/6/29 0:55:20

基于HarmonyOS 7.0 跨端开发的鸡尾酒调酒配方页面实战

基于HarmonyOS 7.0 跨端开发的鸡尾酒调酒配方页面实战 前言 工具类应用里有一类"配方/教程"产品&#xff0c;它们的核心是把结构化的知识&#xff08;食材、步骤、参数&#xff09;以清晰可检索的方式组织起来。调酒配方就是典型&#xff1a;用户要按基酒筛选鸡尾酒、…

作者头像 李华
网站建设 2026/6/29 0:55:28

HTML5安全实战指南:从CORS配置到CSP策略的全面防护

1. 项目概述&#xff1a;为什么HTML5安全是每个前端开发者的必修课&#xff1f;几年前&#xff0c;我接手过一个项目&#xff0c;一个看似简单的H5活动页&#xff0c;功能是让用户上传头像参与抽奖。开发时一切顺利&#xff0c;上线后用户量激增&#xff0c;团队还小小庆祝了一…

作者头像 李华
网站建设 2026/6/29 0:55:26

优必选U1预售火爆,却面临竞争与财务双重挑战,能否实现经济可行?

春晚"舞台轮替"下的处境6月&#xff0c;优必选搅动了人形机器人消费级市场&#xff0c;旗下消费级品牌优世界在京东和天猫同步开启U1全尺寸人形机器人预售。该机器人主打情感陪伴&#xff0c;分男女两款&#xff0c;各搭载88个高自由度运动关节。上线10天预订量逼近4…

作者头像 李华