2012年3月12日月曜日

Japaninoのブートローダー、fuseの復旧

引き続きAVRをいじっています。
本業が忙しいのでほそぼそですが。

現在SDカードをSPIモードでアクセスを試みています。
ディレクトリを読めたのでまずはOK。この件についてはそのうち。

ブレッドボード上にArduinoもどきを作っていますが、
リファレンス機として、大人の科学付録のJapaninoもたまに使っています。
が、てきとーにfuseビットを書き換えてしまい、
sketchを書き込めなくなってしまいました。
復旧方法を調べたのですが、まとまっていなかったので、
記録しておきます。

1. 機材

JTAGICE MKIIを使ってISP書き込みを行いました。
普通にISPライターを使えば良いのですが、たまたま手元にあったので、
オーバースペックですがISPライターがわりに使いました。

接続は、
jtagiceの凸となっているコネクタを、

1 3 5 7 9
2 4 6 8 10


というピン配列とすると、
AVR側(DIPの168のピン番号)とは


1: SCK(pin19 = D13)
2: GND
3: MISO(pin18 = D12)
4: Vcc
6: RESET(pin1)
9: MOSI(pin17 = D11)
※ほかのピンは放置


と接続します。
Japaninoの場合は、黒いピンソケットのD11-13, RESET, +5V, GNDを使いました。
別にICSPソケットは付けなくてもよさそうです。
リード線で結べばOK。



jtagiceをパソコンと接続し、japaninoをパソコンのUSBポートに接続したら
準備OK。
パソコン側ではAVR studioで書き込みを行います。


2. 情報のありか


さて、問題はどのブートローダーを書き込むのか、fuseビット等はどうするのか、
という情報ですが、
ウェブを探してもどうにも見つかりませんでした。

結局、大人の科学のサポートページからダウンロードできる、
開発環境にヒントがありました。

arduino-0018/hardware/arduino/boards.txt

というファイルがありました。中には、


japanino.name=Gakken Japanino(学研 大人の科学 ジャパニーノ)

japanino.upload.protocol=stk500
japanino.upload.maximum_size=14336
japanino.upload.speed=19200

japanino.bootloader.low_fuses=0xe2
japanino.bootloader.high_fuses=0xdd
japanino.bootloader.extended_fuses=0x00
japanino.bootloader.path=lilypad
japanino.bootloader.file=LilyPadBOOT_168.hex
japanino.bootloader.unlock_bits=0x3F
japanino.bootloader.lock_bits=0x0F

japanino.build.mcu=atmega168
japanino.build.f_cpu=8000000L
japanino.build.core=arduino


てなことが書かれていました。
つまり、ブートローダーはLilypad用のを使い、
fuseビットはL:e2, H:dd, Ex:00で、ロックビットは0fにしろ、ってことですね。

ブートローダーはサブディレクトリの

bootloaders/lilypad/LilyPadBOOT_168.hex

がそれっぽいですね。
ブートローダー書き込み、fuseビット書き込み、ロックビット書き込み、
という順番で作業を行いました。
できたっぽいです。
なお、fuseビットのextendedは読み込み直すとf8になり、
ロックビットはcfに見えますが、未使用のビットが1に見えるらしいので
正常に書き込めています。

で、動作確認はsketchのサンプルから適当に選び、
シリアルで書き込みます。
jtagiceは外さないとダメっぽいです。
サンプルはfadeあたりがわかりやすいですかね。



GNDとD9をLEDと抵抗(2-300Ωくらい?)で直列に結べば、ぼあーっとLEDが点滅する。
ワニ口クリップが意外と便利。


3. 外部クロックに対応


デフォルトのfuseビットには問題があり、
内蔵クロックで動作するらしいです。
せっかくjapaninoには水晶が乗っているので
これを使用することにします。

単にfuseビットのloをe2からe6にするだけみたいです。
一応動作はしましたが、
外部発振器が使われているかどうかは見た目ではわかりませんね。

2012年1月4日水曜日

投稿にゴミが付く

なんかbloggerの投稿にゴミが付く。
http://www.blogger.com/img/blank.gif
とかいう文字列が勝手に書き込まれて困る。

既知の問題かも。

Blogger Problem: http://www.blogger.com/img/blank.gif Appearing

確かに、リンクを貼ったときに出現する。なにこれ。

AVRをいじる

ニコニコ動画をみていて、

ブレッドボードでArduinoを作ってみた

というのを見つけました。
まさかこんなに簡単にAVRが動かせるとは思わなかったので、
さっそく部品を購入し、動画の通りに試してみました。

材料:
秋月電子の通販ですべてそろった。3000円くらいですかね。

組み立て方法は動画のとおりなので割愛。
ピンの数え間違えさえしなければ問題ないと思われます。
動画ではライターを使わないでROMの書き込みを行なっていたが、
たまたまライターが手に入ったので、そこはライターを使って楽をしました。
周辺回路はそれほど複雑ではないが、それでも結構手間取りました。
乱暴な言い方をすると、AVRは電源さえ繋げば動くように見えます。知らなかった。
まあ電源周りが難しいのですが。

その他参考動画:

【マイコン編 1回】 零からの電子工作 第36回:前編 回路の準備
ライターの接続と、開発環境の入手の参考に。

【マイコン編 2回】 零からの電子工作 第37回:初めての書き込み
Hello worldともいえるLED点滅プログラムの書き込みを。

やったこと:
・LED点滅のプログラムをCで書いて書きこむ
・Arduinoのブートローダーを書きこんで、スケッチを動かしてみる

動画の説明通りなので特にコメントはありませんが、
ちょっとハマった点があります。
winavrというツールチェーンは名前が変更になり、avr toolchainに
なったようです。
avr studioの新しいバージョンではwinavrの方は認識してくれないようなので、
avr toolchainが必須となります。

