MTK平台SP DrvGenTool工具配置GPIO

一、引子

近期接收到工作任命,为MTK平台项目做开发准备。在现有SDK的基础上,对MTK平台架构做了一定程度上的研究,从部分架构上看确实与RK平台大相径庭,但同样也有许多相似的点。研究学习期间感受良多,遂作记录,以GPIO的配置为例,来看看MTK平台上对GPIO的调试方法。

二、开发环境

OS:Android14

Platform:Genio 720(MT8391)

Linux Version:6.1

SDK Version: 略

三、配置方法

1、涉及的源文件

首先在下使用的SDK采用VF架构,平台对应dts如下路径:

android14/kernel/kernel_device_modules-6.1/arch/arm64/boot/dts/mediatek/aiot8391p2_64_bsp.dts

而MTK对于所有GPIO的配置,是在cust.dtsi文件中实现,该文件作为头文件被包进DTS中,其路径如下例子所示:

android14/out/target/product/aiot8391p2_64_bsp/obj/KERNEL_OBJ/kernel/kernel_device_modules-6.1/arch/arm64/boot/dts/aiot8391p2_64_bsp/cust.dtsi
cust.dtsi

/*
 * Generated by MTK SP DrvGen Version: 3.5.160809 for MT8189.
 * 2025-11-25 14:16:06
 * Do Not Modify The File.
 * Copyright Mediatek Inc. (c) 2016.
*/

/*************************
 * ADC DTSI File
*************************/



/*************************
 * CLK_BUF DTSI File
*************************/



/*************************
 * I2C DTSI File
*************************/



/*************************
 * GPIO DTSI File
*************************/

&gpio_usage_mapping {
};

