進行中の作業が複数あり話題が飛び飛びですけど、まとまった時間のとれる週末にやりたかったことがありました。ものすごく長い間中断していたプロジェクトを起こしてきました。モジュール間通信です。ホコリをかぶっていた実験用のブレッドボードを掃除して、配線をざっと確認。でもファームウェアはどこに?工作関連のフォルダはものすごい数があって一個ずつはとても探してられないんですが、当時書いたブログ記事をたどって見つけられました。やはりブログ書くのは重要です。書かないと埋もれて消える情報が山とあります。
当時午前3時から午後11時ぐらいまで働いていて、あまりのきつさについに心折れてこのプロジェクトは中断、そのすぐ後にスタートアップで働き始めてその忙しさにプロジェクトに戻れなくなったのですが、あきらめたわけではなく。でもその間に世の中はかなり変わってしまいました。こうやって実験環境を眺めていると当時使っていた機材ばかり。8年前から一歩も進んでいないプロジェクトを目の当たりにすると、人生にはほんと時間切れがあるなと実感します。本日の目標までは到達しませんでしたが、最低限昔の実験系は動き出したので、ま、命のある限りやるのです。

あっと、これだけだとあまりに内容がないので
以下は MIDI の NOTE ON を CAN に転送したものをロジックアナライザで捕まえたものです

CAN のバス速度は 1Mbit/s で CAN2.0 でやれる最速ですけれども、NOTE ON の内容は、独自のインストラクションの 0x09 に加えて NOTE ON の 0x48 0x7F と3バイトだけなのに対して全体のオーバヘッドが大きいこと。1メッセージを送るのに 70μS 弱かかっています。レガシーのシリアル MIDI は遅いといっても実は 31250 baud というのは 250 kbit/s のこと、CAN 2.0 はそのたったの 4 倍しかないわけです。それに対して MIDI は 2 バイト伝えるには 2 バイト送るだけでいいわけで、遅いとはいえ軽い。さて何秒かかる?実測してませんけどデータ部だけでは 64μS です。なんだよレガシー MIDI と速さ変わらないじゃん。てことで、これがマルチマスタ通信にかかるコストなわけです。しかも CAN は自動車で使うための技術で通信エラーは命にかかわりかねないのでエラー対策が厳重でそれだけデータも冗長になるのです。
機能的には MIDI 転送は全体のごく一部で今やっているモジュール間通信の肝は双方向・マルチマスタ通信だから速くなければ価値がないという風にはならないと考えていますが、バスをもっと速くしないと後々問題となりそうです。この辺の問題は以前から見えていて、代替の手段を探ってはいるのですが
- もうちょっと簡易なプロトコルを独自に開発 – 標準になった技術が使えないので高くつく。専用 IC がないのででかくなる。開発時間もめちゃかかる
- イーサネット – あと似たような標準プロトコルはイーサネットしか知りません。桁違いに速いが各モジュールにイーサネットアダプタとドライバを乗せると恐ろしく高くつく、かも?
イーサネットのハードウェアはどんどん安くなっていると思われるので、後者はたびたび振り返って検討しますが、やっぱりファームウェア的負担が大きそうだなあというのが印象です。
じたばたしている間に CAN 2.0 より高速な CAN FD にも手が届きやすくなったと思うのでこの路線を継続してゆこうと考えています。
でもまあ、同じようなことをソフトシンセでやるならほんと備え付けのイーサネットで良いんですけどね。