WhyCan Forum(哇酷开发者社区)

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn

您尚未登录。

#1 2020-10-30 15:25:15

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 37

不拆SoC,不用X光机,利用已知IO探测未知的IO连接情况

在淘宝或闲鱼上买到广告机或者导航仪之类的板子后,如何获知板子上引出的IO和SoC上IO编号的对应关系是个棘手的问题。除非走运能拿到板子的资料,否则比较便捷的方法就只有在板子自带系统上的fex文件之类的配置信息中搜寻了,但这些信息可能不全。本贴给出一种方法,只要你能通过猜测等手段得出一个已知的IO编号,其余的一般能很轻易地获知。

核心思想是,将那个已知IO连接到你想知道编号的未知IO上,然后在sysfs中遍历更改某范围IO的输出电平。如果已知IO检测到了电平变化,证明遍历到的那个IO编号正是未知IO的编号了。
我为这个方法编写了一段shell script,其中known是你已经知道的IO的编号,for循环中的区间需要自行修改成合适的范围,因为有些IO对系统正常运行是必要的(比如mmc,nand,reset),修改后将导致系统崩溃。

#!/bin/bash  

known=10

echo ${known} > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio${known}/direction

cd /sys/class/gpio/
for i in $(seq 0 9) $(seq 11 17);
do   
	echo "${i}" > ./export
	echo out > "gpio${i}"/direction
	echo 1 > "gpio${i}"/value
	pre=($(cat ./gpio${known}/value))
	echo 0 > "gpio${i}"/value
	pos=($(cat ./gpio${known}/value))
	if [ ! $pre == $pos ]; then
		echo "gpio${i}"
		echo "${i}" > ./unexport
        exit
	fi
	echo "${i}" > ./unexport
done  

上面的代码在主线Linux上测试可用,但部分厂商定制的系统可能有不同的将gpio暴露到用户空间的方式,也可能缺少运行该脚本必要的依赖(GNU coreutils seq)。你可能需要下载合适平台的busybox到设备再借助busybox带有的seq来运行该脚本。

离线

#2 2020-10-30 15:39:10

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 37

Re: 不拆SoC,不用X光机,利用已知IO探测未知的IO连接情况

需要注意的一点是,如果输入引脚悬空,读取的电平极易受干扰而改变,导致脚本误认为已经搜索到引脚了。解决方法是给探测脚加一个下拉电阻,或者同一个引脚多测几次看看结果是否一致。

离线

#3 2020-10-30 15:57:04

孤星泪
会员
注册时间: 2020-03-18
累计积分: 201

Re: 不拆SoC,不用X光机,利用已知IO探测未知的IO连接情况

这个方法妙不可言

离线

#4 2020-10-30 16:40:40

metro
会员
注册时间: 2019-03-09
累计积分: 290

Re: 不拆SoC,不用X光机,利用已知IO探测未知的IO连接情况

之前看过一个更骚的操作(仅对于FPGA有效),可以给每个引脚安排一个输出当前引脚编号的UART发送单元,之后只需要用一个串口模块就能读取每个信号的对应引脚编号了。

离线

#5 2020-10-30 17:27:06

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
累计积分: 133
个人网站

Re: 不拆SoC,不用X光机,利用已知IO探测未知的IO连接情况

metro 说:

之前看过一个更骚的操作(仅对于FPGA有效),可以给每个引脚安排一个输出当前引脚编号的UART发送单元,之后只需要用一个串口模块就能读取每个信号的对应引脚编号了。

NB

离线

#6 2020-10-31 10:24:22

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 37

Re: 不拆SoC,不用X光机,利用已知IO探测未知的IO连接情况

对了,还有一点补充:这样得出来的GPIO标号是gpioxxx的格式,xxx要换算成PB00这种格式要模32得出后面的数字偏移量以及除以32取整得到port。批量手动换算的话麻烦还易错,我写了段JavaScript来做这个工作:

(n => (['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'][(n - (n%32))/32] + Number(n%32).toString()))(num)

用法:
浏览器下F12打开devtools,把以上代码粘贴到console,num改成gpio号,回车,例如

(n => (['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'][(n - (n%32))/32] + Number(n%32).toString()))(45)

返回B13,即PB13。

离线

#7 2020-10-31 11:59:43

shawn.d
会员
注册时间: 2020-09-12
累计积分: 100

Re: 不拆SoC,不用X光机,利用已知IO探测未知的IO连接情况

大佬这是玩闲鱼专家啊

离线

#8 2020-11-01 10:13:21

jiangchun9981
会员
注册时间: 2019-07-31
累计积分: 107

Re: 不拆SoC,不用X光机,利用已知IO探测未知的IO连接情况

有这个劲头和精力,还不如花点钱买个有资料的板子玩玩 

除非碰到大批量的板子,非常便宜,那还值得搞搞

离线

#9 2020-11-01 23:32:17

演技担当黄晓明
会员
注册时间: 2017-10-17
累计积分: 129

Re: 不拆SoC,不用X光机,利用已知IO探测未知的IO连接情况

JTAG工具.rar
用这个软件可以控制 支持JTAG扫描链的芯片的PIN脚输出输入

离线

#10 2020-11-01 23:34:47

九重天
会员
注册时间: 2020-10-06
累计积分: 47

Re: 不拆SoC,不用X光机,利用已知IO探测未知的IO连接情况

jiangchun9981 说:

有这个劲头和精力,还不如花点钱买个有资料的板子玩玩 

除非碰到大批量的板子,非常便宜,那还值得搞搞

当时间和精力都很充沛,但是钱又有限的情况下....
算了, 你们有钱人是不会明白这种乐趣的.

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB