放課後の電子工作 HOME > 超小型MP3プレーヤー [ Timpy ] > VS1053b 日本語データシート私家版

2009年12月26日 更新

VS1053b 日本語データシート私家版

このページは,Timpyシリーズでお世話になっているVLSI Solution Oy製のMP3デコーダ・チップ,VS1053のデータシートを勝手に和訳したものです.
オリジナルの文書はVS1053b Datasheet Version 1.10です.
この和訳の公開については,念のためVLSI Solution Oy社に報告する予定です.

VS1011eならこちらへ VS1011e 日本語データシート私家版

*本バージョンでの変更点について
Version 1.02→1.10の変更箇所は赤字にしてあります.些細なものも含めて全部で64箇所あります.その内,旧バージョンでの経験がある方はここここについて要チェックかもしれません.

【注意】このページの内容の一部または全部を断りなく複写複製することを禁じます.
必ず事前にご連絡ください.メール・アドレスはトップ・ページにあります.Copyright (C) 2006-2009 Chiaki Nakajima.

【免責事項】この文書の内容により利用者に損害が生じたとしても著作権者は責任を負いません.
この文書の内容の正確性は保障されません.また断りなく変更される場合があります.
 


VS1053b - Ogg Vorbis/MP3/AAC/WMA/FLAC/MIDI オーディオ・コーデック

【特長】

・以下の各フォーマットをデコード可能 −
 Ogg Vorbis
 MP3 = MPEG1および2のオーディオ・レイヤIII(CBR+VBR+ABR);
 MP1/MP2 = レイヤIおよびII(オプションとして);
 MPEG4/2 AAC-LC(PNS)およびHE-AAC v2(Level3)(SBR,PS);
 WMA 4.0/4.1/7/8/9の全プロファイル(5〜384kbps);
 FLAC(要ソフトウェア・プラグイン);
 WAV(PCM,IMA ADPCM);
 General MIDI 1 / SP-MIDIフォーマット0.
ソフトウェア・プラグインによるOgg Vorbisエンコード
IMA ADPCM / PCMステレオのエンコード.
・MP3およびWAVのストリーミング再生をサポート.
音場拡大処理 EarSpeaker
・低音(BASS)および高音(TREBLE)のコントロール.
・12〜13MHzの単一クロックで動作.
・24〜26MHzのクロックも使用可能.
・PLL方式クロック・マルチプライヤ内蔵.
・低消費電力.
・チャンネル間で位相差のない高音質ステレオDAC内蔵.
なめらかなボリューム調節を可能にするゼロクロス検出機能
・30Ω負荷を駆動できるステレオ・ヘッドフォン・アンプ.
・電源ON/OFF時のノイズを低減.
外付けDAC用のI2Sインターフェース
・アナログ用,ディジタル用,I/O用のそれぞれに分離された電源系.
・ユーザが利用可能なコード/データ用RAMを内蔵.
・シリアル方式のコントロールおよびデータ用インターフェース.
・スレーブ・コプロセッサとして使用可能.
・特殊なアプリケーション用のSPIフラッシュ・ブート.
・デバッグに便利なUART内蔵.
・ソフトウェアと最大8本の汎用I/Oピンにより機能追加が可能.
・鉛フリーのRoHS対応(グリーン)パッケージ.
 

【概説】

VS1053bはOgg Vorbis/MP3/AAC/WMA/FLAC/WAV/MIDIオーディオ・デコーダと,PCM/IMA ADPCM/Ogg Vorbisエンコーダを集積したシングル・チップICです.高性能かつ低消費電力の独自DSPコアVS_DSP4を中心に,ワーキング・データ・メモリ,内蔵デコーダと並行して動作可能なユーザ・アプリケーション用16KiBインストラクションRAM+0.5KiBデータRAM,内部コントロールおよびデータ入力のためのシリアル・インターフェース,最大8本の汎用I/Oピン,UART,高品質の可変サンプル・レート対応ステレオADC(マイク1系統,ライン1系統,ライン+マイク各1系統,ライン2系統のいずれか)とステレオDAC,ヘッドフォン・アンプ,グランド・バッファを内蔵しています.

VS1053bは,スレーブとして動作するシリアル・バスを通して,オーディオ・データのビット・ストリームを受信します.そのビット・ストリームはまずデコードされ,ディジタル・ボリューム・コントロールを通った後,18ビット・オーバサンプリング・マルチビット・シグマデルタDACへと送られます.デコード処理はシリアル方式のコントロール・バスによって制御されます.また基本的なデコード処理に加えて,例えばDSPエフェクトのような特定用途向けの機能をユーザRAM領域へ実装することも可能です.

オプションとして,ディジタル著作権管理や機器の個体識別などに利用できる固有のチップIDを製造時にプログラムして提供することが可能です.

VS1053b ブロック図

【目次】

1 ライセンス

2 免責事項

3 用語の定義

4 特性および仕様
  4.1 絶対最大定格
  4.2 推奨動作条件
  4.3 アナログ特性
  4.4 消費電力
  4.5 ディジタル特性
  4.6 スイッチング特性 - 起動,初期化

5 パッケージとピンの説明
  5.1 パッケージ
    5.1.1 LQFP-48

6 LQFP-48での接続図

7 SPIバス
  7.1 概要
  7.2 SPIバスのピン説明
    7.2.1 VS1002ネイティブ・モード(Newモード)
    7.2.2 VS1001互換モード(非推奨)
  7.3 データ・リクエスト・ピンDREQ
  7.4 シリアル・データ・インターフェース(SDI)の通信プロトコル
    7.4.1 概要
    7.4.2 VS1002ネイティブ・モード(Newモード)時のSDI
    7.4.3 VS1001互換モード時のSDI
    7.4.4 パッシブSDIモード
  7.5 シリアル・コマンド・インターフェース(SCI)の通信プロトコル
    7.5.1 概要
    7.5.2 SCIリード
    7.5.3 SCIライト
    7.5.4 SCIマルチプル・ライト
  7.6 SPIタイミング・ダイアグラム
  7.7 SM_SDINEWおよびSM_SDISHARED有効時のSPI動作例
    7.7.1 2回のSCIライト
    7.7.2 2回のSDIバイト転送
    7.7.3 SDIデータ転送中でのSCI操作

8 機能解説
  8.1 主な機能
  8.2 サポートされるオーディオ・コーデック
    8.2.1 サポートされるMP3(MPEG レイヤIII)フォーマット
    8.2.2 サポートされるMP1(MPEG レイヤI)フォーマット
    8.2.3 サポートされるMP2(MPEG レイヤII)フォーマット
    8.2.4 サポートされるOgg Vorbisフォーマット
    8.2.5 サポートされるAAC(ISO/IEC13818-7およびISO/IEC14496-3)フォーマット
    8.2.6 サポートされるWMAフォーマット
    8.2.7 サポートされるFLACフォーマット
    8.2.8 サポートされるRIFF WAVフォーマット
    8.2.9 サポートされるMIDIフォーマット
  8.3 VS1053bのデータ・フロー
  8.4 音場拡大処理 EarSpeaker
  8.5 シリアル・データ・インターフェース(SDI)
  8.6 シリアル・コントロール・インターフェース(SCI)
  8.7 SCIレジスタ
    8.7.1 SCI_MODE(RW)
    8.7.2 SCI_STATUS(RW)
    8.7.3 SCI_BASS(RW)
    8.7.4 SCI_CLOCKF(RW)
    8.7.5 SCI_DECODE_TIME(RW)
    8.7.6 SCI_AUDATA(RW)
    8.7.7 SCI_WRAM(RW)
    8.7.8 SCI_WRAMADDR(W)
    8.7.9 SCI_HDAT0およびSCI_HDAT1(R)
    8.7.10 SCI_AIADDR(RW)
    8.7.11 SCI_VOL(RW)
    8.7.12 SCI_AICTRL[x](RW)

9 操作説明
  9.1 クロックについて
  9.2 ハードウェア・リセット
  9.3 ソフトウェア・リセット
  9.4 低消費電力モード
  9.5 再生とデコード
    9.5.1 ファイル全体を再生する
    9.5.2 再生の中断
    9.5.3 高速再生
    9.5.4 無音での早送り/巻戻し
    9.5.5 正しいデコード時間を維持するには
  9.6 PCMデータの入力
  9.7 Ogg Vorbisで録音するには
  9.8 PCM/ADPCMで録音するには
    9.8.1 ADPCMモードを有効にする
    9.8.2 PCM/IMA ADPCMデータのリード
    9.8.3 PCM RIFFヘッダの付加
    9.8.4 IMA ADPCM RIFFヘッダの付加
    9.8.5 ADPCMデータの再生
    9.8.6 サンプル・レートについて
    9.8.7 録音モニタのボリューム
  9.9 SPIブート
  9.10 リアルタイムMIDI
  9.11 エクストラ・パラメータ
    9.11.1 共通パラメータ
    9.11.2 WMA
    9.11.3 AAC
    9.11.4 MIDI
    9.11.5 Ogg Vorbis
  9.12 SDIテスト
    9.12.1 正弦波テスト
    9.12.2 ピン・テスト
    9.12.3 SCIテスト
    9.12.4 メモリ・テスト
    9.12.5 新しい正弦波およびスイープ・テスト

10 VS1053b内蔵レジスタ
  10.1 本章を必要とするユーザ
  10.2 プロセッサ・コア
  10.3 VS1053bメモリ・マップ
  10.4 SCIレジスタ
  10.5 シリアル・データ・レジスタ
  10.6 DACレジスタ
  10.7 GPIOレジスタ
  10.8 インタラプト・レジスタ
  10.9 ウォッチドッグ v1.0 2002-08-26
    10.9.1 レジスタ
  10.10 UART v1.1 2004-10-09
    10.10.1 レジスタ
    10.10.2 ステータス UARTx_STATUS
    10.10.3 データ UARTx_DATA
    10.10.4 データ・ハイ UARTx_DATAH
    10.10.5 分周器 UARTx_DIV
    10.10.6 割り込みと動作
  10.11 タイマ v1.0 2002-04-23
    10.11.1 レジスタ
    10.11.2 TIMER_CONFIGの設定
    10.11.3 TIMER_ENABLEの設定
    10.11.4 タイマX開始値 TIMER_Tx[L/H]
    10.11.5 タイマXカウンタ TIMER_TxCNT[L/H]
    10.11.6 割り込み
  10.12 VS1053bのオーディオ・パス
  10.13 I2S DACインターフェース
    10.13.1 レジスタ
    10.13.2 I2S_CONFIGの設定

11 VS1053バージョン履歴
  11.1 VS1033cとVS1053a/bファームウェアの相違点,2007-03-08

12 本文書の改版履歴

13 連絡先
 


【図一覧】

1 LQFP-48のピン配置
2 LQFP-48パッケージのVS1053b
3 LQFP-48での標準接続図
4 BSYNC信号 - 1バイト転送時
5 BSYNC信号 - 2バイト転送時
6 SCIワード・リード
7 SCIワード・ライト
8 SCIマルチプル・ワード・ライト
9 SPIタイミング・ダイアグラム
10 2回のSCI操作
11 2回のSDIバイト転送
12 SCI操作によって分断されたSDIデータ転送
13 VS1053bのデータ・フロー
14 典型的な頭内部の音像 対 EarSpeakerによる音源の外在化
15 RS232シリアル・インターフェース・プロトコル
16 VS1053b ADCおよびDACデータ・パス
17 I2Sインターフェース,192KHz
 


1 ライセンス

MPEGレイヤ3オーディオ・デコーディング技術は,Fraunhofer IISおよびThomsonよりライセンス供与を受けています.
注意:もしレイヤIおよびレイヤIIのデコード機能を有効にする場合には,それらのフォーマットを使用することにより生じうる全ての特許問題について責任を負う必要があります.MPEG1.0/2.0レイヤIIIのジョイント・ライセンスの範囲は,レイヤIおよびIIに係る特許の全てを網羅していません.

VS1053bはMicrosoftによるWMAデコーディング技術を包含しています.
本製品はMicrosoftが所有する特定の知的所有権により保護されており,同社によるライセンスがない限り本製品の使用や更なる頒布はできません

VS1053bは,その使用に当たってVia Licensing Corporation他各特許権者の正規ライセンスが必要なAAC技術(ISO/IEC13818-7およびISO/IEC14496-3)を包含しています.

VS1053bはCoding Technologiesが開発したスペクトラル・バンド・レプリケーション(SBR)およびパラメトリック・ステレオ(PS)技術を包含しています.SBRのライセンスについてはVia License Corporationを通して,MPEG4に含まれる形で取り扱われます.PSのライセンスについてはCoding Technologiesにより処理されます.詳細はhttp://www.codingtechnologies.com/licensing/aacplus.htmを参照してください.

我々の知る限り,最終製品が顧客ライセンスを別途必要とするであろう特定のフォーマット(MPEG1.0/2.0レイヤIおよびII,WMA,AAC)を再生しない場合には,対応するライセンスは不要です.MPEGレイヤIおよびIIのデコーディングはデフォルトで無効になっており,WMAとAACフォーマットを除外することはSCI_HDAT1レジスタの値を用いることで容易に実現できます.併せてPSおよびSBRのデコーディングも個別に無効化が可能です.
 


2 免責事項

特性や図は変更される場合があります.

[訳注] 本バージョンから暫定版の注記が削除され,正式版となりました.


3 用語の定義

B バイト.8ビット.
b ビット.
Ki "Kibi" = 2^10 = 1024 (IEC 60027-2).
Mi "Mebi" = 2^20 = 1048576 (IEC 60027-2).
VS_DSP VLSI SolutionのDSPコア.
W ワード.VS_DSPのインストラクション・ワードは32ビット幅,データ・ワードは16ビット幅です.
 


4 特性および仕様

4.1 絶対最大定格

パラメータ 記号 Min Max 単位
アナログ電源電圧 AVDD -0.3 3.6 V
ディジタル電源電圧 CVDD -0.3 1.85 V
I/O電源電圧 IOVDD -0.3 3.6 V
非電源ピン電流[1]     ±50 mA
各ディジタル入力電圧   -0.3 IOVDD+0.3[2] V
動作温度   -30 +85
保存温度   -65 +150

[1] これを超える電流はラッチアップの原因となります.
[2] 3.6Vを超えてはいけません.
 

4.2 推奨動作条件

パラメータ 記号 Min Typ Max 単位
動作周囲温度   -30   +85
アナログおよびディジタル・グランド[1] AGND DGND   0.0   V
アナログ電源電圧,REF=1.23Vの場合 AVDD 2.5 2.8 3.6 V
アナログ電源電圧,REF=1.65Vの場合[2] AVDD 3.3 3.3 3.6 V
ディジタル電源電圧 CVDD 1.7 1.8 1.85 V
I/O電源電圧 IOVDD 1.8 2.8 3.6 V
クロック入力周波数[3] XTALI 12 12.288 13 MHz
内部クロック周波数 CLKI 12 36.864 55.3 MHz
内部クロック・マルチプライヤ[4]   1.0×[訳注1] 3.0× 4.5×  
マスタ・クロック・デューティ比   40 50 60 %

[1] ラッチアップ耐性向上のため,デバイスにできるだけ近い箇所にて両者を接続してください.
[2] リファレンス電圧は1.23Vまたは1.65Vのいずれかにデバイス内部で切り替えられます.8.7.2項を参照してください.
[3] 正規の速度で再生可能なサンプル・レートの最大値はXTALI/256(SM_CLK_RANGEがセットされている場合はXTALI/512)です.
  したがって,サンプル・レート48KHzを本来の速度で再生するためには,XTALIは最低でも12.288MHz(24.576MHz)でなければなりません.
[4] リセット時の値は1.0×です.推奨値はSC_MULT=3.5×,SC_ADD=1.0×(SCI_CLOCKF=0x8800)です.
  CLKIが最大値を超えないように注意して設定してください.

[訳注1] 本文書ではこの表記が頻繁に出てきます.とりあえず表記法は原文のままとしますが,読む際には"1.0倍"と読み替えると良いでしょう.
 

4.3 アナログ特性

別途規定がない限り:AVDD=3.3V,CVDD=1.8V,IOVDD=2.8V,REF=1.65V,TA=-30〜+85℃,XTALI=12〜13MHz,内部クロック・マルチプライヤ=3.5×.
DACの測定条件は1307.894Hzのフルスケール正弦波出力時で測定バンド幅20〜20000Hz,アナログ出力負荷:LEFT-GBUF間30Ω,RIGHT-GBUF間30Ω.マイクロフォンの測定条件は振幅48mVpp,fs=1KHz,ライン入力の測定条件は振幅1.26V,fs=1KHz.

パラメータ 記号 Min Typ Max 単位
DAC分解能     18   ビット
全高調波歪み THD     0.07 %
第3次高調波歪み       0.02 %
ダイナミック・レンジ(DAC非ミュート,Aウェイト) IDR   100   dB
S/N比(フルスケール信号) SNR   94   dB
チャンネル間分離(クロス・トーク),600Ω+GBUF     80   dB
チャンネル間分離(クロス・トーク),30Ω+GBUF     53   dB
チャンネル間ゲイン誤差   -0.5   0.5 dB
周波数特性   -0.1   0.1 dB
フルスケール出力電圧(ピーク-ピーク値)   1.64 1.85[1] 2.06 Vpp
リニア位相からの偏移       5 °
アナログ出力負荷抵抗 AOLR 16 30[2]   Ω
アナログ出力負荷容量       100 pF
マイクロフォン入力アンプ・ゲイン MICG   26   dB
マイクロフォン入力振幅     48 140[3] mVpp AC
マイクロフォン入力全高調波歪み MTHD   0.03 0.07 %
マイクロフォン入力S/N比 MSNR 60 70   dB
マイクロフォン入力インピーダンス,1ピンあたり     45  
ライン入力振幅     2500 2800[3] mVpp AC
ライン入力全高調波歪み LTHD   0.005 0.014 %
ライン入力S/N比 LSNR 85 90   dB
ライン入力インピーダンス     80  

[1] モノラル差動出力接続ならば3.0V得られます.
[2] AOLRはこの値より小さくできますが,歪み特性の標準値が得られない場合があります.
[3] 振幅が標準値を超えると高調波歪みが増加します.
 

4.4 消費電力

測定条件はMPEG1.0 レイヤIII 128kbit/sサンプルの正弦波再生時,ボリューム最大,内部クロック・マルチプライヤ=3.0×,TA=+25℃.

パラメータ Min Typ Max 単位
AVDD消費電流(リセット時)   0.6 5.0 μA
CVDD消費電流(CVDD=1.8V,リセット時)   12 20.0 μA
AVDD消費電流(正弦波テスト時,30Ω+GBUF) 30 36.9 60 mA
CVDD消費電流(CVDD=1.8V,正弦波テスト時) 8 10 15 mA
AVDD消費電流(無負荷時)   5   mA
AVDD消費電流(負荷30Ω時)   11   mA
AVDD消費電流(30Ω+GBUF時)   11   mA
CVDD消費電流(CVDD=1.8V)   11   mA

 

