STM32F7を使ってみる13 -STM32F769I-Discoveryを動かしてみる2-

>ARM、禿に喰われる
>ARMはもう終りDA!

うろたえるな小僧共ー!

(↑C.V.牡羊座のシオン様で)

禿の習性からして中身ろくに見ないでまーた買い物のための買い物やっただけだから
アリババの時みたいにどうせすぐにリリースしちゃうでしょう。
ていうか"買収する"と言ってるだけで20160803の時点で買収が完了"した"とは
言ってないのでまだ禿に喰われてすらいない段階ですね。

こと電子工作で使用するARMマイコンの範囲においてはまったく何の影響も出ない
と思います。尤もARMが禿に衰退させられるような程度のジョンブル野郎だったの
ならねむいさんのほうからお断りで自然歩道一本に絞ってこのぶろぐ続けます。

というわけでこの件についていろいろ質問もらったので虹裏メイドねむいさんとしての
見解をさせていただきました。かしこ。

20160906追:
正式に買収完了と同時に上場廃止になりました。
ねむいさんとしても今後の禿の動向に注視いたします。
最悪のシナリオは小規模マイコン向けのコアIPが捨てられることです。
20160906追:


20170411追:
少し前の話ですが予想通り早々に4分の一を売却するそうです…
ねむいさんの予想以上に売るの速かったわ!
今度はアラビア風ARMになるのですね…
20170411追:




































すみませんうっかり本日のぶろぐ終わらせそうになってしまいました。

今回は主にSTM32F769I-Discoveryに実装されたAudioCodecを利用してサウンド
再生機能つけるべく頑張ってみました。

●STM32F4-Discoveryからのサウンド再生機能の移植

STM32F769I-Discoveryはご覧のとおりAudioCodec(WM8994)とは生粋のI2Sでは
無くSAI(SerialAudioInterface)のI2S機能から接続されています。
基本的なものはSTM32F4-Discoveryの時と同じなので基本的な部分を押さえつつ
F7のHALに合わせるよう移植していきました。


困ったのがサンプルレートから実際のI2S用のクロックを生成する関数で既存の
BSPの関数を流用すると何でか2倍速で再生してしまうという現象にぶち当たって
しまったことです。
これなんとなくHALのバグっぽいな〜と思っているのですがeMMC対応したとき
かなり時間を喰って懲りているので深追いはせず、自作のテーブルを参照して
適切なPLL値をPLLI2Sに付与する関数を経由させるようにしました。
ややこしいですがSAIのクロック元はPLLI2Sから供給しています。BSPもそのように
なっています。


ていうわけで2作業日くらいで移植完了です。
画像はmp3ファイルを再生しているところです。画面のIART,INAMはID3v1もしくは
ID3v2タグを解析し表示しております。aac,wavファイルも同様に再生できます。


最初にmp3を移植した頃は良く分からなくて実装していなかったのですが、ID3に
格納されている"UTF-16LE"の文字列をChaN氏のFatFsに収録されているff_convert()
関数を用いてS-JIS形式の2バイト文字に直して表示するようにしました。もちろん
ascii形式でも崩れないように対策済みです★
ていうかID3関連はかなり長い期間適当に作って放置しててID3タグ解析の段階でコケて
mp3/aac形式ファイルが再生できない場合があったのず〜〜〜〜〜〜っと放置してました
ごめんなさいごめんなさい!!!!!
STM32F4のほうも今回の修正は横展開しておきましたのでご安心ください。

STM32F769I-DiscoveryなんてもってないYO!という方もご安心ください!
makefileの定義を変えるだけで秋月さんのところで購入できるSTM32F746G-Discovery
でも同じようにオーディオファイルの再生が可能です!



そいえばビットレートが高いデータをサーキュラDMAでバリバリ送る使い方すると
SDIO/SDMMCのDMA転送に干渉してコケる問題はSTM32F7になっても解消されていない
のでmp3/aac/wav形式対応にした場合SDMMCはDMAでは無くFIFOのポーリングで転送
するようにしておりますorz

さらにポーリングの場合はSDIOのクロック周波数が高い場合受信時のアンダー
フローが起こりやすいのでハードウエアフローコントロールを有効にするように
しました。STM32F4ではエラッタで使用不可とされてきましたがF7シリーズでは
解禁です★

さらにさらにですが昨年STM32F4で行ったアライメントズレ対策をSTM32F7に展開
して実装した際に大バグを作りこんでいた事が発覚しコレも修正しています・・・
一年以上ほっぽっていましたが皆raspberryに逝っちゃってSTM32F7に見向きも
しなかったのでばれずに助かりました・・・これもID3タグ解析の実装見直したときに発覚orz



