格安SPI/I2C ReaderをLinuxで使う

仕事で SPI Flash の読み書きが必要になって、個人的にもSPI Flashのライターが欲しいなと思っていたので、色々と探してみたらAmazonで格安のSPI Flash / I2C リーダライタ を発見。

買ったときの値段は忘れてしまったけど、現在の価格は送料込みでたったの 325円 !!
怪しいくらい安い。でもこのくらいなら失敗しても痛くないので買ってみた。
中国からの発送で2週間位かかったと思う。

見た目はこんな感じ。写真は撮ってないけど他にもSOP-DIPのピッチ変換基板が付いてきた。

こういうDIPソケットってめちゃくちゃ高かった気がするから、貧相な安物だろうと思っていたら、ちゃんとTEXTOOLだった。すごいな。この値段っておかしくないか?

裏面はこんな感じ。

裏面のシルクのように、ソケットの位置でSPIフラッシュとI2CのEEPROMを使い分けるようになっている。TX, RXもあり、USBシリアルとしても使えるらしい。

Windows版のプログラムは以下からダウンロードできるみたい。おそらくここがオフィシャル?のツールだと思う。

英語ページよりも中国語ページのほうが内容が充実しているので、中国語ページをgoogle翻訳したものを見るといいかも。

ただ、上記でダウンロードできるツールは、いくつかのアンチウィルスソフトで「トロイの木馬」と検出されるらしい。誤検知らしいんだけど、こういう前例があると会社では使えないよね。

色々探してみると、Linux版のツールも見つかった。

SPI Flashライタツール

どちらも CLI のツール。flashromの方は ubuntu のリポジトリにも入っている。

flashromの方が対応しているFlashデバイスが多く、SFDP にも対応しているみたいなので、対応リストに入っていないFlashでも使える可能性は高い。基本的にはこちらを使っていれば問題はないと思う。

ただ、どちらのツールも4byteアドレスには対応していないので、16MBまでのFlashしか読み書きできない。
また、クロックがそれほど速くないせいか、大容量のFlashだと読み書きに結構時間がかかるようだ。

I2C EEPROMライタツール

Linux用で見つけられた唯一のツール。

24c32 と 24c64 にのみ対応している?のかな?
違う容量のEEPROMの場合はソースの修正が必要になるかも。

パーツボックスに転がっていた 24LC64 は問題なく Read/Writer/Erase できていそうだった。
24LC64 (8kB) で Read が 0.3 秒、 Erase が 3.3 秒、 Write も 3.3 秒だった。

USB I2C kernel driver

kernelドライバとして実装されているので、kernelが持っているI2Cデバイスのドライバ(温度センサやタッチパネルとか)が使える。

これは試してみてはいない。

USBシリアル kernel driver

USBシリアルのドライバとしてはすでにメインラインに取り込まれている。ubuntuでも使えるかも。

シリアルとSPI Flashライタツールを同時に使うことはできるのかなぁ。
kernelドライバとlibusbで同時に1つのデバイスを操作できるのだろうか。

 

軽く使ってみた感じでは、CLIであればLinuxでもまぁまぁ使えることがわかった。値段の割にはちゃんと使えるので、ライターが欲しい人にはいいかもしれない。

でも裸だと雑に扱えないからケースがほしいなぁ。アクリルで作ってみようかな。

ZeroPlus LAP-C の EEPROM を Linux から書き換える

なんの脈略もなくロジアナの改造ネタです。

ZEROPLUS 社製のロジアナ LAP-C の型番を書き換えるために Windows を起動したものの Windows7 では書き換え用のドライバがインストールできず、悔しくて Linux 用の書き換えツールを探したが、ちょっと使いにくかったので改造して github で公開したぜという話です。

 

だいぶ前に買って以来、部屋に技術者っぽい雰囲気を漂わせるためのオブジェとして大活躍だったロジアナの LAP-C16032 ですが、最近使いたい用途が出てきたので引っ張り出してきました。

それでふと、LAP-C16032 の内蔵 EEPROM を書き換えることで上位機種相当に改造できることを思い出して、本来の用途そっちのけでまず改造をすることにしました。

情報元は Illegal function call さんの以下のエントリです。

# Illegal function call とは何て懐かしい響き・・・

早速EEPROMを書き換えようとしたのですが、Windows 7 では上記エントリで配布されている libusb のドライバがインストールできませんでした。

Windows XP 機なんて持ってないし、XP mode インストールするのも面倒なので、Linux で書き換えることにしました。

上記エントリに

『今回はGL660USBを解析した外人さんがいるが、
元はLinux用だったり、ちょっと扱いが面倒なので、こんなソフトを作ってみた。』

って書いてあったので、元になる Linux のコードがあるんだろうと探してみたところ・・・見つけました。

zerominus という Linux から LAP-C を叩いて計測データを取り出そうというプロジェクトのようです。

そのプロジェクトの中に  zeroprog という EEPROM を読み書きするツールがあります。きっとこれが元ネタだと思います。