4.5 ディジタル特性

パラメータ Min Max 単位
"H"レベル入力電圧 0.7×CVDD IOVDD+0.3[1] V
"L"レベル入力電圧 -0.2 0.3×CVDD V
"H"レベル出力電圧(XTALO=-0.1mA時) 0.7×IOVDD   V
"L"レベル出力電圧(XTALO=0.1mA時)   0.3×IOVDD V
"H"レベル出力電圧(Io=-1.0mA時) 0.7×IOVDD   V
"L"レベル出力電圧(Io=1.0mA時)   0.3×IOVDD V
入力リーク電流 -1.0 1.0 μA
SPI入力クロック周波数[2]   CLKI/7 MHz
全出力ピン立ち上がり時間(負荷容量=50pF)   50 ns

[1] 3.6Vを超えてはいけません.
[2] この値はSCIリードに適用されます.SCIライトおよびSDIライトではCLKI/4です.
 

4.6 スイッチング特性 - 起動,初期化

パラメータ 記号 Min Max 単位
XRESETアクティブ時間   2   XTALI
XRESETインアクティブからソフトウェア・レディまでの時間   22000 50000[1] XTALI
パワー・オン・リセット時のCVDD立上り時間   10   V/s

[1] 初期化が完了するとDREQが"H"になります.それまではデータ,コマンドともに何も送信しないでください.
 


5 パッケージとピンの説明

5.1 パッケージ

LQFP-48は鉛フリーでRoHS準拠のパッケージです.RoHSとは"Directive 2002/95/EC on the restriction of the use of certain hazardous substances in electrical and electronic equipment"の短縮形です.
 

5.1.1 LQFP-48

図1
図1 LQFP-48のピン配置

LQFP-48パッケージの外形寸法はhttp://www.vlsi.fiにあります.
 

図2
図2 LQFP-48パッケージのVS1053b

 

ピン名称 LQFP-48
ピン番号
ピンの
種類
機能
MICP/LINE1 1 AI 差動マイク入力(+),バイアス付き / ライン入力1
MICN 2 AI 差動マイク入力(−),バイアス付き
XRESET 3 DI アクティブ"L"の非同期リセット入力.シュミット・トリガ
DGND0 4 DGND コアおよびI/Oグランド
CVDD0 5 CPWR コア電源
IOVDD0 6 IOPWR I/O電源
CVDD1 7 CPWR コア電源
DREQ 8 DO 入力バスのデータ・リクエスト
GPIO2/DCLK[1] 9 DIO 汎用入出力2 / シリアル入力データ・クロック
GPIO3/SDATA[1] 10 DIO 汎用入出力3 / シリアル・データ入力
GPIO6/I2S_SCLK[3] 11 DIO 汎用入出力6 / I2S_SCLK
GPIO7/I2S_SDATA[3] 12 DIO 汎用入出力7 / I2S_SDATA
XDCS/BSYNC[1] 13 DI データ用チップ・セレクト / バイト同期
IOVDD1 14 IOPWR I/O電源
VCO 15 DO テスト専用端子(クロックVCO出力)
DGND1 16 DGND コアおよびI/Oグランド
XTALO 17 AO クリスタル出力
XTALI 18 AI クリスタル入力
IOVDD2 19 IOPWR I/O電源
DGND2 20 DGND コアおよびI/Oグランド
DGND3 21 DGND コアおよびI/Oグランド
DGND4 22 DGND コアおよびI/Oグランド
XCS 23 DI チップ・セレクト入力(アクティブ"L")
CVDD2 24 CPWR コア電源
GPIO5/I2S_MCLK[3] 25 DIO 汎用入出力5 / I2S_MCLK
RX 26 DI UART受信.不使用ならIOVDDに接続すること
TX 27 DO UART送信 
SCLK 28 DI シリアル・バス用クロック
SI 29 DI シリアル入力
SO 30 DO3 シリアル出力
CVDD3 31 CPWR コア電源
XTEST 32 DI テスト用予約ピン.IOVDDへ接続すること
GPIO0 33 DIO 汎用入出力0(SPIBOOT).100kΩでプルダウンすること[2]
GPIO1 34 DIO 汎用入出力1
GND 35 DGND I/Oグランド
GPIO4/I2S_LROUT[3] 36 DIO 汎用入出力4 / I2S_LROUT
AGND0 37 APWR アナログ・グランド.ロー・ノイズ・リファレンス・ピン
AVDD0 38 APWR アナログ電源
RIGHT 39 AO 右チャンネル出力
AGND1 40 APWR アナログ・グランド
AGND2 41 APWR アナログ・グランド
GBUF 42 AO ヘッドフォン用コモン・バッファ.グランドへの接続不可!
AVDD1 43 APWR アナログ電源
RCAP 44 AIO リファレンス電圧用フィルタ・コンデンサ接続ピン
AVDD2 45 APWR アナログ電源
LEFT 46 AO 左チャンネル出力
AGND3 47 APWR アナログ・グランド
LINE2 48 AI ライン入力2(右チャンネル)

[1] Newモードの場合は"/"の左側の機能が有効になり,互換モードでは右側の機能が有効になります.
[2] プルダウン抵抗が無い場合はSPIブートが試行されます.詳細は9.9項を参照してください.
[3] I2S_CF_ENAが"0"の場合,各ピンはGPIO(汎用入出力)として機能します.詳細は10.13項を参照してください.
 

ピンの種類:

種類 説明
DI ディジタル入力,CMOS入力パッド
DO ディジタル出力,CMOS入力パッド
DIO ディジタル入出力
DO3 ディジタル出力,CMOSトライステート出力パッド
AI アナログ入力
AO アナログ出力
AIO アナログ入出力
APWR アナログ電源供給ピン
DGND コアおよびI/Oグランド・ピン
CPWR コア電源供給ピン
IOPWR I/O電源供給ピン

 


6 LQFP-48での接続図

図3
図3 LQFP-48での標準接続図

図3にVS1053の標準的な回路図を示します.

図中の注1(note1):マイクロフォン入力とライン入力のどちらも接続可能ですが,両方を同時に接続することはできません.

注意:この接続図はSM_SDINEWが有効に設定されている場合のものです(8.7.1項を参照).さらにSM_SDISHAREも有効にする場合には,xDCSを"L"または"H"に接続する必要があります(7.2.1項を参照).

コモン・バッファGBUFはヘッドフォンのコモン電圧(1.23V)として使用できます.その場合は出力ラインに必要な直流カット用大容量コンデンサを省略できるため,VS1053bのオーディオ出力ピンとヘッドフォン・コネクタとの直結が可能になります.

いかなる場合でもGBUFをグランドに接続してはいけません.もしGBUFを使用しない場合にはLEFTおよびRIGHT出力にカップリング・コンデンサを接続してください.またGBUFを使用していなくてもその安定状態を維持するために抵抗およびコンデンサが必要です.詳しくはアプリケーション・ノートを参照してください.

不使用のGPIOピンは抵抗でプルダウンしてください.ライン入力およびマイクロフォン入力を使用しない場合,該当ピンはオープンにします.

UARTを使用しない場合には,RXをIOVDDに接続し,TXはオープンにしてください.

XTALOに他の負荷を接続しないでください.
 


7 SPIバス

7.1 概要

SPIは,元々モトローラのデバイスで使われ始めたバス方式で,VS1053bのシリアル・データ・インターフェースSDI(7.4項,8.5項)およびシリアル・コントロール・インターフェースSCI(7.5項,8.6項)の両方に採用されています.
 

7.2 SPIバスのピン説明

7.2.1 VS1002ネイティブ・モード(Newモード)

SM_SDINEWを"1"にセットするとこのモードが有効になります(起動時のデフォルト).この時,DCLKとSDATAはデータ転送のためには不要となり,いずれも汎用入出力ピンとして使用できるようになります(GPIO2,GPIO3).またBSYNCピンはデータ・インターフェース・チップ・セレクト(XDCS)機能に置き換えられます.

SDIピン

SCIピン

説明

XDCS

XCS

アクティブ"L"のチップ・セレクト入力です.このピンを"H"にするとシリアル・インターフェースは強制的にスタンバイ・モードになり,その時点での操作は終了されます.さらにシリアル出力(SOピン)は強制的にハイ・インピーダンス状態になります.もしSM_SDISHAREが"1"ならばXDCSは使われません.代わりにそれに相当する信号が,XCSの反転によって内部的に生成されます.

SCK

シリアル・クロック入力です.このクロックは内部でレジスタ・インターフェースのマスタ・クロックとしても使われます.
SCKは断続的,連続的のどちらも可能です.いずれの場合でも,XCSが"L"になった後の最初の立上りエッジが1番目のビットの取り込みタイミングとなります.

SI

シリアル入力です.チップ・セレクトが有効ならば,SCKの立上りエッジにてSIがサンプルされます.

SO

シリアル出力です.リード動作時,SCKの立下りエッジにてデータがシフト出力されます.
ライト動作においてSOはハイ・インピーダンス状態を保持します.

 

7.2.2 VS1001互換モード(非推奨)

SM_SDINEWが"0"のとき,このモードになります.このモードでは,DCLK,SDATA,BSYNCピンの機能がそのまま有効になります.

SDIピン

SCIピン

説明

XCS

アクティブ"L"のチップ・セレクト入力です.このピンを"H"にするとシリアル・インターフェースは強制的にスタンバイ・モードになり,その時点での操作は終了されます.さらにシリアル出力(SOピン)は強制的にハイ・インピーダンス状態になります.

BSYNC

SDIデータはBSYNCの立上りエッジをもって同期が取られます.

DCLK

SCK

シリアル・クロック入力です.このクロックは内部でレジスタ・インターフェースのマスタ・クロックとしても使われます.
SCKは断続的,連続的のどちらも可能です.いずれの場合でも,XCSが"L"になった後の最初の立上りエッジが1番目のビットの取り込みタイミングとなります.

SDATA

SI

シリアル入力です.XCSが"L"ならば,SCKの立上りエッジにてSIがサンプルされます.

SO

シリアル出力です.リード動作時,SCKの立下りエッジにてデータがシフト出力されます.
ライト動作においてSOはハイ・インピーダンス状態を保持します.

 

7.3 データ・リクエスト・ピンDREQ

DREQピン/信号は,VS1053bに内蔵された2048バイトのFIFOが受信可能かどうかを示します.DREQが"H"ならば最低32バイトのSDIデータ,またはSCIコマンド1個を入力できます.DREQはストリーム・バッファが一杯のとき,またはSCIコマンドの実行中"L"になります.

32バイトの安全領域により,32バイト以下のSDIデータならば送り手はDREQの状態をチェックすることなく連続して送ることが出来ます.これは低速なマイクロコントローラによるVS1053bの制御をより容易にします.

注意:DREQはバイトの転送途中などを含め不特定のタイミングでレベルが変化します.したがって,DREQは次のバイト・データを送出できるかどうかを決めるためだけに使用してください.すでに開始したバイト転送を中断してはいけません.

注意:VS1002以前のVS10XX製品において,DREQはSDI専用でした.VS1053bにおいてDREQはSCIのステータス表示としても使用されます.

DREQが"L"であるにもかかわらず,SCIコマンドを送りたい場合があり得ます.これはDREQがSDIとSCIで共用されているためであって,SCIコマンドが実行中だからなのかSDIが受信可能でないからなのか判別できないことによります.このような場合には,SCIコマンドの後に十分長いディレイを設けて,それらの全てが確実に実行されるようにする必要があります.8.7項のSCIレジスタ一覧に,各レジスタ・ライトに対する実行時間のワーストケースが示してあります.
 

7.4 シリアル・データ・インターフェース(SDI)の通信プロトコル

7.4.1 概要

シリアル・データ・インターフェースはスレーブ・モードで動作します.したがってDCLK信号は外部から供給する必要があります.データ(SDATA信号)を取り込むタイミングは設定によりDCLKの立上り,立下りのどちらでも可能です(8.7項を参照).

VS1053bへ入力されるデータは"バイト同期"が取られていることが必要です.SDIデータ・バイトのビット順はSCI_MODEの設定(8.7.1項)によってMSbファーストまたはLSbファーストを選択できます.

VS1053b内部のファームウェアはSDIがサポートする最高のビット・レートでの受信が可能です.

[訳注]:"バイト同期"とは,データの送り手と受け手の両者間においてビット列のバイト境界を一致させることを意味します)
 

7.4.2 VS1002ネイティブ・モード(Newモード)時のSDI

VS1002ネイティブ・モード(SM_NEWMODEが"1")では,XDCS信号によりバイト同期が行われます.
データ・バイトの転送中はXDCSの状態が変化しないようにしてください.仮にVS1053bが実装された基板上でグリッチなどが発生しても常にバイト同期を維持できるよう,例えばディスク・データのブロック送出毎にXDCSのレベルを遷移させ,ホストとVS1053bの同期を確実なものにしてください.

SM_SDISHAREが"1"に設定されている場合には,XDCS信号はXCS入力の反転信号によって内部的に生成されます.

新規の設計ではVS1002ネイティブ・モードの採用が推奨されます.
 

7.4.3 VS1001互換モード時のSDI(非推奨)

図4
図4 BSYNC信号 - 1バイト転送時

VS1001互換モードの場合には,入力ビット・ストリームに対してバイト境界の補正を確実に行うための信号BSYNCを用意する必要があります.BSYNC信号が"H"となった後の最初のサンプリング・エッジ(極性設定により立上りまたは立下り)でのデータが,バイトの最初のビットとみなされます.このビットはLSbファースト設定の場合はLSbとして,MSbファースト設定の場合はMSbとして扱われます.そしてバイトの最終ビットを受信したとき,BSYNCが"H"のままであった場合には,続く8ビットも有効なデータとして引き続き取り込まれます.

図5
図5 BSYNC信号 - 2バイト転送時

 

7.4.4 パッシブSDIモード

SM_NEWMODE="0"かつSM_SDISHARE="1"に設定した場合,VS1001互換モードと動作が若干異なり,BSYNCが"1"の間に限りビットが取り込まれます.またこの場合もBSYNCの立上りエッジが同期のために使用されます.
 

7.5 シリアル・コマンド・インターフェース(SCI)の通信プロトコル

7.5.1 概要

シリアル・コマンド・インターフェースSCI(8.6項)のプロトコルは,常にインストラクション・バイトとアドレス・バイト,そして16ビットのデータ・ワードで構成されます.リード,ライトの各操作により,各レジスタの内容を読み,書きできます.データ・ビットは常にクロックの立上りエッジでサンプルされます.したがってデータの更新はクロックの立下りで行うようにして下さい.各バイトは常にMSbファーストで送受信されます.XCSは操作の間"L"を維持する必要があります.また必要に応じて任意のビット間隔を延長してもかまいません.

操作は8ビットのインストラクション・バイト(オペコード)の値により規定されます.サポートされているインストラクションはレジスタのリードとライトです.次の表を参照してください.

インストラクション
名前 オペコード 操作
READ 0b00 0011 リード・データ
WRITE 0b00 0010 ライト・データ

注意:VS1053bは各SCI操作の直後,DREQに"L"を出力します."L"の継続時間は操作の内容によって異なります.DREQが"L"の間は,次のSCI/SDI操作を完了してはいけません.
 

7.5.2 SCIリード

図6
図6 SCIワード・リード

VS1053bの内部レジスタは次の手順で読み出せます(図6).まず,XCSを"L"にしてデバイス・セレクトを有効にします.次に,リード・オペコード(0x3),8ビットのレジスタ・アドレス,2バイトのダミー・データを順次SIへ送信します.ダミー・データの値は何でもかまいません.図6のとおり,このダミー・データの送出と並行して,送られたアドレスに対応するレジスタの内容16ビットが,SOピンからシフト出力されます.

シフト出力の完了後はXCSを"H"に戻して下さい.

このリード操作の内部処理時に,わずかの期間DREQが"L"になります.これは非常に短期間なので,特に配慮は必要ありません.
 

7.5.3 SCIライト

図7
図7 SCIワード・ライト

VS1053bの内部レジスタへは次の手順でライトできます(図7).まず,XCSを"L"にしてデバイス・セレクトを有効にします.次に,ライト・オペコード(0x2),8ビットのレジスタ・アドレス,2バイトのライト・データを順次SIへ送信します.

最終クロックが送られた後に,ライト・シーケンスを終了させるためXCSを"H"にして下さい.

最後のビットが書き込まれた後,DREQが"L"に駆動され,内部処理が実行中であることを示します(図7の"execution").この実行時間はレジスタおよびそのライト値によって変動します(詳細は8.7項を参照).もしもその最大時間が,マイクロコントローラによる次のSCIコマンドまたはSDIバイト送出に要する時間よりも長い場合,そのSCI/SDI操作の完了前にDREQの状態を確認する(訳注:DREQ="H"を待つ)必要があります.
 

7.5.4 SCIマルチプル・ライト

図8
図8 SCIマルチプル・ワード・ライト

図8に示すように,VS1053bでは同一のSCIレジスタに複数個のデータを連続してライトすることにより,レジスタの内容を高速に更新することが可能です.シングル・ライトとの主な違いは,データ・ワードの最終ビット送出後,XCSが"H"に立上る代わりに,次のデータ・ワードが続けて送られる点です.最後のデータ・ワード送出後は,シングル・ワード・ライトと同様に,XCSを"H"にします.

最後のビットが書き込まれた後,DREQが"L"に駆動され,内部処理が実行中であることを示します(図7の"execution").この実行時間はレジスタおよびそのライト値によって変動します(詳細は8.7項を参照).もしもその最大時間が,マイクロコントローラによる次のSCIコマンドまたはSDIバイト送出に要する時間よりも長い場合,そのSCI/SDI操作の完了前にDREQの状態を確認する(訳注:DREQ="H"を待つ)必要があります.
 

7.6 SPIタイミング・ダイアグラム

図9
図9 SPIタイミング・ダイアグラム

記号 Min Max 単位
tXCSS 5   ns
tSU 0   ns
tH 2   CLKI周期
tZ 0   ns
tWL 2   CLKI周期
tWH 2   CLKI周期
tV 2+(25ns[1])[訳注1]   CLKI周期
tXCSH 1   CLKI周期
tXCS 2   CLKI周期
tDIS   10 ns

[1] 25nsはピンの負荷が容量100pFの場合です.容量が小さい場合,この時間は短くなります.

[訳注1]:この値は最小値(Min)ではなく最大値(Max)の間違いであると思われます.

