組み込み機器やプログラミングの話など

組み込み関連の話


今すぐ使える!H8マイコン基板を試す[100813]

春にヨドバシで見て気になっていた今すぐ使える!H8マイコン基板の書籍は在庫が少なくなっているようです。この基板にさらに拡張用の基板を足してタッチパネル付きの液晶が試せるというので購入してみました。

8月上旬の時点でマルツでこの書籍が入荷していたので購入しました。表紙が折れているなどのように、但し書きがありましたが私が購入したものは普通本屋に置いてあるものと同じでした。

最初のLEDの点滅までの間に気になった点について上げておきます。Windows7の32ビット版で試しています。

一つはクロスコンパイラとしてKPIT GNU Toolchainsを使用していますが、私の場合最初バージョン10.02をインストールしてみました。しかしビルド時ldがcannot find -lgccのエラーを出して止まってしまいます。

これを防ぐには、この書籍に書いてあったようにバージョン9.03をインストールしておきます。問題なくビルドできます。

もう一つはルネサスのFDT(Flash Development Tool Kit)ですが、CDROMに付属のバージョン4.04で書き込みを行うとWindows7のウィンドウが出て途中で止まってしまいます。この場合にはFDTの最新バージョン4.06をインストールすることで書き込みを行うことができました。

また、Cygwinのインストール時にPost installでパッケージに問題があるといくつか表示されますが、この点については、今のところ影響は出ていません。

BeagleboardでAndroidを動かすまでの話[090910]

ネットで調べてみると、すでにたくさんの方がBeagleboard上でAndroidを起動しているようです。私も授業がなくなったら早速トライしてみようと準備だけは進めてきました。

まず、BeagleboardはDigi-Keyという会社で専門に売られているようなので注文しました。注文したのはBeagleboard本体と、Beagleboardのボード上のピンとコンピュータのシリアルポートを接続するためのコードです。

Androidを起動する際にいろいろ必要なものが出てきます。

最低限必要な物のリストをあげておきます。注文する時に以下のサイトを参考にしました。

exyk
http://d.hatena.ne.jp/exyk/searchdiary?word=%2a%5bbeagleboard%5d

Beagleboard本体


Beagleboard本体の10ピンヘッダーとコンピュータ側のシリアルポートをつなぐケーブル これはBeagleboardと一緒に注文することになります。

今回、昔のLet'sNoteがあったので必要なかったのですが、シリアルポートは今のPCにはないのでUSB-Serial変換ケーブルが必要になるでしょう。

下の画像がLet'sNoteとつないだところです。昔のコンピュータもまだまだ役に立ちます^^

ただし、Let'sNoteはあくまでもBeagleboardとシリアル接続を行うためにだけ使っています。Androidのコンパイルなどの開発にはAtomマシンを使っていました。


Beagleboardの部分です。5VのACアダプタとシリアルケーブルをつないでいます。


5VのACアダプタ

HDMI DVI変換ケーブル Beagleboardにはモニタ出力がありますがHDMI端子なので、これとDVI対応のディスプレイにつなぐためのケーブルが必要になります。

DVI対応のモニタ 最終的にAndroidの画面を確認する時に必要になります。

SDメモリ 2G以上のメモリということですが、私の場合16Gで失敗しています。16Gでもうまくやる方法はあるのかもしれませんが、今はペンディング。

SDメモリに対応したカードリーダ これも16GまでのSDHCに対応するものしないものいろいろあります。ちょうどヨドバシでバッファローのBSCDRDSDU2シリーズが安売りしていたのでこれを使いました。Linuxからも認識してくれます。VMWare PlayerでUbuntu8.04でデスクトップ上で認識しないことがありますが、抜いたり挿したりしているうちに認識してくれます。あるいはVMWare Playerの枠に外部記憶装置のアイコンがあるのでこれを使って開放した場合に反応します。認識してくれた場合、マウントポイントを調べておきましょう。マウントし直した方が作業が楽な場合もあります。

USBマウスとUSBキーボード Andoroidの画面に入ってから必要になります。BeagleboardのUSBコネクタにはEHCIとOTGがあり、EHCIにはシリーズAの形状のもの、つまり普通に使用しているタイプを接続します。ただし、セルフパワーのUSBハブを用意してこれをつないで使うことになります。OTGではミニBを使用します。