早速ビルドして使ってみました。

一応使えるのは使えるのですが、すんなりビルドできなかったり、バックアップはできるのにリストアができなかったり、バックアップファイルのエンディアンの問題でダンプが読みにくかったりと、いろいろ使いにくかったのでチャチャッと改良してみました。改造したコードは github で公開しています。

ビルド方法などは上記ベージの README.md に書いてあるので割愛します。

リトルエンディアンに変更しているのでバックアップファイルを hexdump すると、文字列が普通に読めます。

オリジナル zeroprog

00000010 5a 1b 52 45 50 4f 55 4c 20 53 65 54 68 63 6f 6e |Z.REPOUL SeThcon|
00000020 6f 6c 79 67 43 20 2c 4f 4c 2e 44 54 ff ff ff ff |olygC ,OL.DT....|

改造後 zeroprog

00000010 1b 5a 45 52 4f 50 4c 55 53 20 54 65 63 68 6e 6f |.ZEROPLUS Techno|
00000020 6c 6f 67 79 20 43 4f 2c 2e 4c 54 44 ff ff ff ff |logy CO,.LTD....|

また、一番重要な restore コマンド (-r) を実装したのでいくらでも失敗ができます。

–help で resutore コマンドが出てきていたのでてっきり使えると思って安心して書き換えていたのですが、いざ restore コマンドを使ったら

// not yet implemented, sorry

なんて冷たくあしらわれてしまったので、仕方なく実装しました。

で、結果的に Product ID と Model string を変更することで LAP-C16128 として問題なく動作させることができましたとさ。めでたしめでたし。

AD00031のネジを手回し式に交換

ここのところ AD00031 のネタが続いていますが、今回も AD00031 です。

秋葉原にオペアンプなどのパーツを買いに行ったついでに AD00031 の前面パネル用のネジを買ってきました。

いろいろなサイトで不評な前面パネルのネジですが、これを手回し式に変更します。電池交換するためにドライバーが必要になるためです。

ちなみに、電池交換の際にボリュームツマミの六角ネジは緩める必要はありません。ツマミがついたまま基板を引き出せます。

ということで秋葉原の西川電子部品(西川ネジ)で買ってきました。

ローレットネジ2種割付き段付きローレットねじ2種 (綾目、平目)

こういう手で回せるようのネジをローレットねじというそうです。
ツマミの滑り止めの加工の種類により綾目(菱型模様のもの)、平目(縦線模様のもの)の2種類があり、更にドライバーで回せるようなスリットがあるものは「割付き」というそうです。また、つまみ部分とネジ部分の間に段があるものは「段付き」というそうです。

ということで、M3x6mm の綾目、平目の割付き段付きローレットネジを2つづつ買ってきました。

計4つで税込 192 円でした。安いですね。

実はローレットネジですが、これで2個目なんです。最初に10mm の割なしのローレットネジを買ったのですが、2つの失敗がありました。

1つ目は、長すぎたこと。
AD00031 にもともと付いているネジは12mm くらいあるのですが、タッピングネジということもあり、ネジ山間が広いので少ない回転数で取り付けられます。しかし、このネジはネジ山が狭いので 10mm あるといくら回しても進まなくて大変でした。

2つ目は、割なしだったこと。
ケースのかみ合わせの部分をネジ止めする関係で、AD00031 を落としたり衝撃を加えるとネジが固く締まってしまい、手では回せなくなります。なのでそういう時でもドライバーで回せる割付きにしました。まぁペンチで回ばいいんですけどね。

ということで、6mm くらいの割付きのローレットネジをおすすめします。

装着するとこんな感じになります。

ローレットねじに交換ローレットネジに交換しました

平目より綾目のほうがカッコよかったので綾目にしました。

うーん、カッコイイ!! 高級感が増した気がします (^^)

ただ見て分かるとおり、AUDIO OUT とネジの距離が近いので、プラグ部分が大きいヘッドホンだと干渉してしまうかもしれません。ご注意ください。

AD00031のホワイトノイズをやっつける(その4)

すでにこのシリーズ4回目。 また AD00031 のホワイトノイズを減らすべく試行錯誤していきます。

前回までの検証で色々と部品を変更しても自分の耳では聞き分けられないという、ガッカリな耳の持ち主だったという結果でしたが、今回は部品の変更ではなく、回路をいじってみます。

ということでこの回路です。

AD00031の回路の概要

とりあえずよくわからない電流帰還部を取っ払ってみます。上側のループの抵抗です。基板上ではR4とR6です。

取り外して聞いてみると・・・。お、ホワイトノイズ減ってる
若干は残るもののほとんど気にならないレベルまでホワイトノイズが減りました。

そうなると電流測定用の抵抗(回路図一番右の抵抗)もいらないので外してジャンパーでショートさせます。

こんな感じ。

普通の電圧アンプ化AD00031 を電圧アンプ化(笑)

5つ並んでいる抵抗の真ん中を取り外し、上部のインピーダンス調整用の抵抗を抵抗の足でショートさせています。

