2020年06月26日

DaisySeedについて

KickStarterでPledgeしたオーディオ専用マイコン、DaisySeedがそろそろ届く頃合いなので、前準備を行っている。

DaisyPinoutRev4@4x.png

まずは、LaVoixskiに対応させることを目指して、搭載されているMCU”STM32H7”のマニュアルを読んでいるのだが、pinのALTを設定する項目になかなか辿り着けない。

Wikiが立ち上がっていたので、サンプルコードを調べてみたところ、現時点ではFrequencyCounterに該当するライブラリが存在していないようだ。 従って、周波数の測定を行うためのカウンタを選択し、独自に設定を行わなければならないが、今回はTeensy4.1と同様により精度が高い32bit幅のTIM2とTIM5の使用を目指すことにした。

Screen Shot 2020-06-26 at 8.49.47.png

Screen Shot 2020-06-26 at 6.02.57.png

GPT=汎用タイマーのトリガ入力は以下のポートに引き出されている。 TIM2/5が32bit幅で、残りの汎用タイマーTIM3/4/12/13/14/15/16/17は16bit。

Screen Shot 2020-06-30 at 21.08.39.png

Screen Shot 2020-06-30 at 21.08.50.png

Screen Shot 2020-06-30 at 21.08.58.png

Screen Shot 2020-06-30 at 21.09.05.png

Screen Shot 2020-06-30 at 21.09.15.png

Screen Shot 2020-06-30 at 21.09.21.png

Screen Shot 2020-06-30 at 21.09.27.png

Screen Shot 2020-06-30 at 21.09.37.png

対応表によると、複数の端子が該当しているが、

Screen Shot 2020-07-01 at 8.01.23.png

基板の回路図を見ると、D22とD25をALT1/2に変更することでカウンタのトリガ入力をアサインできるようだ。

Screen Shot 2020-07-01 at 8.00.29.png

黄色がTIM2_CH1/青がTIM5_CH1の入力端子で、何れもカウンタの幅は32bit。

赤紫のポートは個別に使用が可能なTIM12/13/14/15/16/17、緑のポートはTIM3_CH1/CH2とTIM4_CH1/CH2。

Screen Shot 2020-07-01 at 8.00.04.png

ALTを設定するコマンドは、GPIO関連の項目にそれらしいものを見つけた。

Screen Shot 2020-06-26 at 6.48.44.png

まず、GPIOの属性を設定するモードでALTに対応させた後、、、

Screen Shot 2020-06-26 at 6.57.46.png

該当するポートのALTの選択を個別に行う。

ボードに設定されているデフォルトの状態が不明だが、まずはALT対応に変更するための正しい記述法を見つけ出さなければならない。

オンボードに24bit幅のオーディオDACが搭載されているので、MixOutにはこれを使用する。残りの1〜2chは外部に出力することになるが、何れにしても信号のバイアスを変更するアナログ仕立てな非線形回路の追加が必須となる。MCUをマウントする基板にはオーディオ回路を追加することになるだろう。

Teensyとの棲み分けは端子の拡張性を考慮して、ADAT出力はTeensy/アナログオーディオはDaisyと出力形態で判断することになるか。

LEDをドライブするPWM出力はGPT12〜17を使用することを想定しているが、信号のアサインが可能な端子は、D9&D10、D11、D12、D13&D14、D16、D18、D19、D29 の計8本(&は並列ペア)で、LED2個分は確保できそう。 外部オーディオDACとの通信にはSAI2の端子群を使用する。 他にUSER_LED端子が使用可能なので、ラインは合計9本となる。

コンパイルを含めたDaisy上の動作確認が行えていない現段階では机上の空論に過ぎないが、DAC分のコスパの良さでコスト面はDaisyに軍配が上がるので、なんとかシステムの移植を完遂させたいところだ。

追記:

ハードウエアに依存するTimer系の実装が全く行えないだけでなく、avr系のライブラリは全く受け付けられず、Cli();Sei();も使用できないことが判った。

関連するHardwareTimerというClassの存在を確認しているのだが、ボードに該当するH7には対応していおらず、関数も認識されない謎仕様だった。 