Androidが正常にビルドできる環境 ツールとしてCodeSourceryのtoolchainが必要になります。これについては後でふれます。開発環境としてLinuxの環境が必要です。今回、いちいちLinuxをインストールするのも面倒なのでVMWare PlayerをインストールしてからUbuntu8.04のVMWare Player用のイメージをもってきて使いました。ここで、ハードディスク容量に注意してください。これらの環境を準備後、ビルドの作業を始めたところ作業の最後の方で空きスペースが足りなくなることがありました。何せUbuntu8.04のVMWare Player用のイメージなどで14G超となります。あと数Gあると思っていると容量不足となることがあります。

手元にあるものを調べ、足りないものを買いそろえておいた方がよさそうです。

Bwaglboard本体は6月26日に注文しました。発送は7月2日ということで楽しみにしていました。ただ、繰越保留30日というのがあって、よくわかりませんが、待つ場合もあるようだです。

7月2日が来ても送られてくる気配もなく、連絡もなく、ここで繰越保留が効いて一カ月ぐらいは待つことになるんだろうなと、諦めて待つことにしました。で、7月17日にDigi-Keyから連絡があり、メーカーにて生産不具合が確認され月単位での遅延が予想されるのでキャンセルするかどうか決めてほしいとのことでした。迷っていたところ、翌日Digi-Keyから発送した旨の連絡がありました。なんか米本社と日本担当の方とうまく連絡がいっていないような感じです。発送してからのTrackingはアメリカの飛行場から成田に入るまで細かく追跡しています。

7月20日に到着しました。発送後は到着まで早いという話はホントのようです。Beagleboardは小さい箱に入っていました。これで手のひらサイズでコンピュータとして使え、しかもコストパフォーマンスに優れている点は素晴らしいですね。これで準備もできたので、早速作業に入りたかったのですが、ちょうど忙しい時期に入りしばらくお預けとなりました。

その間、学校のサーバのアップデート作業、自宅のFreeBSDでの無線LAN子機の設定で四苦八苦していました。無線の方はこれはこれで時間がかかりそうなのでペンディングし、いよいよBeagleboardの作業に入りました。

8月16日から作業を始めました。今回は国内ですでにやられている方が多かったので、その例を参考にして試してみましたが、自分の場合にはうまく起動させるところまでいきませんでした。Beagleboard上で動くLinuxをコンパイルする必要があるので各サイトで紹介している方法を参考にして試してみたのですが、最後までコンパイルできませんでした。8月16日にコンパイルした時点ではソースコードに何らかの問題があるようです。8月30日にもう一度gitにてソースコードを得てから、コンパイルし直したところ最後までコンパイルが進みました。これは、30日までにソースコードが改良されていたということを示すのでしょう。うまくいかない時は、あれこれやるよりもしばらく待ってみるのもいいかもしれません。

参考にしたサイトのうちで開発の流れがわかりやすかったサイト(英語)を紹介しておきます。

Building Android on BeagleFree Electrons blog
http://free-electrons.com/blog/android-beagle/

このサイトではUbuntu9.04を使用しています。私の開発環境ではVMWare PlayerでUbuntu8.04を仮想マシンとして使用し、そこでコンパイルの作業を行っています。30日の時点ではこの開発環境で問題はありませんでした。

このサイトの解説の大まかな流れは以下の通りです。使用するコマンドの詳細に関しては上記のサイトを参考にしてください。ここでは以下に作業を通して気がついたことをコメントしておきます。

1.必要なパッケージを準備する apt-getコマンドを使ってインストールしていきます。

2.2007q3 toolchain from Code Sourceryを入手する ページのリンクで入れなかったので、まず次のサイトにアクセスします。

CodeSourcery
http://www.codesourcery.com/

メニューのPRODUCTSにマウスのポインタを合わせるとメニューが出てくるのでSOURCERY G++>EDITIONS>LITE>ARMを選びクリックします。下の項目にNext Stepsがあります。そこでDownloadをクリックします。表があるのでGNU/LinuxでAll versionをクリックします。ここに必要なバージョンがあるのでダウンロードします。

3.gitを使ってソースコードをダウンロードします。

4.Androidをビルドします。

5.4が終わってからカーネルをビルドします。

6.ディレクトリを作ってルートのファイルシステムをまとめておきます。

7.SDカードをフォーマットします。

参考までに私は最初16GのSDHCを使っていました。fdiskを使った段階で警告が出ます。これを無視して使っていましたが、必要なすべてのファイルの準備でき、起動する段階になって読み込み位置に不整合が出て止まってしまいました。とりあえず今は2Gで動かしています。この場合、fdisk使用時に警告は出ませんでした。

