ネジはミスミで買う事にした

M5 の 30mm のネジがやっぱり欲しいなということで、ミスミだといくらかなと見てみました。

10300240130

ACB5-30 がお安くて、よさげ。数を入れて値段を見てみると、

まず、1本だと、221円。

ACB5-30|六角穴付ボルト 全ねじタイプ|ミスミ|MISUMI-VONA【ミスミ】 2

50本だと、1050円

ACB5-30|六角穴付ボルト 全ねじタイプ|ミスミ|MISUMI-VONA【ミスミ】 4

100本だと、なんと800円

ACB5-30|六角穴付ボルト 全ねじタイプ|ミスミ|MISUMI-VONA【ミスミ】 3

ということで、100本も使いませんが、ぽちっとしました。HNT3-ST3B-M5|六角ナット_3種|SUNCO|MISUMI-VONA【ミスミ】_と_注文の詳細___MISUMI-VONA

ナットもワッシャーもゲットして、送料無料であさってには到着というお手軽さ。神です。ネジ以外もこれからたくさんお世話になるはずです。ただ、価格のソートがないのがおしいです。最終的に価格が安いのを検討しますから。

 

と、記載している内にエヌアイシ・オートテックの三角アルミフレームが到着しました。400mm で購入。平らな面があるので、こっちの三角フレームに軍配があがったわけです。

MISUMI-VONA

梱包も丁重でさすが日本製。中国からの梱包とはグレードがぜんぜん違います。そして、このフレームものすごく良さそうです。ヘビー級とあるだけあって、肉厚も十分。ずっしりと重いです。20mmのも、40mm のもどちらもハイクオリティー。

良い xy テーブルが出来ると思います。今週、土日含めて楽しみが増えました。

あと、NSK と NTN の国産ベアリングも比較のため、3個分のローラー作る6個をゲット。どのくらいクオリティーが高いでしょうか?

広告

SDCard16GB 来たのでRasbian Jessie 入れてみた

SDCard の16GB のテスト代わりに、RasPi に Raspbian Jessie を入れてベンチマークしてみました。

 

環境はこんな感じ。

# uname -a
Linux raspberrypi 4.1.13-v7+ #826 SMP PREEMPT Fri Nov 13 20:19:03 GMT 2015 armv7l GNU/Linux

で、ベンチマーク

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: raspberrypi: GNU/Linux
   OS: GNU/Linux -- 4.1.13-v7+ -- #826 SMP PREEMPT Fri Nov 13 20:19:03 GMT 2015
   Machine: armv7l (unknown)
   Language: en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968")
   CPU 0: ARMv7 Processor rev 5 (v7l) (0.0 bogomips)
          
   CPU 1: ARMv7 Processor rev 5 (v7l) (0.0 bogomips)
          
   CPU 2: ARMv7 Processor rev 5 (v7l) (0.0 bogomips)
          
   CPU 3: ARMv7 Processor rev 5 (v7l) (0.0 bogomips)
          
   23:14:27 up 11 min,  3 users,  load average: 0.23, 0.16, 0.10; runlevel 5

------------------------------------------------------------------------
Benchmark Run: 月  2月 01 2016 23:14:27 - 23:42:32
4 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       13364099.5 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     1935.3 MWIPS (9.9 s, 7 samples)
Execl Throughput                               1438.9 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        136337.7 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           38047.7 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        359110.7 KBps  (30.0 s, 2 samples)
Pipe Throughput                              788483.7 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 141326.6 lps   (10.0 s, 7 samples)
Process Creation                               3012.6 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   3025.1 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                    406.0 lpm   (60.2 s, 2 samples)
System Call Overhead                        1760060.4 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   13364099.5   1145.2
Double-Precision Whetstone                       55.0       1935.3    351.9
Execl Throughput                                 43.0       1438.9    334.6
File Copy 1024 bufsize 2000 maxblocks          3960.0     136337.7    344.3
File Copy 256 bufsize 500 maxblocks            1655.0      38047.7    229.9
File Copy 4096 bufsize 8000 maxblocks          5800.0     359110.7    619.2
Pipe Throughput                               12440.0     788483.7    633.8
Pipe-based Context Switching                   4000.0     141326.6    353.3
Process Creation                                126.0       3012.6    239.1
Shell Scripts (1 concurrent)                     42.4       3025.1    713.5
Shell Scripts (8 concurrent)                      6.0        406.0    676.6
System Call Overhead                          15000.0    1760060.4   1173.4
                                                                   ========
System Benchmarks Index Score                                         491.8