自分の技量ではいまのところは全く刃が立ちそうになく、ライブラリが充実するまでLaVoixskiの移植に関してはペンディングとなってしまった。
posted by Yasuski at 09:11| DaisySeed

2020年06月24日

Teensy4.1への対応について

ここ数日の間、Teensy4.1に対応するための下準備を行っている。 Teensy4.0では端子が不足して無理をしていたのが、機能が拡張されたTeensy4.1の導入で無駄な配線を行う必要がなくなった。

とはいえ、現行の基板にはLEDをドライヴするPWM出力に対応できない端子があり、そのままでは使えない。

teensy41_card.png

Teensy4.1のPWM出力に対応しつつ、Teensy3.6との差し替えが行えるように端子周りの配線を変更する必要がある。

Screen Shot 2020-06-18 at 7.21.00.png

基板の新調はさておき、手持ちの基板を手配線で修正して試験ユニットを製作を進めていく。

まず、下準備で必要なEEPROMの消去時にシステム毎クラッシュしするトラブルが発生したが、再起動後は問題無く消去を完了、後にファームウェアを書込むことができた。

Screen Shot 2020-06-18 at 8.06.03.png

Screen Shot 2020-06-18 at 8.50.27.png

なお、DACへのデータの転送がとんでもないスピードで行われるので、NOPでクロックのタイミングを調整している箇所の動作が破綻する恐れがあることに留意しなければならない。

その後、Teensyのポート設定を間違えているのを発見したので、これを修正し、ファームウェアの再書込みを行った。

Screen Shot 2020-06-19 at 20.20.07.png

他にも間違いがありそうな雰囲気なので、コードを印刷して立体視でミスを探すべきか。

ちなみに、このミスはTeensy3.6→4.0→4.1にハードウエアの乗り換えを行う過程で特異なピン配列の4.0を経由してポートアドレスの直アサインを変更した為に発生したのだが、ハードウエア特有の仕様を反映させる部分の改変には十分に注意を払う必要がある。

配線を確認する過程でCortexM7のレジスタ周りを調べ直した結果、Teensy4.1は32bitカウンタのトリガを二本引き出せそうなことが判った。

104874338_3277107398986362_6732600689478709118_o.jpg

現在使用している16bitカウンタは実効値が14bitとレンジの調整が難しく、32bit幅のカウンタを使用することでより有効な帯域を確保できるかもしれない。

該当する端子はD15とD40にアサイン出来るので、物理面の対応は簡単そうではある。

schematic41.png

外部からのトリガで駆動されるCaptureValueRegisterXは、EdgeCounterの周期でカウンタの値を取込む。EdgeCounterはOverfloor時にリセットされる。

このコードでは2周期目を取り込む設定なのだが、カウンタのスピードを勘案すると多分2周期目は永遠にやって来ない。

105488862_3277932275570541_5449363610889523331_o.jpg

よって、CVAL0の値を取り込むのが正解と思われる。

CVAL2を設定した理由は「バウンス効果」を狙ったものと思われるが(記憶が定かではない)、周波数の差分で発生するビートのエッジはミリセカンドのオーダーで繰り返すので、カウンタがフルスケールを更新するタイミングには間に合いそうにない。 そもそもが分周値の設定を間違えているのだが、今のところは取りこぼしを容認しつつ折衷で最適値を探り出している状態だ。 この機会に、極端にクロックを遅らせる実験を行った方が良いのかもしれない。

サイトの情報ではFTMを駆動する為のライブラリが開発されているので、これを使って周波数測定を行ってみる。

https://github.com/PaulStoffregen/FreqMeasureMulti

残念ながらGPTには対応していないので、これを使う場合は今まで通り独自にコードを組まなければならない。

その後、基盤を発注する前に、結線時の混乱を考えてTeensy4.1対応にポートの配列を整理することにした。 いきあたりばったりでアサインしていたのを合理的な結線にやり直しつつ、GPT2のトリガーインプットへのアクセスに対応させている。

GPT2の入力はD15とD40で、ALT8を選択して結線が完了する。
posted by Yasuski at 09:10| LaVoixski