また、メモリカードリーダーにも注意が必要です。最初16Gで試していた時は家にあったリーダーはSDHCに対応していないことがわかりました。また、市販の機種では対応していても8Gまでのものもあります。使用できる容量の上限がメーカーのサイトで公表されています。チェックしておきましょう。

8.7でFAT32のパーティションにはブート用のソフトとして、まずMLOを次にu-boot.binをコピーし、カーネルのイメージuImageをコピーしておきます。

MLOとu-boot.binはこのサイトで提供したものをダウンロードするように書いてありますが、次のサイトを参考にして、ソースコードをダウンロードして自分でビルドしてみるのも勉強になります。

BeagleSoftCompile
http://code.google.com/p/beagleboard/wiki/BeagleSoftCompile

NAND Flasdh用のコンパイルの仕方も書いてあるので、Compiling x-loaderではCompiling x-loader for MMC booting の方法を試しましょう。MLOを作るにはSignGPというソフトウェアが必要ですが、これは以下のサイトから手に入るので通常のccを使ったコンパイルで出力ファイルをSignGPとして作ります。

SinGP.c
http://code.google.com/p/beagleboard/downloads/detail?name=signGP.c&can=2&q=

そしてCompiling u-bootではCompiling u-boot for regular Kernel Booting に従ってコンパイルしました。MLO、u-bootの時にマクロの設定はとばして行いましたが影響はなさそうです。必要ならば指示に従ってください。

9.それからルートのファイルシステムをext3のパーティションにコピーします。

10.TeraTermなどを使って、Boot時の設定を行います。

その前にBeagleboardのSDのスロットにSDカードを差し込みます。シリアル変換ケーブルの10ピンのソケットをSDのスロットのそばの10ピンヘッダに差し込みます。

セルフパワーのUSBハブをEHCIのUSBコネクタに接続します。もちろんUSBハブにはACアダプタを接続しておきます。それから、EeePCについてきたUSBマウスとHappyHacking Keyboard Lite2をつなぎました。

ディスプレイとBeagleboardを接続します。

以下のサイトにTeraTermの設定例があります。ここに示された設定で通信することになります。

GeekleBoard
http://d.hatena.ne.jp/ksksue/20090605/1244227247

TeraTermでNew Conecctionを設定し、BeagleboardにACアダプタを接続するとブートが始まります。

カウントしている段階でEnterキーをたたいて、u-boot.binのシェルを出します。そこでブート用のコマンドの設定およびブート時の設定を行います。

saveenvで設定を保存しておきます。

もう一度リセットボタンを押して再起動してみるとAndroidが起動します。よくわかりませんが最初にバッテリーが足りないという画面が出てきます。


画面が落ち着いてからマウスのポインタが出るものと思っていましたが出ません^^;ポインタは見えませんがマウスとキーボードを動かすことでボタンなどをアクティブにしてくれるので問題ありません。

バッテリーの画面からエンターキーをたたいて動き出します。


それからネット上でよく見る宙にうかぶ時計の画面です。


次はプログラムの開発でも試そうかと考えています。

振り返ってみると、紹介されている通りにはなかなか事がうまく進まないことを実感しました。ビルド時にはうまくいかなかくても、ソースコードのアップデートが進んでいて不具合が解消されていることがあります。Beagleboardに興味をもって実験してみようという方はあきらめずに、適当に時間をおいて続けてみてはいかがでしょうか。

またBeagleboardをそろえる際にはお金がある程度かかりますし、うまく動かすには時間がかかる場合もあるかもしれません。自分で最新の情報を検証しながらチャレンジしていくしかなさそうです。

OLIMEX ARM−JTAGどうやってつなぐんだ![090324]

去年の9月ごろ、ある装置を作ろうと思い暑い中、汗をたらしながらハンダごてをにぎっていました。何を作っていたかはうまくいきそうになったら紹介したいと思います^^;

予定では学校が始まる前に完成しているはずでした。しかし、それはある程度基板を作りこんだ人の話で配線してもすぐハンダが取れてしまう人には無理なことでした。一応、部品をそろえハンダ付けも終了しましたが、電源を入れても液晶に最初の画面が出てくるものの次のメニューで選択してから先に進んでくれません。