あら、なんか速いんじゃないでしょうか?

以前計測したときは、400ちょい超えたくらいだったはずです。

INA226 を RasPi の ruby でi2c

PCB が組みあがったのですが、これを RasPi で i2c するサンプルをググってみたら、いくつかありました。

RasPi は、i2c が使えるようにモジュールをロードしておきました。RasPi でi2c は初めて使います。無事に出来るでしょうか?

# lsmod
Module                  Size  Used by
★i2c_dev                 6027  0 
cfg80211              386508  0 
rfkill                 16651  1 cfg80211
rpcsec_gss_krb5        20958  0 
nfsd                  263569  2 
snd_bcm2835            18649  0 
snd_pcm                73475  1 snd_bcm2835
snd_seq                53078  0 
snd_seq_device          5628  1 snd_seq
snd_timer              17784  2 snd_pcm,snd_seq
snd                    51038  5 snd_bcm2835,snd_timer,snd_pcm,snd_seq,snd_seq_device
★i2c_bcm2708             4990  0 
joydev                  8879  0 
spi_bcm2708             5137  0 
evdev                   9950  2 
uio_pdrv_genirq         2958  0 
uio                     8119  1 uio_pdrv_genirq

 

先輩たちがサンプルコードは書いているはずなので、探したところ、python でやるのとか、ruby でやるのとかがすぐ見つかりました。

とりあえず、動作確認したいので以下のサイトのコードを参考に必要な部分だけ使わせてもらいました。

Rabbit Note

BeagleBone Black で作るロギング機能付き電力計 (ソフト編)

BeagleBone Black(BBBと略するようです)での環境ですが、大変参考になりました。

使わせていただいたコードは最下部に付けておきます。で、配線は写真のようにちょっと雑ですが配線。負荷には、ちっさいファンをつけてみました。

SingleShot0023 スレーブアドレスは、何も設定しないと、0x40 が設定されるようです。

# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --  

 

プログラムを起動すると、以下のようになります。

# ./test.ruby
--------- 2016/01/25, 01:33:22
4.78125 V
151 mA
0.29 W
--------- 2016/01/25, 01:33:22
4.78125 V
151 mA
0.289 W
--------- 2016/01/25, 01:33:23
4.78875 V
152 mA
0.291 W
--------- 2016/01/25, 01:33:23
4.7875 V
151 mA
0.29 W
--------- 2016/01/25, 01:33:24
4.7875 V
150 mA
0.289 W
--------- 2016/01/25, 01:33:24
4.7875 V
151 mA
0.29 W
--------- 2016/01/25, 01:33:25
4.79 V
152 mA
0.292 W

負荷にLED を点けてみると、以下のようです。

# ./test.ruby 
--------- 2016/01/25, 01:35:31
4.88 V
2 mA
0.005 W
--------- 2016/01/25, 01:35:31
4.88 V
2 mA
0.005 W
--------- 2016/01/25, 01:35:31
4.9125 V
2 mA
0.005 W
--------- 2016/01/25, 01:35:32
4.91375 V
2 mA
0.005 W
--------- 2016/01/25, 01:35:32
4.91375 V
2 mA
0.005 W

 

まだあまりちゃんと理解していませんが、内部のレジスタの ox05 に、キャリブレーションする設定値を入れるようです。

以下の C のサンプルコードから、シャント抵抗に0.025R を使っている場合は、以下のように計算した16進数を入れればよいようです。書き込むとき、以下のコードでは、リトルエンディアンに変換していました。

https://github.com/jarzebski/Arduino-INA226/blob/master/INA226.cpp

0.025Ω = 0.00512/(0.025*0.0001)=2048 = 0x08 0x00

 

0x05 の補正レジスタを見てみると、

# i2cget -y 1 0x40 0x05 w

0x0008

という値が帰ってきました。

 

さて、そんな感じでとりあえずコードは以下のようにしてみました。

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
 
IOCTL_I2C_SLAVE = 0x0703
 
# Script for power meter using the following parts
# - Power Meter module (IC: INA226)

# # i2cdetect -y 1
#      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
# 00:          -- -- -- -- -- -- -- -- -- -- -- -- --
# 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
# 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
# 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
# 40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
# 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
# 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
# 70: -- -- -- -- -- -- -- --