米粒程のAVRマイコン・・・ 使ってみたい
こちらのサイトで直リンクが紹介されていたので、それを使用。

あと、配線ミスしてシリアル(FTDIのシリアルUSB変換経由)が使えないということもありました。
ピンはちゃんと数えましょう、ということで。

さらに、protothreadsも試してみました。
マルチスレッド風にプログラミングできます。
それほどコードサイズは増加しないように見えるので、
導入の検討の価値はありかと思います。
プログラムサイズは使わなかったときに比べて206 -> 394 bytesといった感じ。
OSを動かすのはちょっと厳しいかも、という感触です(根拠は無い)。

2012年1月3日火曜日

ARToolkitを試す

今更ながら、ARが気になったので、ARToolkitを試してみました。
参考にしたサイトは、
工学ナビ - 「攻殻機動隊」「電脳コイル」の世界を実現! - ARToolKitを使った拡張現実感プログラミング

です。
そのまま真似しました。
カメラの性能がいまいちで、ピントがなかなか合わないのですが、
それでもうまくいきました。

ただ、使ったコンパイラのバージョンが異なるので、それによる違いだけメモしておきます。
windows 7 (64bit)上のVC2008 expressを利用しました。
program files(x86)/Microsoft Visual Studio 9.0/VC
がインストールディレクトリにあたるようです。

ただビルドするだけではDebugになっているので、説明とあわないようです。
構成をreleaseにしてやると、説明通りの実行ファイルができました。

2011年10月28日金曜日

QEMUでarm環境、そして



QEMUでARMをエミュレートしてLinuxを動かしてみました。

ARMのQEMUにDebianをnetinstallする
http://blog.kmckk.com/archives/2233167.html

を参考にインストールを試みましたが、インストーラーが途中で止まったので断念。

ビルド済みのユーザーランドを探しました(あ~あ)。

http://people.debian.org/~aurel32/qemu/armel/

にありました。debian lenny, squeezeがあるみたいです。
armel(EABI?)となっているやつじゃないとまずそうなので注意が要りそうです。

ダウンロードして、
qemu-system-arm -redir tcp:2222::22 -m 128 -M versatilepb -kernel vmlinuz-2.6.26-2-versatile -initrd initrd.img-2.6.26-2-versatile -hda debian_lenny_armel_standard.qcow2 -append "root=/dev/sda1"

であっさり起動。
redirオプションで外からSSHでつなげるようにしておいた。

で、infernoを動かしてみたところ、色が変になった。

2011年10月22日土曜日

フレームバッファでwm

フレームバッファでwmを表示させることができました(表示のみで、タッチパネルからのインプットはまだ)。
インストールガイド通りですが、感動。
Inferno 関係の人はパッケージングもビシっとするからすばらしい。

・環境
armadillo 440 液晶モデル相当。

OS:debianインストール済み。
ネットワーク:有線

・導入

足りないパッケージをapt-getでインストール

x-window-system-core
libxext-dev
gcc
make
mercurial

arm-gccコマンドがいるので、ln -s gcc arm-gccでリンク。

本流のOSを持ってくる。
cd /
hg clone https://inferno-os.googlecode.com/hg/

ひとまずそのままビルド
vi mkconfig
HOSTとTARGETとROOTを変更。
Linux/arm/binにパスを通す。
./makemk.sh
mk -s nuke mkdirs install
mk install

とりあえずarmで動くinfernoが作られる。

次に、フレームバッファ対応のコードを持ってくる。

hg clone https://bitbucket.org/santucco/inferno-fb

この中の、inferno-os/emu/を本流のemuの下に上書きコピー。
Linux-fbのmkfileを編集しろとのことなので、
vi mkfile
TARGETをなんか選べとのことなので、
TARGET=t42
とか適当にしておいた。

Linux-fbの下でmk installでビルドできるとのこと。

・実行
emu-fb
でemu起動。
wm/wmを実行すると。。。



すばらしい。
入力を受け付けないので操作はできないのですが、

wm/wm wm/bounce

とすると



と、アプリが動きます。

ちなみに、タッチパネルの種類をTARGETで選んだ理由は、出力ではなくて、
入力の都合なのではないだろうか。
t42を選ぶと、キーボードが/dev/input/event0、マウスがevent2とか選ばれるようだ。
入力についてはこれから調査予定。
USBマウスをつないでみたけど、使えなかった。

9fansメーリングリストより

9fansに衝撃の投稿が。

infernoがandroidの上で動く。(nexus sとnook)
http://9fans.net/archive/2011/09/308

ソース等
https://bitbucket.org/floren/inferno/wiki/Home

スラッシュドットでも話題に
http://linux.slashdot.jp/story/11/09/25/0718249/%E3%82%A2%E3%83%B3%E3%83%89%E3%83%AD%E3%82%A4%E3%83%89%E6%90%BA%E5%B8%AF%E3%81%A7Inferno%E3%82%92%E8%B5%B7%E5%8B%95

過去の投稿で、inferno phoneの構想をねったが、
AndroidのdalvikをDisで置き換えるという発想は出来なかった。
どうやら電話も可能らしく、かなりの力の入れよう。
動作を紹介した動画もすばらしい。

armadilloでトライしようかと考え中。
だったが、どうもAndroidが落ちるので難航しそう。

なお、メーリングリストではその他に、wmをフレームバッファで動かす試みも
話題になっていた。
これが出来ればxがいらなくなり、
linuxカーネル + Dis という環境でいけるかも。
起動時間の予測は、ハイバネーションなしで、カーネル20秒 + Dis 5秒くらいかな。
まずは、fb + linux on armadilloを試してみる予定。