マイコン工作実験日記

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

J-Linkを使って通話録音してみる -- その2 J-Link RTT Logger編

2016-05-21 22:47:04 | Weblog
前記事の続きです。J-Scopeを使って通話音声を記録することはできましたが、サポートするファイル形式の都合から録音/再生用途には向いているとは言えないものでした。

そこで、J-Scopeの代わりにJ-Link RTT Loggerを使うことにします。こちらのツールはRTTの特定チャネルに出力されたデータを、そのままファイルに記録するだけの極めて単純なログツールなんですが、PCM音声データを生で記録する目的にはこれだけで十分です。前記事の実験ではマイコン側ではチャネル1への出力をしていましたので、マイコン側のソフトへの変更は必要ありません。これまでRTT LoggerはWindows環境でしかサポートされていなかったのですが、今週リリースされたV.512f から OSXと Linuxのパッケージでもサポートされるようになったようです。



起動すると、必要なパラメータを逐次聞いてくるという仕様。引数で指定することはできないらしい。ディフォルトの値で良ければリターンを入れればいいだけなんですが、およそUnix環境向けの作りとは思えない仕様です。Windows版でも全く同じ動作仕様になっているのですが、どうやらマシな仕様にしたければ、「有償のSDK使えばお好きなようにできます。」ということらしい。

通話が終わったら、何かキーを押すことで動作を終了。ファイルをダンプしてみると、最初の無音部分には0とか-1が並んでいることが確認できます。



記録したデータをAudacityを使って録音状況を確認してみましょう。ファイル->取り込み->ロー(Raw)データの取り込みで、フォーマットを指定してファイルを読み込みます。





綺麗に再生できたので、録音にも問題がなかったことがわかります。このように音声信号程度のデータであれば、何の問題もなくRTTで送れるようです。
コメント
この記事をはてなブックマークに追加

J-Linkを使って通話録音してみる -- その1 JScope編

2016-05-20 19:06:33 | Weblog
J-LinkにはRTTというJTAGを介したメッセージ出力機能が用意されており、わたしはいつもデバックメッセージの出力に使っています。RTTでは、複数の論理的なチャネルを作ることができ、デバックメッセージ以外にもログデータを別のチャネルに出力することができます。今回の記事では、Bluetoothから受信した音声通話データをJScopeを使って表示、保存するという使い方を紹介しましょう。

まずはマイコン側のソフトの準備です。SEGGERが提供しているコードをプロジェクトに取り込めばいいのですが、ディフォルトでは2チャネル分のRTT Control Blockが用意されているものの、実際にバッファが割り当てられているのはメッセージ出力に使う最初の0チャネル目だけです。そこで、ログデータ出力に使う1チャネル目用にバッファを割り当てるとともに、JScopeで使うための名前をつけておきます。

SEGGER_RTT_ConfigUpBuffer(1, "JScope_i2", &JS_UpBUffer[0], sizeof(JS_UpBuffer), SEGGER_RTT_MODE_NO_BLOCK_SKIP);

JScopeは JScope_で始まる名前のバッファを探して、その中のデータを表示してくれます。i2は2バイト整数型のデータであることを示します。複数のデータを並べて送る場合には、それぞれの変数の型を示す名前をつけてやります。今回は 16bitの符号付きPCM音声データを送るだけなので、型指定もひとつだけです。

Bluetoothからの音声PCMデータは、DMAで80サンプルずつ受信しています。JScopeには、これを一度に送ってやればオーケーです。

SEGGER_RTT_Write(1, pcm_rxbuffer, sizeof(uint16_t)*80);

マイコン側の準備は、以上。続いて、J-LinkをPCとつなげて、音声データを読んでみましょう。残念ながらJ-ScopeはWindows環境でしかサポートされていないので、WindowsからJScopeを起動。



ターゲットマイコンの品番と、サンプリング方式としてRTTを選択したらOKボタンを押します。スコープのウィンドウが開いたら、赤いサンプリング開始ボタンを押してデータ収集開始。Bluetooth側を通話状態にしてやると、受信したデータが画面に現れます。