注意:タイミングが内部クロックCLKIにより規定されている項目がありますが,デバイスは必ず1.0×モードで起動しますので,その時CLKI=XTALIとなります.SCI_CLOCKFを通してより速いクロックを設定し,DREQの立上りを待った後では,SPIの速度も速くすることができます.

注意:tWL+tWH+tHは6×CLKI+25nsであることから,SCIリードの最高速はCLKI/7となります.
 

7.7 SM_SDINEWおよびSM_SDISHARED有効時のSPI動作例

7.7.1 2回のSCIライト

図10
図10 2回のSCI操作

図10は連続する2回のSCI操作を示しています.操作ごとにxCSを"H"にして,インアクティブ状態を作る必要があることに注意してください.併せてDREQも図の要件を満たす必要があります.
 

7.7.2 2回のSDIバイト転送

図11
図11 2回のSDIバイト転送

図11のとおり,SDIデータはxCSの立上りエッジをもって同期が取られます.しかし個々のバイトごとに同期を取る必要はありません.
 

7.7.3 SDIデータ転送中でのSCI操作

図12
図12 SCI操作によって分断されたSDIデータ転送

図12は2つのSDI操作間にSCI操作が行われる場合を示しています.xCSのエッジはSDIおよびSCIの両方に対して同期を取るために使用されます.DREQについても図の要件を満たすようにしてください.
 


8 機能解説

8.1 主な機能

VS1053bは独自のディジタル・シグナル・プロセッサVS_DSPをベースとしています.さらにOgg Vorbis,MP3,AAC,WMA,WAV PCM+ADPCMオーディオのデコードに必要なプログラムおよびデータ・メモリを始めとして,MIDIシンセサイザ,シリアル・インターフェース,マルチ・レートのステレオ・オーディオDAC,アナログ出力アンプとフィルタを全て内蔵しています.併せてマイクロフォン・アンプかつ/またはラインレベル入力とステレオA/Dコンバータを使用したPCM/ADPCMオーディオ・エンコーディングも可能です.ソフトウェア・プラグインを使用すれば,高音質のOgg Vorbisフォーマットによる録音に加えて,FLACによるロスレス・デコードも可能です.またデバッグ用にUARTが用意されています.
 

8.2 サポートされるオーディオ・コーデック

凡例
記号 説明
+ サポートされるフォーマット
? サポートされるが,完全にテストされていないフォーマット
- サポートされないフォーマット
  存在しないフォーマット

 

8.2.1 サポートされるMP3(MPEG レイヤIII)フォーマット

MPEG 1.0[1]:

サンプル・レート/Hz ビット・レート/kbit/s
32 40 48 56 64 80 96 112 128 160 192 224 256 320
48000  +   +   +   +   +   +   +   +   +   +   +   +   +   + 
44100  +   +   +   +   +   +   +   +   +   +   +   +   +   + 
32000  +   +   +   +   +   +   +   +   +   +   +   +   +   + 

MPEG 2.0[1]:

サンプル・レート/Hz ビット・レート/kbit/s
8 16 24 32 40 48 56 64 80 96 112 128 144 160
24000  +   +   +   +   +   +   +   +   +   +   +   +   +   + 
22050  +   +   +   +   +   +   +   +   +   +   +   +   +   + 
16000  +   +   +   +   +   +   +   +   +   +   +   +   +   + 

MPEG 2.5[1]:

サンプル・レート/Hz ビット・レート/kbit/s
8 16 24 32 40 48 56 64 80 96 112 128 144 160
12000  +   +   +   +   +   +   +   +   +   +   +   +   +   + 
11025  +   +   +   +   +   +   +   +   +   +   +   +   +   + 
8000  +   +   +   +   +   +   +   +   +   +   +   +   +   + 

[1] 併せて可変ビット・レート(VBR)もサポートされます.
 

8.2.2 サポートされるMP1(MPEG レイヤI)フォーマット

注意:レイヤI / IIのデコードにはSCI_MODEレジスタ設定による明確な有効化が必要です.

MPEG 1.0:

サンプル・レート/Hz ビット・レート/kbit/s
32 64 96 128 160 192 224 256 288 320 352 384 416 448
48000  +   +   +   +   +   +   +   +   +   +   +   +   +   + 
44100  +   +   +   +   +   +   +   +   +   +   +   +   +   + 
32000  +   +   +   +   +   +   +   +   +   +   +   +   +   + 

MPEG 2.0:

サンプル・レート/Hz ビット・レート/kbit/s
32 48 56 64 80 96 112 128 144 160 176 192 224 256
24000  ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ? 
22050  ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ? 
16000  ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ? 

 

8.2.3 サポートされるMP2(MPEG レイヤII)フォーマット

注意:レイヤI / IIのデコードにはSCI_MODEレジスタ設定による明示的な有効化が必要です.

MPEG 1.0:

サンプル・レート/Hz ビット・レート/kbit/s
32 48 56 64 80 96 112 128 160 192 224 256 320 384
48000  +   +   +   +   +   +   +   +   +   +   +   +   +   + 
44100  +   +   +   +   +   +   +   +   +   +   +   +   +   + 
32000  +   +   +   +   +   +   +   +   +   +   +   +   +   + 

MPEG 2.0:

サンプル・レート/Hz ビット・レート/kbit/s
8 16 24 32 40 48 56 64 80 96 112 128 144 160
24000  +   +   +   +   +   +   +   +   +   +   +   +   +   + 
22050  +   +   +   +   +   +   +   +   +   +   +   +   +   + 
16000  +   +   +   +   +   +   +   +   +   +   +   +   +   + 

 

8.2.4 サポートされるOgg Vorbisフォーマット

パラメータ Min Max 単位
チャンネル   2  
ウィンドウ・サイズ 64 4096 サンプル
サンプル・レート   48000 Hz
ビット・レート   500 kbit/sec

サポートされるのはfloor 1だけです.現行のエンコーダでfloor 0を使うものは知られていません.1チャンネルおよび2チャンネルのOgg Vorbisファイルは全てこのデコーダで再生可能と考えられます.
 

8.2.5 サポートされるAAC(ISO/IEC13818-7およびISO/IEC14496-3)フォーマット

VS1053bはMPEG2-AAC-LC-2.0.0.0およびMPEG4-AAC-LC-2.0.0.0ストリーム,つまり2チャンネルまでのLow Complexity(LC)プロファイルのデコードが可能です.ストリームが複数のエレメントかつ/またはエレメント・タイプを含んでいる場合は,16シングル・チャンネル,16チャンネル・ペア,16low-frequencyエレメントから選択できます.デフォルトではストリーム中で最初に現れたものが選択されます.

Dynamic range control(DRC)もサポートしており,DRCインフォメーションに含まれるマテリアルのダイナミック・レンジをユーザ側で制限または拡張可能です.

SineウィンドウおよびKaiser-Bessel-derivedウィンドウが共にサポートされています.

MPEG4 pseudo-random noise substitution(PNS)[訳注1]はサポートされます.ショート・フレーム(120と960サンプル)は非サポートです.

Spectral Band Replication(SBR)レベル3,およびParametric Stereo(PS)レベル3がサポートされます(HE-AAC v2).レベル3とは,SBRの有/無およびPSの有/無のそれぞれについて最大2チャンネルでサンプル・レート48KHz以下のサポートを意味します.併せて,ミキシング・モードRaおよびRb,IPD/OPD合成,周波数帯域分解能34分割,ダウン・サンプルされた合成モード(コア・コーダのサンプル・レートが24KHzより高く,かつSBR付きで48KHz以下)が実装されています.

SBRおよびPSデコーディングを禁止することも可能です.併せて様々なオペレーティング・モードを選択することもできます.9.11項にあるエクストラ・パラメータconfig1およびsbrAndPsStatusを参照してください.

もし有効ならば[訳注2],内部クロックCLKIの周波数はAACデコーディングがより高いクロックを必要とする時,自動的に高く調整されます.一方,正確なデコーディングに対して内部クロックが不足する場合,PSおよびSBR機能は自動的にオフになります.SBRとPSを共に付加したHE-AAC v2ファイルを再生するには通常4.5×のクロックが必要です.このため,クロックのデフォルト設定としては3.5× +1.0×[訳注3]が推奨されます.

AACのストリーミング再生に対してはADTSフォーマットを推奨します.このフォーマットは再同期化が容易なため,巻戻しや早送り動作に適しています.

ADTS(.aac)に加えて,MPEG2 ADIF(.aac)およびMPEG4 AUDIO(.mp4/.m4a)ファイルも再生できますが,これらのフォーマットは巻戻し/早送り動作の点で劣ります.これらの特徴については,safe jump points tableを使うか,または若干堅固性が劣りますがより簡単なautomatic resync mechanismを利用することで実装が可能です(9.5.4項を参照してください).

3GPP(.3gp)および3GPPv2(.3g2)ファイルはMPEG4ファイルですので,HE-AACまたはHE-AAC v2だけを内容とするものであれば再生可能です.

注意:.3gp.3g2.mp4.m4aの各ファイルが再生可能であるためには,mdatアトムがMP4ファイルの最終アトムでなければなりません.VS1053bは全てのデータをストリームとして受信するため,全メタデータは音楽データに先立って受信され,有効となっている必要があります.いくつかのMP4ファイル・フォーマッタはこの条件を満たしていないので,その場合何らかの変換が必要となります.この点もストリーム可能なADTSフォーマットが推奨される理由です.

.mp4.m4aファイルの末尾がmdatアトムとなるように変換し,ゆえにウェブ・サーバのオーディオ・ストリーミングに適したいわゆるストリーム可能(streamable)フォーマットに最適化してくれるプログラムが存在します.この種のツールはVS1053b用のファイルにも利用可能です.例えば mp4creator -optimize file.mp4 です.

[訳注1]:原文のママ.
[訳注2]:SCI_CLOCKFのSC_ADD設定がこれに対応するものと思われます.
[訳注3]:3.5×と+1.0×はそれぞれSCI_CLOCKFレジスタ内のSC_MULTとSC_ADDによる設定を指しています.

AAC[1,2]:

サンプル・レート/Hz 最高ビット・レート kbit/s - 2チャンネル
≦96 132 144 192 264 288 384 529 576
48000  +   +   +   +   +   +   +   +   + 
44100  +   +   +   +   +   +   +   +   
32000  +   +   +   +   +   +   +     
24000  +   +   +   +   +   +       
22050  +   +   +   +   +         
16000  +   +   +   +           
12000  +   +   +             
11025  +   +               
8000  +                 

[1] 64000Hz,88200Hzおよび96000HzのAACファイルは再生できる最高のサンプル・レート(12.288MHzのXTALIなら48000Hz)で再生されます.
[2] 併せて全ての可変ビット・レート(VBR)フォーマットがサポートされます.この表はAACの仕様によって規定されている通り,特定のサンプル・レートに対して2チャンネル用に許容される最高ビット・レートを示したものであることに注意してください.実際にはデコーダ自体にある固定された下限または上限はありません.
 

8.2.6 サポートされるWMAフォーマット

Windows Media Audioコーデックのバージョン2,7,8,および9がサポートされます.併せて全WMAプロファイル(L1,L2,およびL3)がサポートされます.かつてストリームはクラス1,2a,2b,および3に分割されていました.本デコーダはMicrosoftの適合プログラムに合格しています.Windows Media Audio Professionalはまた別のコーデックでありサポートされません.

WMA 4.0/4.1:

サンプル・レート/Hz ビット・レート/kbit/s
5 6 8 10 12 16 20 22 32 40 48 64 80 96 128 160 192
8000  +   +   +     +                           
11025      +   +                             
16000        +   +   +   +                       
22050            +   +   +   +                   
32000              +   +   +   +   +   +             
44100                  +     +   +   +   +   +   +     
48000                              +   +     

WMA 7:

サンプル・レート/Hz ビット・レート/kbit/s
5 6 8 10 12 16 20 22 32 40 48 64 80 96 128 160 192
8000  +   +   +     +                         
11025      +   +                           
16000        +   +   +   +                     
22050            +   +   +   +                 
32000              +     +   +   +             
44100                  +     +   +   +   +   +   +   + 
48000                              +   +   

WMA 8:

サンプル・レート/Hz ビット・レート/kbit/s
5 6 8 10 12 16 20 22 32 40 48 64 80 96 128 160 192
8000  +   +   +     +                         
11025      +   +                           
16000        +   +   +   +                     
22050            +   +   +   +                 
32000              +     +   +   +             
44100                  +     +   +   +   +   +   +   + 
48000                              +   +   + 

WMA 9:

サンプル・レート/Hz ビット・レート/kbit/s
5 6 8 10 12 16 20 22 32 40 48 64 80 96 128 160 192 256 320
8000  +   +   +     +                             
11025      +   +                               
16000        +   +   +   +                         
22050            +   +   +   +                     
32000              +     +   +   +                 
44100              +     +     +   +   +   +   +   +   +   +   + 
48000                        +     +   +   +   +     

これらの期待されたWMAデコーディング・プロファイルに加えて,その他すべてのビット・レートとサンプル・レートの組み合わせおよび可変ビットレートWMAストリームがサポートされます.なおWMAのビットストリーム消費速度はMP3ほど均一ではありません.同じビットレートできれいな再生を得るにはより高い最大転送能力が必要です.
 

8.2.7 サポートされるFLACフォーマット

"VS1053b Patches w/ FLAC Decoder"プラグインを組み込むことにより,48KHz24ビットまでのFLACファイルがサポートされます.このプラグインはhttp://www.vlsi.fi/en/support/software/vs10xxplugins.htmlにて入手できます.詳しくはプラグインに付属の文書を参照してください.
 

8.2.8 サポートされるRIFF WAVフォーマット

最も一般的な1または2チャンネルのRIFF WAVサブフォーマットがサポートされます.

フォーマット 名称 サポート状態 備考
0x01 PCM + 16および8ビット,48KHz以下任意のサンプル・レート
0x02 ADPCM -  
0x03 IEEE_FLOAT -  
0x06 ALAW -  
0x07 MULAW -  
0x10 OKI_ADPCM -  
0x11 IMA_ADPCM + 48KHz以下任意のサンプル・レート
0x15 DIGISTD -  
0x16 DIGIFIX -  
0x30 DOLBY_AC2 -  
0x31 GSM610 -  
0x3b ROCKWELL_ADPCM -  
0x3c ROCKWELL_DIGITALK -  
0x40 G721_ADPCM -  
0x41 G728_CELP -  
0x50 MPEG -  
0x55 MPEGLAYER3 + サポートされるMP3モード用.8.2.1項参照
0x64 G726_ADPCM -  
0x65 G722_ADPCM -  

 

8.2.9 サポートされるMIDIフォーマット

General MIDIおよびSP-MIDIフォーマット0ファイルの再生ができます.フォーマット1および2はユーザ側でフォーマット0に変換してください.最大同時発音数は64,最大サスティン発音数は40です.ただし実際の同時発音数は内部クロック・レート(ユーザ設定可能)の他,使用楽器(音源)の種類,リバーブ使用の有無,およびトーン・コントロールやEarSpeaker音場拡大処理などチップ全体に関わるポストプロセス・エフェクトのうちどれが有効になっているか,などによって決まります.SP-MIDIのMIPテーブルが存在する場合は同時発音制限アルゴリズムがそれを活用し,滑らかなノート除去を行います.

43MHz(入力クロックの3.5×)クロックにてサスティン・ノートを同時に19〜31個生成できます.瞬間的にはより多くの総ノート数が可能です.消費電力とクオリティの兼ね合いになりますが,より高いクロック周波数は同時発音数の増加を可能にします.

リバーブ・エフェクトはユーザにより制御できます.オート・リバーブとリバーブ無しに加えて,14種類の異なった減衰時間を選択できます.それらは概ね音響空間の広さの違いに対応します.併せて,各MIDIソングも各インストゥルメントにどれだけエフェクトを掛けるかを定めています.リバーブ・エフェクトはおよそ4MHz分の処理能力を消費するため,内部クロックが最低でも3.0×の時でないとオート・コントロールはリバーブを有効にしません.

VS1053bはEarSpeaker音場拡大処理とMIDIリバーブを同時に実行できます.これはヘッドフォンでMIDIソングを聴くのに最適です.