class PowerSenseor
  def initialize(i2c_bus=1, dev_addr=0x40)
    @i2c = File.open(sprintf('/dev/i2c-%d', i2c_bus), 'rb+')
    @i2c.ioctl(IOCTL_I2C_SLAVE, dev_addr)

    @dev_addr = dev_addr
    @v_val = 0
    @c_val = 0
    @p_val = 0

    # shunt resistor = 0.002Ω = 0.00512/(0.002*0.001)=2560 = 0x0a 0x00
    #                  0.025Ω = 0.00512/(0.025*0.0001)=2048 = 0x08 0x00
    #   内部レジスタ[0x04] (Current) = 内部レジスタ[0x01]×内部レジスタ[0x05] / 2048
    exec_cmd("i2cset -y 1 0x#{dev_addr.to_s(16)} 0x05 0x08 0x00 i")
    # conversion time = 332us, number of average = 16
    exec_cmd("i2cset -y 1 0x#{dev_addr.to_s(16)} 0x00 0x04 0x97 i")
  end

  def sense
    # i2cset/i2cget は 10ms オーダーの時間を消費するのでここでは使用しない 
    @i2c.write(0x02)
    @v_val = conver_signed(@i2c.read(2))

    # 0x04 電流レジスタ
    @i2c.write(0x04)
    @c_val = conver_signed(@i2c.read(2))

    # 0x03 Powerレジスタ
    @i2c.write(0x03)
    @p_val = conver_signed(@i2c.read(2))
  end

  def conver_signed(bytes)
    # convert endian
    return bytes.unpack('n').pack('S').unpack('s')[0].abs
  end

  def get_voltage
    return calc_voltage(@v_val)
  end

  def get_current
    return calc_current(@c_val)
  end

  def get_power
    return calc_power(@p_val)
  end

  def exec_cmd(cmd)
    val=`#{cmd} 2> /dev/null`
    raise StandardError, "FAIL: #{cmd}" unless $?.success?
    return val
  end

  def calc_voltage(v_val)
    return v_val * 1.25 / 1000.0
  end

  # 0x04 電流レジスタ
  def calc_current(c_val)
    return c_val / 10
  end

  # 0x03 Powerレジスタ
  def calc_power(p_val)
    # return p_val * 0.025
    return p_val * 0.001
  end
end

require 'optparse'
params = ARGV.getopts('lq')

data_list = []

Signal.trap(:INT){
  if params['l'] then
    printf("time,voltage,current,power\n")
    data_list.each{|data|
      printf("%10d,%.3f,%.3f,%.3f\n", data[0], data[1], data[2], data[3])
    }
  end
  exit(0)
}

sensor = PowerSenseor.new
require "date"

start_time = Time.now
i = 0
while true
  sensor.sense
  v = sensor.get_voltage
  c = sensor.get_current
  p = sensor.get_power

  dt = DateTime.now
  print "--------- "
  print(dt.strftime("%Y/%m/%d, %H:%M:%S"), "\n")

  print v
  print " V\n"
  print c
  print " mA\n"
  print p
  print " W\n"

  if ((i & 0x7F) == 0) then

  else
    sleep 0.5
  end
  i = (i & 0xff) + 1
end

 

▼まとめ

・0x05 にシャント抵抗値を入れた補正値を書き込む

・書き込む最は、16進をリトルエンディアンにして書き込む

・0x04 はPowerレジスタで、0x04 は電流レジスタ。

・LSB ってなに?

・ちっこい今使っているファンは、150mA くらい使っていて0.3W ほど

・c のサンプルはすぐに見つからなかったけども、どうんな感じになるんだろう?

・自分で作ったハードが動いてうれしぃ!

・レジスタって、どういう回路なの? どういう仕組みで覚えているんだろう?

ぽちったモノ

正月あけてから、ものすごく眠くてほとんど作業が進まずモンモンとしています。

そんな中、やる気を出すために以下の2点を購入。1つは、SDCard の8GB でクラスUHS-1(Class10)のもの。340円だったので3枚ぽちりました。

sdcard8g

aliexpress で sdcard は結構チャレンジな感じですが、一度試してみることに。日本からだと微妙に8GB くらいの容量で安いのがなくて。OrangePI One 用に先に購入しておくことに。

 

あと、もう1つは、マイクロスコープ。当初作ろうと思っていたのですが、安くて良さそうな素材の CCD がなくて、以下のが安くなっていたのでゲット。チェック時は5000円以上していまいたが、3660 円ほどだったので、ぽちっと。ぱっと見は、アルミ素材っぽく長く使えそうな感じですが、解像度や実際の品質は来てからじゃないと不明。

a

osx でも使えるとのことですが、果たしてどうでしょうか? PCB の半田付けやパーツの方向チェックなど、画面でも見れていいかなぁと。

b