ハードウェアはまあまあできたものとし(配線が甘いところがありますが、見つけ次第直していました^^;)、ソフトウェアはダウンロードしているものを使っているのですが、起動して止まるということはどこかが悪いということなのですが、それがさっぱりわかりません。

で、このような場合、その装置を紹介していた方はJTAGデバッガというものを自作してその装置をテストする際に使っていたのですね。素人としてはそういうものを使えばどこが悪いのかを簡単にチェックできそうだとつい思ってしまうわけです。

しかし、回路が紹介されていますがJTAGデバッガを作る時間がないので、同じJTAGなら同じように使えるだろうということでストロベリー・リナックスからOLIMEXのARM-JTAGを買いました。これは2980円と手ごろな値段です。

ところが使おうと思い装置に接続してみても、どうもターゲットとしての基板を認識していないようです。この段階で学校が始まってしまい、このプロジェクトから離れることになりました。それにしても、組み込みを試行錯誤で試そうなんていい気なものでした。ハンダ付けして電源を入れりゃなんとかなるだろうという考え方は甘く、一つ一つ動きを確認しながら作っていくものなのですね^^;いつものお気楽プログラミングとはまた別の世界でした。

で、2009年に入って卒業式も終わり、このOLIMEX社のARM-JTAGを試す時間が取れるようになりました。このARM-JTAGはパラレルポートに接続するものです。最近のJTAGデバッガはUSBのものがほとんどです。


このARM-JTAGのターゲットの装置としてDesign Wave Magazine 2008 5月号に付属のARM Coretex-M3プロセッサ基板に接続して試してみることにしました。ARM Coretex-M3プロセッサ基板は次のものです。


参考にした記事は以下のものです。

ARMプロセッサで使える汎用JTAGデバッガを自作する、山崎尊永、Design Wave Magazine 2008 5月号、76p-88p、CQ出版社

ARM Coretex-M3プロセッサ基板にARM-JTAGを接続すると次のようになります。


この時の結線の図は次のようになります。文献を参考にしました。実際に結線する際にはARM-JTAG側ではこの図と逆の配置でケーブルを挿すことになります。この部分でよく間違えました。私のような初心者がひっかりやすいところだと思います^^;


ARM Coretex-M3プロセッサ基板にARM-JTAGを接続する際に使用したケーブルは次のようになります。千石電商あたりで信号伝達コネクタの1ピンのものがあるので、これにケーブルの両端にコンタクトをつけたものを挿して使っています。ARM-JTAG側にはブレッドボード用のケーブルを使って接続しています。実験する分にはこれで大丈夫かと思います。


まずソフトウェアを準備しますが、文献でCygwinを使用しているので、Cygwinをインストールしておきます。XP上にインストールしました。具体的なインストール方法はGoogleなどで検索してみてください。

それから文献に従いARM Tool Chainsをインストールしました。まず、以下のサイトに入ります。

http://www.codesourcery.com/

それからSourcery G++のリンクをクリックします。 メニューのEDITIONSのところでLITEそれからARMを選択します。 Next StepsのところにDownloadのリンクがあるのでクリックします。 Target OSに4種類ありますが、GNU/Linuxを選択します。 Recommended PackagesのうちIA32 Windows Installerをクリックしてダウンロードします。

それからインストーラの指示に従ってインストールします。

Cygwinのシェルを起動します。以降、プロンプトは省略します。

arm-none-linux-gnueabi-gcc -v

と打ってバージョン名を確認できればパスが通っています。

次にOpen On-chip Debuggerをインストールします。

以下のサイトに入ります。

http://www.yagarto.de/

左のリストからダウンロードのリンクをクリックします。

Open On-chip Debuggerのバージョンr717をダウンロードします。

ダウンロードしたインストーラをダブルクリックしてインストールします。

ところがインストーラからのインストールではパラレルポートをサポートしていないようです。

Program Files中のopenocd-r717フォルダにsourceフォルダがあります。そこにopenocd.r717.zipというファイルがあるので解凍します。

それから解凍してできたopenocd.r717フォルダをCygwinの自分のホームディレクトリに移動しておきます。このフォルダ中のファイルINSTALLにmakeする際の方法が書いてあります。

この方法に従いパラレルポート対応のOpen On-chip Debuggerをインストールします。

まずCygwinのシェルを起動してディレクトリopenocd.r717に入ります。

cd openocd.r717

まず次のスクリプトを実行し必要なファイルを作り出します。