VS1003では36種類だったインストゥルメントですが,さらに新しいものが追加されました.VS1053bは今やGM1インストゥルメント・セットの全ておよびGM2パーカッションの1バンクにおいてユニークなインストゥルメントを備えています.

 VS1053b Melodic Instruments (GM1)
 1 Acoustic Grand Piano  33 Acoustic Bass  65 Soprano Sax  97 Rain (FX 1)
 2 Bright Acoustic Piano  34 Electric Bass (finger)  66 Alto Sax  98 Sound Track (FX 2)
 3 Electric Grand Piano  35 Electric Bass (pick)  67 Tenor Sax  99 Crystal (FX 3)
 4 Honky-tonk Piano  36 Fretless Bass  68 Baritone Sax  100 Atmosphere (FX 4)
 5 Electric Piano 1  37 Slap Bass 1  69 Oboe  101 Brightness (FX 5)
 6 Electric Piano 2  38 Slap Bass 2  70 English Horn  102 Goblins (FX 6)
 7 Harpsichord  39 Synth Bass 1  71 Bassoon  103 Echoes (FX 7)
 8 Clavi  40 Synth Bass 2  72 Clarinet  104 Sci-fi (FX 8)
 9 Celesta  41 Violin  73 Piccolo  105 Sitar
 10 Glockenspiel  42 Viola  74 Flute  106 Banjo
 11 Music Box  43 Cello  75 Recorder  107 Shamisen
 12 Vibraphone  44 Contrabass  76 Pan Flute  108 Koto
 13 Marimba  45 Tremolo Strings  77 Blown Bottle  109 Kalimba
 14 Xylophone  46 Pizzicato Strings  78 Shakuhachi  110 Bag Pipe
 15 Tubular Bells  47 Orchestral Harp  79 Whistle  111 Fiddle
 16 Dulcimer  48 Timpani  80 Ocarina  112 Shanai
 17 Drawbar Organ  49 String Ensembles 1  81 Square Lead (Lead 1)  113 Tinkle Bell
 18 Percussive Organ  50 String Ensembles 2  82 Saw Lead (Lead)  114 Agogo
 19 Rock Organ  51 Synth Strings 1  83 Calliope Lead (Lead 3)  115 Pitched Percussion
 20 Church Organ  52 Synth Strings 2  84 Chiff Lead (Lead 4)  116 Woodblock
 21 Reed Organ  53 Choir Aahs  85 Charang Lead (Lead 5)  117 Taiko Drum
 22 Accordion  54 Voice Oohs  86 Voice Lead (Lead 6)  118 Melodic Tom
 23 Harmonica  55 Synth Voice  87 Fifths Lead (Lead 7)  119 Synth Drum
 24 Tango Accordion  56 Orchestra Hit  88 Bass + Lead (Lead 8)  120 Reverse Cymbal
 25 Acoustic Guitar (nylon)  57 Trumpet  89 New Age (Pad 1)  121 Guitar Fret Noise
 26 Acoustic Guitar (steel)  58 Trombone  90 Warm Pad (Pad 2)  122 Breath Noise
 27 Electric Guitar (jazz)  59 Tuba  91 Polysynth (Pad 3)  123 Seashore
 28 Electric Guitar (clean)  60 Muted Trumpet  92 Choir (Pad 4)  124 Bird Tweet
 29 Electric Guitar (muted)  61 French Horn  93 Bowed (Pad 5)  125 Telephone Ring
 30 Overdriven Guitar  62 Brass Section  94 Metallic (Pad 6)  126 Helicopter
 31 Distortion Guitar  63 Synth Brass 1  95 Halo (Pad 7)  127 Applause
 32 Guitar Harmonics  64 Synth Brass 2  96 Sweep (Pad 8)  128 Gunshot

 VS1053b Percussion Instruments (GM1+GM2)
 27 High Q  43 High Floor Tom  59 Ride Cymbal 2  75 Claves
 28 Slap  44 Pedal Hi-hat [EXC 1]  60 High Bongo  76 Hi Wood Block
 29 Scratch Push [EXC 7]  45 Low Tom  61 Low Bongo  77 Low Wood Block
 30 Scratch Pull [EXC 7]  46 Open Hi-hat [EXC 1]  62 Mute Hi Conga  78 Mute Cuica [EXC 4]
 31 Sticks  47 Low-Mid Tom  63 Open Hi Conga  79 Open Cuica [EXC 4]
 32 Square Click  48 High Mid Tom  64 Low Conga  80 Mute Triangle [EXC 5]
 33 Metronome Click  49 Crash Cymbal 1  65 High Timbale  81 Open Triangle [EXC 5]
 34 Metronome Bell  50 High Tom  66 Low Timbale  82 Shaker
 35 Acoustic Bass Drum  51 Ride Cymbal 1  67 High Agogo  83 Jingle bell
 36 Bass Drum 1  52 Chinese Cymbal  68 Low Agogo  84 Bell tree
 37 Side Stick  53 Ride Bell  69 Cabasa  85 Castanets
 38 Acoustic Snare  54 Tambourine  70 Maracas  86 Mute Surdo [EXC 6]
 39 Hand Clap  55 Splash Cymbal  71 Short Whistle [EXC 2]  87 Open Surdo [EXC 6]
 40 Electric Snare  56 Cowbell  72 Long Whistle [EXC 2]  
 41 Low Floor Tom  57 Crash Cymbal 2  73 Short Guiro [EXC 3]  
 42 Closed Hi-hat [EXC 1]  58 Vibra-slap  74 Long Guiro [EXC 3]  

 

8.3 VS1053bのデータ・フロー

図13
図13 VS1053bのデータ・フロー

最初に,内蔵のADPCMエンコーディング・モードが無効の場合には,オーディオ・データに従ってOgg Vorbis,MP3,WMA,AAC,PCM WAV,IMA ADPCM,またはMIDIデータがSDIバスを通して受信され,デコードされます.

デコード後,SCI_AIADDRが"0"でない場合はそのレジスタが指すアドレスからアプリケーション・コードが実行されます.詳細はVS10XXのアプリケーション・ノートを参照してください.

続いてデータはSCI_BASSレジスタの設定に基づいて,低音および高音強調ユニットへと送られます.

次にEarSpeaker音場拡大処理が有効に設定されている場合はその処理が行われます.

その後データはオーディオFIFOへ送られます.オーディオFIFOはオーディオ割り込みによる読み出しまでの間データを保持し,サンプル・レート・コンバータおよびDACへ送出します.オーディオFIFOのサイズはステレオ(2×16ビット)で2048サンプル分,もしくは8KiBです.

サンプル・レート・コンバータはさまざまなサンプル・レートの全てをXTALI/2,または18ビット精度で使用可能な最高サンプル・レートの128倍のいずれかにアップ・サンプルします.ボリューム・コントロールはこのアップ・サンプル領域の中で行われます.新しいボリューム設定はアップ・サンプルされた信号がゼロクロスする場合(またはタイムアウト後)に限りロードされます.このゼロクロス検出は急なボリューム変更の際に生ずる耳障りなノイズをほぼ完全に除去します.

共通のサンプル・レートへの変換は,複雑なPLLベースのクロック・スキームを不要にし,固定周波数の単一クロックによる非常に高いサンプル・レート精度を実現します.12.288MHzクロックの時,D/Aコンバータは128×48KHzつまり6.144MHzで動作し,位相ずれの無いステレオ信号を生成します.オーバーサンプルされた出力はチップ内蔵のアナログ式ローパス・フィルタにより帯域制限が加えられ,その後ヘッドフォン・アンプへと送られます.
 

8.4 音場拡大処理 EarSpeaker

ヘッドフォンで聴いている時,音は頭の内部で鳴っているように感じられます.その音場は平坦で奥行き間に欠けています.これは不自然で,ぎこちなく,時に落ち着かない状況にさえなります.これは音が“頭の中に”位置することを意味する“頭内定位”と言って,よく文献で言及される現象です.頭内定位の音を長時間聴くことは,聴取に対する疲労を招くこともあります.

実世界の音源は全て頭外にあって,その音響波面に痕跡を残しながら鼓膜へと到達します.この痕跡によって脳の聴覚システムは各音源の方向や距離を認識できるのです.スピーカからの音を聴くことは外部的であり,その痕跡は利用可能です.一方ヘッドフォンの場合はその痕跡が得られないか,または不明瞭です.

EarSpeaker処理はヘッドフォンを経由した音楽が本物のスピーカから,またはライブのものにより近く聴こえるように音を加工します.EarSpeakerを有効にすると,各楽器が頭の中から外へと移動し,個々の楽器を分離することが容易になります(図14参照).このリスニング体験はより自然かつ快適で,ステレオのイメージは各楽器がリスナの頭の中ではなく前に広がっているかのように,より鮮明なものになります.

図14
図14 典型的な頭内部の音像 対 EarSpeakerによる音源の外在化

EarSpeakerは一般的な,例えばエコーやリバーブ,低音強調のようなエフェクト処理とは異なるものです.EarSpeakerは人間の聴覚モデルと実在のリスニング環境音響効果を正確にシミュレートします.従って先に挙げた形だけのエフェクトのように音楽の音色的特徴を変化させたりはしません.

いろいろな個人の好みや録音の種類に合うように,EarSpeaker処理はいくつかのモードにパラメータ化されており,それぞれ若干異なる音響的シチュエーションをシミュレートします.各モードを有効にする方法は8.7.1項を参照してください.

オフ : スピーカで再生する場合,または再生音がバイノーラルで前処理されている場合に適しています.

弱(minimal) : ヘッドフォンで普通の音楽を聴く場合に適しています.効果は弱めです.

中(normal) : ヘッドフォンで普通の音楽を聴く場合に適していますが,弱(minimal)よりも音像はより遠くに定位します.

強(extreme) : 古い,または“ドライ”な録音音源か,もしくはMIDIのような合成音の再生に適しています.

 

8.5 シリアル・データ・インターフェース(SDI)

シリアル・データ・インターフェースは,VS1053bの各種デコーダに圧縮データを送るためのインターフェースです.

デコーダの入力データが無効,または十分な速度で受信できない場合,アナログ出力は自動的にミュートされます.

併せて9章で説明する通り各種テストもSDIを通して実行されます.
 

8.6 シリアル・コントロール・インターフェース(SCI)

シリアル・コントロール・インターフェースはSPIバス規格と互換性があります.転送されるデータは常に16ビット幅です.VS1053bは,このインターフェースを通した各種レジスタへのリード,ライトによって制御されます.

このコントロール・インターフェースにより,主に次の要素が制御されます:

操作モードやクロック,内蔵エフェクト類の制御.

ステータス情報,ヘッダ情報へのアクセス.

レコーディング・モードでのエンコード・データの受信.

ユーザ・プログラムのアップロードおよび制御.

 

8.7 SCIレジスタ

VS1053bは,SCI操作を検出するとDREQに"L"を出力し(この遅れは16〜40CLKIサイクルで,割り込みサービス・ルーチンが動作中かどうかで異なる),その操作に対する処理の完了時に"H"に戻します."L"の継続時間は操作の内容によって決まります.もし仮にSCI操作が実行される時にDREQが"L"の場合には,SCI操作の処理後もDREQは"L"のままとなります.

[訳注]:本来ここに在るべき原文37ページ第2段落の説明は,他の部分の説明と矛盾していると思われます.和訳は割愛しますので,内容は原文をご参照ください.なお割愛部分の内容は他の部分にて説明されていますので(そちらが正しければ,ではありますが)問題は無いはずです.

SCIレジスタ(先頭には"SCI_"が付く)
アドレス 種類 初期値 時間[1] 省略名 説明
0x0 rw 0x4800 80CLKI[4] MODE モード・コントロール
0x1 rw 0x000c[3] 80CLKI STATUS VS1053bのステータス
0x2 rw 0 80CLKI BASS 内蔵の低音/高音コントロール
0x3 rw 0 1200XTALI[5] CLOCKF クロック周波数+マルチプライヤ
0x4 rw 0 100CLKI DECODE_TIME 秒単位での再生時間
0x5 rw 0 450CLKI[2] AUDATA 各種オーディオ・データ
0x6 rw 0 100CLKI WRAM RAMリード/ライト
0x7 rw 0 100CLKI WRAMADDR RAMリード/ライトのベース・アドレス
0x8 r 0 80CLKI HDAT0 ストリーム・ヘッダ・データ0
0x9 r 0 80CLKI HDAT1 ストリーム・ヘッダ・データ1
0xA rw 0 210CLKI[2] AIADDR アプリケーションの開始アドレス
0xB rw 0 80CLKI VOL ボリューム・コントロール
0xC rw 0 80CLKI[2] AICTRL0 アプリケーション・コントロール・レジスタ0
0xD rw 0 80CLKI[2] AICTRL1 アプリケーション・コントロール・レジスタ1
0xE rw 0 80CLKI[2] AICTRL2 アプリケーション・コントロール・レジスタ2
0xF rw 0 80CLKI[2] AICTRL3 アプリケーション・コントロール・レジスタ3

[1] これはレジスタに値を設定した後,DREQが"L"を継続する時間(実行時間)の最大値です.実行時間100クロック・サイクル未満のレジスタ・ライトに対しては,DREQのチェックを省略し,固定時間のディレイで代用してもかまいません.
[2] さらにユーザ・アプリケーションの実行時間を加える必要があります.
[3] この値はファームウェア[訳注1]により直ちに0x48(アナログ有効)に更新されます.その後程なく0x40(アナログ・ドライバ有効)へと更新されます.
[4] モード・レジスタへのライトでソフトウェア・リセットが実行される場合,最大時間は22000XTALIです.
[5] CLOCKFレジスタへのライトによりクロック・マルチプライヤが変更されると,若干の間強制的に内部クロックが1.0×XTALIになります.従って,ここに示すレジスタ更新処理期間内にSCIやSDIの転送を行うことは推奨されません.

[訳注1]:ここでの"ファームウェア"とはVS1053bに組み込まれている内蔵プログラムのことです.したがってユーザから見ると,この値はリセット時に0x000cで,その直後に0x0048に,さらに程なく0x0040にといずれも自動的に変化します.値の意味は8.7.2項を参照してください.

SCIレジスタのリードはAIADDRだけが200CLKI,その他は全て100CLKI未満で完了します.なおAIADDR,AUADDRおよびAICTRL0〜3については,ユーザ・アプリケーション・ルーチンによるクロック消費もリード時間に加える必要があります.
 

8.7.1 SCI_MODE(RW)

SCI_MODEはVS1053bの動作を制御するために使用され,そのデフォルト値は0x0800(SM_SDINEWが"1"にセット)です.

ビット 名称 機能 説明
0 SM_DIFF 差動

0
1

通常の同相オーディオ
左チャンネルを反転

1 SM_LAYER12 MPEGレイヤI,II許可

0
1

禁止
許可

2 SM_RESET ソフト・リセット

0
1

リセットしない
リセットする

3 SM_CANCEL 現ファイルのデコード中断

0
1

無効
有効

4 SM_EARSPEAKER_LO EarSpeakerの下位設定

0
1

無効
有効

5 SM_TESTS SDIテスト機能

0
1

禁止
許可

6 SM_STREAM ストリーム・モード

0
1

禁止
許可

7 SM_EARSPEAKER_HI EarSpeakerの上位設定

0
1

無効
有効

8 SM_DACT DCLKアクティブ・エッジ

0
1

立上り
立下り

9 SM_SDIORD SDIビット順

0
1

MSbファースト
LSbファースト

10 SM_SDISHARE SPIチップ・セレクトの共用

0
1

禁止
許可

11 SM_SDINEW VS1002ネイティブのSPIモード

0
1

禁止
許可

12 SM_ADPCM PCM/ADPCM録音機能

0
1

禁止
許可

13 - -

0
1

正常
設定禁止

14 SM_LINE1 マイク/ライン1選択

0
1

MICP
LINE1

15 SM_CLK_RANGE 入力クロック・レンジ

0
1

12〜13MHz
24〜26MHz

SM_DIFFをセットすると左チャンネル出力波形が反転されます.ステレオ入力の場合,仮想的なサラウンド効果が得られます.モノラル入力の場合には,左右両チャンネル出力を使った差動出力が簡単に得られます.

SM_LAYER12は,MPEG1と2のレイヤIIIに加えて,レイヤI,IIのデコード機能を有効にするかどうかを設定します.注意:もしレイヤIおよびレイヤIIのデコード機能を有効にする場合には,それらのフォーマットを使用することにより生じうる全ての特許問題について責任を負う必要があります.MPEG1.0/2.0レイヤIIIのジョイント・ライセンスの範囲は,レイヤIおよびIIに係る特許の全てを網羅していません.

SM_RESETに"1"をセットするとソフトウェア・リセットが開始されます.このビットは自動的にクリアされます.

もし再生をファイルの途中で止めたい場合は,SM_CANCELに"1"をセットし,さらにDREQに従ったデータ送出を継続します.コーデックがSM_CANCELのセットを検出するとデコーディングを中止してメイン・ループに戻ります.ストリーム・バッファの内容は破棄され,SM_CANCELは"0"クリアされます.SCI_HDAT1もクリアされます.詳細は9.5.2項を参照してください.

SM_EARSPEAKER_LOおよびSM_EARSPEAKER_HIビットはEarSpeaker音場拡大処理機能を制御します.
  ・HI=0,LO=0なら,処理は禁止.
  ・HI=0,LO=1なら,処理は有効となり,エフェクトレベルは弱(minimal).
  ・HI=1,LO=0なら,処理は有効となり,エフェクトレベルは中(normal).
  ・HI=1,LO=1なら,処理は有効となり,エフェクトレベルは強(extreme).
EarSpeakerは44.1KHzサンプル・レート時に約12MIPSを消費します.

SM_TESTSをセットするとSDIテスト機能が有効になります.詳しくは9.12項を参照してください.

SM_STREAMはVS1053bのストリーム・モードを有効にします.このモードにおいては,データをできるだけ一定間隔で,かつ512バイト未満のデータブロックごとに送出してください.VS1053bは再生速度を5%以内で変動させながら,内部バッファの使用量が1/2を保つように再生を試みます.最高の音質を得るためには,平均転送速度の誤差を0.5%以内に抑えてください.また160kbit/sを超えるビット・レートは避けるともに,VBRも使わないでください.詳細はVS10XX用のアプリケーション・ノートを参照してください.このモードはMP3とWAVファイルでのみ機能します.

SM_DACTはSDI用データ・クロックのアクティブ・エッジを規定します.もし"0"ならデータは立上りエッジでサンプルされ,"1"なら立下りエッジでサンプルされます.

SM_SDIORDが"0"のとき,SDI上のデータはMSbファーストとみなされます.SM_SDIORDを"1"にすると,SDIデータのビットの並びを逆,すなわちビット0が最初でビット7が最後となる順番にできます.ただしバイトの並びは変わりません.またこの設定はSCIバスには影響を与えません.

SM_SDISHAREをセットすると,7.2項で説明したとおり,SCIとSDIでひとつのチップ・セレクト信号を共用できます.この機能を使う場合には併せてSM_SDINEWがセットされている必要があります.

SM_SDINEWをセットすると,7.2.1項および7.4.2項で説明したVS1002ネイティブのシリアル・モードが有効になります.なおVS1053bの起動時にはデフォルトでこのビットがセットされていますので注意してください.

SM_ADPCMとSM_RESETを同時に有効にすると,IMA ADPCM録音モードが有効になります(9.8項を参照してください).

SM_LINE_IN[訳注1]はADPCM録音時の左チャンネルの入力を選択します."0"にすると差動マイクロフォン入力ピンであるMICPとMICNが使用され,"1"にするとライン・レベルのMICP/LINEIN1ピンが使用されます.

SM_CLOCK_RANGEはXTAL入力のクロック分周器を有効にします."1"にセットするとクロックは入力のところで1/2に分周されます.24MHzが12MHzになることを考慮すると,SM_CLOCK_RANGEはチップのリセット後できるだけ速やかに設定されるようにしてください.

[訳注1]:これはSM_LINE1の間違いと思われます.
 

8.7.2 SCI_STATUS(RW)

SCI_STATUSはVS1053bの現在の状態に関する情報を保持します.併せていくつかの低レベルな設定項目が含まれますが,通常それらに対する考慮は必要ありません.

名称 ビット 説明
SS_DO_NOT_JUMP 15 ヘッダをデコード中,早送り/巻戻し禁止
SS_SWING 14:12 最大振幅を+0dB,+0.5dB,…+3.5dBに設定
SS_VCM_OVERLOAD 11 GBUF過負荷表示,"1"=過負荷
SS_VCM_DISABLED 10 GBUF過負荷検出機能,"1"=無効
  9:8 予約
SS_VER 7:4 バージョン情報
SS_APDOWN2 3 アナログ・ドライバ・パワーダウン
SS_APDOWN1 2 アナログ・インターナル・パワーダウン
SS_AD_CLOCK 1 ADクロック設定,"0"=6MHz,"1"=3MHz
SS_REFERENCE_SEL 0 リファレンス電圧設定,"0"=1.23V,"1"=1.65V

SS_DO_NOT_JUMPは,WAV,Ogg Vorbis,WMA,MP4,またはAAC-ADIFのヘッダがデコードされているときにセットされます.この時ファイル内の別の位置へジャンプしてはいけません.もしソフトウェア・リセットやデコードの中断を行う場合には,このビットをクリアしてください.さもないと誤ってセットされたままになります.

