さて、Rings 製作もハードウェア部分は終わりあとはソフトウェア部分です。Rings は ST Micro の STM32F405RTG6 というマイクロコントローラを使っていて、プロセッサの中身にも大変興味がありますがそれはさておき STM チップを使うのは初めてなのでファームウェアの書き込み方法からして全然知りません。で、Rings の回路図を見るとプロセッサと通信できる口が二つあります。

JTAG とシリアル。どっちを使えば良いのか?どうもどちらを使ってもファームウェアの書き込みはできるようですが、僕はシリアルだけ試したので JTAG の情報はいつか試したときにでも。
STM32 はブートローダという特殊なソフトウェアが出荷時に組み込まれていて、これを使えばシリアルでファームウェアが書き込みができます。というわけで、この方法で書き込むことにしました。ファームウェアの書き込みについては TOIL さんがやり方を詳しく解説しているので参考にしました。ファームウェアもずぼらして自分ではビルドせずにここから頂きました。感謝
https://github.com/TOILmodular/Rings
一つ僕もまだよくわかっていないところで、ファームウェアはメインプログラムとブートローダに分かれていて両方書き込む必要があります。 STM32 には内蔵しているブートローダがありますが、書き込むブートローダはそれとは多分別物です。書き込みするときにブートローダとメインプログラムでは書き込みが行われるアドレスが違っていたので、hex ファイルにそういう指定があり、どちらもプログラム領域に入り別プログラムとして格納されているのでしょう。

ファームウェアの書き込みには STM32CubeProgrammer というソフトウェアを使いました。以下手順

USB – シリアル変換アダプタを用意して電圧レベルをプロセッサの電源と同じ 3.3V に設定します。STM32 のシリアルピンは 5V の電圧にも対応しているので電圧レベル 5V 固定のドングルも使えるはずです(でも未確認)。

ドングルを基板に接続します。ドングルの Tx は基板の Rx につなぎます。ちょっと紛らわしい。

基板の SYSBOOT スイッチを押したまま電源を入れます。あるいは SYSBOOT スイッチを押しながらリセットボタンを押します。電源が入ったらスイッチを離して大丈夫です。
こうするとプロセッサが内蔵のブートローダを起動して、シリアルによる書き込みができる状態になります。書き込みの手順はスクリーンキャストしたのですがなぜか動画が表示されないのでスクリーンショットで








あとはデバイスとの接続を切ってファームウェアの書き込みは終了です。
次はモジュールのキャリブレーションです。これは Rings のマニュアルに書いてあるやり方を実行すれば OK です
https://pichenettes.github.io/mutable-instruments-documentation/modules/rings/manual/#calibration
これでほぼ完成ですがあとひと手間必要です。基板の右下にジャンパーがあるんですが

回路図でみるとこの SJ1 です。

これは、内部では Rings の出力は二系統で出力も Even と Odd の二つがあるんですが、片方だけプラグをさすと両チャネルが合わさって出てきて、両方さすとチャネル独立の出力が出てくる仕組みです。賢いなと感心しますけど、SJ1 が切れていると J10 の Odd 出力は想定通りに動いてくれません。SJ1 をつなぐと想定通りの動きになります。
このジャンパは何のためにあるのかよくわかりませんでしたが、繋ぐと内部で正のフィードバックが起こります。自己発振は起こさないことを確認しましたが (R55 と R56 がきいてる?)、もしかしたら製造時のテストの時に支障がでるのかもしれません。
とにかく繋ぎました。狭い場所にあるので若干苦労しました。やっぱりどういう工程で製造していたのか謎です。

あとは、基板のフラックスをイソプロピルアルコールで洗い落として、パネルを取り付け、完成です。
いやー最高です。二台目も製作中ですが多少手順は変えますけれどもおおむねこの繰り返しです。のんびりやろうと思います。
さて、ファームウェアの書き込みについて、うまく行くまで何回か失敗したので失敗例として載せときます。
失敗1:巷に出回っている安い ST-Link/v2 ドングルを買ってくる
ドングルが悪いわけじゃないのですが、STM チップにアクセスするには ST-Link/v2 対応のドングルがあれば良いよ、との情報をもとに、安価なサードパーティーのドングルを購入しましたけど、モノが届いたらピン名が全然違っていました。どうも、ひとくちに ST-Link/v2 といっても接続にはいろいろな方法があって安いサードパーティーのものは大抵 SWD という接続方法に対応しているらしいです。Rings のは JTAG という接続方法で別物で、安いサードパーティーのドングルはたいてい Rings では使えません。当たり前ですけど結局純正の ST-Link/v2 ドングルを買うのが一番楽で確実なわけでした。ブツが届いてあれっ繋げられないと思ってから慌てて ST-Link/v2 のドキュメントを読んでわかったんです。ドキュメントはちゃんと読め、も教訓です。
失敗2:RS-232-C シリアルを使おうとして失敗
実は、シリアルで書き込みをすると決めてから「うちには RS-232-C の USB-シリアル変換ケーブルがあるからそれでいいな」と高をくくっていたんですが、これはそのままでは使えません。電圧レベルが違うからです。これは STM32CubeProgrammer から RS-232-C に送られた接続リクエストです

電圧レベルが -5V そしてそれはロジックのレベル 1 です。5V に立ち上がったところでレベル 0 です。これをプロセッサにつないでも認識されないばかりか下手したら壊しかねないですね。RS-232-C の規格では -3V から -15V がロジック 1 で 3V から 15V が 0 なんだそうです。知らんかったよってかずいぶんテキトーな規格なんですね。
反転して電圧を基準値内に収めれば使えるかもしれませんけど試してません。なんか信号もノイズが多いし、まあどうしても必要な時だけ使うことにします。
で、新たに手配した TTL レベル入出力のドングルからの出力は以下のような感じ。よく慣れ親しんだシリアル信号です。これは認識されました。

ちなみにそういうわけで RS-232-C は MIDI の代わりにもなりません。これまた試してませんけど TTL レベルとうたったドングルなら(普通のやつです)MIDI 接続いけるかも。

参考資料:
Rings – Resonator Eurorack Module – https://github.com/TOILmodular/Rings/tree/main
ST-Link/v2 – https://www.st.com/en/development-tools/st-link-v2.html#documentation
Wikipedia: RS-232 – https://en.wikipedia.org/wiki/RS-232#Voltage_levels
Rings Manual – https://pichenettes.github.io/mutable-instruments-documentation/modules/rings/manual