./bootstrap

それからconfigureを実行します。パラメータとしてパラレルポートに関するものを指定しています。

./configure --enable-parport --enable-parport_giveio

ここまで問題なければmakeします。

make

そしてインストールします。

make install

Open On-chip Debuggerを動かす際に必要になるのがコンフィグファイルです。これが期待通りのものがないので前述の文献とネットにあったパラレルポート用のものを参考にして次のようにしました。

#daemon configuration 
telnet_port 4444 
gdb_port 3333 
#interface 
interface parport 
parport_port 0x378 
parport_cable wiggler 
jtag_speed 0 
#use combined on interfaces or targets that can't set TRST/SRST 
#separately 
reset_config trst_and_srst srst_pulls_trst 
#jtag scan chain 
#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE) 
jtag_device 4 0x1 0xf 0xe 
jtag_device 5 0x1 0x1 0x1e 
#target configuration 
daemon_startup reset 
#target <type> <startup mode> 
#target arm7tdmi <reset mode> <chainpos> <endianness> <variant> 
#target arm7tdmi little run_and_halt 0 arm7tdmi-s_r4 
#run_and_halt_time 0 30 
target cortex_m3 little reset_halt 0
run_and_halt_time 0 0 
working_area 0 0x20000000 0x5000 nobackup 
#flash configuration 
#flash bank lpc2000 0x0 0x40000 0 0 lpc2000_v1 0 14765 calc_checksum 
flash bank stm32x 0x80000000 0x10000 0 0 0 

ファイル名はmycfg.cfgとしてあります。ミックス版なので参考程度にしてもらいたいと思います^^

Open On-chip Debuggerの動作を確認します。ホームディレクトリからコマンドを操作するものとします。

openocd -v

バージョンが表示されます。

次にmycfg.cfgを使用して起動します。

openocd -f mycfg.cfg

私の場合、次のようなメッセージが表示されました。

openocd -f mycfg.cfg
Open On-Chip Debugger 1.0 (2009-03-21-16:19) svn:exported
$URL: http://svn.berlios.de/svnroot/repos/openocd/trunk/src/openocd.c $
Info:    options.c:50 configuration_output_handler(): jtag_speed: 0, 0
Info:    options.c:50 configuration_output_handler(): Open On-Chip Debugger 1.0
(2009-03-21-16:19) svn:exported
Info:    jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x3ba00477 (Manufa
cturer: 0x23b, Part: 0xba00, Version: 0x3)
Info:    jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x16410041 (Manufa
cturer: 0x020, Part: 0x6410, Version: 0x1)
Info:    jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x3ba00477 (Manufa
cturer: 0x23b, Part: 0xba00, Version: 0x3)
Info:    jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x16410041 (Manufa
cturer: 0x020, Part: 0x6410, Version: 0x1)
Info:    options.c:50 configuration_output_handler(): nSRST pulls nTRST, falling
 back to "reset run_and_halt"

Errorが出るような場合、私は結線の間違いで出ていました。また、コンフィグファイルの書き方により出る場合があります。

それからもう一つCygwinのシェルを起動します。

先にインストールしたArm Tool Chainsのデバッガを使用してみます。

arm-none-linux-gnueabi-gdb

以下文献を参考にしてコマンドを試してみました。

GNU gdb (Sourcery G++ Lite 2008q3-72) 6.8.50.20080821-cvs
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i686-mingw32 --target=arm-none-linux-gnueabi"
.
For bug reporting instructions, please see:
<https://support.codesourcery.com/GNUToolchain/>.
(gdb) target remote localhost:3333
Remote debugging using localhost:3333
0x0800016c in ?? ()
(gdb) x 0x08003000
0x8003000:      0x20005000
(gdb) quit
The program is running.  Quit anyway (and kill it)? (y or n) y

終了までにOpen On-chip Debugger側で表示されたメッセージは以下のようになります。

Info:    server.c:78 add_connection(): accepting 'gdb' connection from 0
User:    gdb_server.c:90 gdb_last_signal(): undefined debug reason 6 - target ne
eds reset
Info:    stm32x.c:631 stm32x_probe(): device id = 0x20016410
Info:    stm32x.c:670 stm32x_probe(): flash size = 128kbytes
Info:    server.c:395 server_loop(): dropped 'gdb' connection

これで、何とか次のステップに進めます。何よりARM-JTAGがちゃんと使えることができたのでほっとしています^^