もしAVDDが3.3V以上ある場合には,SS_REFERENCE_SELにより1.65Vのリファレンス電圧を選択することで,アナログ出力の振幅を大きくできます.

AD変換の周波数がXTALI/2では高すぎる場合,SS_AD_CLOCKをセットすると,その周波数を1/2に分周できます.

SS_VERは,VS1001では0,VS1011では1,VS1002では2,VS1003では3,VS1053では4,VS1033では5,VS1103では7がそれぞれ設定されます.

SS_APDOWN2はアナログ・ドライバのパワーダウンを制御します.SS_APDOWN1は内部アナログ回路のパワーダウンを制御します.これらのビットは内蔵のシステム・ファームウェアのみが使用します.

パワー・オフ時の過渡状態を最小限に抑えながらVS1053bをパワー・ダウンしたい場合には,まずSCI_VOLに0xffffをセットし,さらに最低数msec待ってからデバイスをリセットします.

VS1053bはGBUF保護回路を内蔵しています.これはGBUFとグランドの短絡を示すような過電流が流れた時にGBUFドライバ回路を遮断します.SS_VCM_OVERLOADは過負荷が検出されている間"1"になります.SS_VCM_DISABLEをセットするとGBUF保護機能が無効になります.

SS_SWINGは0dBを超えるボリューム設定を可能にします.設定値0は通常のモードで,1は+0.5dB,2は+1.0dBです.3から7を設定することはDACモジュレータの異常動作を招きますので使用しないでください.SS_SWINGはI2S使用時のヘッドルーム量の調整に利用できます.

注意:VS1053b内蔵ファームウェアのバグにより,ボリューム演算ルーチンはSS_AD_CLOCKとSS_REFERENCE_SELビットをクリアしてしまいます.SCI_STATUSまたはSCI_VOLUMEへのライト,およびサンプル・レートの変更(低音強調または高音制御が有効な場合)はボリューム演算ルーチンがコールされる要因となります.回避方法としてはボリューム変更後,毎回SCI_STATUSの値をSCI_WRAMADDRおよびSCI_WRAMを通してライトすることです.0xc001をSCI_WRAMADDRへライトし,その後設定値をSCI_WRAMへライトします.しかしながら,この件で影響を受ける部分について性能に大きな差がないのであれば,デフォルトのモード[訳注1]を使用する方がより簡単です.

[訳注1]:バグによってSS_AD_CLOCKとSS_REFERENCE_SELビットがクリア,つまりデフォルト値に戻ってしまうためです.
 

8.7.3 SCI_BASS(RW)

名称 ビット 説明
ST_AMPLITUDE 15:12 高音制御,1.5dB刻み(-8〜+7,0=off)
ST_FREQLIMIT 11:8 下限周波数,1000Hz刻み(1〜15)
SB_AMPLITUDE 7:4 低音強調,1dB刻み(0〜15,0=off)
SB_FREQLIMIT 3:0 下限周波数,10Hz刻み(2〜15)

低音強調処理VSBEは,クリッピングを生じさせることなくヘッドフォンを最大限に生かす強力な低音域増強DSPアルゴリズムです.

VSBEはSB_AMPLITUDEに0以外の値をセットすると有効になります.SB_AMPLITUDEの値は好みにより調整してください.またSB_FREQLIMITは,ユーザのオーディオ・システムが再生できる最低周波数の1.5倍位を目安に設定してください.例えば,SCI_BASSに0x00f6を設定すると,60Hz以下において15dB強調されます.

注意:VSBEはクリッピングの発生を抑えようとするので,ダイナミックな音楽素材かもしくは最大音量に対して余裕を持ったボリューム設定の時でないと,十分に低音を強調することはできません.また音源そのものに強調すべき低音成分が含まれている必要があります.

高音制御VSTCはST_AMPLITUDEに0以外の値をセットすると有効になります.例えばSCI_BASSに0x7a00をセットすると,10KHzより上が10.5dB強調されます.

サンプル・レート44100Hzにおいて,低音強調は約2.1MIPS,高音制御は約1.2MIPSを使用します.両者は同時に使用できます.

VS1053bでは,低音強調および高域制御の初期化とボリュームの変更処理は,次のサンプル・データのブロックがオーディオFIFOに送られるまで待たされるようになっています.従って以前のVS10XXチップとは異なり,SCI_BASSまたはSCI_VOLがライトされた時にオーディオ割り込みが見送られることはありません.
 

8.7.4 SCI_CLOCKF(RW)

VS1053bとVS1003やVS1033を比較すると,SCI_CLOCKFの操作には若干の変更があります.マルチプライヤでの1.5×と0.5×が削除され,代わりにより高いクロック設定ができるようになっています.

SCI_CLOCKFレジスタ
名前 ビット 説明
SC_MULT 15:13 クロック・マルチプライヤ
SC_ADD 12:11 許されるマルチプライヤ追加
SC_FREQ 10:0 クロック周波数

SC_MULTは内蔵のクロック・マルチプライヤを有効にします.これはXTALIを逓倍し,より高い周波数のCLKIを生成するものです.マルチプライヤが0.5×より大きな値に設定変更されると,内部動作は数百クロック・サイクルの間1.0×になります.
設定値は以下のとおりです:

SC_MULT ビット・マスク CLKI
0 0x0000 XTALI
1 0x2000 XTALI×2.0
2 0x4000 XTALI×2.5
3 0x6000 XTALI×3.0
4 0x8000 XTALI×3.5
5 0xa000 XTALI×4.0
6 0xc000 XTALI×4.5
7 0xe000 XTALI×5.0

SC_ADDは,SC_MULTのマルチプライヤ設定に対して,デコーダのファームウェアがどれくらいまで追加しても良いかを設定します.この追加はWMAおよびAACストリームをデコードするために,一時的により高い周波数が必要になった時に自動的に行われます.
設定値は以下のとおりです:

SC_ADD ビット・マスク マルチプライヤ追加
0 0x0000 追加禁止
1 0x0800 1.0×
2 0x1000 1.5×
3 0x1800 2.0×

SC_FREQは,クロック入力XTALIが12.288MHzでない場合に,その周波数を設定するレジスタです.XTALIは4KHz刻みで設定できます.このレジスタへの設定値は次式で求めた値です.
 (XTALI−8000000)/4000  (ここでXTALIの単位はHz)

注意:デフォルト値である0はXTALI=12.288MHzとみなされます.

注意:最高のサンプル・レートはXTALI/256で制限されるため,もしXTALI<12.288MHzの場合には全てのサンプル・レートに対応することはできません.

注意:自動的なクロック変更が行われるのはWMAおよびAACファイルのデコード時だけです.クロックの変更幅は1回につき0.5×ずつです.クロックが1.0×へ低下することはなく,ファイル全体を通してSCIとSDIで同じクロックを使用できます[訳注1].

例:SCI_CLOCKFの設定値が0x9BE8の場合,SC_MULT=4,SC_ADD=3,SC_FREQ=0x3E8=1000です.これはXTALI=1000×4000+8000000=12MHzを意味します.クロック・マルチプライヤの設定は3.5×XTALI=42MHzで,内蔵ファームウェアが利用できる最大のマルチプライヤは(3.5+2.0)×XTALI=66MHzとなります.

[訳注1]:この文の意味は理解できません.
 

8.7.5 SCI_DECODE_TIME(RW)

正常なデータをデコードしている時,その時点までのデコード時間を秒単位で表した値がこのレジスタに入ります.

ユーザがこの値を書き換えることは可能です.その場合,内蔵ファームウェアがユーザのライト値を上書きするのを防ぐため,2度続けてライトするようにしてください.

SCI_DECODE_TIMEへのライトはbyteRate計算をリセットします.

SCI_DECODE_TIMEの内容はハードウェア・リセットおよびソフトウェア・リセットごとに初期化されます.またファイルの再生終了時にクリアされなくなりました.これによりループ再生や複数ファイルの連続再生時にデコード時間を自動的に積算できます.

早送り再生(エクストラ・パラメータのplaySpeedを参照)時にはこのデコード時間もそれに合わせて速く進みます.

いくつかのコーデック(WMAとOgg Vorbis)では絶対的な再生位置を示すことも可能です.9.11項のエクストラ・パラメータpositionMsecを参照してください.
 

8.7.6 SCI_AUDATA(RW)

正常なデータをデコードしている時,現在のサンプル・レートおよびチャンネル数がそれぞれこのレジスタのビット15:1とビット0に入ります.ビット15:1にはサンプル・レートの1/2の値が入り,ビット0にはモノラルなら0,ステレオなら1が入ります.また,このレジスタを書き換えると,ダイレクトにサンプル・レートが変更されます.

例:44100Hzステレオの場合,リード値は0xAC45(44101).
例:11025Hzモノラルの場合,リード値は0x2B10(11024).
例:0xAC80をライトすると,サンプル・レートは44160Hzに変更されます.ステレオ・モードは変わりません.

アイドル時にディジタル系の消費電力を抑えたい場合,SCI_AUDATAに低いサンプル・レートを設定すると効果があります.
 

8.7.7 SCI_WRAM(RW)

SCI_WRAMはアプリケーション・プログラムとデータを,それぞれインストラクションRAMおよびデータRAMへアップロードするために使われます.SCI_WRAMへのリード/ライトに先立って,まず開始アドレスをSCI_WRAMADDRへライトすることで初期化しておく必要があります.なおSCI_WRAMへの1回のリード/ライトで転送できるのは16ビットである一方,インストラクション・ワードは32ビットなので,インストラクション・ワードの場合には連続2回のリード/ライトが必要です.バイト順はビッグ・エンディアン(つまり上位ワードが先)です.ワードのリード/ライトごとに内蔵のアドレスポインタが自動的にインクリメントされます.
 

8.7.8 SCI_WRAMADDR(W)

SCI_WRAMADDRは,後に続くSCI_WRAMリード/ライトのためのプログラム・アドレスを設定します.X,Y,Iまたはペリフェラル・メモリをそれぞれアクセスするために,次の表に従ってアドレス・オフセットを加味してください.

SM_WRAMADDRの値
先頭〜末尾
対象アドレス
先頭〜末尾
ビット数
/ワード
説明
0x1800〜0x18XX 0x1800〜0x18XX 16 XデータRAM
0x5800〜0x58XX 0x1800〜0x18XX 16 YデータRAM
0x8040〜0x84FF 0x0040〜0x04FF 32 インストラクションRAM
0xC000〜0xFFFF 0xC000〜0xFFFF 16 I/O

X,Y,およびインストラクション・メモリのユーザ・エリアは上記だけです.他のエリアもアクセス可能ですが,別途規定がない限りライトはしないでください.
 

8.7.9 SCI_HDAT0およびSCI_HDAT1(R)

WAVファイルの場合,SCI_HDAT1の内容は0x7665("ve")になります.SCI_HDAT0にはデータ・レート(単位はバイト/秒)が入ります.この値は以下に挙げるRIFF WAVEフォーマットの全てで有効です:モノラルおよびステレオの8ビットまたは16ビットPCM,モノラルおよびステレオのIMA ADPCM.ファイルのビット・レートを得るには,この値を8倍してください.

AAC ADTSストリームの場合,SCI_HDAT1の内容は0x4154("AT")になります.AAC ADIFファイルの場合には,SCI_HDAT1の内容は0x4144("AD")になります.AAC .mp4/.m4aファイルならば,SCI_HDAT1の内容は0x4D34("M4")になります.SCI_HDAT0には平均データ・レート(単位はバイト/秒)が入ります.ファイルのビット・レートを得るには,この値を8倍してください.

WMAファイルの場合には,SCI_HDAT1の内容は0x574D("WM")になり,SCI_HDAT0にはデータ・レート(単位はバイト/秒)が入ります.ファイルのビット・レートを得るには,この値を8倍してください.

MIDIファイルの場合には,SCI_HDAT1の内容は0x4D54("MT")になり,SCI_HDAT0には平均データ・レート(単位はバイト/秒)が入ります.ファイルのビット・レートを得るには,この値を8倍してください.

Ogg Vorbisファイルの場合には,SCI_HDAT1の内容は0x4F67("Og")になり,SCI_HDAT0には平均データ・レート(単位はバイト/秒)が入ります.ファイルのビット・レートを得るには,この値を8倍してください.

MP3ファイルの場合には,SCI_HDAT1の値は0xFFE0〜0xFFFFの間を取ります.SCI_HDAT1/0の内容は以下のとおりです:

ビット 機能 説明
HDAT1[15:5] シンク・ワード 2047 ストリーム有効
HDAT1[4:3] ID 3 ISO 11172-3 MPG 1.0
2 ISO 13818-3 MPG 2.0 (1/2レート)
1 MPG 2.5 (1/4レート)
0 MPG 2.5 (1/4レート)
HDAT1[2:1] レイヤ 3 I
2 II
1 III
0 予約
HDAT1[0] プロテクト・ビット 1 CRC無し
0 CRCプロテクト付き
HDAT0[15:12] ビット・レート   ビット・レートの表を参照
HDAT0[11:10] サンプル・レート 3 予約
2 32/16/8KHz
1 48/24/12KHz
0 44/22/11KHz
HDAT0[9] パッド・ビット 1 追加スロット
0 ノーマル・フレーム
HDAT0[8] プライベート・ビット   未定義
HDAT0[7:6] モード 3 モノラル
2 デュアル・チャンネル
1 ジョイント・ステレオ
0 ステレオ
HDAT0[5:4] 拡張   ISO 11172-3を参照
HDAT0[3] コピーライト 1 コピーライト付き
0 フリー
HDAT0[2] オリジナル 1 オリジナル
0 コピー
HDAT0[1:0] エンファシス 3 CCITT J.17
2 予約
1 50/15 microsec
0 無し

SCI_HDAT0,SCI_HDAT1レジスタをリードすると,その時点でデコードされているMP3ストリームのヘッダ情報を得ることができます.リセットするとこの両レジスタはクリアされ,データが未検出であることを示します.
上表のSCI_HDAT0の中の"サンプル・レート"フィールドの値は,次の表に従って解釈できます:

"サンプル・レート"  ID=3   ID=2   ID=0,1 
3
2 32000 16000 8000
1 48000 24000 12000
0 44100 22050 11025

またSCI_HDAT0の中の"ビット・レート"フィールドの値は,次の表にしたがって解釈できます.なお可変ビット・レート・ストリームの場合には,この値は常に変化します.

"ビット・レート" レイヤI [kbit/s] レイヤII [kbit/s] レイヤIII [kbit/s]
 ID=3  ID=0,1,2  ID=3  ID=0,1,2  ID=3  ID=0,1,2
15 禁止 禁止 禁止 禁止 禁止 禁止
14 448 256 384 160 320 160
13 416 224 320 144 256 144
12 384 192 256 128 224 128
11 352 176 224 112 192 112
10 320 160 192 96 160 96
9 288 144 160 80 128 80
8 256 128 128 64 112 64
7 224 112 112 56 96 56
6 192 96 96 48 80 48
5 160 80 80 40 64 40
4 128 64 64 32 56 32
3 96 56 56 24 48 24
2 64 48 48 16 40 16
1 32 32 32 8 32 8
0 - - - - - -

バイト/秒を単位とする平均データ・レートはメモリから読み出せます.エクストラ・パラメータのbyteRateを参照してください.その変数は全てのコーデックについてバイト・レートを保持します.ファイルのビット・レートを得るには値を8倍してください.

ビット・レートの計算は曲間で自動的にリセットされません.しかしソフトウェアまたはハードウェア・リセットに頼らなくても,SCI_DECODE_TIMEへライトすることでリセットできます.
 

8.7.10 SCI_AIADDR(RW)

SCI_AIADDRは,SCI_WRAMADDRとSCI_WRAMレジスタにより事前に書き込まれたアプリケーション・コードの開始アドレスを示すレジスタです.アプリケーション・コードを使用しない場合は,このレジスタを初期化しないままにするか,もしくは0で初期化してください.詳細はVS10XXのアプリケーション・ノートを参照してください.
 

8.7.11 SCI_VOL(RW)

SCI_VOLはプレーヤーのボリュームを制御します.このレジスタの上位バイトは左チャンネルを,下位バイトは右チャンネルを制御します.ボリューム設定値は最大ボリュームレベルからの0.5dB刻みでの減衰量です.従ってボリューム最大は0x0000,最小は0xFEFEです.

注意:ハードウェア・リセット後,ボリューム値は最大に設定されています.ソフトウェア・リセットはボリューム設定をリセットしません.

SCI_VOLに0xFFFFを設定すると,アナログ・パワーダウン・モードが有効になります.

例:左チャンネルのボリュームを-2.0dB,右チャンネルを-3.5dBに設定したい場合:
 2.0/0.5=4, 3.5/0.5=7 → SCI_VOL=0x0407.

例:SCI_VOL=0x2424 → 左右のボリュームはともに 0x24×(-0.5)=−18.0dB.

VS1053bでは,低音強調および高域制御の初期化とボリュームの変更処理は,次のサンプル・データのブロックがオーディオFIFOに送られるまで待たされるようになっています.従って,SCI_BASSまたはSCI_VOLのライト中にオーディオ割り込みが見送られることはありません.

従来はサンプル・データがオーディオFIFOに入力されるときにボリューム制御が行われていましたが,VS1053bではDACでハードウェア的に行われます.よって,ボリューム設定に若干の遅れがあったとしても,総合的なボリューム変化のレスポンスは以前よりも改善されています.さらに,実際のボリューム制御はゼロクロス検出機能を持っており,急なボリューム変更の際に生ずる耳障りなノイズをほぼ完全に除去します.
 

8.7.12 SCI_AICTRL[x](RW)

SCI_AICTRL[x]レジスタ(x=[0〜3])はユーザのアプリケーション・プログラムへアクセスする際に使用されます.

またAICTRLレジスタはPCM/ADPCMエンコーディング・モードでも使用されます.
 


9 操作説明

9.1 クロックについて

VS1053bは12.288MHzを標準とする単一のマスタ・クロックで動作します.外部回路からのクロック入力(XTALIピンに接続),もしくは内蔵の発振回路と外付けクリスタルの組み合わせ(XTALI,XTALOピンに接続)が可能です.このクロックはアナログ部で使用されると同時に,対応可能な最大サンプル・レートを決めるために使われます.12.288MHzのクロックによって48000Hzまでの全サンプル・レートを処理できます.

VS1053bは24〜26MHzクロックも利用できます.この場合SCI_MODEレジスタのSM_CLK_RANGEを"1"に設定してください.それによりシステム・クロックはクロック入力のところで1/2で分周され,12〜13MHzの入力クロックが生成されます.
 

9.2 ハードウェア・リセット

