LoginSignup
0
0

More than 1 year has passed since last update.

GPIOの探索スクリプト

Last updated at Posted at 2022-02-08

ルーターなどの未知のGPIOを探索するためのmruby-bsdgpioを使ったGPIOのチェックプログラムを作ってみました。

gpio.rb
#!/usr/local/bin/mruby
# ./gpio.rb <device number> <operation> <ignore list>

t = BsdGpio.new(ARGV[0].to_i)

opt = ARGV[1]

if ARGV.size == 3 then
  ignore = ARGV[2].split(',')
else
  ignore = []
end

n = 0
while n <= t.maxpin
  if !ignore.include?(n.to_s) then
    if opt == "in" then
      t.setflags(n, BsdGpio::INPUT)
    else
      t.setflags(n, BsdGpio::OUTPUT)
    end
    if opt == "1" || opt == "check" then
      t.set(n, 1)
      o = t.get(n)
    end
    if opt == "0" || opt == "check" then
      t.set(n, 0)
      z = t.get(n)
    end
    if opt == "check" then
      if z == 0 && o == 1
        p n.to_s + " OK" 
      else
        p n.to_s + " NG" 
      end
    end
  end
  n = n + 1
end

第一引数がデバイス番号で第二引数が0,1,check,inのどれかで、すべてを0か1にするか、checkはOUTした0,1が読めるかのチェックになり、inはすべてINPUTにします。

mediatekのSOCはpinコントロールでGPIO以外の設定になっている場合は、checkでNGになります。GPIOでもスイッチなどの入力系はエラーになる事があります。

第三引数はある場合は、カンマ区切りの無視リストです。これはGPIOを設定してしまうとリセットするようなポートがある場合に使います。

# ./gpio.rb 1 check 0,3

のように使います。

このスクリプトであたりをつけてgpioctlコマンドで個別の確認を行います。

linux方面のdtsファイルがあればそれを参考にすると良いです。

これでやっとUSBのPowerのコントロールが見つかりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0