2023年8月8日火曜日

BlackFinを使ってみるなり(8) DACを繋ぐので苦労 BCKとLRCKまで

こんちわー、ソフトが苦手なひらりんでーす.

ソフトの才能があると思ったらソフト屋になったけど、そっち方面はからっきしダメなひらりんです.

わたしは元来アナログ屋なんです.初歩のラジオを読んでた頃から変わってない.
たとえばこの界隈ですね.電撃トランジスタ講座
トランジスタの等価回路とかしらねーでもトランジスタの心を理解すればなんとか設計できます.皆さんもトランジスタ回路を作っては壊して楽しみましょう.

だからといって「オレは回路屋だ」とATフィールドに閉じ籠ってるとなんにも業務が進まないし、業務が進まないんじゃつまらないので、CPUやロジック回路に首突っ込んだりしてるけど、ソフトやシステムが得意な奴らには全然敵いません.

2011年ごろ、8bit CPUを使ってみようかと、STM8Sをいじり倒したのがfc2のこちらでした.もう何年もメンテしてません.

2015年から、USBが便利そうなのでEZ-USBをいじり倒したのがこちらのポエム集.

2016年、verilog+FPGAのロジック回路でHDMIを作ってみたのはこれ.規格書を読んでも肝心のところは判らないので想像で補完してます.

2020年から、STM32+USBでオーディオDACを作ってました.
この時のSTM32F205はCPUがCORETEX-M0だったかな? USBとFIFOの間をDMAで取り持って384kHz32bit2chのdata転送するので精一杯って印象でした.フィルタは無理っぽかった.

2023年、「次はDSPを使ってみよう」と思っていたところ、DSPで信号処理せないかんような案件が舞い込んできたのでDSPをいじっています.注文書はもらってないので、自腹で試作してみて形になったら提案してみようかってぐらい.
お客様にご提案するには、アナログフロントエンド+デジタル信号処理+PCで表示 までやらないと見せれる形とは言えません.
方法論として、projectを立ち上げて、平坂がプロデューサーになって、3人のエンジニアに外注して、日本の製造リソースで試作してというやり方をするなら、先に1000万円の注文書を貰ってからじゃないと手出しできません.皆に給料払わなくちゃいけないから.
なので、全部自分でやります.
↓自宅の机で構想・回路図・アートワーク・半田付け・火入れ・ソフト・秋月電子・Aliexpress・JLCPCB みたいな作業で、キャッシュアウトは評価ボードとプリント基板も含めて3万円にすら達してません.事務所の家賃はゼロだし.アニメ観ながらだし.
こんな投資額なら、たとえ案件がおじゃんになっても痛くないし、DSPの勉強できたならそれでいいや.仮に案件がまとまったとしても、500万円くれとは言わないさ.さすがに10万円じゃ無理だけどね.


ポエム1
というわけで、まずはDSPにDACを繋ぎたいのだけれど、、、ADが提供するライブラリ関数の引数の意味がよくわからんのです.STMの方がsampleが親切だったなぁ.

シリアルポートは、SPORTというperiphralです.
ライブラリ関数の流れとしては、open→config→DMA→callback→Submit→Enableという流れです.
adi_sport_Open();
adi_sport_ConfigData();
adi_sport_ConfigClock();
adi_sport_ConfigFrameSync();
adi_sport_EnableDMAMode();
adi_sport_RegisterCallback();
adi_sport_SubmitBuffer(BufferTx,SIZE_OF_TX_BUFFER);
adi_sport_Enable(hDevice,true);
callback関数じゃなくてDMA終了フラグをpollするやり方もできるけど、over headはどうか知らないがわたしはcallbackが好きではあります.

3つのconfig関数の引数がなかなか理解が難しいってのが目下の悩みです.


ポエム2
わけあってBF706のSCLK0の周波数を実測したい.
それには、CGU(clock gen unit)のレジスタを変更する必要があります.CGUのCLKOUT Select Registerに3を書き込めばSCLK0が外部に出てくる.評価ボードのTP2がそれです.
デフォルトではTP2に外部Xtalの25MHzが出てくるんだけど、BF706内部でPLLでupして分周されてSCLK0になる仕組み.SCLK0を観測したい.BF706のcoreは400MHzなので、SCLK0はいくつなのだろう?

CGUもBF706のperipheralのうちの1つなのだから、adi_cgu_xxx()みたいなライブラリ関数が用意されているのだろうと探し回ったのだけど、そうゆう関数は存在しません.
cguの関数が無い代わりに、power managementの関数の中でclockをいじれるようになっていました.これには悩みましたぞ.具体的にadi_pwr.cとかその界隈です.
この関数にて、TP2にSCLK0が出てきます.main()の最初の方に書いとけばOK
 adi_pwr_SetClkOutSelectRegister(0,3);
そしたら、SCLK0=100MHz実測でした.

