放課後の電子工作 HOME > 超小型MP3プレーヤー [ Timpy ] |
2007年6月9日 更新 |
超小型MP3プレーヤー [ Timpy ]
Timpy Rev5.0 技術情報
|
Timpy Rev5.0のテクニカルな部分を説明します。
(もしも著作権にかかわる部分を商用利用される場合はご連絡ください)
★ 回路図
★ ファームウェア
★ USBによるメモリカードへのアクセス
★ ヘッドフォン側のファームウェア構成:KeilとSDCCの共存
★ 基板データ
★ FMチューナモジュール NS953M
★ カラーグラフィック液晶表示器 HDM1216C-2と日本語表示
★ 本体−リモコン間の赤外線通信
★ P板.comで0.125mmデザインルールの基板を作るコツ
timpy-rev50a-sch.pdf (272KB)
上半分がヘッドフォン側、下半分がリモコン側です。
以下にそれぞれの主な使用部品を挙げておきます。かなり特殊な部品も含まれていますが、全て個人ルートにて入手可能なものです。実際自分で集めましたから。費用はさておき。(^^;;
★ヘッドフォン本体
名称 |
型式(メーカ) |
説明 |
マイクロコントローラ |
C8051F340 |
USBを実装するために、Rev4.0で使ったF311からF340に変更しました。MP3プレーヤ機能、USBマスストレージ機能など全ての要素を制御しています。 |
MP3デコーダ |
VS1011e |
かの秋月電子で入手できるMP3デコーダチップです。秋月が扱い始めたのは2006年の7月頃でしたが、それ以前にLQFPパッケージが調達できたのはスウェーデンのJELUとドイツのegnite(今は扱っていない)だけでした。秋月で入手可能になったことは、その驚異的な低価格も含めて画期的でした。今回のVS1011eも秋月にて購入したものです。 |
ストレージメディア |
microSDカード |
市販のmicroSDカードです。対応フォーマットはFAT16です。私は今、2GBのカードを主に使っています。 |
FMチューナ |
NS953M |
わずか7mm角のモジュールに全てを集積し、周辺部品が全く要らない素敵なFMチューナモジュールです。同調をはじめとする全機能は外部からデジタル的に制御可能です。詳しくは 【FMチューナモジュール NS953M】 |
オーディオプロセッサ |
TDA7463AD |
2系統のステレオ入力、デジタル制御が可能なトーンコントロールとボリュームコントロールを持ち、かつ3V系単一電源動作というとても稀なスペックを持つICです。Rev4.0で初めて採用しましたが、その際に最も入手に苦労したデバイスです。 |
ヘッドフォンアンプ |
LM4924 |
仮想グランド端子により大容量の出力コンデンサを省略できる単電源のヘッドフォンアンプです。電源オン・オフ時のポップノイズ低減回路も内蔵しています。 |
赤外線受光モジュール |
PIC79603 |
4.5mm×2.8mmの表面実装型という非常に小さなリモコン用受光モジュールです。これより大きい一般的な受光モジュールではとてもヘッドフォンに収まりません。37.9KHz変調光に対応したフィルタ回路が内蔵されていますので、外乱光の影響を受けにくくなっています。 |
赤外線LED |
DNP331 |
リモコン側の受光モジュール(TSOP5700)と相性の良い発光波長880nmを持つ赤外線LEDです。このタイプの砲弾型はφ5が圧倒的に多いですが、DNP331はφ3と小さいことが特徴です。 |
バッテリ |
ET-0210 |
210mAhのリチウムポリマ電池です。Timpyシリーズの小型化はリチウムポリマ電池によって支えられているといっても過言ではありません。Rev1.0からRev2.0への経緯がブレークスルーとなりました。 |
バッテリーチャージャ |
BQ24032A |
リチウムポリマ電池対応のバッテリチャージャICです。このデバイスの特徴はDPPMと呼ばれるパワーマネージメント機能を内蔵していることです。USB接続時には、バスパワーによるシステムへの給電とバッテリの充電が同時に行われます。バスパワーとして引き出せる電流には上限(100mA/500mA)がありますが、システムの消費電流の変動にしたがって充電電流を増減させ、総電流がバスパワーの上限値を超えないように自動的に調整してくれます。USBを切り離すと自動的にシステムへの給電経路が切り替わり、バスパワーの代わりにバッテリが使用されるようになります。他にもACアダプタ入力、プリチャージ/リチャージ、バッテリ温度監視、3.3Vリニアレギュレータ、フォールトタイマなどなどを集積した多機能なデバイスです。Timpyとしては3.5mm×4.5mmという小さなパッケージも魅力です。 |
★ワイヤレスリモコン
名称 |
型式(メーカ) |
説明 |
マイクロコントローラ |
C8051F340 |
ヘッドフォンと同じF340です。USBが利用可能な回路にしてはありますが、まだ特に何も実装していません。 |
液晶表示モジュール |
HDM1216C-2 |
小さい表示サイズ(約30mm×40mm)ながら120×160ピクセルを表示可能なカラーグラフィック液晶表示器です。 |
DC/DCコンバータ |
MCP1253-33X50 |
液晶表示モジュールのバックライトLED駆動のためのチャージポンプです。シャットダウン端子(SHDN)をPWM制御することでバックライトを調光しています。 |
EEPROM |
AT24C1024W |
日本語表示のための漢字フォントや、ID3タグに基づくタイトル情報などを格納するための不揮発メモリです。 |
赤外線受光モジュール |
TSOP5700 |
キャリア周波数が455KHzと高いため、一般的なリモコンよりも格段に高速なデータ(およそ20Kbps位まで)を長距離飛ばせる赤外線受光モジュールです。ヘッドフォンからワイヤレスリモコンへの伝送データ量が多いために採用しました。パッケージが小さく、3V電源が利用可能なことも利点です。 |
赤外線LED |
TSAL4400 |
ヘッドフォン側の受光モジュール(PIC79603)と相性の良い発光波長950nmの赤外線LEDです。DNP331と同じφ3の砲弾型です。 |
バッテリ |
EZ 130mAh |
130mAhのリチウムポリマ電池です。容量の割に薄いのが特徴です。 |
★ヘッドフォン側 (プロセッサ:C8051F340)
プレーヤ処理部 timpy50-h-20070101.zip (41KB)
USB処理部 TimpyH-MSD-011.zip (149KB)
USB処理部の実装についてはこちらへ 【USBによるメモリカードへのアクセス】
プレーヤ処理部とUSB処理部の2つに分かれている理由はこちら 【ヘッドフォン側のファームウェア構成:KeilとSDCCの共存】
★リモコン側 (プロセッサ:C8051F340)
timpy50-r-20070101.zip (40KB)
事の発端は、シリコン・ラボラトリーズのサイトで見つけたUSBマス・ストレージのリファレンス・デザイン"USB-MSD-RD"でした。
USBは当たり前となった昨今、『面白そうなUSBネタないかなぁ』と思っていた矢先でした。
ソースをダウンロードして目を通してみると、意外にもそんなに難しくなさそうに思えました。
んじゃ、Timpyに組み込もうということで、Rev5.0計画はスタートしました。
USB-MSD-RDをカスタマイズして組み込めれば、TimpyにセットしたmicroSDカードにUSB経由でアクセスできるようになります。
リムーバブルディスクとしてPCから直接ファイル管理が可能となり、カードリーダ/ライタが要らなくなります。
併せてバスパワーでの充電も可能にできれば、外置きの充電器も不要になって一石二鳥です。市販の製品によくある形に近づけます。
しかし、やはり障害はあるものです。コンパイラです。
SiLabsの開発キットに付属のKeil製Cコンパイラは機能限定版なので、オブジェクトサイズが4Kバイトに制限されています。USB-MSD-RDのソースはKeil製Cコンパイラを前提に書かれているのですが、その4Kの制限を軽く越えてしまうために、自分用にアレンジしたものをコンパイルできないのです。
金で解決するのは良くないと思いつつ、試しにKeilの製品版の見積りを取ってみたのですが、ひと目見てあきらめました。高い。
・・・結果として、コンパイラ/アセンブラをフリーのSDCCに乗り換えることにしました。ですが私にSDCCの経験が無かったこともあって、KeilからSDCCへの移植作業は思いのほか難航しました。
これに関しては長くなるので別ページにまとめました。こちらへどうぞ 【USB-MSD-RD KeilからSDCCへの移植】
・・・一週間ほどの格闘の末、SDCC版USB-MSD-RDは何とか動くようになりました。
Rev5.0でのヘッドフォン側ファームウェアに要求される処理内容は、大きく「MP3プレーヤ機能」と「USBマス・ストレージ機能」の2つになります。
★MP3プレーヤ機能の実装方針
Rev4.0のファームウェアをRev5.0環境に移植する。ソースはKeil用に書かれたアセンブラ。
★USBマス・ストレージ機能の実装方針
SiLabsが提供しているリファレンス・デザインUSB-MSD-RDの中から必要な部分をSDCC環境へ移植する。ソースはKeilから移植したSDCC用Cおよびアセンブラ。
基本的にはこの2つのソースを統合して、USBの接続状態により排他的に機能を切り替えればよいことになります。
さてここで問題になるのは、いかにして上記2つの機能の統合するか、です。
上記のとおり、プレーヤ部のファームはKeilのアセンブラで書かれています。そしてUSB部は前項の制限によりSDCCへ浮気しました。統合に際して、USBをKeil環境へ戻すことは出来ませんから、プレーヤ部のアセンブラソースをSDCCのアセンブラに移植しようと試みました・・・一度は・・・。でもすぐにあきらめました。SDCCのアセンブラはマクロが使えないのです。
Rev4.0のソースでは引数つきマクロを多用しています。これをマクロなしのアセンブラ環境に移植するのは時間の浪費であり、全くもってモチベーションの湧かない作業に感じられました。
壁にぶち当たって途方にくれていた時・・・何気なくSDCCのマニュアルを眺めていて、偶然解決法を見つけました。そのヒントはマニュアルの『Linker
Options』の中にある次の記述でした。
『[--code-loc <Value>] The start location of the code segment, default value 0. Note when this option is used the interrupt vector table is also relocated to the given address. 』
C8051F340のプログラムメモリは64KBあります。これを前半と後半に分け、前半(0x0000〜0x7fff)をプレーヤ部用として、後半(0x8000〜)をUSB部用として使用するのです。それぞれの機能モジュールは十分32KBに収まります。またそれぞれの間に共有部分は無く、すでにそれぞれ単独で動作可能な状態にあります。それらが排他的に動作すればよいわけですから、USB部のリンカに上記のオプション『--code-loc
0x8000』を追加し、コードセグメントを0x8000番地以降に配置させれば実現できます。
ポイントは、このオプション指定によって通常0x0000番地から配置されるベクタ領域も全て指定番地へ移動することです。この例ではUSB部のベクタ領域は0x8000番地以降に配置されますので、USB部のベクタへはプレーヤ部のベクタテーブルを経由して飛ぶようにしておきます。実際のコードの抜粋を以下に示します。
cUsbCodeTop |
|
equ |
|
08000h |
|
;USB-MSD-RDコードの先頭アドレス |
・・・ | ||||||
cseg |
at 00000h |
|||||
VectorReset: |
ljmp |
Initialize |
;リセット |
|||
cseg |
at 00003h |
|||||
VectorInt0: |
ljmp |
cUsbCodeTop + $ |
;Int0 |
|||
・・・ | ||||||
cseg |
at 0007Bh |
|||||
VectorUsb0Vbus: |
ljmp |
cUsbCodeTop + $ |
;Usb0 VBUSレベル |
|||
cseg |
at 00083h |
|||||
VectorUart1: |
ljmp |
IsrUart1 |
;Uart1 |
あとはプレーヤ側、USB側のそれぞれに、USB接続状態を時々監視し、状態が変化したら他方へ機能を切り替えるため簡単な処理を加えれば準備は完了です。
以上により、デバッグの際にIDEでプレーヤ側とUSB側のどちらのプロジェクトを開くかによって、他方に影響を与えることなく作業が可能になります。つまりKeil環境とSDCC環境の共存が可能になります。
基板設計には従来どおりEAGLEを使いました。
Rev5.0の開発において最も時間を要したのは、実はこの基板設計でした。Rev4.0でもかなりキツイ思いをしたのですが、それにも増してMCU(C8051FF340)は大きくなり、USBコネクタとバッテリ充電回路が追加になり・・・と、両面板で本当に入りきるんだろうかという感じでした。
全てのネットを電気的につなぐことはこの規模ならば何の問題も無く可能です。でもちゃんと性能が出なくては意味がありません。両面板での難しさはワイヤの引き回し方とGND/電源パターンの取り方のバランスのように思います。
長い格闘の末、結局収まりました。それは次の2点を変更したことによります。
★抵抗、コンデンサ、インダクタ用のライブラリを作り変えました。
EAGLE添付のRCLライブラリではパッド寸法が大きいためにどうしても収まりませんでした。そこでROHM推奨の非常に小さなパッドを持つライブラリを新たに作成し、全面的に移行しました。
★デザインルールを更新しました。
2006年末現在のP板.comの製造仕様によれば、最小パターン幅/ギャップは0.125mmです。これに合わせて、Rev4.0では0.15mmだったデザインルールを0.127mm(5mil)に縮小しました。
併せてC8051はピンアサインが変更できることも大きな要因でした。実際、引き回しの都合で何度もピンアサインを変更しました。
結果として出来上がったのが下のパターンです。
★部品面 |
★はんだ面 |
FMチューナモジュールはRev4.0で実績のある新潟精密株式会社さんのNS953Mです。
わずか7mm角でチューナとしての機能を全て内蔵しており、外付け部品が一切不要な最新型のデバイスです。
I2Cインターフェースを通して、全機能をデジタル的に制御できます。
写真左はヘッドフォンに内蔵された基板の部品面です。右上に見える銀色の正方形がNS953Mです。
このデバイスはBGAパッケージなのですが、少々トリッキーな方法により両面板に手はんだで実装しています。
★詳しい説明はこちらへどうぞ
Timpy Rev4.0 技術情報 > FMチューナモジュール NS953M
リモコンに搭載した液晶はRev4.0と同じHantronixのHDM1216C-2です。
有効表示エリアの寸法が28.8mm×38.4mm、厚さ3.3mmと非常に小さいのが特徴です。
120×160ピクセルのカラーグラフィック表示が可能で、LEDによるバックライトが付いています。
グラフィック表示ができますので、右の写真のようにオリジナルロゴ(^^)や日本語(漢字)の表示が可能です。
★液晶表示器の制御についてはこちらへ
Timpy Rev4.0 技術情報 > カラーグラフィック液晶表示器 HDM1216C-2の制御
★日本語フォントについてはこちらへ
Timpy Rev4.0 技術情報 > 日本語フォント
★ 赤外線による双方向通信
ヘッドフォンとリモコン間は赤外線で相互通信します。
仕様はおおむねRev4.0と同じです。こちらを参照してください。
Timpy Rev4.0 技術情報 > 本体−リモコン間の赤外線通信
(準備中)
ページの先頭へ戻る |
ご質問などは掲示板へお願いします
Copyright 2006 Chiaki Nakajima.
All rights reserved.