今日(2018.10.28)は休日ですが、早く方向性を出したかったのでSoftI2CMasterを使って見ました。
結論から申しますと、SoftI2CMasterは使わず、SCL, SDA信号を直接制御することにしました。一から作るのは大変なことは百も承知ですが、土台がしっかりしていないといくらその上層部が綺麗にお化粧されていたところで動きがよくわからず、問題があった時デバッグも修正も拡張もできないことがわかったからです(こんなこと書くのこれで何度目だ)。
いきなりアセンブラやCで書き始めるのは無理があるので、当面はArduinoのdigitalWrite/digitalReadでどこまで対応できるかやってみることにします。
===
最初に気づくのは、SCL, SDAを制御するには双方向なことです。ArduinoのピンはpinModeでinputかoutputのどちらかしか定義できませんからArduinoの外部に3-stateバッファを外付けすることを考えないと行けません。
もう一つ気になるのは、Arduinoのスケッチで書いてI2Cのスピードが出なかったときどうするかです。I2C制御をするだけのためにArduinoを高いCPUに置き換えることは考えにくいのですが、メインCPU(RasPiを想定している)にI2C信号を直結すればスピードの問題は解消するかも知れません。その際に一度書いたプログラムがそれほど大きく書き換えなくていいことが望ましいのは言うまでもありません。
I2C+uC->USB->メインCPU、の流れにしておけば、メインCPUはMac/Windows/Raspi等々何でも使えるので、I2Cセンサーをちょっと使ってみる、ソフトの初期開発をする、等の際には便利でいいと思っていました。もし仮に、実用化の際にuC->USBの部分を端折って、I2CをメインCPUに直結せねばならない時が来ても、I2Cプロトコルを一旦コマンドにしておく、と言う流れは変えなくて良いので、今後無駄にはならないのではないかと思います。