&gpio{
	gpio-init-default = <0 0 0 0 1 0 1>,
		<1 0 0 0 1 0 1>,
		<2 0 0 0 1 0 1>,
		<3 0 0 0 1 0 1>,
		<4 0 0 0 1 0 1>,
		<5 0 0 0 1 0 1>,
		<6 0 0 0 1 0 0>,
		<7 0 0 0 1 0 0>,
		<8 0 0 0 1 0 1>,
		<9 0 0 0 1 0 1>,
		<10 0 0 0 1 0 1>,
		<11 0 0 0 1 0 1>,
		<12 0 1 1 1 0 1>,
		<13 0 1 0 1 0 1>,
		<14 0 0 0 1 0 1>,
		<15 0 0 0 1 0 1>,
		<16 0 0 0 1 0 0>,
		<17 0 0 0 1 0 0>,
		<18 0 0 0 1 0 1>,
		<19 0 0 0 1 0 1>,
		<20 0 0 0 1 0 1>,
		<21 0 0 0 1 0 1>,
		<22 1 0 0 1 0 1>,
		<23 1 0 0 1 0 1>,
		<24 0 1 0 1 0 1>,
		<25 1 0 0 1 0 1>,
		<26 1 0 0 1 0 1>,
		<27 0 0 0 1 0 0>,
		<28 1 0 0 1 0 1>,
		<29 1 0 0 1 0 1>,
		<30 1 0 0 1 0 1>,
		<31 1 0 0 1 1 1>,
		<32 1 0 0 1 1 1>,
		<33 0 0 0 1 0 1>,
		<34 0 0 0 1 0 1>,
		<35 0 0 0 1 0 1>,
		<36 0 0 0 1 0 1>,
		<37 0 0 0 1 0 1>,
		<38 0 0 0 1 0 1>,
		<39 1 0 0 1 0 1>,
		<40 1 0 0 1 0 1>,
		<41 1 0 0 1 0 1>,
		<42 1 0 0 1 0 1>,
		<43 1 0 0 1 1 1>,
		<44 1 0 0 1 1 1>,
		<45 1 0 0 1 0 1>,
		<46 1 0 0 1 0 1>,
		<47 1 0 0 1 0 1>,
		<48 1 0 0 1 0 1>,
		<49 1 0 0 1 0 1>,
		<50 1 0 0 1 0 1>,
		<51 2 0 0 1 0 1>,
		<52 2 0 0 1 0 1>,
		<53 2 0 0 1 0 1>,
		<54 2 0 0 1 0 1>,
		<55 1 0 0 1 0 1>,
		<56 1 0 0 1 0 1>,
		<57 1 0 0 1 0 1>,
		<58 0 1 0 1 0 1>,
		<59 1 0 0 1 0 1>,
		<60 1 0 0 1 0 1>,
		<61 1 0 0 1 0 1>,
		<62 1 0 0 1 0 1>,
		<63 1 0 0 1 0 1>,
		<64 1 0 0 1 0 1>,
		<65 1 0 0 1 0 1>,
		<66 1 0 0 1 0 1>,
		<67 1 0 0 1 0 1>,
		<68 1 0 0 1 0 1>,
		<69 0 0 0 1 0 1>,
		<70 0 0 0 1 0 1>,
		<71 0 0 0 1 0 1>,
		<72 0 0 0 1 0 1>,
		<73 0 0 0 1 0 1>,
		<74 0 0 0 1 0 1>,
		<75 0 1 1 1 0 1>,
		<76 0 0 0 1 0 1>,
		<77 0 0 0 1 0 0>,
		<78 0 0 0 1 0 0>,
		<79 0 1 1 1 0 0>,
		<80 0 0 0 1 0 0>,
		<81 0 1 0 1 0 1>,
		<82 0 1 0 1 0 1>,
		<83 1 0 0 1 0 1>,
		<84 1 0 0 1 0 1>,
		<85 1 0 0 1 0 1>,
		<86 1 0 0 1 0 1>,
		<87 0 1 0 1 0 1>,
		<88 1 0 0 1 1 1>,
		<89 1 0 0 1 0 1>,
		<90 1 0 0 1 0 1>,
		<91 1 0 0 1 0 1>,
		<92 1 0 0 1 1 1>,
		<93 1 0 0 1 1 1>,
		<94 1 0 0 1 0 1>,
		<95 1 0 0 1 0 1>,
		<96 1 0 0 1 0 1>,
		<97 1 0 0 1 0 1>,
		<98 1 0 0 1 0 1>,
		<99 1 0 0 1 0 1>,
		<100 1 0 0 1 0 1>,
		<101 1 0 0 1 0 1>,
		<102 1 0 0 1 0 1>,
		<103 0 0 0 1 0 0>,
		<104 0 0 0 1 0 0>,
		<105 0 0 0 1 0 0>,
		<106 0 0 0 1 0 0>,
		<107 0 0 0 1 0 0>,
		<108 0 0 0 1 0 1>,
		<109 0 0 0 1 0 1>,
		<110 0 0 0 1 0 1>,
		<111 0 0 0 1 0 1>,
		<112 0 0 0 1 0 1>,
		<113 0 0 0 1 0 1>,
		<114 0 0 0 1 0 1>,
		<115 1 0 0 1 0 1>,
		<116 1 0 0 1 0 1>,
		<117 1 0 0 1 0 1>,
		<118 1 0 0 1 0 1>,
		<119 1 0 0 1 0 1>,
		<120 1 0 0 1 0 1>,
		<121 1 0 0 1 0 1>,
		<122 1 0 0 1 0 1>,
		<123 1 0 0 1 0 1>,
		<124 1 0 0 1 0 1>,
		<125 1 0 0 1 0 1>,
		<126 1 0 0 1 0 1>,
		<127 1 0 0 1 0 1>,
		<128 1 0 0 1 0 1>,
		<129 1 0 0 1 0 1>,
		<130 1 0 0 1 0 1>,
		<131 1 0 0 1 0 1>,
		<132 1 0 0 1 0 1>,
		<133 1 0 0 1 0 1>,
		<134 1 0 0 1 0 1>,
		<135 0 0 0 1 0 1>,
		<136 1 0 0 0 0 1>,
		<137 1 0 0 1 0 1>,
		<138 1 0 0 1 0 1>,
		<139 1 0 0 1 0 1>,
		<140 1 0 0 1 0 1>,
		<141 1 0 0 1 0 1>,
		<142 1 0 0 1 0 1>,
		<143 1 0 0 1 0 1>,
		<144 1 0 0 1 0 1>,
		<145 1 0 0 1 0 1>,
		<146 1 0 0 1 0 1>,
		<147 1 0 0 1 0 1>,
		<148 1 0 0 1 0 1>,
		<149 1 0 0 1 0 1>,
		<150 1 0 0 1 0 1>,
		<151 1 0 0 1 0 1>,
		<152 1 0 0 1 0 1>,
		<153 1 0 0 1 0 1>,
		<154 1 0 0 1 0 1>,
		<155 1 0 0 1 0 1>,
		<156 1 0 0 1 1 1>,
		<157 1 0 0 1 1 1>,
		<158 1 0 0 1 1 1>,
		<159 1 0 0 1 1 1>,
		<160 1 0 0 1 1 1>,
		<161 1 0 0 1 1 1>,
		<162 1 0 0 1 0 1>,
		<163 1 0 0 1 1 1>,
		<164 1 0 0 1 1 1>,
		<165 1 0 0 1 1 1>,
		<166 1 0 0 1 1 1>,
		<167 1 0 0 1 0 1>,
		<168 1 0 0 1 0 1>,
		<169 1 0 0 1 0 1>,
		<170 1 0 0 1 0 1>,
		<171 1 0 0 1 0 1>,
		<172 1 0 0 1 0 1>,
		<173 1 0 0 1 0 1>,
		<174 1 0 0 1 0 1>,
		<175 1 0 0 1 0 1>,
		<176 1 0 0 1 0 1>,
		<177 1 0 0 1 0 1>,
		<178 1 0 0 1 0 1>,
		<179 1 0 0 1 0 1>,
		<180 1 0 0 1 0 1>,
		<181 0 0 0 0 0 0>,
		<182 1 0 0 0 0 1>;
};


