rk芯片使用手册(RK开发板SPI2管脚充当GPIO无法改变电平问题解决)
rk芯片使用手册(RK开发板SPI2管脚充当GPIO无法改变电平问题解决)763.CSN /GPIO2_B41: 3V32 CLK /GPIO2_B375
我的AIO-3399J的开发板,因为没有引出gpio管脚,所以我用spi2被拉出引脚复用成GPIO,并且在以前也能复用成gpio 但是最近spi2的管脚总是为高位1.8V 软件无法控制,经过调试发现问题并解决了。
管脚定义根据接口定义和丝印实排,这个脚排列和GPIO序号对应如下
RK3399 |
RK3399 GPIO |
1: 3V3 | |
2 CLK /GPIO2_B3 |
75 |
3.CSN /GPIO2_B4 |
76 |
4.RX /GPIO2_B1 |
73 |
5.TX/GPIO2_B2 |
74 |
6 GND |
我们选RX GPIO2_B1来作测试脚,序号73来测试
申请73号为gpio
echo 73 > /sys/class/gpio/export
设置GPIO类型 out为输出脚 in为输入脚
echo out > /sys/class/gpio/gpio73/direction
设置GPIO电平的 1为高电平 0为低电平
echo 0 > /sys/class/gpio/gpio73/value
显示73号管脚状态
cat /sys/kernel/debug/gpio | grep 73
可以看出在软件层面,相应的输出是out lo /out high在变化, 但是用万用表量的总是输出 1.8V的高电平。
问题解决用ps aux 查看进程,发现有名字包含spi的,于是用命令查询
ps aux | grep spi
果然有一些进程,其中at-spi2-registryd 很可疑。
root@firefly:~# ps aux | grep spi
root 132 0.0 0.0 0 0 ? S 14:19 0:00 [spi1]
firefly 946 0.0 0.1 305756 5936 ? Sl 14:19 0:00 /usr/libexec/at-spi-bus-launcher --launch-immediately
firefly 953 0.0 0.0 6808 3184 ? S 14:19 0:00 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
firefly 1154 0.0 0.1 161404 6728 ? Sl 14:19 0:00 /usr/libexec/at-spi2-registryd --use-gnome-session
root 1269 0.0 0.0 4720 644 pts/0 S 14:34 0:00 grep --color=auto spi
从名字看应用该与spi2有关,这一个gtk启动的应用,将at-spi-bus-launcher at-spi2-registryd 进程kill掉,再去调用如下命令行就会把管脚电平置低了。万用表量也会在 0v和1.8V变化。
echo 0 > /sys/class/gpio/gpio73/value
这应该是这个应用一直在操作spi2总线,即变估外面变成GPIO后,这个进程仍然在强制拉高。
看资料可以设环境变量
NO_AT_BRIDGE=1,那么它应该会阻止它们启动。