RK3588S开发板将SPI1接口改成GPIO

参考官方教程:ROC-RK3588S-PC

一.基本知识:

1.GPIO引脚计算:

ROC-RK3588S-PC 有 5 组 GPIO bank:GPIO0~GPIO4,每组又以 A0~A7, B0~B7, C0~C7, D0~D7 作为编号区分,常用以下公式计算引脚:

GPIO pin脚计算公式:pin = bank * 32 + number

GPIO 小组编号计算公式:number = group * 8 + X
下面演示GPIO1_D0 pin脚计算方法:

bank = 1;      //GPIO1_D0 => 1, bank ∈ [0,4]

group = 3;      //GPIO1_D0 => 3, group ∈ {(A=0), (B=1), (C=2), (D=3)}

X = 0;       //GPIO1_D0 => 0, X ∈ [0,7]

number = group * 8 + X = 3 * 8 + 0 = 24

pin = bank*32 + number= 1 * 32 + 24 = 56;

2.查看 pinmux-pins:

使用命令

sudo cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins
得到结果

Pinmux settings per pin 
Format: pin (name): mux_owner gpio_owner hog? 
pin 0 (gpio0-0): wireless-bluetooth gpio0:0 function wireless-bluetooth group bt-irq-gpio    
pin 1 (gpio0-1): (MUX UNCLAIMED) (GPIO UNCLAIMED)                                    
pin 2 (gpio0-2): (MUX UNCLAIMED) (GPIO UNCLAIMED)        
pin 3 (gpio0-3): (MUX UNCLAIMED) (GPIO UNCLAIMED)       
pin 4 (gpio0-4): fe2c0000.mmc (GPIO UNCLAIMED) function sdmmc group sdmmc-det   
...

解析: pin 0这一列表示引脚编号,gpio0-0这一列表示gpio组编号,后面MUX UNCLAIMED这一列表示数据选择器的拥有者,GPIO UNCLAIMED这一列表示gpio的拥有者。

其中 MUX UNCLAIMED 表示该引脚还没有被节点使用pinctrl去进行控制,例如:节点 i2c7 被启用,它拥有pinctrl-0属性,对引脚pin 56功能作出出修改,复用为i2c ,则该引脚的信息会变为pin 56 (gpio1-24): fec90000.i2c (GPIO UNCLAIMED) function i2c7 group i2c7m0-xfer ,它被地址为0xfec90000、名字为i2c的节点使用pinctrl配置,pinctrl的值是i2cm0-xfer。

GPIO UNCLAIMED表示还没有注册的gpio使用该引脚,我们用上述gpio_demo例子去注册该引脚,引脚信息会变成pin 56 (gpio1-24): gpio_demo gpio1:56 function gpio group pin56_57_gpio ,它被名为gpio_demo的节点使用pinctrl配置,pinctrl的值是pin56_57_gpio,该引脚还被申请为gpio。

3.GPIO 调试接口:

Debugfs 文件系统目的是为开发人员提供更多内核数据,方便调试。 这里 GPIO 的调试也可以用 Debugfs 文件系统,获得更多的内核信息。GPIO 在 Debugfs 文件系统中的接口为 /sys/kernel/debug/gpio,可以这样读取该接口的信息:

console:/ $ cat sys/kernel/debug/gpio                                          
gpiochip0: GPIOs 0-31, parent: platform/fd8a0000.gpio, gpio0:
 gpio-0   (                    |bt_default_wake_host) in  lo 
 gpio-21  (                    |bt_default_wake     ) in  lo 
 gpio-22  (                    |bt_default_reset    ) out lo 

gpiochip1: GPIOs 32-63, parent: platform/fec20000.gpio, gpio1:
 gpio-34  (                    |bt_default_rts      ) in  hi 
 gpio-36  (                    |hpd                 ) in  lo 
 gpio-43  (                    |:power              ) out hi 
 gpio-44  (                    |reset               ) out hi 
 gpio-52  (                    |hp-det              ) in  hi ACTIVE LOW
 gpio-56  (                    |sysfs               ) out hi
 gpio-57  (                    |sysfs               ) out lo
 gpio-61  (                    |hdmirx-det          ) in  hi ACTIVE LOW
 ...
从读取到的信息中可以知道,内核把 GPIO 当前的状态都列出来了,以 GPIO1 组为例,gpio-56(GPIO1_D0) 输出高电平 (out hi)。

二.步骤

1.ROC-RK3588S-PC开发板:

2.修改roc-rk3588s-pc.dtsi文件的第269行,将status属性的值改成disabled(禁用spi1接口)

/home/wst/Linux_SDK/kernel/arch/arm64/boot/dts/rockchip/roc-rk3588s-pc.dtsi
line:269
spi1:disabled

3. ./build.sh重新编译系统并重新烧写系统

4.查看验证

未修改设备树前(4个GPIO为SPI接口):
cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins

pin 56 (gpio1-24): feb10000.spi (GPIO UNCLAIMED) function spi1 group spi1m2-pins
pin 57 (gpio1-25): feb10000.spi (GPIO UNCLAIMED) function spi1 group spi1m2-pins
pin 58 (gpio1-26): feb10000.spi (GPIO UNCLAIMED) function spi1 group spi1m2-pins
pin 59 (gpio1-27): feb10000.spi (GPIO UNCLAIMED) function spi1 group spi1m2-cs0

修改后(4个GPIO为通用GPIO):
cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins

pin 56 (gpio1-24): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 57 (gpio1-25): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 58 (gpio1-26): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 59 (gpio1-27): (MUX UNCLAIMED) (GPIO UNCLAIMED)

将56、57脚设成GPIO out
echo 56 > /sys/class/gpio/export
echo 57 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio56/direction
echo out > /sys/class/gpio/gpio57/direction
echo 0 > /sys/class/gpio/gpio56/value

cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins
pin 56 (gpio1-24): (MUX UNCLAIMED) gpio1:56
pin 57 (gpio1-25): (MUX UNCLAIMED) gpio1:57
pin 58 (gpio1-26): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 59 (gpio1-27): (MUX UNCLAIMED) (GPIO UNCLAIMED)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值