STM32で4chオシロを作ろう!
えさて、何から手を付けたらいいかしら?
Sample code
githubのこちらがやろうとしている事が似ているので参考になりました。sourceをチラ見した印象では、triggerやscalingについてはさほど凄い作業はしてないみたい。
また、triggerの実装は、ADCのhardwareが実行する閾値検出器による割込みです。filteringの面で性能に不安感ありかもな。わたしはsoftでtriggerするつもりですけれど、filteringなんかしてたら処理速度に阻まれてボツるかもしれません。
LCD仕様
制御相手の仕様が不明なのはADCとLCDです。
ADCはSTM32cubeIDEに雛形的libraryがあるのでそれをパクりゃぁ何とかなるだろう。
でもLCDは自力記述かgithubを参考にさして貰う事になると思われます。
先日Aliexpressに発注したLCD基板名称はMSP3520です。ILI9488というLCD driver ICが載ってます。
ILI9488の外部IFは何種類も用意されている中で、プリント基板としてのMSP3520はSPIに固定されています。
ILI9488のPixelは24/18/16/3bitとがあります。しかしながら、SPIで許されるのは、18bitと3bitだけです。
SPIは基本的にbyte単位なので、3bitでは1byteに2 pixelの情報が入り、18bitでは1 pixelに3bytesを要します。
ILI9488のSPI clk最高周波数は15MHzです。18bit/pixelだと1frame転送に250msも掛かる計算。チトのろい。write時20MHzみたいです.
GRAMへのグラフィックデータ転送は、書き換えたい矩形領域のpixel addressをsetした後に、burst的にデータを送信します。余分に送信しても捨てられます。(lineを描く等の小細工はILI9488の仕事では無いという事ですね)
表示期間と、GRAM書き期間の衝突防止方法は今のところ不明。ILI9488には垂直ブランク期間を示すTE信号出力が在り、本来は衝突防止可能な仕様だけど、MSP3520にはTE端子が無いんです。
冒頭のsample codeにもその様な衝突防止は無く見えます。task queに積む構造だけど、空き時間に順繰りに処理してるのみかな。
この点については謎のままです。
MSP3520/STM32間のSPI結線は?
pixel address setの様な設定をするのがコマンドです。コマンドは沢山の種類があります。SPIには、コマンド伝送/データ伝送を識別する仕組みが必要です。
MSP3520は4-wire SPI。
STM32 SPIにも4-wire SPIがある。
ところが両者の意味・思惑は違うようです。
MSP3520はコマンド/データ識別信号線を1本追加する意味で4-wireと称しています。
しかしSTM32の4-wireの意味はそうではなく、1本追加はCS的な意味ですから、コマンド/データ識別信号線としては使えそうにないです。
回避策として、STM32 4-wire SPI DMAを使いはするが、コマンド/データ識別信号線の操作はsoftでGPIOを直叩きする事になりそうです。
すなわち、SCL/MOSI/MISO/NSSはSTM32 SPI hardware信号線を配線し、それに追加でGPIOによるCMDDATAを配線するという構成になるのではないかと思います。
やってみないと判らない。
かしこ
追記: LCD driver IC ST7796Sのdatasheetをチェックしたところ、ILI9488ととても似ていました。同じ人が設計したのって思うくらいです。もしかしたらコマンドも同じかもなー
私も github のソースを、ざっと見てみたのですが、
返信削除・主要なところは、STM32IDEのライブラリ使用
・"µOS++"という、リアルタイムOSを使っている
・使ってるボードは「bluepill」(有名な、小型STM32開発ボード)
※以前紹介した「Longan Nano」は、このボードのパクリ(プラグコンパチではないが)
とも言われてるので、回路は「ほとんどそのまま」使えるかもしれません。
"µOS++"は、そもそも「CMSIS-RTOS」(ARM用のRTOSとして作ったもの)なので、
RISC-V用はないのですが、「FreeRTOSがRISC-Vをサポート」しているようなので、
これを使えば何とかなるかも知れませんね(移植は結構大変かもしれないけど)
(FreeRTOSはESP32用があって、ちょっとかじった。)
・しかし、メインルーチンって、案外短いですね。(main.cpp で、250行。)
(「真の」メインループは、たったの 3行!)
CMSISはIDEに登場するので名前だけ知ってたけどRTOSでしたか。
削除Longanサン、ヨクニテマス。
「CMSIS」は、本家ARMの策定したインタフェース規格の名称(総称)
削除https://www.arm.com/ja/why-arm/technologies/cmsis
のことで、それに則って作ったRTOSが「CMSIS-RTOS」と言われていたのですが、
どうも「ライセンスの問題?」で、"µOS++"という名称に変えたらしい。
↑のリンクにもありますが、本家ARMがこれとは別に「CMSIS-RTOS2」というのを
作っているみたいです。
※なんか色々ややこしい。理解が間違ってるかもしれません・・・
CMSISよかuOSがかっこいいです。
削除