XRESET信号を"L"にするとVS1053bはリセットされ,すべてのコントロール・レジスタと内部状態が初期化されます.XRESET信号はいずれのクロックに対しても非同期です.またリセット・モードはフル・パワーダウン・モードとしても機能します.この時,VS1053bのディジタル部とアナログ部共に最も消費電力が少ない状態になり,クロックは停止します.併せてXTALOピンはグランドに接地されます.

XRESETが有効になると,全出力ピンはデフォルト状態になります.全入力ピンはハイ・インピーダンス(入力状態)になりますが,SOピンだけが例外で,その状態はXCSによって制御されます.

ハードウェア・リセット後(または電源投入時),DREQは約22000クロック・サイクルの間"L"を維持します.時間にすると12.288MHzクロックなら約1.8msです.その後,SCI_MODE,SCI_BASS,SCI_CLOCKF,そしてSCI_VOLといった基本的なレジスタをデコード開始前に設定してください.詳しくは8.7項を参照してください.

もし入力クロックが24〜26MHzならば,チップのリセット後できるだけ速やかにSM_CLK_RANGEを設定してください.この時DREQを待つ必要はありません.

内部クロックはPLLによって逓倍できます.SCI_CLOCKFレジスタを通して設定できるマルチプライヤは入力クロックの1.0×〜5.0×です.マルチプライヤのリセット値は1.0×です.標準的な性能を得るためには,リセット後に内部クロックのマルチプライヤを3.5×に設定する必要があります.DREQの立上りを待ってから,SCI_CLOCKFに0x9800をライトしてください.詳しくは8.7.4項を参照してください.
 

9.3 ソフトウェア・リセット

時としてソフトウェア的なリセットが必要になることがあります.ソフトウェア・リセットは,SCI_MODEレジスタ(8.7.1項参照)のSM_RESETをセットすることにより実行できます.セット後,2μs以上待ってから,DREQの状態をチェックしてください.DREQは約22000クロック・サイクルの間"L"を維持します.これは12.288MHzクロックの場合約1.8msに相当します.そしてDREQが"H"に立ち上がれば,通常の再生動作が可能となります.

以前のVS10XXチップとは異なり,曲間でのソフトウェア・リセットは推奨されません.それは低いサンプル・レートまたはビット・レートのファイルでも確実に最後まで再生されるようにするためです.
 

9.4 低消費電力モード

デコードしていない時,システムを止めることはできないが消費電力は抑えたい,という場合には以下のトリックが利用できます.

SCI_CLOCKFに0x0000をライトして1.0×クロックを選択します.これによりPLLが停止し,多少の電力削減ができます.

例えば0x0010のような,小さくて0でない値をSCI_AUDATAにライトします.これはサンプル・レートおよびオーディオ割り込みの回数を削減します.割り込み終了から次の割り込みまでの間,VSDSPコアは単なる割り込み待ちとなるために,電力が少なくなります.

オーディオ系のポスト・プロセス(トーン・コントロールやEarSpeaker)を全てオフにします.

もし用途的に問題ないならば,SCI_VOLに0xffffをライトしてアナログ・ドライバをオフにします.

低消費電力モードから復帰するには,逆順でレジスタ設定を元に戻してください.

注意:低消費電力モードでも,ハードウェア・リセットと比べるとかなり多くの電力を消費します.
 

9.5 再生とデコード

これがVS1053bの通常動作モードになります.SDIデータが順次デコードされます.デコードされたサンプル値は,内蔵のDACによりアナログ信号に変換されます.もしデコード可能なデータが見つからないときは,SCI_HDAT0とSCI_HDAT1には0がセットされます.

デコードすべきデータ入力がない場合,VS1053bはアイドル・モード(デコード時よりも低消費電力の状態)へと移行し,有効なデータが入力されるのを待ちます.
 

9.5.1 ファイル全体を再生する

これはデフォルトの再生モードです.

1.

オーディオ・ファイルを最後までVS1053bへ送出します.

2.

エクストラ・パラメータのendFillByte(9.11項)を読み出します.

3.

少なくとも2052バイトのendFillByte[7:0]を送出します.

4.

SCI_MODEレジスタのSM_CANCELビットをセットします.

5.

少なくとも32バイトのendFillByte[7:0]を送出します.

6.

SCI_MODEをリードします.もしSM_CANCELがまだセットされていたら手順5へジャンプします.もしSM_CANCELを2048バイト送出してもクリアされない時にはソフトウェア・リセットを実行します(これは極めて稀).

7.

これで曲は正常に送出されました.HDAT0とHDAT1は共に0になっているはずで,それはデコードすべきデータが無いことを示しています.手順1へ戻ります.

 

9.5.2 再生の中断

曲の再生中断は,ある曲の再生中に別の曲へジャンプしたい時などで通常行われる操作です.

1.

VS1053bへオーディオ・ファイルを途中まで送出します.

2.

SCI_MODEレジスタのSM_CANCELビットをセットします.

3.

引き続きオーディオ・ファイルを送りますが,データの32バイト送出毎にSM_CANCELをチェックします.もしまだセットされていたら手順3へ.もし2048バイトの送出または1秒間にわたりSM_CANCELがクリアされない場合には,ソフトウェア・リセットを行ってください(これは極めて稀).

4.

SM_CANCELがクリアされたら,エクストラ・パラメータのendFillByte(9.11項)を読み出します.

5.

endFillByte[7:0]を2052バイト送出します.

6.

これでHDAT0とHDAT1は共に0になっているはずで,デコードすべきデータが無いことを示しています.次のオーディオ・ファイルを送出できます.

 

9.5.3 高速再生

VS1053bは早送り再生が可能です.もしマイクロ・コントローラがVS1053bへ十分な速さでデータを供給できるなら,これが早送りに適した方法です.

1.

VS1053bへのオーディオ・ファイル送出を開始します.

2.

高速再生を有効にするためにエクストラ・パラメータのplaySpeed(9.11項)を設定します.

3.

オーディオ・ファイルの送出を続けます.

4.

高速再生を止めるには,playSpeedに"1"を設定します.

マイクロ・コントローラがVS1053bへ十分な速さでデータを供給できるかを推定するには,エクストラ・パラメータのbyteRate(9.11項)の値を参照します.なおbyteRateの値は,高速再生中であっても通常再生速度時のデータ・レートになりますので注意してください.

注意:再生速度は曲が変わってもリセットされません.
 

9.5.4 無音での早送り/巻戻し

早送りと巻戻しを実現するには,オーディオ・ファイルへのランダム・アクセスが必要です.残念ながら早送りと巻戻しは常時可能ではなく,ファイル・ヘッダが読み込まれているようなときには実行できません.

1.

VS1053bへオーディオ・ファイルを途中まで送出します.

2.

ランダム・アクセスが必要とされる時には,まずSCI_STATUSレジスタのSS_DO_NOT_JUMPビットを読み出します.これがもしセットされていたらランダム・アクセスは実行できないため,手順1へ戻ります.

3.

エクストラ・パラメータのendFillByte(9.11項)を読み出します.

4.

少なくとも2048バイトのendFillByte[7:0]を送信します.

5.

そのファイルの前方または後方へジャンプします.

6.

ファイルの送出を続けます.

注意:早送り中/巻戻し中は例えば10dB程度ボリュームを下げておくことを推奨します.

注意:DECODE_TIMEレジスタはジャンプ分をカウントしません.

注意:MIDIはランダム・アクセスに適しません.代わりにエクストラ・パラメータのplaySpeedを使用することで1〜128倍速の高速再生は可能です.SCI_DECODE_TIMEも追従します.どうしても巻戻しが必要なら,MIDIファイルのデコードを先頭からやり直し,目的のところまで早送りすることで実現できます.SCI_DECODE_TIMEはその位置出しのために利用することができます.
 

9.5.5 正しいデコード時間を維持するには

早送りおよび巻戻し操作を行うと,ほとんどのファイルでは正しいデコード時間を維持できなくなります.しかしWMAとOgg Vorbisではファイルの中に正確な時間情報が用意されています.この正確な時間情報が有効な時にはそれを利用するようにするには,以下の手順になります:

1.

あるオーディオ・ファイルをVS1053bへ送り始めます.

2.

エクストラ・パラメータのpositionMsec(9.11項)をリードします.

3.

もしpositionMsecが−1ならば,およそのデコード時間はDECODE_TIMEにより得られます(さらにもし早送り/巻戻し操作が行われた場合にはファイルの位置からの推定も併用して).

4.

もしpositionMsecが−1ではないなら,その値(時間)がファイルの正確な位置を示しています.

 

9.6 PCMデータの入力

VS1053bはWAVファイル・ヘッダを送ることによりPCMデコーダとしても使用できます.WAVヘッダのlengthを0xFFFFFFFにした場合,VS1053bは継続的に(またはSM_CANCELがセットされるまで)PCMモードを維持します.8ビット・リニアおよび16ビット・リニア・オーディオが,モノラル,ステレオともにサポートされます.WAVファイル・ヘッダは以下のようなものです:

ファイル・オフセット フィールド名 サイズ バイト 説明
0 ChunkID 4 "RIFF"  
4 ChunkSize 4 0xff 0xff 0xff 0xff  
8 Format 4 "WAVE"  
12 SubChunk1ID 4 "fmt "  
16 SubChunk1Size 4 0x10 0x0 0x0 0x0 16
20 AudioFormat 2 0x1 0x0 リニアPCM
22 NumOfChannels 2 C0 C1 モノラルなら1,ステレオなら2
24 SampleRate 4 S0 S1 S2 S3 8KHzなら0x1f40
28 ByteRate 4 R0 R1 R2 R3 8KHz16ビット・モノラルなら0x3e80
32 BlockAlign 2 A0 A1 モノラルなら0x02 0x00,ステレオ16ビットなら0x04 0x00
34 BitsPerSample 2 B0 B1 16ビット・データなら0x10 0x00
52 SubChunk2ID 4 "data"  
56 SubChunk2Size 4 0xff 0xff 0xff 0xff データ・サイズ

表中の4つの変数の計算方法は下記の通りです:

S=サンプル・レート[Hz],例えば44.1KHzなら44100.

8ビット・データならB=8,16ビット・データならB=16.

モノラル・データならC=1,ステレオ・データならC=2.

A=C×B/8.

R=S×A.

例:44100Hz,16ビット・ステレオのPCMヘッダは次のようになります:

0000
0010
0020

 52 49 46 46 ff ff ff ff 57 41 56 45 66 6d 74 20
 10 00 00 00 01 00 02 00 44 ac 00 00 10 b1 02 00
 04 00 10 00 64 61 74 61 ff ff ff ff

 |RIFF....WAVEfmt |
 |........D.......|
 |....data....|

[訳注] 上記ヘッダのアドレス欄が間違っていたので修正してあります.
 

9.7 Ogg Vorbisで録音するには

Ogg Vorbisは低〜中速ビット・レートにて高音質を実現する,オープンなファイル・フォーマットです.

Ogg Vorbis録音は,VS1053bの16KiBプログラムRAMへエンコーダ・アプリケーションをロードすることにより有効になります.その起動後,エンコーダの出力はPCM/ADPCM録音(9.8項)と同様にSCI_HDAT0およびSCI_HDAT1レジスタから読み出せます.

3種類のプロファイルが用意されています:ひとつは高音質のステレオ録音用でビット・レートは約140kbit/s,あとの2つはスピーチ音質のモノラル録音用で,ビットレートはそれぞれ15および30kbit/sです.

Ogg Vorbisエンコーダ・アプリケーションの使い方については,VLSI Solutionのウェブ・サイトhttp://www.vlsi.fi/en/support/software/vs10xxapplications.htmlからアプリケーションをダウンロードし,添付の資料を参照してください.
 

9.8 PCM/ADPCMで録音するには

この項ではPCMまたはIMA ADPCMフォーマットでRIFF/WAVファイルを作る方法を説明します.IME ADPCMは一般的に広くサポートされているADPCMフォーマットで,多くのPCオーディオ再生ソフトで再生できます.IMA ADPCM録音はリニアな16ビット・オーディオと比べて概ね4:1に圧縮します.例えばモノラルの8KHzオーディオが32.44kbit/sで録音できることになります.

VS1053bはステレオADCを内蔵しており,従って2チャンネル(個別AGC,AGC有効時)およびステレオ(共通AGC,AGC有効時)モードも可能です.モノラル録音モードでは左または右チャンネルのいずれかを選択できます.左チャンネルについてはSCI_MODEレジスタによりMICまたはLINE1となります.
 

9.8.1 ADPCMモードを有効にする

レジスタ ビット 説明
SCI_MODE 2,12,14 ADPCMモードの開始,MIC/LINE1の選択
SCI_AICTRL0 15..0 サンプル・レートの設定 8000〜48000Hz(録音開始時に読み込まれる) 
SCI_AICTRL1 15..0 録音ゲイン(1024=1×) または0でオートマティック・ゲイン・コントロール(AGC)
SCI_AICTRL2 15..0 オート・ゲインの最大増幅度(1024=1×,65535=64×)
SCI_AICTRL3 1..0 0=ジョイント・ステレオ(共通AGC),1=デュアル・チャンネル(個別AGC),2=左チャンネル,3=右チャンネル
2 0=IMA ADPCMモード,1=リニアPCMモード
15..3 予約,常に0

PCM/IMA ADPCM録音モードはSCI_MODEレジスタのSM_RESETおよびSM_ADPCMビットの設定により有効になります.SM_LINE1がセットされると,差動マイク入力に代わりライン入力1が使用されます.ADPCM録音の有効に先立って,SCI_AICTRL0とSCI_AICTRL3に正しい値をライトしておく必要があります.これらの値は録音開始時にしか読み込まれません.SCI_AICTRL1とSCI_AICTRL2は常時更新可能ですが,有効前に適切な初期値を入れておくことが望ましいです.

SCI_AICTRL1にはリニア録音ゲインを設定します.1024はディジタル・ゲイン1と等しく,512はディジタル・ゲイン0.5,などです.オートマティック・ゲイン・コントロール(AGC)を使用する場合にはSCI_AICTRL1に0を設定してください.標準的なスピーチ用途では録音時の音量が比較的均一となるのでAGCを使用するほうが良いでしょう.

SCI_AICTRL2はAGCの最大ゲインを制御します.これにより無音時のノイズ音量を制限できます.SCI_AICTRL2を0にすると最大ゲインは65535(64×)となり,すなわちレンジ全体が使われます.

例:
 WriteVS10xxRegister(SCI_AICTRL0, 16000U);
 WriteVS10xxRegister(SCI_AICTRL1, 0);
 WriteVS10xxRegister(SCI_AICTRL2, 4096U);
 WriteVS10xxRegister(SCI_AICTRL3, 0);
 WriteVS10xxRegister(SCI_MODE, ReadVS10xxRegister(SCI_MODE) | SM_RESET | SM_ADPCM | SM_LINE1);
 WriteVS10xxPatch(); /* Only for VS1053b */
これは16KHz,ステレオ・モード,AGC有効で最大ゲイン4×の設定になります.

WriteVS10xxPatch()は以下のSCIライトを実行します(VS1053bのみ).

レジスタ レジスタ番号
SCI_WRAMADDR 0x7 0x8010
SCI_WRAM 0x6 0x3e12
SCI_WRAM 0x6 0xb817
SCI_WRAM 0x6 0x3e14
SCI_WRAM 0x6 0xf812
SCI_WRAM 0x6 0x3e01
SCI_WRAM 0x6 0xb811
SCI_WRAM 0x6 0x0007
SCI_WRAM 0x6 0x9717
SCI_WRAM 0x6 0x0020
SCI_WRAM 0x6 0xffd2
SCI_WRAM 0x6 0x0030
SCI_WRAM 0x6 0x11d1
SCI_WRAM 0x6 0x3111
SCI_WRAM 0x6 0x8024
SCI_WRAM 0x6 0x3704
SCI_WRAM 0x6 0xc024
SCI_WRAM 0x6 0x3b81
SCI_WRAM 0x6 0x8024
SCI_WRAM 0x6 0x3101
SCI_WRAM 0x6 0x8024
SCI_WRAM 0x6 0x3b81
SCI_WRAM 0x6 0x8024
SCI_WRAM 0x6 0x3f04
SCI_WRAM 0x6 0xc024
SCI_WRAM 0x6 0x2808
SCI_WRAM 0x6 0x4800
SCI_WRAM 0x6 0x36f1
SCI_WRAM 0x6 0x9811
SCI_WRAMADDR 0x7 0x8028
SCI_WRAM 0x6 0x2a00
SCI_WRAM 0x6 0x040e

このパッチはVLSI Solutionのウェブ・サイトhttp://www.vlsi.fi/en/support/software/vs10xxpatches.htmlにあるVS1053b用パッチ・パッケージの一部で,名称は"VS1053b IMA ADPCM Encoder Fix"です.
 

9.8.2 PCM/IMA ADPCMデータのリード

PCM/IMA ADPCM録音が有効になると,レジスタSCI_HDAT0およびSCI_HDAT1は機能が変わります.

PCM/IMA ADPCMのサンプル・バッファは16ビット幅で1024ワードあります.そのバッファの格納状態がSCI_HDAT1から読み出せます.SCI_HDAT1が0より大きい場合,その数だけSCI_HDAT0から16ビット・ワードをリードできます.もしデータが十分な速さでリードされない場合には,バッファはオーバフローし,空の状態に戻ります.

注意:もしSCI_HDAT1≧896の場合,リードはせず,バッファがオーバフローしてクリアされるのを待ったほうが良いと思われます.これはバッファのエイリアス信号の発生を防ぎます.

IMA ADPCMモードの時,各モノラルIMA ADPCMブロックは128ワード256バイトで,ステレオIMA ADPCMブロックは256ワード512バイトです.もしデータのリードを一旦中断し,後で再開したいときには,その中断をブロック境界で行うようにしてください.それによりブロック全体がスキップされ,エンコードされたストリームの有効性が維持されます.
 

9.8.3 PCM RIFFヘッダの付加

PCMファイルをRIFF/WAVファイルとするにはデータにヘッダを付加する必要があります.下記にモノラル用のヘッダを示します.この表では,2バイトおよび4バイト値はリトル・エンディアン(下位バイトが先)ですので注意してください:

ファイル・オフセット フィールド名 サイズ バイト 説明
0 ChunkID 4 "RIFF"  
4 ChunkSize 4 F0 F1 F2 F3 ファイルサイズ−8
8 Format 4 "WAVE"  
12 SubChunk1ID 4 "fmt "  
16 SubChunk1Size 4 0x14 0x0 0x0 0x0 20
20 AudioFormat 2 0x01 0x0 PCMなら0x01
22 NumOfChannels 2 C0 C1 モノラルなら1,ステレオなら2
24 SampleRate 4 R0 R1 R2 R3 8KHzなら0x1f40
28 ByteRate 4 B0 B1 B2 B3 8KHzモノラルなら0x3e80
32 BlockAlign 2 0x02 0x00 モノラルなら2,ステレオなら4
34 BitsPerSample 2 0x10 0x00 16ビット/サンプル
36 SubChunk3ID 4 "data"  
40 SubChunk3Size 4 D0 D1 D2 D3 データ・サイズ(ファイル・サイズ−36)
44 Samples...     オーディオ・サンプル