BF706 data sheetによると、SCLK0<100MHzとのSPECでした.


ポエム3
I2Sを動かすには、まずはBCKの生成から.BCK=bit clockの意味.

なんでSCLK0に拘っているのかというと、BF706のperipheralの源clkはSCLK0なんですって.

それで、SPORTが生成してくれるI2SのBCKはSCLK0(100MHz)を分周して作られます.内部clkを使う場合はですが.

I2Sを動かすにはまずBCKからということで、このライブラリ関数でBCKを生成します.
 adi_sport_ConfigClock(hDevice, N,true,false,false);
分周比は、N+1です.
したがって、N=0ならばBCK=100MHzが出てきます.(内部clkを使う場合は)

fs=96kHzで、32bit 2chですから、96x64=6.144MHzのBCKが欲しいです.
 100/6.144≒16
で16分周してみます.つまりN=15.

元が100MHzなので6.25MHzが出てきました.とりあえずOKとする.

続く3つの引数、true,false,falseの意味はこうゆうことらしい.
1つ目
true  : 内部clkを使う 
false : 外部clkを使う 

2つ目
データ出力エッジの選択
true  : falling edgeで変化 
false : rising edgeで変化  ←PCM510xではこちらがmustでした

3つ目
送受信データが無いときにBCKを停めるか否か
true  : 停める 
false : 停めない、BCK出しっぱなし


ポエム4
次はFrame sync、すなわちLRCKを出したいです.
この関数で設定します.
 adi_sport_ConfigFrameSync(hDevice, 31, true, true, false, false, false, false);

第2引数
Frame syncの周波数.32bit I2Sならば周波数はBCKの1/64になる.そのために31を設定する.

第3引数
true: Frame syncあり
false: Frame syncなし

第4引数
true : Frame sync内部発生 
false : Frame sync外部入力 

第5引数
Frame syncがデータ独立か従属か.(意味がわかんない)
TX modeのみ有効で、RX modeでは無視されます.
true : data-independent frame sync. 
false : data-dependent frame sync. 

第6引数
たぶん、SPORTをTDM modeで動かすときのFrame syncの極性だと思う.
I2S modeでこの関数をcallするとエラーになると書かれている.マジか?
true : active high frame sync. 
false : active low frame sync. 

第7引数
Late frame syncとEarly frame syncの選択.(意味わかんない)
true : Use late frame sync. 
false : Use Early frame sync. 

第8引数
true : Framesync is edge sensitive. 
false : Framesync is level sensitive. 

「I2S modeでこの関数をcallするとエラーになる」と書かれていますが、関数のreturnはSUCCESSが返って来てます.また、この関数をcallしないとFrame syncが出て来ません.


ポエム5
データのconfigです.
 adi_sport_ConfigData(hDevice, ADI_SPORT_DTYPE_ZERO_FILL, 31u, false, false, false );

第2引数
ゼロ埋めとかを指定

第3引数
31だと32bitオーディオデータになるかんじ.

第4引数
true : LSB first (Little endian)
false : MSB first (Big endian) 

第5引数
DMA packingってなんだろう?
true : Enable DMA packing (from 16bit To 32bit) . 
false : Disable DMA packing

第6引数
 true : Enable Right Justified mode. 
 false : Disable Right Justified mode. 


ポエム6
今宵は、BCKとLRCKを出すところまでしか出来ませんでした.
project詰め合わせをこちらに置きます.

動作:
・内部SCLK0 100MHzを16分周してBCK 6.25MHzを出力 →SPT1_ACLK
・BCKを64分周して97.6kHzのLRCKを出力 →SPT1_AFS
・TP2にSCLK0 100MHzが出る
・Timer0割り込みでLED0が点滅
・I2S dataはまだ出ません、FIFO操作もしてない

今宵はここまでにしとうございます.

7へ    9へ

かしこ

