エントリー

カテゴリー「電子工作」の検索結果は以下のとおりです。

H8マイコンでLinux (放置中止)

買ってから2年程度放置していた秋月電子のH8マイコンを久々に引っ張り出しました。

 

20110703_27-1.jpg

 

とりあえず今のところは、IDEインターフェースを作って、CFカードからLinuxをブートさせようとしています。IDEインターフェースの回路は、H8マイコンと同時期に買った 『はじめる組み込みLinux』 という本からそのままもってきました。

どうせならCPLDを使い、SDRAMを積んでメモリ空間をほぼフルに使えるようにしたり、怪しいI/Fをたくさん搭載したいですね。
 

さて、Linuxのビルド環境の構築ですが、ちょうど手元に、Ubuntu11.04-32bit版をインストールしたVMware仮想PCがあったので、これをホストとして使うことにします。

 

下ごしらえ

  • aptitude(apt-get) するもの
    libmpfr-dev
    (g++-4.1 libgmp3-dev libgmpxx4ldbl libstdc++6-4.1-devも依存関係で一緒に入ります)
    libmpc-dev
  • ソースをダウンロードしてくるもの
    binutils-2.21
    gcc-4.5.3
    newlib-1.19.0

 

そしてビルド・・・

・binutils-2.21

$ mkdir _build
$ cd _build
$ ../configure --target=h8300-elf --prefix=/usr/local/h8300 --with-newlib
$ make 2>&1 | tee make_log
$ sudo make install

 

・gcc-4.5.3

$ mkdir _build
$ cd _build
$ ../configure --target=h8300-elf --prefix=/usr/local/h8300 --enable-languages=c --enable-shared --disable-nls --disable-threads --disable-werror --with-newlib --with-headers=/usr/local/src/newlib-1.19.0/newlib/libc/include 
$ make 2>&1 | tee make_log
$ sudo make install

 

・newlib-1.19.0

$ mkdir _build
$ cd _build
$ ../configure --target=h8300-elf --prefix=/usr/local/h8300
$ make 2>&1 | tee make_log
$ sudo make install

これでひとまず完了。

 

そういえばgccのコンパイルで、初めは"--enable-languages=c,c++"としていたのですが、エラーが出てしまいました。gccのバージョンを変えても、その他のオプションを変えても、解消の兆しが見えません・・・

/usr/local/src/gcc-4.5.3/_build/./gcc/xgcc -shared-libgcc -B/usr/local/src/gcc-4.5.3/_build/./gcc -nostdinc++ -L/usr/local/src/gcc-4.5.3/_build/h8300-elf/h8300h/normal/int32/libstdc++-v3/src -L/usr/local/src/gcc-4.5.3/_build/h8300-elf/h8300h/normal/int32/libstdc++-v3/src/.libs -nostdinc -B/usr/local/src/gcc-4.5.3/_build/h8300-elf/h8300h/normal/int32/newlib/ -isystem /usr/local/src/gcc-4.5.3/_build/h8300-elf/h8300h/normal/int32/newlib/targ-include -isystem /usr/local/src/gcc-4.5.3/newlib/libc/include -B/usr/local/h8300/h8300-elf/bin/ -B/usr/local/h8300/h8300-elf/lib/ -isystem /usr/local/h8300/h8300-elf/include -isystem /usr/local/h8300/h8300-elf/sys-include  -mh -mn -mint32 -x c++-header -g   -mh -mn -mint32 -I/usr/local/src/gcc-4.5.3/_build/h8300-elf/h8300h/normal/int32/libstdc++-v3/include/h8300-elf -I/usr/local/src/gcc-4.5.3/_build/h8300-elf/h8300h/normal/int32/libstdc++-v3/include -I/usr/local/src/gcc-4.5.3/libstdc++-v3/libsupc++ -O2 -g -std=gnu++0x /usr/local/src/gcc-4.5.3/libstdc++-v3/include/precompiled/stdc++.h \
        -o h8300-elf/bits/stdc++.h.gch/O2ggnu++0x.gch
In file included from /usr/local/src/gcc-4.5.3/_build/h8300-elf/h8300h/normal/int32/libstdc++-v3/include/random:54:0,
                 from /usr/local/src/gcc-4.5.3/_build/h8300-elf/h8300h/normal/int32/libstdc++-v3/include/bits/stl_algo.h:66,
                 from /usr/local/src/gcc-4.5.3/_build/h8300-elf/h8300h/normal/int32/libstdc++-v3/include/algorithm:63,
                 from /usr/local/src/gcc-4.5.3/libstdc++-v3/include/precompiled/stdc++.h:64:
/usr/local/src/gcc-4.5.3/_build/h8300-elf/h8300h/normal/int32/libstdc++-v3/include/bits/random.tcc: In member function 'void std::seed_seq::generate(_RandomAccessIterator, _RandomAccessIterator)':
/usr/local/src/gcc-4.5.3/_build/h8300-elf/h8300h/normal/int32/libstdc++-v3/include/bits/random.tcc:2724:47: error: no matching function for call to 'max(int&, const size_t&)'
In file included from /usr/local/src/gcc-4.5.3/libstdc++-v3/include/precompiled/stdc++.h:65:0:
/usr/local/src/gcc-4.5.3/_build/h8300-elf/h8300h/normal/int32/libstdc++-v3/include/bitset: In member function 'void std::bitset<_Nb>::_M_copy_from_ptr(const _CharT*, size_t, size_t, size_t, _CharT, _CharT)':
/usr/local/src/gcc-4.5.3/_build/h8300-elf/h8300h/normal/int32/libstdc++-v3/include/bitset:1328:66: error: no matching function for call to 'min(size_t&, int&)'
make[8]: *** [h8300-elf/bits/stdc++.h.gch/O2ggnu++0x.gch] エラー 1

 