/*************************
 * EINT DTSI File
*************************/

#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>



/*************************
 * MD1_EINT DTSI File
*************************/



/*************************
 * PMIC DTSI File
*************************/



/*************************
 * POWER DTSI File
*************************/



/*************************
 * KPD DTSI File
*************************/

上面是在下临时编译生成的cust.dtsi,可以看得到其中基本上罗列了0~182个GPIO的配置表,具体的定义我们在下文一一解析。从该文件的路径上不难看出,该文件是作为编译生成文件来协调DTS的配置的,由对应的.dws文件编译生成,而.dws文件可通过SP DrvGenTool来配置修改,也可以通过编辑器直接在.dws上改动。对应的.dws配置文件,路径上如下例子所示:

android14/vendor/mediatek/proprietary/tools/dct/dws/mt8189/aiot8391p2_64_bsp.dws

当然,本次讨论的主体是以SP DrvGenTool工具作为主体来调试GPIO。

2、工具的使用

如上截图所示,是当前在下使用的较新版本的SP DrvGenTool,相关功能在下做了些简单的笔记:

我们需留意的几个控制项:

EintMode:表示是否作为中断引脚来使用

Def.Mode:代表的是GPIO的默认的模式,比如是作为普通的GPIO来使用,还是作为复用的GPIO来做其它的用途。

InPull En:使用上下拉

InPull SelHigh:这一项勾选则为上拉,反之不勾选则配置成下拉模式

Def.Dir:配置输出模式还是输入模式

OutHigh:指示GPIO口作为普通IO时,输出的电平是高电平还是低电平

VarName123:这个代表变量名,即GPIO的别名

SMT:代表是否使能斯密特触发器

IES:代表是否使能输入,控制输入有效性

通过上述的各项功能,可以配置每个GPIO的状态功能。

那么,修改后的配置,是怎样呈现在cust.dtsi文件中呢?

我们看如下解析:

以cust.dtsi中的GPIO182为例,有

<182 1 0 0 0 0 1>;

第一个值182,代表GPIO的编号

第二个值1,代表是否是作为中断模式来使用,配置成中断则为0,反之非中断脚则为1

第三个值0,代表GPIO的方向,输出则是1,输入则为0

第四个值0,代表GPIO的电平,高电平为1,低电平为0

第五个值0,表示是否使能上下拉,enable则为1,disable则为0

第六个值0,表示上下拉模式的选择,上拉为1,下拉为0

第七个值1,表示是否使能斯密特触发器,enable为1,disable为0

参照上述内容,完成对MTK GPIO的简单配置修改和应用是没有问题的,具体的配置内容因需求而异。

参考资料

1、mtk平台编译出来的cust.dtsi有什么作用-CSDN博客

2、MTK平台GPIO的使用与调试_mtk dws-CSDN博客

3、MTK(mt6797)-DTS修改---I2C设备(Kernrl3.18)_mediatek i2c dev-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值