デバッグやる上で、液晶ディスプレイが無いのは決定的に不便。今回はブラシレスモーター制御という難物でもあり、LEDに頼って行うのは限界だ。ピンが余っているものでもないので、LEDをシリアル接続するのは論外。この際やむを得ないので、I2C接続にする。I2C接続のLEDに周辺パーツを実装し、2本線とGNDとVCCの4線接続できるようにする。使い回しを考え、基板に情報を書き込みまくった。秋月のだが、周辺パーツとして1μFの積層セラミックコンデンサーが2個付属していた。ところがそれをうっかりして、手持ちに1μFが無いからと10μFを取り付けてしまった。推奨容量を超過しているので、動作不良を起こすかもしれない。でかい問題がI2C通信それ自体にある。I2C通信ができるようになるまで、とんでもなく大変だった。関連レジスターを精緻な手順と順番で適切に制御しないと、通信が成功しない。対してモーター回転数などの指令を送ることはできる。マシではないかという希望的観測は通じないかもしれない。同じぐらい苦労するかもしれない。ソフトからI2Cを利用するのは、嫌になるほど面倒臭い。LEDに表示を出すまで猛烈に苦労しそうな予感。試験基板側は、I2C用のピンにプッシュボタンを取り付けていた。配線を切断し、4ピンソケットを増設。ここにLED基板のコネクターを刺すだけで、ハードの準備は終わる。動作確認は果てしないソフト制御を準備した末のスタートとなる。そんな訳でI2C関連の仕様を確認していたが、ここで大問題に気付いた。デバッグ用にLEDをI2C接続するところまでは構わない。ブラシレスモータードライバーとして実運用する時は、LEDなど実装しないからだ。対してモーター回転数を送信する際の話。その通信手段としてI2Cを予定していたが、不適切であると気付いた。I2C通信はバッファーに溜め込むことができず、送信終了までソフトが付きっ切りになる。左右2つのモータードライバーに同時送信できない。左のドライバーに回転数を送信し、それが終了したら右のドライバーに回転数を送信する、という感じに時間差が生じる。これでは、左右のモーター回転数が完全に同期できないかもしれない。I2Cは通信速度が遅いため、問題を無視できない。これまでの検証で、モータードライバーとして必要な最小構成は判明している。SPI通信のためのピンを捻出することは可能だ。マイコン間通信にはSPIを使用し、LEDはI2Cで良い。ただでさえ複雑なI2C通信で、複数マスター通信などという更に面倒なことを行うことなく、受信した回転数をLED表示することもできるようになる。