osx で使う場合はそのことを教えてねとありましたが、ドライバとかosx 用のをつけてくれるんでしょうかね?

これが到着したら、PCB 半田付けを頑張ることに。

OrangePi PC をクロックダウン

OPI PC にファンをつけて、ついでに sccript.bin を作り直して1.5MHz から1.2MHz にクロックダウンして運用していますが、CPU 温度は30度から40 度を推移しているようです。

h3_temp-day-2

この状態でベンチマークがどのくらいいくかテストしてみました。

   ========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)
   System: OrangePi: GNU/Linux
   OS: GNU/Linux -- 3.4.39-01-lobo -- #1 SMP PREEMPT Sun Oct 25 14:46:41 CET 2015
   Machine: armv7l (armv7l)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   07:17:03 up 44 min,  2 users,  load average: 1.56, 1.61, 1.56; runlevel 3
   ------------------------------------------------------------------------
   Benchmark Run: Sun Jan 03 2016 07:17:03 - 07:46:42
   0 CPUs in system; running 4 parallel copies of tests
   ::
   System Benchmarks Index Values               BASELINE       RESULT    INDEX
   Dhrystone 2 using register variables         116700.0   17298899.9   1482.3
   Double-Precision Whetstone                       55.0       2969.0    539.8
   Execl Throughput                                 43.0       1464.1    340.5
   File Copy 1024 bufsize 2000 maxblocks          3960.0     149424.6    377.3
   File Copy 256 bufsize 500 maxblocks            1655.0      45277.4    273.6
   File Copy 4096 bufsize 8000 maxblocks          5800.0     380747.9    656.5
   Pipe Throughput                               12440.0     911007.9    732.3
   Pipe-based Context Switching                   4000.0     124699.6    311.7
   Process Creation                                126.0       3414.8    271.0
   Shell Scripts (1 concurrent)                     42.4       1865.6    440.0
   Shell Scripts (8 concurrent)                      6.0        307.0    511.6
   System Call Overhead                          15000.0    2100567.0   1400.4
   ========
   System Benchmarks Index Score                                         516.5

おおよそ、RasPi2 より少し速い500ポイントちょいのスコアです。クロックダウンする前は、600ちょいだったので、すこし遅くなった感じですね。

 

実際にサーバとして仮運用していますので、レスポンスなど見たい方は以下にアクセスしてみてください。昨年からテストで運用しています。

Fedora22 OrangePi PC

http://junkhack.gpl.jp/

・NGINX + php-fpm + MariaDB

そこそこ重めのアプリケーションのWordPress が動作しています。ネットワーク的には、サーバからの下りは帯域は絞られていると思いますので差し引いてみてください。今のところ、そこそこストレスなく動作しています。

 

当初、OpenStack として勉強用に使おうと思っていたのですが、何年ぶりかで自宅サーバを運用してみたら面白くてOpenStack の構成の検証に環境を壊したくないなぁという感じです。もう一台ほしいなぁと。

WEBを散歩しているとなにやら、Orange pi Oneという10ドルくらいのものも発売されるということで、すこし様子見をしています。

CNXSoft

Orange Pi One is a $10 Quad Core Board with Ethernet and HDMI

Orange_Pi_One

どうやら、WIFI 付きモデルと、10/100M Ethernet モデルが出るようです。なかなか面白そうです。比較表は、OSAKANA TARO さんのページにあります。

OSAKANA TARO のメモ帳

Orange Pi ONEの詳細が出た!

CPU は、今のと同じ 6ドルの H3 (4core)を使うようです。これで、9.99ドルで出せるとはほぼ原価並の価格ですね。メーカ(Shenzhen Xunlong Software)は、かなり大量にパーツを購入しているんでしょう。とにかくこれは出たら買いです。

 

OpenStack Ironic としてベアメタルな構成を考えているのですが、動作に必要な PXE Boot の実験がまだ終わっていません。まだ、OpenStack 自体もあまり良くわかっていないのですが、おそらくベアメタルをコントロールする際に、PXE Boot が必要になると思います。あとIPMI で電源とかなにか操作するようです。このあたりの検証もしないといけません。おそらく、なにか工夫する必要があると思っています。

 

5台くらいの構成で考えているのですが、安いほうがいいよねということで、Orange pi Oneが出てから考えたいなぁと思っています。5000円くらいで、最小構成を目指して OpenStack のベアメタルを勉強してみたいと思っています。

 

まとめ

・クロックを1.2Mhz にダウンさせるとベンチマークは500ちょい

・ヒートシンクと、ファンをつけた状態でアイドル時、温度は30度から40度を推移