28 件のコメント:

  1. 読者 トランジスタの等価回路がわからないですか
    簡単な方法があります。
    電子立国日本をみて、わかったのですが、トランジスタテクノロジー英語版を読むといいみたいです。
    日本では、海賊版があるそうです。何しろ、コピーのない時代。カーボン紙をはさんで七枚くらいタイプライターでコピーするのです。と、言ってました。

    返信削除
    返信
    1. ハイブリッドなんちゃら等価回路にはあまりお世話になってませんです.学校で習うと必ずあれから始まるんだけどなんだかなーって感じがしました.もう40年も前か...

      削除
  2. 読者 わかった、ic規格表の回路図の等価回路の話だ。
    Pdfダウンロードがよいらしい

    返信削除
    返信
    1. 規格表ってありました.もう30年ぐらい前か...

      削除
  3. 読者 神田神保町の理系古本屋に、ic.74シリーズの規格表5年?10年?前にあったな。ワゴンの古本、5年前くらいに、値付け高値設定から、1年前に元に値下がり値付け設定になりました。店員交代したか?トランジスタ技術の古本、大量発生するときある。家が広ければ買いたいところだ。買って帰り道に見るくらいで、積ん読になるから。

    返信削除
    返信
    1. トラ技の大量発生は遺品整理でしょか

      削除
  4. 読者 新築に引っ越しじゃないかな?

    返信削除
    返信
    1. 老人ホームへ引っ越しですかぁ?

      削除
    2. 読者 ミッドタウンとなりの桧町タワマンでしょ?
      330mの麻布台ビルができるそうです よ、日本一!高い!

      削除
    3. 330mだと100階建てですね.高山病になりそうよ

      削除
    4. 読者 スカイツリーに昇ると、高山病ですね。酸素ボンベないとだめか。あがれなくて良かった

      削除
    5. 頭痛がしたら要注意です

      削除
  5. 津久井街道より町田街道が関越道には便利2023年8月9日 12:55

    大学生時代はトラ技を読むのか楽しみだったんですけど、回路設計が仕事になってからほとんど読まなくなってしまいました。動作速度を求めていくと自然現象にいいようにもてあそばれてしまって(頭の悪い自分の逆切れですけど)、電子回路に夢を見られなくなってしまったのかもしれません。となりで68000のCとか、ゲートアレイとかやっている人がうらやましかったです。そこいらへんにはまだ夢がありそうだったので。昔話でした。

    返信削除
    返信
    1. たしかにあちらがスマートに見えますわw

      「自然現象にいいようにもてあそばれ」 ←なるほど

      わたしの脳神経は自然と遊べるから好きだと言う構造になってる気がします.

      ところが業務でやってた磁気記録だと、アナログ回路だと自然現象にもてあそばれて性能が出ないので、くそぉー全部デジタル処理に置き換えてやると目標設定したのが1900年代の前半頃でした.それ以来アナデジmixに...

      削除
    2. 読者 そんなにトイレ近くなるのかと、生理現象と勘違い

      削除
    3. 読者 デジタル化ビデオデッキの基板のすかすかなこと

      削除
    4. 近頃のノートPCも基板小さいです.損した気分.

      削除
    5. 読者 ノートは、小型化薄型化に命

      削除
  6. >power managementの関数の中でclockをいじれるようになって
    最近は、こんなところまで、
    ・SDGsの呪い(エコじゃないCPUは生き残れない・・・のか?)
    が、かかっていて、単なるクロックと言えど、
    ・高クロック=高消費電力=エコに反する!
    ので、
    ・単なるクロックアップ
    すらママならず、自由に弄れなくなってしまいました・・・
    ※「高消費電力CPUは、環境破壊の元!」と言われて、環境活動家のグレタに睨まれてしまいます・・・なので、インテルも最近は、デスクトップ用CPUでも「省電力」が、売りになってます。

    という冗談はさておき、最近のCPUは、軒並み、
    ・クロック系が、パワーマネージメント配下に置かれている
    というのは、事実ですね。まぁ、モバイル用途対応というのもあるのでしょうけど。
    (ちょっと、直感的ではないですね。知らないと分からないです。)

    返信削除
    返信
    1. clockがpower系の配下とは、clockも落ちぶれたものよのぅ.
      ふぉっふぉっふぉ

      いまは温暖化というコトバは使ってはいけなくて、気候変動と言わなくちゃいけないそうです.もしかしてヒヨってる?
      大西洋の海流が数年以内に止まるので、EUが氷河期になってしまうんだそうです.あらまぁ・・・寒くなるなんてどうしましょ

      削除
    2. 読者 グレタ対策でIntelは、クロックを下げるどころか、あげて爆熱仕様で、水冷部品は、値上がりしてます。水冷滅びかけて、9800円まで、下がりいま16000円位。欲しいな水冷パーツ。

      削除
    3. 埃で詰まったCPUの放熱器を掃除機で吸わないとそろそろヤバいわたしのメインマシン

      削除
    4. 読者 1000wの掃除機で、掃除しよう。畳で1000wいらない説。絨毯ないと、
      無意味らしい

      削除
  7. 読者 EUは、寒いので独の車は、かつて、暖房ぎんぎん、クーラーへなちょこだったそうで。英は、札幌くらいの緯度なので、独もにたようなもので、冬は、ガス石油露産なくて、高いだろうね

    返信削除
    返信
    1. 日本で売ってるVOLVOにシートヒーターがついてて、へーっと思いました.さすがに九州とか沖縄では一度も使わないんじゃないかと思いますが、あれは液体循環なのか電気ヒーターなのかどっちなんでしょ?

      削除
    2. 読者 アメリカ製になったボルボは、ニクロム線予想。壊れる複雑な回路ないでしょ
      アラスカ仕様ですね

      削除
    3. ラジエターから温水を分岐させてシート暖房してたらすごい手間ですね

      削除
    4. 読者 エンジン暖まるまで。カチンコチンでぶるぶる

      削除