格安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でもまぁまぁ使えることがわかった。値段の割にはちゃんと使えるので、ライターが欲しい人にはいいかもしれない。

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


DEBUG HACKS Conference 2009 に参加しました

久しぶりのブログです。今回は zaurus とは関係ないですが。。。

昨日開催された Debug Hacks の発売記念イベント Debug Hacks Conference 2009 に参加してきました。

参加前は本を買うかどうかは立ち読みしてから決めようかと思っていたんですが(^^;)、会場の即売所で買ってしまいました。

オライリーの紙袋 Debug Hacks Tシャツ

会場で本を買ったら DEBUG HACKS Tシャツがもらえました。ネタ以外では着れないですが・・・。
本を入れてくれたオライリーの紙袋がCoolです。

Conference の内容は詳細に書かれている方々がいらっしゃると思うし、動画がいずれニコニコ動画等にアップされると思うので、個人的にためになった部分を。

GDBでリスト表示

まず、gdb のユーザ定義コマンドによるリストの表示。構造体内のnext を辿って最後まで表示してくれるというもの。ユーザ定義コマンド自体は知ってたけど、面倒そうで使ったことなかったんですが、 こういう使い方が出きるなら便利ですね。

コードはメモってないので書けませんが、ユーザ定義コマンド(仮に list_print とする)で1つの構造体を表示するようなコマンドを作っておき、別のユーザ定義コマンドで next を辿って list_print を呼び出すというもの。(説明が下手ですな)

たしかに、ユーザ定義コマンドを作るのに手間がかかりますが、何度も何度もリストを見なければいけない場合には使えそうです。

今までは、

(gdb) p *list_head->next->next->next->next->next->next->next

とか普通に打ってました (汗)

Yuguiさんの発表

私は Ruby は触ったことがないこともあり、失礼ながら Yugui さんを始めて知りました。

まず、プレゼンうまいなーと。スライドの作りも個性的で、話の流れもわかりやすく、ユーモアもあり、とても印象に残りました。

印象に残ったのは、Ruby や Rails ではデバッグであまり苦労していないということ。言語設計やソフト設計が厄介なバグを混入しにくくしているんだなと感心しました。

DbC (Design by Contruct) や BDD (Behavior Driven Development) といった、軽微なバグを初期段階で検出できて、バグを混入しにくい作り方が、地味そうに思えるも非常に有効だと分かりました。

体験談として、DbC を適用して assert 入れまくったらバグがボロボロ出てきて、全て退治したらバグが1つしか残らなかったとおっしゃってました。1つのスキームで数百、数千単位のバグを1つにまで減らせたというのは驚きです。

こういう理論って確かにそうだけど、実際開発には適用が難しくない?とか、本当に手間に対する効果があるの?みたいなことを考えてしまうのですが、バリバリ開発しているハッカーに言われると非常に説得力があります。

いま仕事で開発してるソフトに DbC に倣って assert 入れまくってみようかな。結果がちょっと怖いですが (^^;

サインもらいました

最後に著者の方々にサインをもらってきました。

まだ本は読んでないですが、なかなか勉強になる Conference でした。


gnome-terminal で M+ ビットマップフォントを使う

 久しぶりに Zaurus 以外のネタです。

個人の好みで結構分かれると思いますが、 私は非アンチエイリアス表示が好きです。

アンチエイリアスがかかっているとパッと見は綺麗なのですが、仕事などで長時間パソコン画面をみるような状況だと、アンチエイリアス表示の方が疲れやすいように思います。(思い込みかもしれませんが・・)

また、疲れ目になってピントが合わなくなってきた時もビットマップフォントの方が見やすい気がします。

という流れで、読みやすいビットマップフォントとして以前から M+ フォント を使っていました。

しかし、最近のディストリビューションはアンチエイリアス表示がメインになり、ビットマップフォントが排除されてきています。

私のようにビットマップフォントを使いたい人がいないのか、ググっても「ビットマップを使わないようにする(強制アンチエイリアス)」ような情報はあるのですが、ビットマップを使えるようにするような情報はあまりありませんでした。

((ここまでが前フリです ^^;))

ということで、最近のディストリビューションでも M+ フォントを使えるように頑張ってみました。gnome-terminal で M+ フォントを使えるようにするのが目標です。

以下は Ubuntu 8.10 での設定方法ですが、最近のディストロでは大体同じだと思います。

1. unicode エンコードのM+フォントを用意する

いろいろ試行錯誤した所、GTK+2のフォント一覧にフォントを表示させるには、iso10646 のエンコード(文字コード)のフォントでなければいけないようです。

そこで M+ フォントを iso10646 エンコードに変換したものを作成しました。

unicode対応表を元に機械的に変換したものですので、著作権はオリジナル作者の COZ 様にあります。利用・再配布等は M+ フォントのライセンスにしたがってください。

上記ファイルを展開すると、mplus_?_??.pcf というフォントファイルが4種類展開されます。この pcf ファイルを ~/.fonts/ へコピーします。

2. fontconfig にビットマップフォントを認識させる

/etc/fonts/conf.d に fontconfig の設定ファイルが格納されています。ここに 70-no-bitmaps.conf というシンボリックリンクがあるので、これを削除して 70-yes-bitmaps.conf へのリンクを作成します。

$ sudo rm /etc/fonts/conf.d/70-no-bitmaps.conf
$ sudo ln -s ../conf.avail/70-yes-bitmaps.conf /etc/fonts/conf.d/

これで fontconfig がビットマップフォントを認識するようになります。

3. フォントキャッシュを更新

フォントキャッシュを更新します。

$ fc-cache -f ~/.fonts/

M+フォントが認識されているかは以下のコマンドで確認できます。

$ fc-list | grep M\+
M+gothic:style=Regular
M+gothic:style=Bold

4. アプリケーションを再起動

以上の設定をした後、アプリケーションを再起動すると M+gothic というフォントが使えるようになります。

手っ取り早くすべてのアプリに反映させるにはログインしなおしてください。

9ポイント以上の指定で 12px のフォントが、 8ポイント以下の指定で 10px のフォントが使用されるようです。

 

いろいろ試行錯誤して使えるようになったので、他にも設定をいじっている所があったかもしれません。
動かなかったらコメント頂ければと思います。