・負荷をかけると50度ちょいくらい

・追加購入は、OrangePi PC の15ドルより安い9.99ドルの Orange Pi One というのが出るまで待ち

・U-Boot する仕組みを勉強してみる

Funの効果は、-15度!

ちょっと、orange pi pc で作業をしようと思い、ファンの電源をONにしました。

すると、やっぱりかなり効果があったようで、15度は下がっています。

h3_temp-day-1

※途中、空白なのはmunin の設定変えたけど再起動してなかった

今、CPUクロックが最高で1.5GHz くらいまであがる設定なので、速いですが温度もあがるようです。

cpuspeed-day

途中、コンパイルしていて1.5Ghz まで上がっていますが温度は、50度くらいのようです。これで少し安心して作業ができますね。さすがに、80度とかちょっと心配になるので。上限のクロックを下げるという方法もあるのですが、どうせならぶん回したいので。

 

クロックを下げるには、/sys 配下のscaling_max_freq と scaling_min_freq に起動したら設定を入れておく方法と、ブート領域のパラメータを持っているscrpt.bin で指定する方法があるようです。

以下のページが参考になります。

Sunxi Wiki
Orange Pi PC
http://linux-sunxi.org/Orange_Pi_PC#CPU_clock_speed_limit

当初、まったく意味不明だったのですがどうやら、sdCard のブート領域にあるscript.bin がuImage に渡すパラメータを持っているようです。今、動作させているのは loborisさんが作ったものですが、以下のようになっています。

 

このscript.bin をfex2bin というツールで展開すると見れます。

Sunxi-tools
http://linux-sunxi.org/Sunxi-tools#bin2fex

以下のようにして、実機でビルドしました。

# dnf install libusbx-devel
$ cd /usr/local/src/BUILD
$ git clone https://github.com/linux-sunxi/sunxi-tools
$ cd sunxi-tools/
$ LANG=C make

今後も使うと思うので、パスが切れているところに入れておきます。

sudo cp -pr ./bin2fex /usr/local/bin
sudo cp -pr ./fex2bin /usr/local/bin
sudo cp -pr ./sunxi-* /usr/local/bin

sudo chown root.root /usr/local/bin/bin2fex
sudo chown root.root /usr/local/bin/fex2bin
sudo chown root.root /usr/local/bin/sunxi-*

で、以下のように使うようです。

$ bin2fex script.bin lobo.fex

この中はパラメータがたくさん書かれたもので、最大と最小が以下のように指定されていました。

[dvfs_table]
pmuic_type = 2
pmu_gpio0 = port:PL06<1><1><2><1>
pmu_level0 = 11300
pmu_level1 = 576
extremity_freq = 1536000000
max_freq = 1536000000
min_freq = 480000000
LV_count = 8
LV1_freq = 1536000000
LV1_volt = 1500
LV2_freq = 1200000000
LV2_volt = 1300
LV3_freq = 0
LV3_volt = 1100
LV4_freq = 0
LV4_volt = 1100
LV5_freq = 0
LV5_volt = 1100
LV6_freq = 0
LV6_volt = 1100
LV7_freq = 0
LV7_volt = 1100
LV8_freq = 0
LV8_volt = 1100

このファイルは、.fex というのが通り名称のようです。sunxi の git リポジトリに昨年の12月22日にリリースされた.fex ファイルは以下にあります。

sunxi-boards/sys_config/h3/

https://github.com/linux-sunxi/sunxi-boards/tree/master/sys_config/h3

現在の、script.bin の内容と比較すると以下のようです。