表中の変数は下記にしたがって求められます:

R=Fs (Fsの計算法は9.8.1項を参照)

B=2×Fs×C

もし事前に録音のデータ量がわかっているならば,実データに先立ってヘッダを完全に作成しておくことは可能です.逆に録音データ量がわからない時には,ヘッダ中のサイズ・データFおよびDを録音終了後に埋める必要があります.

PCMデータはSCI_HDAT0からリードされ,ファイルへライトされます.この時,まず先にSCI_HDAT0の上位8ビット,次に下位8ビットの順序でライトしてください.16ビット・マイクロコントローラの中には,この順序がデフォルトの動作と一致しないものがあります.結果が正しい順序となるように特に注意が必要です.

下記は正しいヘッダの例です.44.1KHzのモノラルPCMファイルで,サイズは1798768(0x1B7270)バイトのものです:

0000
0010
0020

 52 49 46 46 68 72 1b 00 57 41 56 45 66 6d 74 20
 10 00 00 00 01 00 01 00 80 bb 00 00 00 77 01 00
 02 00 10 00 64 61 74 61 44 72 1b 00

 |RIFFhr..WAVEfmt |
 |.............w..|
 |....dataDr......|

 
 

9.8.4 IMA ADPCM RIFFヘッダの付加

IMA ADPCMファイルをRIFF/WAVファイルとするにはデータにヘッダを付加する必要があります.下記にモノラル用のヘッダを示します.この表では,2バイトおよび4バイト値はリトル・エンディアン(下位バイトが先)ですので注意してください:

ファイル・オフセット フィールド名 サイズ バイト 説明
0 ChunkID 4 "RIFF"  
4 ChunkSize 4 F0 F1 F2 F3 ファイルサイズ−8
8 Format 4 "WAVE"  
12 SubChunk1ID 4 "fmt "  
16 SubChunk1Size 4 0x14 0x0 0x0 0x0 20
20 AudioFormat 2 0x11 0x0 IMA ADPCMなら0x11
22 NumOfChannels 2 C0 C1 モノラルなら1,ステレオなら2
24 SampleRate 4 R0 R1 R2 R3 8KHzなら0x1f40
28 ByteRate 4 B0 B1 B2 B3 8KHzモノラルなら0xfd7
32 BlockAlign 2 0x00 0x01 モノラルなら256,ステレオなら512
34 BitsPerSample 2 0x04 0x00 4ビットADPCM
36 ByteExtraData 2 0x02 0x00 2
38 ExtraData 2 0xf9 0x01 1ブロックあたりのサンプル数(505)
40 SubChunk2ID 4 "fact"  
44 SubChunk2Size 4 0x4 0x0 0x0 0x0 4
48 NumOfSamples 4 S0 S1 S2 S3  
52 SubChunk3ID 4 "data"  
56 SubChunk3Size 4 D0 D1 D2 D3 データ・サイズ(ファイル・サイズ−60)
60 Block1 256   最初のADPCMブロック,ステレオなら512バイト
316 ...     後続のADPCMデータ・ブロック

仮にオーディオ・ブロックの数をn個とすると,表中の変数は下記のようになります:

F=n×C×256+52

R=Fs (Fsの計算法は9.8.1項を参照)

B=Fs×C×256/505

S=n×505

D=n×C×256

もし事前に録音のデータ量がわかっているならば,実データに先立ってヘッダを完全に作成しておくことは可能です.逆に録音データ量がわからない時には,ヘッダ中のサイズ・データF,S,およびDを録音終了後に埋める必要があります.

ADPCMブロックの128ワード(ステレオなら256ワード)はSCI_HDAT0からリードされ,ファイルへライトされます.この時,まず先にSCI_HDAT0の上位8ビット,次に下位8ビットの順序でライトしてください.16ビット・マイクロコントローラの中には,この順序がデフォルトの動作と一致しないものがあります.結果が正しい順序となるように特に注意が必要です.

正常な順序でファイルがライトされているかを調べるには,各256バイト・ブロックの2バイト目と3バイト目(先頭のバイトを0番目として数えて)をチェックします.2バイト目は0〜88,かつ3バイト目は0となるはずです.ステレオの場合は各512バイト・ブロックの2,3,6,7番目のバイトをチェックします.2番目と6番目のバイトが0〜88,3番目と7番目のバイトが0であれば正常です.

下記は正しいヘッダの例です.44.1KHzのステレオIMA ADPCMファイルで,サイズは10038844(0x992E3C)バイトのものです:

0000
0010
0020
0030

 52 49 46 46 34 2e 99 00 57 41 56 45 66 6d 74 20
 14 00 00 00 11 00 02 00 44 ac 00 00 a7 ae 00 00
 00 02 04 00 02 00 f9 01 66 61 63 74 04 00 00 00
 14 15 97 00 64 61 74 61 00 2e 99 00

 |RIFF4...WAVEfmt |
 |........D.......|
 |........fact....|
 |....data....|

 
 

9.8.5 ADPCMデータの再生

作成したPCM/IMA ADPCM録音データを再生するには,それに9.8.3項または9.8.4項で説明したヘッダが付いている必要があります.そうすれば,あとすべきことは他のオーディオ・ファイルと同様にSDIを通してそのADPCMファイルを入力するだけです.
 

9.8.6 サンプル・レートについて

VS10xxチップがサポートするIMA ADPCM再生は,任意のサンプル・レートで作成されたADPCMファイルを再生できます.しかし,他のプログラムの中には例えば8000Hzや11025Hzなど特定のサンプル・レートのファイルしか対応できないものがあります.また,いくつかのプログラムやシステムでは8000Hz未満のサンプル・レートをサポートしていない場合があります.

もしデータ・レートを上げて音質を高めたいならば,例えば16KHzといった高いサンプル・レートが利用できます.
 

9.8.7 録音モニタのボリューム

VS1053bでは,IMA ADPCMエンコーディング中にSCI_VOLレジスタを変更してもボリュームが変化しません.そのため,IMA ADPCMモードの有効に先立ってボリュームを設定しておくか,もしくはVS1053のハードウェア・ボリューム・コントロール・レジスタDAC_VOLを直接設定します.

例えば:
  WriteVS10xxRegister(SCI_WRAMADDR, 0xc045); /*DAC_VOL*/
  WriteVS10xxRegister(SCI_WRAM,     0x0101); /*-6.0 dB*/

ハードウェア・ボリューム・コントロールDAC_VOL(アドレス0xc045)を使用すると,左チャンネル(上位8ビット)と右チャンネル(下位8ビット)それぞれを0.5dB単位で制御できます.各8ビット値において,下位4ビットは6dB単位で,上位4ビットは0.5dB単位で減衰量を設定します.

dB DAC_VOL dB DAC_VOL dB DAC_VOL dB DAC_VOL
-0.0 0x0000 -6.5 0xb2b2  :  : -60.0 0x0a0a
-0.5 0xb1b1  :  : -36.0 0x0606 -60.5 0xbbbb
-1.0 0xa1a1 -12.0 0x0202 -36.5 0xb7b7  :  :
-1.5 0x9191 -12.5 0xb3b3  :  : -66.0 0x0b0b
-2.0 0x8181  :  : -42.0 0x0707 -66.5 0xbcbc
-2.5 0x7171 -18.0 0x0303 -42.5 0xb8b8  :  :
-3.0 0x6161 -18.5 0xb4b4  :  : -72.0 0x0c0c
-3.5 0x5151  :  : -48.0 0x0808 -72.5 0xbdbd
-4.0 0x4141 -24.0 0x0404 -48.5 0xb9b9  :  :
-4.5 0x3131 -24.5 0xb5b5  :  : -78.0 0x0d0d
-5.0 0x2121  :  : -54.0 0x0909 -78.5 0xbebe
-5.5 0x1111 -30.0 0x0505 -54.5 0xbaba  :  :
-6.0 0x0101 -30.5 0xb6b6  :  : -84.0 0x0e0e

 

9.9 SPIブート

起動時にGPIO0ピンが"1"にプルアップされている場合,VS1053bはSPI経由で外部メモリからのブートを試みます.

SPIブート時には,次の表のとおり,ピンの機能が一部変更されます:

ノーマル・モード SPIブート・モード
GPIO0 xCS
GPIO1 CLK
DREQ MOSI
GPIO2 MISO

使用できる外部メモリはSPIバス型のシリアルEEPROMで,16ビットまたは24ビット・アドレスを持つものです.シリアルの転送速度は12.288MHzクロックの場合で245KHzになります.メモリの最初の3バイトは0x50,0x26,0x48でなければなりません.
 

9.10 リアルタイムMIDI

起動時にGPIO0を"L"かつGPIO1を"H"とするとリアルタイムMIDIモードが有効になります.このモードでは,PLLが4.0×に,UARTがMIDIのデータ・レートである31250bpsにそれぞれ設定され,リアルタイムMIDIのデータがUARTおよびSDIから読み込まれるようになります.2つの入力法を両方同時に使うことはできません.もしSDIを利用する場合は,まず0xffを送信し,続いてMIDIデータ・バイトを送信してください.

GPIO2とGPIO3によりEarSpeakerの設定が可能です.GPIO2およびGPIO3の状態は起動時にのみ読み込まれます.

リアルタイムMIDIはSCIにて小さなパッチ・コードを送ることでも開始できます.

注意:VS1053bのリアルタイムMIDI構文解析はシステム・エクスクルーシヴ・メッセージをスキップできません.必要ならばIRAMに改良バージョンをロードすることができます.
 

9.11 エクストラ・パラメータ

下記の構造体はXメモリのアドレス0x1e00(VS1033とは異なるので注意)に存在するもので,いくつかの付加的パラメータの変更,および有用な情報の取得のために利用できます.チップIDも簡単に得られます.

#define PARAMETRIC_VERSION 0x0003
struct parametric {
  /* configs are not cleared between files */
  u_int32 chipID;     /*1e00/01 Initialized at reset for your convenience */
  u_int16 version;    /*1e02 - structure version */
  u_int16 config1;    /*1e03 ---- ---- ppss RRRR PS mode, SBR mode, Reverb */
  u_int16 playSpeed;  /*1e04 0,1 = normal speed, 2 = twice, 3 = three times etc. */
  u_int16 byteRate;   /*1e05 average byterate */

  u_int16 endFillByte;    /*1e06 byte value to send after file sent */
  u_int16 reserved[16];   /*1e07..15 file byte offsets */
  u_int32 jumpPoints[8];  /*1e16..25 file byte offsets */
  u_int16 latestJump;    /*1e26 index to lastly updated jumpPoint */
  u_int32 positionMsec;  /*1e27-28 play position, if known (WMA, Ogg Vorbis) */
  s_int16 resync;        /*1e29 > 0 for automatic m4a, ADIF, WMA resyncs */
  union {
    struct {
      u_int32 curPacketSize;
      u_int32 packetSize;
    } wma;
    struct {
      u_int16 sceFoundMask; /*1e2a SCE’s found since last clear */
      u_int16 cpeFoundMask; /*1e2b CPE’s found since last clear */
      u_int16 lfeFoundMask; /*1e2c LFE’s found since last clear */
      u_int16 playSelect;   /*1e2d 0 = first any, initialized at aac init */
      s_int16 dynCompress;  /*1e2e -8192=1.0, initialized at aac init */
      s_int16 dynBoost;     /*1e2f 8192=1.0, initialized at aac init */
      u_int16 sbrAndPsStatus; /*0x1e30 1=SBR, 2=upsample, 4=PS, 8=PS active */
    } aac;
    struct {
      u_int32 bytesLeft;
    } midi;
    struct {
      s_int16 gain; /* 0x1e2a proposed gain offset in 0.5dB steps, default = -12 */
    } vorbis;
  } i;
};


SCI_WRAMADDRとSCI_WRAMインターフェースを通して2ワードの変数をリードする際に,何ら保護がされていませんので注意が必要です.それらの変数は下位と上位をリードする間に更新されるおそれがあります.値が正しいかどうかを判断するために,2度読みしてそれらを比較するようにしてください.

下記の例は,bytesLeftが0x10000から0xffffへ減少する時に,その更新が下位ワードと上位ワードのリード間にて行われた場合,および更新が上位ワードのリード後に行われた場合のそれぞれで何が起こるかを示しています.

正しくないリード 正しいリード 更新無し
アドレス リード値 アドレス リード値 アドレス リード値

0x1e2a
0x1e2b

0x0000 この後更新
0x0000

0x1e2a
0x1e2b

0x0000
0x0001 この後更新

0x1e2a
0x1e2b

0x0000
0x0001

0x1e2a
0x1e2b

0xffff
0x0000

0x1e2a
0x1e2b

0xffff
0x0000

0x1e2a
0x1e2b

0x0000
0x0001

正しくないリードでは,下位ワードが0x0000から0xffffにラップしているにも拘らず,上位ワードは同じ値が読まれています.この場合は2度目のリードが正しい値を返していますが,それ以外では最初のリード値が使えることになります.2度目のリードが必要となるのは,下位ワードがラップ・アラウンドして上位ワードが変化するおそれがある,すなわち下位ワードの値が小さい時です.bytesLeftは1ずつ減少していくため,2度読みが必要なのは下位ワードが0の場合だけです.
 

9.11.1 共通パラメータ

これらのパラメータは全てのコーデックに共通です.他のフィールドは対応するコーデックが作動しているときのみ有効です.現在作動中のコーデックはSCI_HDAT1にて判別できます.

パラメータ アドレス 使用法
chipID 0x1e00-01 ヒューズでプログラムされた固有ID(ヒューズの単なるコピー)
version 0x1e02 構造体バージョン - 0x0003
config1 0x1e03 各種設定
playSpeed 0x1e04 0,1=通常速度,2=2倍速,3=3倍速,など.
byteRate 0x1e05 平均バイト・レート
endFillByte 0x1e06 ファイルの後に続いて送るべきバイト
jumpPoints[8] 0x1e16-25 WMAおよびAAC用パケット・オフセット
latestJump 0x1e26 最後のjumpPointのインデックス
positionMsec 0x1e27-28 ミリ秒単位でのファイルの位置(取得可能な場合)
resync 0x1e29 自動再同期セレクタ

ヒューズでプログラムされたIDは起動時にリードされchipIDフィールドへコピーされます.もし無効な場合,この値は0となります.versionフィールドは構造体のこれ以降のレイアウトを識別するために使用されます.構造体が変更されるとバージョン番号も変わります.VS1053bの構造体バージョンは3です.

config1はMIDIリバーブおよびAACのSBRとPS設定を制御します.

playSpeedは曲の早送りを可能にします.ビット・ストリームのデコードが実行されるとき,playSpeedフレームごとにしか再生されません.例えばplaySpeedに4を設定すると,曲は通常の4倍速で再生されます.ただし十分な速さでデータが供給されることが条件です.設定値0または1で通常の速度に戻ります.SCI_DECODE_TIMEのカウント速度もこれに追従します.現在全てのコーデックがplaySpeed設定をサポートします.

byteRateには各コードにおいて1秒あたりの平均ビット・レートをバイト単位で表した値が格納されます.この値は1秒ごとに更新され,残りの再生時間の推定などに利用できます.また,MP3,MP2およびMP1を除く全てのコーデックでは,この値はSCI_HDAT0からも取得可能です.

endFillByteは,ファイルの送出後,SM_CANCELの設定前に送るべきバイト値を示します.

jumpPointsは32ビットのファイル・オフセットです.各有効な(ゼロでない)エントリは,WMAならパケットの先頭を,AAC(ADIF,.mp4/m4a)ならrawデータ・ブロックの先頭を表します.latestJumpは最後に更新されたエントリのインデックスです.もしlatestJumpが指しているエントリをリードするだけならば,有効性の確保のために2度読みする必要はありません.ジャンプ・ポイント情報は,WMAとAAC(ADIF,.mp4/m4a)において完璧な早送り/巻戻しを実装するために利用可能です.

positionMsecフィールドは,ファイルにおける現在再生中の位置を,早送り/巻戻し操作の有無に関係なく,ミリ秒単位で示します.この値はストリーム自体から再生位置を抽出できるコーデックの場合に限り利用可能です.現在はWMAとOgg Vorbisがこの情報を持っています.もし位置が掴めない場合には,このフィールドの値は−1となります.

resyncフィールドはWMAとAAC(ADIF,.mp4/m4a)において,最初のエラー時にエンコードを終了させるのではなく,強制的に再同期させるために使われます.これはWMAとAAC(ADIF,.mp4/m4a)においてほぼ完璧な早送り/巻戻しを実装するために利用可能です.もし実行しようとしているデータ・シークがパケットまたはデータ・ブロックの境界では無いならば,事前にこのフィールドを設定してください.このフィールド値はギブ・アップまでに何回の試行を許容するかを規定します.32767は無制限を意味します.

リセット後,resyncフィールドにはデフォルトで再同期を実行するように32767が設定されますが,以前の動作に戻すためにリセット後クリアすることも可能です.resyncが設定されているときは,各ファイルのデコード終了は常に9.5.1項で説明した手順で行われるようにしてください.

Seekフィールドは削除されました.resyncが必要な時,WMAおよびAACコーデックはファイル・サイズ情報が無視されるブロードキャスト/ストリーム・モードに入ります.併せて,resyncがゼロでないときもWAVファイルのファイル・サイズとサンプル・サイズ情報は無視されます.デコードを終了させるにはSM_CANCELを使用するか,ソフトウェア・リセットが必要です.

注意:WAV,WMA,ADIFおよび.mp4/m4aファイルは先頭にメタデータまたはヘッダ・セクションを持っており,さらにそれらは早送り/巻戻し操作に先立って完全に処理されている必要があります.そのヘッダ情報が処理されてジャンプ可能な状態になるとSS_DO_NOT_JUMP(SCI_STATUSレジスタ内)がクリアされます.
 

9.11.2 WMA

パラメータ アドレス 使用法
curPacketSize 0x1e2a/2b 処理中のパケットのサイズ
packetSize 0x1e2c/2d ASFヘッダのパケット・サイズ

ASFヘッダのパケット・サイズはpacketSizeより得られます.この情報とjumpPointsで得られるパケット開始オフセットを合わせることで,ASFファイルのパケット・ヘッダの解析やパケットのスキップが可能です.

WMAデコーダも現在のクロックで正常なデコードができないファイルを検出したときに自動的に内部クロックを高くします.クロックに許される最高周波数はSCI_CLOCKFレジスタにより設定されます.
 