調べてみると、'min(size_t&, int&)' については下記のような解決方法があるようです。patchを当てると確かにエラーがでなくなりました。

http://old.nabble.com/Failed-to-make-h8300-toolchain.-td24088154.html

'max(int&, const size_t&)' のほうは、これといった情報を見つけられませんでした。でも同じ原因のような気がします。ramdom.tccの多分このあたりが怪しいとは思うのですが・・・

 764   template<typename _RandomNumberEngine, size_t __k>
 765     typename shuffle_order_engine<_RandomNumberEngine, __k>::result_type
 766     shuffle_order_engine<_RandomNumberEngine, __k>::
 767     operator()()
 768     {
 769       size_t __j = __k * ((_M_y - _M_b.min())
 770                           / (_M_b.max() - _M_b.min() + 1.0L));
 771       _M_y = _M_v[__j];
 772       _M_v[__j] = _M_b();
 773
 774       return _M_y;
 775     }
 ...
 2716       const size_t __s = _M_v.size();

 

C++でプログラミングをすることが目的ではないので、C++のビルドは今回は諦めることにしました。

iPod nano 1G バッテリーレス化で再活用 その2

前回改造したiPod nanoを車へ持っていき接続してみました。

何の車に乗っているかはさておき、現在のカーオーディオ環境は、カロッツエリア DEH-P099 にiPod用アダプター CD-IB10II を組み合わせた割合古い構成になっています。

 

接続すると起動しましたが、次の瞬間…

 

20110108_11-2.jpg

 

うーん。

起動画面表示後にバッテリーが空というエラー表示になり、その後再起動を繰り返してしまいました。

前回のチェックでうまく動作することは確認済みですし、バッテリーの代わりにレギュレータから給電しているはずなのでバッテリーが空ということは考えられません。

一体どういうことでしょうか??

 

ヒントは、レギュレータの電源をどこから取ったかにありました。
この改造ではUSBの電源ラインから取っていますが、iPod nano 1Gで使えるインターフェースはUSBだけではありません。FireWireも使えます。そしてCD-IB10IIはFireWire経由でのみiPodへ電源を供給する仕様となっていました。

USBの電源ラインとFireWireのそれとは別系統になるので、レギュレータには給電されず4Vが出ないためバッテリーが空と認識されてしまったわけでした。

ではどうしましょうか。
まずCD-IB10IIを改造してUSB電源を供給できるようにする手が考えられます。ただしCD-IB10IIのDockコネクタが全ピンあるのかどうかもわかりませんし、何より面倒臭いのでやめます。その代わりAmazonで「dockStubz」なるものを購入してみることにしました。


20110108_11-3.jpg

早速リベンジ!

 

20110108_11-4.jpg

 

今度はエラーが出ることなく無事に起動しました。再生もバッチリです。
めでたしめでたし。

iPod nano 1G バッテリーレス化で再活用

iPod nano 4Gに買い換え後、今では完全にお役御免となってしまったiPod nano 1Gを再活用できないかと考えました。

電池の持ちはかなり悪くなっていますが、今さら電池交換しても携帯するかどうか…ということで、電池を潔く取っ払い、据え置き型のプレーヤーやカーオーディオといった外部電源のある環境で使えるiPodに改造してみました。

 

iPod nanoの分解方法は国内・海外のサイトに山ほど情報があるので、ここでは省略します。

バッテリーレスで動かす方法としては、元々付いていたリチウムイオン電池の代わりにどこからか4.1Vを持ってきて印加してあげればいいわけですが、今回はUSBの電源ラインから5Vを取ってきて、3端子レギュレータ「AN8004」で4Vに降圧させることにしました。

降圧回路については3端子レギュレータを使ったごく基本的なものなので、あえて解説する必要性はないと思います。LDOタイプであればAN8004以外でも使えます。

リチウムイオン電池を外し下の写真のように接続します。配線については、黄色がUSBの5Vライン、赤色がレギュレータ出力の4V、黒がGNDです。

 

20110103_10-1.jpg

 

電池には赤と黒の他に白い配線もありますが、電池を外した後はここに何も繋がない状態にしておきます。白い配線はリチウムイオン電池内部のサーミスタに接続されています。充電中の温度を監視するためのものです。
 

iPod nano 1Gでは充電の制御をするICに「LTC4066」が使われていて、サーミスタが繋がる回路は下図のようになっています。
(RNOM 、R1の抵抗値はうろ覚えです…)

 

20110103_10-2.jpg

 

サーミスタはRNTCで、NTC端子の電圧が、

0.74*VNTC < NTC端子電圧 < 0.29*VNTC

という状態のときに温度が正常と認識し充電動作を行います。
つまりサーミスタを外して何も繋がない状態だと、ほぼ NTC端子電圧 = VNTC となりLTC4066は温度異常と認識し充電動作は行われません。

電池がすでに存在しないのにレギュレータに対して充電動作をされても困るわけですが、これにより回避することができます。
 

さて動作確認です。(iPod nanoにRockboxをインストールしています)

 

20110103_10-3.jpg

 

PCでのファイル転送も、外部電源に繋げての動作も大丈夫そうです。ここまで確認ができたので車に持っていって試してみることにします。

 

ページ移動

ユーティリティ

Author


oaks (twitter: @oks486)

記事の内容に関しては無保証です。何事も At your own risk ってことでよろしく。
リンクはご自由にどうぞ。

SPAM対策が面倒なため現在コメント投稿機能を停止しています。あしからず...

検索

エントリー検索フォーム
キーワード

Feed

リンク