通話音声は16kHzなのですが、取りこぼしもなく綺麗に拾って表示してくれます。受信 /表示したデータは、FileメニューからExportすることができます。普通の ExportでCSV形式、Export Rawで生データをバイナリ形式で保存してくれます。Export Rawしてから、ファイルの内容を hexdump してみると....



ファイルの先頭部の無音部分です。PCMデータはすべてゼロなのですが、タイムスタンプも100刻みで記録されていることがわかります。記録時には何もタイムスタンプデータは出していないので、これはJScopeがテキトーに振ってくれているようです。

と、いうわけでで RTTを使って通話音声の記録ができることが確認できました。JScopeはとりあえずの確認には手ごろなツールですが、PCM音声データにするにはデータ内容を変換してやる必要があります。タイムスタンプのつかない、生のPCMファイルを作るにはRTT loggerを使った方が良さそうですが、この件については次の記事で書くことにします。
コメント
この記事をはてなブックマークに追加

rootmydevice

2016-05-11 13:15:05 | Weblog
Olimaxのブログを読んでいたら、トンデモない情報を発見。

安価な なんとかPi やタブレットで使用されていることで有名な Allwinnerが提供しているLinuxのイメージには裏口が用意されているとのこと。Shellが使えれば、echoコマンドを使うだけで root化できるそうです。まぁ、この裏口はソースレベルで公開されているようなんですが、ソースが開示されていない部分には何が隠されているのかわからない怖さがあるということでしょうか。。。


コメント
この記事をはてなブックマークに追加

NucleoのST-LinkをJ-Link化してみる

2016-04-29 17:35:33 | Weblog
これまでにもFreedomのOpenSDALPCXpresso, そして最近ではAtmelのEDBGというように、各社のARMマイコン評価ボードに対して、そのJTAGインタフェース部分をJ-Link化してしまうファームを無償で提供してきたSEGGERですが、ついに残された最後の大物(?)であったSTのST-Linkを書き換える日がやってきました。なんと、NucleoだけでなくDISCOVERYもJ-Link化してしまいます。

できれば現在使用中のNucleo-L476で使ってみたいところなんですが、これまでST-Linkは用無し扱いしていたこともあって、すでに首切り済みです。そこで、まだ首のつながっているNucleo-F103RBを引っ張り出してきて、J-Link化を確認してみることにしました。手順はこちらのページに書かれているように、必要なドライバとJ-Linkソフトを用意した状態で、STLinkReflesh,exeをダウンロードして実行します。



ライセンス説明にAで答えたら、1のUpgradeをするだけ。EXEなんで、この作業だけはWindowsでやらないといけません。無事に終了したので、今度はMac上で確認作業。


はい、JLinkEXEを実行すると、ちゃんとJ-Linkとして認識され、ターゲットのSTM32F103RBにもConnectすることができました。ST-LinkはJTAGドライバがWindows用にしかないために、わたしにとっては無用の長物でした。これからはJ-Linkとして有効に使うことができるんで、これは大変にありがたい!!

コメント
この記事をはてなブックマークに追加

パワーダウンを使ってみる

2016-04-26 06:36:52 | SLIC
これまでAg1171のPD端子はオープンで使っていましたが、オンフック時の消費電流を削減するためにSTM32につなげてやりました。

PD端子をLレベルにすることでパワーダウンすることができますが、この端子はHレベルにしてはならないことになっているので、上図のようにダイオードを入れて使います。

オンフックを検出したならば、PD信号をLレベルにすることでAg1171はパワーダウン状態に入ります。しかし、パワーダウン状態ではオフフックの検出ができません。そこで時折パワーダウンを解除して、フッキング状態が変化していないか確認してやる必要があります。しかも、パワーダウンを解除してから信号の状態が安定するまでには50msを要します。オフフックされたことを速やかに検出するためには、頻繁にパワーダウン状態から抜け出さねばならなくなります。

今回はパワーダウン期間を350msにしてみました。その後50msのウエイトを置くのので、オンフック時には400ms間隔で状態確認を行うことになります。実際に試してみると受話器を耳に当てて、ちょっとしてからダイアルトーンが聞こえる感じですが、まぁいいことにしよう。



電流を測ってみると、当然のことながら数値が変化します。テスターでは少ない時で63mA程度。70mAほど減ったようです。
コメント
この記事をはてなブックマークに追加