2020年2月25日火曜日

PIC32MX USBMSC USBメモリで音声再生4_読みだす単位を4096byteへ変更

20200225(+6.0h)

前回のUSBメモリとのデータ転送とNAKの問題を解決しました。 USBメモリからの1回のデータ転送のByte数をセクタに合わせて512Byteに設定していたのが問題でした。 これを8倍の4096Byteにしたところ、NAKの返信回数が減り、16bit-Stereoのデータもそれなりに再生できるようになりました。


USBメモリをフォーマットする時にアロケーションサイズを指定できます。 このアロケーションサイズに合わせて一回のデータ転送Byte数を設定したいところですが、最近のUSBメモリのアロケーションサイズは8Kbyteや16Kbyteと大きめです。 PIC32MXマイコンはRAMの容量が限られていますで、しかたなく4096Byteとしました。 


PIC32MX USB PLAYER 16bit Stereo 20200225
USBからのデータ転送を4096byte単位にして 16bit Stereo dataの再生に間に合うようになりました。


PIC32MX USB PLAYER 8bit Mono 20200225
比較用の 8bit Mono dataの再生。 USBからのNAKが減り、処理自体が安定しました。

PIC32MX USBMSC USBメモリで音声再生3_何とか再生、しかし、、

PIC32MX USB PLAYER  8bit Mono
開発中の USBメモリから音楽データを演奏するPLAYER のテスト1。 
8bit 1Channel(Mono) のデータを再生し、パソコンのマイクで拾って録音した再生音です。

https://youtu.be/B0l3OPqjvjg



PIC32MX USB PLAYER  16bit Stereo
開発中の USBメモリから音楽データを演奏するPLAYER のテスト2。
16bit 2Channel(Stereoo) のデータを再生し、パソコンのマイクで拾って録音した音声です。
USBの転送レート12Mbps(Full Spead)では、データの転送が音楽の再生に間に合わず、音がわれてしまっています。 手持ちの中でも応答の速いbuffaloのUSBメモリをつかっていますので何とか聞き取れます。 
https://youtu.be/Yj5Gu7LXn14


しかし応答の遅い格安USBメモリになると、NAKの返信が多くなり、まともに音声を再生できません。


2020年2月16日日曜日

PIC32MX USBMSC USBメモリで音声再生2

20200216
wave file の再生プログラムのコーディングで、またまたトラブル発生。
短いテキストファイルを、ダーッと表示するだけならば問題なく表示されるのですが、ちょっと長いwave file を読みだそうとすると途中で無応答となりエラー(オレンジ色)となる現象が発生。

※黄色の'N'の連続は、メモリがNAKを返している部分です。


これは、トークン処理の終了を通知するU1IRbits.TRNIFのONを上手くとらえる事が出来ていない現象でした。

割り込み処理で同じU1IRレジスタのU1IRbits.SOFIFフラグをチェックしているのですが、このビットクリアをすると、ほかのU1IRのビットもクリアされてしまっていました。
これについては、一旦U1IRbits.TRNIFを別変数で保存してそれを参照・チェックする暫定処理を入れて逃げています。 


ここが何とか通ったと思ったら、次は U1EIR.EOFEF(END OF FRAMEを検出)エラーが出るようになりました。これについては、U1SOF(SOF Threshold)の幅を0x4A→0x80に増やしてしのぎました。 20200216(+4h)


先に対応した、トークン処理の終了を通知するU1IRbits.TRNIFのONが上手くとらえる事が出来ない現象ですが、どうやってもまれに取りこぼしが発生します。 
いろいろと検討して、U1CONのトークン処理BUSYフラグの状態とBDTのUOWNフラグの状態を組み合わせてチェックする事で何とか解決出来ました。20200217(+4.0)



2020年2月12日水曜日

PIC32MX USBMSC USBメモリで音声再生1

20200210
USBメモリのアクセスがそこそこ出来るようになったので(アクセス出来ないUSBメモリには目をつむって)、次はUSBメモリを使って音声再生するガジェットを作ります。 WAVE PLAYER/PCM PLAYERというやつですね。

以前作った、おしゃべり時計のプログラムを移植すれば行けそうです。 しかしながら、昔コーディングしたプログラムでは、いろいろ拙いところが目に付くので、手を入れたいところ。。。

まずはFIFOの処理あたりから見直そうと修正したのですが、しかしながら見直したロジックではちっとも動かず。一体なにが悪いのか? 一度作戦を練り直さねば。20200210(+4.0h)




FIFO処理の見直しは一旦横において置いて、以前作ったSpeakingClockからメインとなる処理をCopyしてテストしています。 一日ほどの作業でファイル操作関連の処理がそれなりに動くようになりました。 短いファイルならば問題なくファイルの中のデータを取得表示できるのですが、音楽ファイルはどうやっても途中でUSBメモリの読み出しが途切れてしまいます。20200212(+8.0h)


以前アクセスできなかった アマゾンの格安メモリですが、最初につないだ直後なら、それなりにUSBメモリのファイルにアクセス出来ることに気が付きました。 しかしながら、エラーになるとドライバの初期化手順を実施しただけでは復帰しません。 USBメモリデバイス自体をリセットするような方策が必要なようです。20200214

※左側の青いUSBメモリだけアクセスできない。




2020年2月4日火曜日

PIC32MX USBMSC USBメモリのアクセス、不調の原因

アクセスがエラーになるUSBメモリがあるものの、それ以外のUSBメモリのアクセスが出来るようになりましたので、FatFsを組み込んで、いつものpicクラブの情報交換会に発表に行ってまいりました。

しかしながら持参したパソコンの調子が悪く、後閑先生からノートパソコンをお借りしてデモを実施したのですが、これがどうやっても途中でエラーが発生して、USBメモリのアクセスが上手くいきません。 なんとか持参したパソコンを再起動して、情報交換会の最後でデモを行う事ができました。 

この事象により今まで不安定だった原因がいくらか判明しました。
実はこのプロジェクトで作成したデモ用の基板は、秋月のUSB-シリアル変換器からのバスパワーで動かしています。 この USB-シリアル変換器の回路図を確認したところ、バスパワーの供給ラインの途中に保護用に100mAのポリスイッチが入っていました。



 
つまり、このUSB-シリアル変換器で供給できる電流は100mAまでです。USBによってはアクセスが発生した場合に大きな電流を消費し電源電圧が下がって不安定になったものと思われます。

この100mAのポリスイッチをバイパスし、USBメモリの根本に100uFのコンデンサを追加してかなり安定してUSBメモリにアクセスが出来るようになりました。

今回判明したUSBメモリの消費量が意外に大きいので、これは今後の設計の課題となりそうです。

20200204
















KT0913 FMラジオの作成(8) 出来上がったPCB基板にミスあり。

  FusionPCB から基板がとどきました。20240121. 1月11日に発注したので10日で出来上がって届きました。 早速組み立てましたがが、イヤホンジャックのフットプリントが裏返っており、痛恨のミス。。。 しかしながら、他にも問題が無いか一通り組み立ててチェックしました...