●画面がでかくなったからでかいサイズの動画再生してみる
ChaNさんのLPC2388向けFatFs移植例には独自形式で動画を再生できる機能がありま
した。ねむいさんはこれを他マイコン向けに拡張しつつ使い続けてきました。

STM32F769I-Disccoveryになって画面サイズが800x480に一気に広がったので、
少しデカめのファイルを作ってちゃれんぢです。

とある動画からAVCフォーマットでエンコードされたmp4形式のファイルをAviutilで
無圧縮aviにしてそこからChaN氏のツールで独自形式のファイルに直します。

ちなみに独自形式に変換するavi2imgはChaN氏のFatFs実装例ffsample.zip内¥lpc23xx¥tools¥にあります。
今回のねむいさんの移植例ではDMA2Dの関係でビッグエンディアンが要求されるので
avi2imgを自前でビルドしなおさなければなりません。さらに最大サイズも変更する必要が
あります。真似される方はご注意ください。


再生するプログラムのほうも少し手を加えました。
ファイル名と現在フレーム/総フレームを表示できるようにしておきました。

また、display_basis.hのENABLE_PERFORMANCE_MEASUREMENTのdefineを有効にすると
上記の代わりに一秒あたりのフレーム数を表示できるようにしました。


この動画は640x360サイズあります。一ドットあたりRGB565の16bit=2バイトあるので
一画面あたりのバッファサイズは640*360*2=460800byte必要です。そこから30fpsの
動画を表示せしめようとしたら460800*30=13824000(byte),つまり約13.8MByte/Sec
の速度で読み出さないといけないためSDMMCのNomalSpeedMode(MAX12.5MByte/Sec)
ではまったく歯が立ちません。


この動画はオリジナルは29.97fpsとなっており、そこから生成されるimgファイルも
同じく29.97fpsのためノーマルスピード(ねむいさんの移植例ではSDMMC用のベース
クロックがPLLSAIから生成される48MHzからのため最大12MByte/Sec)では先に述べた
とおりまったく足らず20fps前後しか出ません。


SDMMCのクロックをハイスピードモード対応(ねむいさんの移植例では最大24MByte/Sec)
にすると転送が余裕で間に合うためきっちり29.97fpsが出ます♥
う↑ま↓ぃ↑やったぜー
さすがにこれ以上のサイズだと転送サイズも肥大化していくためスムーズな再生は
難しくなりますがねむいさんはタイチョウの作る動画がオリジナルサイズとFPSで再生でき
ればそれで満足なのでコレでよしとします。ぜんぜんよくないですけど。
使用するSDカードそのものの転送速度も重要になるはずなのでこちらを熟読して、
私の真似される方はカードもしっかり選んでみてください。







・・・ぇ?元の動画を見てみたいですって?・・・まあ別にいいですけど動画内コメントに
警告がありますが桁外れにヤバイ内容なので無理だと感じた方はすぐにブラウザを
閉じて退避した方がいいと思います

"すぐに"を具体的に言うと最初の3フレームめまでです。時間で言うと100mSec以下の
反応速度でブラウザを閉じれば安全となります。ねむいさんのぶろぐを会社や学校
から見ているクレイジーな方々はuSecオーダーで超反応できる人間だらけなので
多分大丈夫と思います。ちなみにねむいさんのSTM32F7のサンプルから再生した場合、
タッチパネルの読み込みが100mSec間隔のため逃れられません。覚悟してください。

ねむいさん的にはゼEROの中でもコレはテーマ性・ストーリー性・変態性・音楽性・
危険性・テンポ・○ンポの全てが危険水準を大きく逸脱した迷作中の冥作であり、
634タイチョウの無限の可能性と危険性を垣間見ることが出来る貴重な作品であると確信
しているのですがリアルタイムで投下されたときはこの人本当に気が狂ってしまった!
と思ったのですがこんなヤバイ動画ばっかり作っててラブライバーに自爆テロ食ら
わないのかYO!大丈夫か曜!とか思っているのですがねむいさんもイケナイお口のほむコラばっかり
やっててやってる事あんまし変わらないかもと思っているのです!
が!
虹裏メイドねむいさんは「ラブライブ!サンシャイン!!」を応援しております!
.見ないと注↑射↓なんですぅ♥










戯言はこの辺にしてちょっと早いですが上記の更新を追加したSTM32F7のいつもの
をいつもの場所に上げておきます
。この一ヶ月間でFatFsにも大量にぱっちが
当たってR0.12aになっていますので全て適用しております★
上のほうでも述べましたがSTM32F4にも横展開しましたのでSTM32F4-Discovery
しかもっていない・・・!なんていう方も安心です♥


次回は真面目にブログ更新します!!!!!!!!!!!

Comments

Post a Comment








Go to top of page