9.11.3 AAC

パラメータ アドレス 使用法
config1 0x1e03(7:4) SBRとPS設定
sceFoundMask 0x1e2a シングル・チャンネル・エレメント検出
cpeFoundMask 0x1e2b チャンネル・ペア・エレメント検出
lfeFoundMask 0x1e2c ロー・フリケンシ・エレメント検出
playSelect 0x1e2d 再生エレメントの選択
dynCompress 0x1e2e DRCでの圧縮係数,-8192=1.0
dynBoost 0x1e2f DRCでのブースト係数,8192=1.0
sbrAndPsStatus 0x1e30 SBRおよびPSの有効フラグ

playSelectはストリームが複数のエレメントを持っているときにどれをデコードするかを決定します.その値にはAACデコーディングが開始されるたびに0が設定されます.この0はストリーム中に現れるデコード対象エレメントのうち最初のエレメントが選択されることを意味します.他の値としては,0x01‐最初のシングル・チャンネル・エレメント(SCE)を選択,0x02‐最初のチャンネル・ペア・エレメント(CPE)を選択,0x03‐最初のロー・フリケンシ・エレメント(LFE)を選択,S×16+5‐S番目のSCEを選択,P×16+6‐P番目のCPEを選択,L×16+7-L番目のLFEを選択,です.自動選択が実行されているときは,playSelectは選択されたエレメントを反映します.

sceFoundMaskcpeFoundMask,そしてlfeFoundMaskは,各変数がクリアされてからAACストリーム中でどのエレメントが検出されたかを示します.この値はエレメント選択メニューに選択可能なエレメントだけを提示するために利用できます.

dynCompressdynBoostはいくつかのAACストリームに存在するダイナミック・レンジ・コントロール(DRC)の振る舞いを変更します.これらもAACのデコード開始時に初期化されます.

sbrAndPsStatusはスペクトラル・バンド・リプリケーション(SBR)およびパラメトリック・ステレオ(PS)の状態を表します.

ビット 使用法
0 SBRが存在
1 アップ・サンプリング有効
2 PSが存在
3 PSが有効

config1のビット7〜4はSBRとPSのデコーディングを制御します.ビット5と4はSBRモードを,ビット7と6はPSモードをそれぞれ選択します.これらの設定はもしあなたのAACライセンスがSBRかつ/またはPSをカバーしていないときに便利です.

config1(5:4) 使用法
'00' 通常モード,<24KHzのAACファイルをアップ・サンプルする
'01' <24KHzのAACファイルは自動的にアップ・サンプルしない.しかしSBRを検出したらアップ・サンプリングを有効にする
'10' アップ・サンプルしない
'11' SBRを無効にする(PSも無効)

config1(7:6) 使用法
'00' 通常モード,可能ならばPSを処理する
'01' 可能ならばPSを処理する.ただしダウン・サンプル・モードにおいてのみ
'10' 予約
'11' PSを無効にする

AACデコーダも現在のクロックで正常なデコードができないファイルを検出したときに自動的に内部クロックを高くします.クロックに許される最高周波数はSCI_CLOCKFレジスタにより設定されます.

もし,SBRおよびPSコンポーネントを持つAACファイルをデコードするには許されている最高クロックでも遅すぎる場合には,それら特徴的機能がデコードできるようになるまでひとつずつ無効化されていきます.まず最初はParametric Stereo処理が外されます(再生はモノラルになります).それでも不十分な場合は,スペクトラル・バンド・リプリケーションがダウンサンプル・モードへ移行します(バンド幅が縮小されます).最後の手段はスペクトラル・バンド・リプリケーションの完全な無効化です.無効化された機能は曲の変更ごとに自動的に元に戻されます.
 

9.11.4 MIDI

パラメータ アドレス 使用法
config1 0x1e03
ビット[3:0]
各種設定
リバーブ:0=オート(クロック≧3.0×の時オン),1=オフ,2−15=空間サイズ
bytesLeft 0x1e2a/2b トラックの残りバイト数

config1の下位4ビットはリバーブ効果を制御します.
 

9.11.5 Ogg Vorbis

パラメータ アドレス 使用法
gain 0x1e2a 推奨のReplay Gainオフセット

Ogg VorbisデコーディングはReplay Gain技術をサポートしています.Replay Gain技術は,ユーザが曲ごとにボリュームを調整しなくても済むように,各曲のボリュームを自動的に一致させるためのものです.Ogg Vorbisデコーダが曲のヘッダ内にReplay Gainタグを見つけた場合,そのタグは解析され,デコードされたゲイン値がgainパラメータに格納されます.Replay Gainタグが無い曲の場合には,規定値である-6dB(gain値では-12)が使われます.Replay Gainに関する詳細はhttp://en.wikipedia.org/wiki/Replay_Gainおよびhttp://www.replaygain.org/を参照してください.

プレーヤ・ソフトウェアはこのゲイン値を用いてボリューム・レベルを調整できます.負数はボリュームを小さくすべきであることを,正数はボリュームを大きくすべきであることをそれぞれ意味します.

例えばgain=-11ならば,ボリュームを5.5dB(-11/2=-5.5)小さくすべきであることを表しており,従って左右両チャンネルの減衰量を11だけ増加させます.gain=2のときは,ボリュームを1dB(2/2=1.0)大きくさせるため,左右の減衰量を2だけ減少させます.なおボリューム設定は+0dBを超えられないので,設定値は0で飽和します.

ゲイン ボリューム SCI_VOL(ボリューム・ゲイン)
-11 (-5.5dB) 0 (+0.0dB) 0x0b0b (-5.5dB)
-11 (-5.5dB) 3 (-1.5dB) 0x0e0e (-7.0dB)
+2 (+1.0dB) 0 (+0.0dB) 0x0000 (+0.0dB)
+2 (+1.0dB) 1 (-0.5dB) 0x0000 (+0.0dB)
+2 (+1.0dB) 4 (-2.0dB) 0x0202 (-1.0dB)

 

9.12 SDIテスト

VS1053bにはメモリ・テストやSCIバス・テスト,正弦波テストといったいくつかのテスト・モードが用意されています.

これらのテストはいずれも同様の手順で開始されます:まずハードウェア・リセットの後,SM_TESTSをセットし,SDIバスにテスト・コマンドを送信することです.テスト・コマンドは4バイトの特別なコマンド・シーケンスと,それに続く4バイトの0です.それぞれ以下で説明します.

[訳注] VS1011eではソフトウェア・リセットでも代用できました.VS1053bでも可能と思われますが未確認です.
 

9.12.1 正弦波テスト

正弦波テストは次の8バイトのシーケンスにより開始されます:0x53,0xEF,0x6E,n,0,0,0,0.ここでnは正弦波を定義するための値で,次のように定められます:

nのビット
名称 ビット 説明
FsIdx 7:5 サンプル・レート・インデックス
S 4:0 正弦波スキップ・スピード

FsIdx Fs
0 44100Hz
1 48000Hz
2 32000Hz
3 22050Hz
4 24000Hz
5 16000Hz
6 11025Hz
7 12000Hz

出力される正弦波の周波数Fは次式で求められます.
 F=Fs×S/128.

例:n=126の場合.126=0b01111110なので,要素に分割するとFsIdx=0b011=3,したがってFs=22050Hzです.一方S=0b11110=30なので,この結果正弦波の周波数Fは
 F=22050Hz×30/128=5168Hz
となります.

正弦波テストを終了するには,次のシーケンスを送信してください:0x45,0x78,0x69,0x74,0,0,0,0.

注意:正弦波テストの信号はディジタル・ボリューム・コントロールを通ります.したがって各チャンネルを個別にテストすることも可能です.
 

9.12.2 ピン・テスト

ピン・テストは次の8バイトのシーケンスで有効になります:0x50,0xED,0x6E,0x54,0,0,0,0.このテストはチップ製造時の検査用です.
 

9.12.3 SCIテスト

SCIテストは次の8バイトのシーケンスにより開始されます:0x53,0x70,0xEE,n,0,0,0,0.ここで n−48 がテスト対象のレジスタ番号になります.これにより指定されたレジスタの内容がSCI_HDAT0にコピーされます.対象としてHDAT0を指定すると,その内容はSCI_HDAT1へコピーされます.

例:nが48のとき,SCIレジスタ0(SCI_MODE)の内容が,SCI_HDAT0にコピーされます.
 

9.12.4 メモリ・テスト

メモリ・テスト・モードは次の8バイトのシーケンスにより開始されます:0x4D,0xEA,0x6D,0x54,0,0,0,0.このシーケンスの後,1100000クロック・サイクル待ってください.テスト結果はSCIレジスタのSCI_HDAT0から読み出せます.そしてその値の中で"1"がセットされたビットを次の表に当てはめて解釈します:

ビット マスク 意味
15 0x8000 テスト完了
14:10   未使用
9 0x0200 Mux test succeeded
8 0x0100 Good MAC RAM
7 0x0080 Good I RAM
6 0x0040 Good Y RAM
5 0x0020 Good X RAM
4 0x0010 Good I ROM 1
3 0x0008 Good I ROM 2
2 0x0004 Good Y ROM
1 0x0002 Good X ROM 1
0 0x0001 Good X ROM 2
  0x83ff All ok

メモリ・テストはRAMの内容を書き換えますので注意してください.
 

9.12.5 新しい正弦波およびスイープ・テスト

より正確な周波数の正弦波テストがSCIにより開始,制御可能です.SCI_AICTRL0とSCI_AICTRL1がそれぞれ左チャンネルと右チャンネルの周波数設定のために使われます.これらのレジスタ,およびボリューム(SCI_VOL),サンプル・レート(SCI_AUDATA)をテスト前,またはテスト中に設定できます.SCI_AIADDRに0x4020をライトするとテストを開始します.

SCI_AICTRLnは目的の周波数とDACのサンプル・レートから次式により計算できます:
  SCI_AICTRLn=Fsin×65536/Fs

SCI_AICTRLnの最大値は0x8000Uです.生成される正弦波のS/N比を最良にするには,SCI_AICTRLnの下位3ビットを0にしてください.結果として周波数FsinはDACのサンプル・レートFsおよびSCI_AICTRL0/SCI_AICTRL1から次式にて求められます.
  Fsin=SCI_AICTRLn×Fs/65536

正弦波スイープ・テストはSCI_AIADDRに0x4022をライトすると開始されます.

これらのテストは通常のオーディオ・パスを使用します.従ってSCI_BASS,差動出力モード,EarSpeakerはいずれも機能します.
 


10 VS1053b内蔵レジスタ

10.1 本章を必要とするユーザ

ユーザが例えばDSPエフェクトのような独自の機能をVS1053bに追加したいと思うなら,そのためのソフトウェアが必要になります.

しかし大部分のユーザにおいては,そのような独自のプログラムを書くことや,またはこの章の内容について,心配する必要はありません.その中にはVLSI Solutionのウェブ・サイトからソフトウェア・プラグインをダウンロードするだけの人も含まれます.

[訳注] 以下この章は省略します.原文をご参照ください.要望があれば追記するかもしれません.
 


11 VS1053バージョン履歴

この章では,VS1053bに実装された最新かつ重要な変更点について説明します.
 

11.1 VS1033cとVS1053a/b間の内蔵ファームウェアの相違点,2007-03-08

全くの新規または大きな変更:

I2Sのピン・アサインがGPIO4〜GPIO7に変更され,SPIブート・ピンと重ならなくなりました.

正常動作中は曲間でのソフトウェア・リセットが不要になりました.

Ogg Vorbisデコーディングが追加されました.致命的でないoggまたはvorbisデコード・エラーの場合は自動的に再同期が行われます.これは早送りと巻戻しを容易にします."last frame"フラグに到達したとき,またはSM_CANCELがセットされたとき,デコードは終了します.

HE-AAC v2 Level3デコーディングが追加されました.PSとSBR処理の禁止およびアップ・サンプリング・モードの制御がparametric_x.control1を通して行えます.

WMAデコーダと同様に,AACデコーダでもデコーディング処理の状況に応じてクロック追加(SCI_CLOCKFを参照)が行われます.許されている最高クロックでもデコードができない場合は,HE-AACの特徴的機能がひとつずつ無効化されます.Parametric Stereoが最初の候補で,次にダウンサンプル・モード,最後の手段はSpectral Band Replicationの無効化です.無効化された機能は次のファイルにて自動的に元に戻されます.

ボリューム・コントロールが完全に一新され,ゼロクロス検出が付きました.ボリュームを変化させたときのポップ・ノイズを防止できます.

オーディオFIFOアンダーラン検出(徐々に0へと減少)がオーディオ・バッファの内容のループに代わって機能します.

全てのコーデックにおいて平均ビット・レート演算(byteRate)が可能です.

全てのコーデックにおいて高速再生がサポートされました.最良の早送り操作を目的としたスピード選択機能も付いています.高速再生はDECODE_TIMEも早送りします.

WMAとOgg Vorbisではミリ秒単位で絶対デコード位置が提供されます.

SM_CANCELを検出すると内蔵ファームウェアはストリーム・バッファの内容も廃棄します.

ファイル内でのジャンプが好ましくないとき,SCI_STATUSレジスタのSS_DO_NOT_JUMPビットが"1"になります.ヘッダ処理中またはMIDIファイル再生中が該当します.

IMA ADPCMエンコードにおいてステレオ・エンコーディングと各種サンプル・レートがサポートされました.

その他の変更または追加:

ボリュームおよび低音/高音コントロール計算にディレイが加えられたことにより,対応するSCI操作の所要時間が短くなりました.このディレイ処理と新しいボリューム・コントロール・ハードウェアにより,ボリューム更新期間中にオーディオ・サンプルが見送られる問題が回避されました.

SCI_DECODE_TIMEはハードウェアおよびソフトウェア・リセットでのみクリアされるようになりました.このため複数ファイルの連続再生やループ再生に対応できるようになりました.

0xe000〜0xffffにあるYRAMへのリード/ライト機能がSCI_WRAMADDR/SCI_WRAMに加えられました.

リセット後,resyncパラメータ(parametric_x.resync)に32767がセットされるようになったため,無限に(またはSM_CANCELがセットされるまで)再同期が試みられるようになりました.古い操作ではリセット後,resyncに0をライトするように置き換えができます.

WMA,AAC:再同期がより強固になりました.

WMA,AAC:再同期が実行された場合,ブロードキャスト・モードが自動的に有効になります.ブロードキャスト・モードはファイル・サイズのチェックを無効にし,SM_CANCELのセットまたはリセットの実行までデコーディングを継続します.

高音コントロールが修正されました(ボリューム変更が大きな副作用の原因となるおそれ).

MPEGレイヤIのモノラルが修正されました.

MPEGレイヤIIのハーフ・レート・デコーディングが修正されました(フレーム・サイズの計算ミス).

MPEGレイヤIIの精度問題が修正されました.正しくないグループの値には0がセットされます.

WAV構文解析は未知のRIFFチャンクをスキップするようになりました.

IMA ADPCM:最大ブロックサイズが4096バイト(ステレオ4088サンプル分,モノラル8184サンプル分)になりました.このため44100Hzのステレオも再生可能です.

リアルタイムMIDI:リセット時にGPIO0="0",GPIO1="1"とすることで開始でき,GPIO2と3でEarSpeakerが設定できます.

NewSineTest( )およびNewSineSweep( )が追加されました(AIADDR=0x4020/0x4022).AICTRL0およびAICTRL1のそれぞれで左/右の正弦波周波数を設定できます.

メモリのクリアがInitHardware( )の中ではなくSPIブートの前で行われるようになりました.

既知の癖,バグ,またはVS1053bに特有な点:

ボリューム設定によりSS_REFERENCE_SELおよびSS_AD_CLOCKビットがクリアされます.8.7.2項を参照してください.

ソフトウェア・リセットによりGPIO_DDRがクリアされます.I2Sピンも影響を受けます.

Ogg Vorbisが時々ウィンドウ処理にてオーバフローを起こし,オーディオに小さいグリッチを生じさせます.パッチが利用できます("VS1053b Patches w/ FLAC Decoder"プラグインはhttp://www.vlsi.fi/en/support/software/vs10xxplugins.htmlにあります)

IMA ADPCMエンコーディングの開始のために短いパッチが必要です.パッチは9.8.1項にあります.

 


12 本文書の改版履歴

この章では,この文書の重要な変更点について説明します.

VS1053b用バージョン1.10,2009-09-04

Ogg VorbisエンコーダおよびFLACデコーダ・プラグインに関する記述を追加.

PCM録音に関する記述を追加(9.8および9.8.4項).

SCLK,XCS,SI,XDCSの状態はGPIO_IDATAを通して読み出せます..

I2Sレートとオーディオ・レートは独立しています.

VS1053b用バージョン1.02,2008-10-20

IMA ADPCMモード時のモニタ・ボリューム変更法:9.8項参照.

DAC_VOLレジスタに関する情報を追加.

VS1053b用バージョン1.01,2008-05-22

9.8.1項にIMA ADPCMパッチを追加.

VS1053b用バージョン1.0,2008-05-12

量産バージョン,"暫定版"タグを削除.

4章の表の値を更新.

最低温度を再び−30℃に変更.

SCIリードの最高速度をCLKI/7に変更.

VS1053b用バージョン0.5,2007-12-03

9.7項においてOgg Vorbis録音を文書化.

ステレオADPCM録音および9.8項の例を追加.

9.8項にWAV PCMヘッダの例を追加.

画像のひとつを削除することにより,『LQFP-48での標準接続図』(6章)を単純化.

 


13 連絡先

VLSI Solution Oy
Entrance G, 2nd floor
Hermiankatu 8
FI-33720 Tampere
FINLAND

Fax: +358-3-3140-8288
Phone: +358-3-3140-8200
Email: sales@vlsi.fi
URL: http://www.vlsi.fi/
 


・・・本文ここまで.

誤訳その他お気づきの点がございましたらお知らせください.掲示板はこちらです.

具体的な検討の際には,VLSI社のサイトにて最新の情報をご確認ください.
併せて他のドキュメント類,特に本文中でもたびたび参照されている『アプリケーション・ノート』には目を通しておくことをお勧めします.
(ちなみにダウンロード・ページにはさりげなくEAGLE用のライブラリがあったりします(^^))

○IMA ADPCMに関する追加情報:
IMA ADPCM録音時,トーン・コントロール(BASSレジスタ)とEarSpeakerは機能しません.
(メーカのサポートに確認済み:2008年10月時点)

【改版履歴】
2008年6月21日 暫定版公開
2008年6月24日 初版公開
2008年10月24日 Version 1.02に対応
2009年12月26日 Version 1.10に対応(本文中赤字の部分)

△ページの先頭へ戻る


HOME

Copyright 2006-2009 Chiaki Nakajima.
All rights reserved.