おー。こりゃいいや。曲間のホワイトノイズが気にならない!!

でも電流帰還をしないとこのアンプの意味が・・・。

もともと AD00031 通して聴くのと iPod touch 直で聴くのとであまり違いがわからなかったので、これでもいいのかなぁ。いや、ますます iPod 直で良くなってしまうような・・・。

それにしても電流帰還するとなぜノイズが増えるんでしょうね。そこが分かれば解決の道も見いだせそうなんですが。

正帰還してるから?? ノイズとか誤差が正帰還されて増幅されちゃうのかなぁ。

とりあえず、しばらく電圧アンプ化した AD00031 で聞いてみようと思います。

AD00031のホワイトノイズをやっつける(その3)

前回前々回に引き続き、AD00031 の部品を取っ替え引っ替えしてノイズや音質が変わるか調べてみます。

電源ラインのコンデンサを変えてみる

前回のSEPP部のコンデンサに続いて、電源ラインのコンデンサです。

AC 電源の機器なら、リップルの除去効果や、スイッチングノイズの除去効果が変わるため、コンデンサを変えると電源ノイズが減って信号のノイズが減る・・・というのは分かりますが・・・リップルやスイッチングノイズが皆無の電池ですからねぇ。

電池を変えて違いが分からなかったのに、電源コンデンサの違いがわかると思えませんが、試してみます。

電源ラインのコンデンサは左右別にすることはできないのですが、いちいちハンダ付けしていてはどんな音か忘れてしまうので、ソケット式にして交換しながら聞いてみました。

電源コンデンサも交換可能に電源コンデンサも交換可能に

さすがにソケットのままではケースに収まらないので確認が終わったら戻します。

交換したコンデンサもルビコンの Fine Gold です。

結果は・・・当然違いはわかりません

というか、コンデンサ無しとの違いすらわかりませんでした。コンデンサいらねーんじゃねーの?(ぉぃ

いやいや、さすがに電源ラインには 100uF くらいは入れておきたいので、しっかりハンダ付けしておきました。金色のやつを。
中身の違いはわかりませんが、カッコイイので。(開き直り)

結果

  • 電池駆動のためか、電源ラインのコンデンサによる音の違いは分からなかった
  • ホワイトノイズも変化なし

 

オペアンプを変えてみる

いよいよ本丸です。AD00031 はオペアンプを差し替えることができるようになっています。
オペアンプといえば、アンプの心臓部ですね。ここを変えればさすがに音は変わるでしょ。
オペアンプの高いものは 1個数千円もするものもあり、音質の変化に期待がもてます。

という事で、秋月で互換性のあるオペアンプをいくつか買ってきました。
元々付属だったオペアンプNJM4580DD (秋月で50円)含めると 5 種類になりました。

揃えたオペアンプ左からLME49860NA、LM358N、LM4562NA、MUSES8920、NJM4580DD

LM385NはHTC製やJRC製などいくつかのメーカが出しているようなのでメーカまで書いています。
オペアンプの足を痛めないように、また簡単に交換できるように8 PIN のソケットに挿して、このソケットごと基板のソケットに挿します。

早速聞き比べてみたところ・・・お、違いがありそう (^^)

一番安い LM358N はさすがに1個20円の安物だけあって、ホワイトノイズが明らかに増えました。感覚的には 2 倍くらいかな? 曲中でもノイズが分かるくらいです。こりゃダメだ。

ホワイトノイズについては他のオペアンプはほぼ同じでした。
ホワイトノイズはオペアンプから出てるのかなと思っていたので、変化がなかったのは残念でした。

音質については・・・違いわからず
えぇ。そうです。わかりませんでした。残念。

「ちょっと音の輪郭がぼやけてるかな」とか、「音像がハッキリしたヌケのいい音です」とか書きたかったんですが、さっぱり違いがわかりませんでした。

えー。そんなにおれの耳ってしょぼいの?
自分には違いが分かると無意識で信じてたんですが、全く分からないようです。

結果

  • LM358N (フェアチャイルド製) はホワイトノイズが多く、AD00031には向かない
  • 他のオペアンプはどれも違いが分からなかった

 

結論

前回前々回、今回で色々部品を変えてみた結論をまとめてみます。

  • 私の耳では抵抗、コンデンサ、オペアンプの質をあげることでの音質向上は聞き分けられない
  • オペアンプはLM358N だけはホワイトノイズが明らかに増えた
  • LM358N以外のオペアンプ差は聞き分けられない
  • インピーダンス調整用の抵抗を大きくするとホワイトノイズが減る傾向にある

結果的にホワイトノイズに効き目がありそうなのはインピーダンス調整用抵抗の変更だけでした。うーん。

で、完成した(?)、違いがわからないのに無駄にお金をかけた基板がこちら。

無駄な努力の結果
見た目はかなり高級感を増しました。いかにも良い音がしそうです。私にはわかりませんが。

次は回路をいじってみます。もうここまで来たら恐いものはないのでダメもとで。