マイコン工作実験日記

Microcontroller を用いての工作、実験記録

W-SIM 試験ソフトウェア-その1 -- Hello World

2007-12-10 15:52:58 | W-SIM
最初のソフトウェアとしては、あらかじめフラッシュに焼いてある音声ファイルを繰り返し再生するだけのものを作成してみました。再生する音声は、もちろん"Hello World"です。

W-SIMは着信応答後、音声通話が始まるとPCM信号の出力を開始します。通話状態でない場合には、PCMCLKやPCMSYNCは出力されませんので、じつは音声処理部分は呼制御部分の動作をまったく気にしなくても大丈夫なことになります。AT91SAM7SはPDCと呼ばれるDMA機能を持っています。送信したい音声データの先頭をPDCで転送を開始する先頭番地として設定しておけば、あとはPCMSYNC信号に同期して1オクテットずつ自動的に送信してくれます。音声ファイルの長さだけのDMA転送が終了すると、DMA完了割り込みが発生しますので、再度DMA開始アドレスを設定してやれば、音声の再生が繰り返されることになります。

しばらくSSCに対する適切なパラメータがわからずに試行を繰り返しましたが、わかってしまえば、ほんとうに設定だけの変更できれいな音声が流れるようになりました。

W-SIMが期待するPCM音声データはG.711 mu-Lawですので、あらかじめこれをconst char[ ] のデータとして用意してフラッシュに焼いておきます。AT91SAM7S256を使っていますので、フラッシュは256KBもあります。20秒くらいの音声を入れてもまだまだ余裕です。

このように、ソフトウェアといっても、SSC/PDCのドライバを書くだけで、ほとんどの処理はCPUが介在せずに再生処理がおこなえてしまいます。いまのところ、W-SIMのRXD/TXD信号は処理していませんので、DDのUSBポートをつないだ端末画面から、手動でATコマンドを叩いてモデムを設定したり、着呼に応答したりしてます。

なお、システム的にはTOPPERS JSPカーネルを使用しています。音声再生だけなら、カーネルなんて不要なのですが、もはやJSP最初から入れて使うのに慣れていますので。

W-SIM実験ボード

2007-12-10 11:50:27 | W-SIM
2週間ほど前にWillcomのW-SIMのインタフェース概要が公開されていることを知りました。詳細を知るためにはフォーラムの会員にならないと正式な技術資料は入手できないようですが、とりあえずピンの意味がわかればマイコンとつなぐことは、それほど難しくなさそうです。また、ATコマンドを調査したWikiもあったので、これだけの情報があれば、自分でW-SIMを使った音声端末を作ることもできそうです。

そういうわけで、早速端末としてDDを購入。DDはデータ通信専用端末で、音声通話機能は具備されていませんが、こちらが欲しいのはW-SIM本体とそのソケットだけですから、それでかまわいません。さっそく、DDをバラして中の基板をマイコンと接続する実験基板を作成しました。



使用しているマイコンは、AT91SAM7S256. OLIMEXのARMヘッダーボードを利用しています。このマイコンが持っている同期シリアルコントローラ(SSC)は、I2SやCODECのようなチップも接続できるように設計されているため、W-SIMのPCM信号を直結できるだとうと推測したのです。

右上のボードは秋月のTTLレベルSerial-USB変換ボード。AT91SAM7S256のデバックポートの入出力用です。そのため、実質的にはW-SIMをAT91SAM7S256に直結しているだけのハードです。



W-SIM部分を拡大すると上のとおり。PCM信号PCMCLK, PCMSYNC, PCMIN, PCMOUTの4本をSSCに直接接続。モデム信号はRIとDCDの2本だけをUSART1に接続。DD側のUSBインタフェースをまだ生かしたままにしているので、モデムのTXやRXはそちら側で制御することにしています。本来であれば、W-SIMのモデム信号もすべてSAM7のUSART1に接続すればいいのですが、その作業はW-SIM用のソケットを別途入手してからおこなうつもりでいます。

結果として、USBが3ポートもあるボードになってしまいました。

  1. DDのUSBポート。ATコマンドの入出力のためCOMポートとして使用
  2. SAM7のUSBポート。W-SIMからの音声通話をUSBでホストに接続するために使用
  3. デバック用のシリアルCOMポート

電源はDDまたはSAM7のUSBポートからのUSB給電にて動作。DDではW-SIMを5Vで使っていますが、SAM7の各I/Oは5V-tollerantであるので、そのまま直結です。