[junkhack@OrangePi BUILD]$ mkdir tmp_boot
[junkhack@OrangePi BUILD]$ cp -pr /media/boot/* tmp_boot/
[junkhack@OrangePi BUILD]$ ll tmp_boot/
::
-rwxr-xr-x 1 501 root    35812 12月 19 14:29 script.bin
-rwxr-xr-x 1 501 root 10917600 12月 19 14:29 uImage
[junkhack@OrangePi BUILD]$ 
[junkhack@OrangePi BUILD]$ cp -p ./sunxi-boards/sys_config/h3/xunlong_orange_pi_pc.fex tmp_boot/
[junkhack@OrangePi BUILD]$ cd tmp_boot/

[junkhack@OrangePi tmp_boot]$ bin2fex script.bin lobo.fex

[junkhack@OrangePi tmp_boot]$ diff -up lobo.fex xunlong_orange_pi_pc.fex > lobo_opipc.patch

違いは以下のようです。

—- lobo_opipc.patch

--- lobo.fex    2016-01-03 04:30:34.000000000 +0900
+++ xunlong_orange_pi_pc.fex    2016-01-03 04:10:45.000000000 +0900
@@ -8,7 +8,8 @@ eraseflag = 1
 next_work = 2
 
 [target]
-boot_clock = 1536
+#boot_clock = 1008
+boot_clock = 1200
 storage_type = -1
 
 [key_detect_en]
@@ -146,7 +147,7 @@ twi_scl = port:PA11<2><default><default>
 twi_sda = port:PA12<2><default><default><default>
 
 [twi1]
-twi_used = 1
+twi_used = 0
 twi_scl = port:PA18<3><default><default><default>
 twi_sda = port:PA19<3><default><default><default>
 
@@ -165,14 +166,14 @@ uart_rx = port:PA05<2><1><default><defau
 [uart1]
 uart_used = 0
 uart_port = 1
-uart_type = 2
+uart_type = 4
 uart_tx = port:PG06<2><1><default><default>
 uart_rx = port:PG07<2><1><default><default>
 uart_rts = port:PG08<2><1><default><default>
 uart_cts = port:PG09<2><1><default><default>
 
 [uart2]
-uart_used = 1
+uart_used = 0
 uart_port = 2
 uart_type = 4
 uart_tx = port:PA00<2><1><default><default>
@@ -181,16 +182,16 @@ uart_rts = port:PA02<2><1><default><defa
 uart_cts = port:PA03<2><1><default><default>
 
 [uart3]
-uart_used = 1
+uart_used = 0
 uart_port = 3
-uart_type = 2
+uart_type = 4
 uart_tx = port:PA13<3><1><default><default>
 uart_rx = port:PA14<3><1><default><default>
 uart_rts = port:PA15<3><1><default><default>
 uart_cts = port:PA16<3><1><default><default>
 
 [spi0]
-spi_used = 1
+spi_used = 0
 spi_cs_bitmap = 1
 spi_mosi = port:PC00<3><default><default><default>
 spi_miso = port:PC01<3><default><default><default>
@@ -209,50 +210,66 @@ spi_miso = port:PA16<2><default><default
 spi_dev_num = 1
 
 [spi_board0]
-modalias = "spidev"
+modalias = "m25p32"
 max_speed_hz = 33000000
 bus_num = 0
 chip_select = 0
 mode = 0
-full_duplex = 1
-manual_cs = 0
 
 [gpio_para]
 gpio_used = 1
-gpio_num = 19
-gpio_pin_1 = port:PL10<1><default><default><0>
-gpio_pin_2 = port:PA15<1><default><default><1>
-gpio_pin_3 = port:PA06<1><default><default><0>
-gpio_pin_4 = port:PA13<1><default><default><0>
-gpio_pin_5 = port:PA14<1><default><default><0>
-gpio_pin_6 = port:PD14<1><default><default><0>
-gpio_pin_7 = port:PA03<1><default><default><0>
-gpio_pin_8 = port:PC04<1><default><default><0>
-gpio_pin_9 = port:PC07<1><default><default><0>
-gpio_pin_10 = port:PC03<1><default><default><0>
-gpio_pin_11 = port:PA21<1><default><default><0>
-gpio_pin_12 = port:PA07<1><default><default><0>
-gpio_pin_13 = port:PA08<1><default><default><0>
-gpio_pin_14 = port:PG08<1><default><default><0>
-gpio_pin_15 = port:PA09<1><default><default><0>
-gpio_pin_16 = port:PA10<1><default><default><0>
-gpio_pin_17 = port:PG09<1><default><default><0>
-gpio_pin_18 = port:PG06<1><default><default><0>
-gpio_pin_19 = port:PG07<1><default><default><0>
-
-[led_assign]
-normal_led = "gpio_pin_2"
-standby_led = "gpio_pin_1"
+gpio_num = 30
+; gpio_pin_1 = port:PL10<1><default><default><1>
+; gpio_pin_2 = port:PA15<1><default><default><0>
+gpio_pin_3 = port:PA12<1><default><default><0>
+gpio_pin_4 = port:PA11<1><default><default><0>
+gpio_pin_5 = port:PA06<1><default><default><0>
+gpio_pin_6 = port:PA13<1><default><default><0>
+gpio_pin_7 = port:PA14<1><default><default><0>
+gpio_pin_8 = port:PA01<1><default><default><0>
+gpio_pin_9 = port:PD14<1><default><default><0>
+gpio_pin_10 = port:PA00<1><default><default><0>
+gpio_pin_11 = port:PA03<1><default><default><0>
+gpio_pin_12 = port:PC04<1><default><default><0>
+gpio_pin_13 = port:PC07<1><default><default><0>
+gpio_pin_14 = port:PC00<1><default><default><0>
+gpio_pin_15 = port:PC01<1><default><default><0>
+gpio_pin_16 = port:PA02<1><default><default><0>
+gpio_pin_17 = port:PC02<1><default><default><0>
+gpio_pin_18 = port:PC03<1><default><default><0>
+gpio_pin_19 = port:PA21<1><default><default><0>
+gpio_pin_20 = port:PA19<1><default><default><0>
+gpio_pin_21 = port:PA18<1><default><default><0>
+gpio_pin_22 = port:PA07<1><default><default><0>
+gpio_pin_23 = port:PA08<1><default><default><0>
+gpio_pin_24 = port:PG08<1><default><default><0>
+gpio_pin_25 = port:PA09<1><default><default><0>
+gpio_pin_26 = port:PA10<1><default><default><0>
+gpio_pin_27 = port:PG09<1><default><default><0>
+gpio_pin_28 = port:PA20<1><default><default><0>
+gpio_pin_29 = port:PG06<1><default><default><0>
+gpio_pin_30 = port:PG07<1><default><default><0>
+
+;[led_assign]
+;normal_led = "gpio_pin_2"
+;standby_led = "gpio_pin_1"
+
+[leds_para]
+leds_used = 1
+green_led = port:PL10<1><default><default><0>
+green_led_active_low = 0
+red_led = port:PA15<1><default><default><0>
+red_led_active_low = 0
 
 [ths_para]
 ths_used = 1
-ths_trip1_count = 5
-ths_trip1_0 = 75
-ths_trip1_1 = 85
-ths_trip1_2 = 90
-ths_trip1_3 = 100
-ths_trip1_4 = 105
-ths_trip1_5 = 0
+ths_trip1_count = 6
+ths_trip1_0 = 70
+ths_trip1_1 = 80
+ths_trip1_2 = 85
+ths_trip1_3 = 90
+ths_trip1_4 = 95
+ths_trip1_5 = 100
 ths_trip1_6 = 0
 ths_trip1_7 = 0
 ths_trip1_0_min = 0
@@ -264,21 +281,22 @@ ths_trip1_2_max = 3
 ths_trip1_3_min = 3
 ths_trip1_3_max = 4
 ths_trip1_4_min = 4
-ths_trip1_4_max = 4
-ths_trip1_5_min = 0
-ths_trip1_5_max = 0
+ths_trip1_4_max = 5
+ths_trip1_5_min = 5
+ths_trip1_5_max = 5
 ths_trip1_6_min = 0
 ths_trip1_6_max = 0
 ths_trip2_count = 1
 ths_trip2_0 = 105
 
 [cooler_table]
-cooler_count = 5
-cooler0 = "1536000 4 4294967295 0"
+cooler_count = 6
+cooler0 = "1296000 4 4294967295 0"
 cooler1 = "1200000 4 4294967295 0"
 cooler2 = "1008000 4 4294967295 0"
-cooler3 = "816000 3 4294967295 0"
-cooler4 = "504000 1 4294967295 0"
+cooler3 =  "816000 4 4294967295 0"
+cooler4 =  "648000 4 4294967295 0"
+cooler5 =  "480000 1 4294967295 0"
 
 [nand0_para]
 nand_support_2ch = 0
@@ -316,17 +334,15 @@ hdmi_mode_check = 1
 disp_init_enable = 1
 disp_mode = 0
 screen0_output_type = 3
-screen0_output_mode = 10
+screen0_output_mode = 4
 screen1_output_type = 3
-screen1_output_mode = 10
+screen1_output_mode = 4
 fb0_format = 0
 fb0_width = 0
 fb0_height = 0
 fb1_format = 0
 fb1_width = 0
 fb1_height = 0
-fb0_framebuffer_num = 3
-sunxi_fb_mem_reserve = 32
 
 [hdmi_para]
 hdmi_used = 1
@@ -340,6 +356,7 @@ tv_dac_src0 = 0
 [pwm0_para]
 pwm_used = 0
 pwm_positive = port:PA05<3><0><default><default>
+;       If set gamc_phy to use = 2
 
 [gmac0]
 gmac_used = 2
@@ -500,8 +517,8 @@ smc_sda = port:PA08<2><default><default>
 
 [usbc0]
 usb_used = 1
-usb_port_type = 1
-usb_detect_type = 0
+usb_port_type = 2
+usb_detect_type = 1
 usb_id_gpio = port:PG12<0><1><default><default>
 usb_det_vbus_gpio = port:PG12<0><1><default><default>
 usb_drv_vbus_gpio = port:PL02<1><0><default><0>
@@ -693,31 +710,54 @@ ir_addr_code12 = 65344
 ir_used = 1
 ir_tx = port:PH07<2><default><default><default>
 
+;----------------------------------------------------------------------------------
+; dvfs voltage-frequency table configuration
+;
+; pmuic_type:0:none, 1:gpio, 2:i2c
+; pmu_gpio0: gpio config.
+; pmu_levelx: 0~9999: voltage(mV), 10000~90000:gpio0 state. voltage form high to low.
+;
+; extremity_freq(Hz): cpu extremity frequency when run benckmark or demo apk
+;                     1536MHz@1500mV with radiator, 1296MHz@1340mV without radiator
+; max_freq: cpu maximum frequency, based on Hz, can not be more than 1200MHz
+; min_freq: cpu minimum frequency, based on Hz, can not be less than 60MHz
+;
+; LV_count: count of LV_freq/LV_volt, must be < 16
+;
+; LV1: core vdd is 1.50v if cpu frequency is (1296Mhz,  1536Mhz]
+; LV2: core vdd is 1.34v if cpu frequency is (1200Mhz,  1296Mhz]
+; LV3: core vdd is 1.32v if cpu frequency is (1008Mhz,  1200Mhz]
+; LV4: core vdd is 1.20v if cpu frequency is (816Mhz,   1008Mhz]
+; LV5: core vdd is 1.10v if cpu frequency is (648Mhz,    816Mhz]
+; LV6: core vdd is 1.04v if cpu frequency is (0Mhz,      648Mhz]
+; LV7: core vdd is 1.04v if cpu frequency is (0Mhz,      648Mhz]
+; LV8: core vdd is 1.04v if cpu frequency is (0Mhz,      648Mhz]
+;
+;----------------------------------------------------------------------------------
 [dvfs_table]
 pmuic_type = 2
 pmu_gpio0 = port:PL06<1><1><2><1>
 pmu_level0 = 11300
-pmu_level1 = 576
-extremity_freq = 1536000000
-max_freq = 1536000000
-min_freq = 480000000
+pmu_level1 = 1100
+max_freq = 1296000000
+min_freq = 648000000
 LV_count = 8
-LV1_freq = 1536000000
-LV1_volt = 1500
+LV1_freq = 1296000000
+LV1_volt = 1340
 LV2_freq = 1200000000
-LV2_volt = 1300
-LV3_freq = 0
-LV3_volt = 1100
-LV4_freq = 0
+LV2_volt = 1320
+LV3_freq = 1008000000
+LV3_volt = 1200
+LV4_freq = 816000000
 LV4_volt = 1100
-LV5_freq = 0
-LV5_volt = 1100
+LV5_freq = 648000000
+LV5_volt = 1040
 LV6_freq = 0
-LV6_volt = 1100
+LV6_volt = 1040
 LV7_freq = 0
-LV7_volt = 1100
+LV7_volt = 1040
 LV8_freq = 0
-LV8_volt = 1100
+LV8_volt = 1040
 
 [gpu_dvfs_table]
 G_LV_count = 3
@@ -797,13 +837,3 @@ din_gpio = port:PD00<1><default><default
 clk_gpio = port:PD01<1><default><default><1>
 stb_gpio = port:PD02<1><default><default><1>
 
-[mali_para]
-mali_used = 1
-mali_clkdiv = 1
-mali_extreme_freq = 600
-mali_extreme_vol = 1400
-
-[w1_para]
-w1_used = 1
-gpio = 20
-

ファンがなくても、まぁいいようにクロックダウンしたほうが良さそうですね。ということで、fex2bin で作ったscript.bin でリブートしておきました。しばらくこれで様子をみることに。

 

▼まとめ

・script.bin は、bin2fex や fex2bin で取り扱う

・これがブート領域からkernel に引き渡すパラメータを持っている模様

・VDD を1.34vで扱うLV2 が安全の模様

・*.txt から読み込むようにする u-boot イメージはどうやって作るのか?

・あるいは、今でも kernel に渡す方法があるのかも。

・sunxi からのfex ファイルには gpio ピンのマッピングも追加変更されているようだ

・ヒートシンク+ファンをつければ、40度くらいまでアイドル時になるようで、負荷時は60度くらいかな?

・ファンの効果は絶大だけれども、もう少し設定を下げて運用しようかと思う。