もう少し、レジスタの動作を追い掛けてみた。SSP1STATレジスタには、よくわからないパラメータがある。
bit7は、先に説明した「スルーレート制御」という立上がり下がりの反応を高速にすることだった。
となりのbit6もこの文言を読むだけでは、皆目分からない。SMバスというものを少し調べてみた。1995年にIntelが制定したもので、PCの電源モジュール間の制御信号を送受するもののようだ。概ねI2Cの規格と同じ仕様のようだが、信号レベルがI2Cよりもより低電圧で動作するように定義されている。bit6は、電圧レベルをSMバス仕様にするかI2Cバス仕様にするかの制御ビットのようだ。
これまで、とりあえず動いたときにセットしていたため、そのままとなっていたが、詳しく調査する過程でこのビットの動作を追跡してみた。
これまでセットしてあったビットをクリアして波形を比較してみた。結果、クロックパルスのHigh期間が不定期に短くなるという症状が現れなくなった。このビットにより0/1判定の閾値が下がったことで、誤動作が起きていた可能性が判明した。
さっそく、このビットをクリアして、理論的には動作するはずのbaudレートジェネレータに5Fを設定して確認してみた。
結果、微妙な状況。たまに動作する事があるという極めて不安定な状態となった。High、Lowともに6μsの幅が確保されているようにオシロでは見える。このような不安定な症状とは、仕様ではなく、機器固有の閾値の近辺で起こっていることが考えられる。ということは、このモジュールではThigh、Tlowが、仕様よりも長い期間が必要と考えられそうだ。おいおい。。。。。普通は、仕様はマージンを持ってて、それよりも少し厳しい条件でも動作するようにできているはずだろうに。逆ってのはひどいんでないのかぁ・・・・・
とりあえず、手元にあるI2C対応LCDモジュールは、仕様よりも遅い動作でしか動かないものらしいぞと言うことが分かり、ちょっとがっかりだけど、とりあえず、使える条件は概ね把握することができたと言うことで、今回の検証はひとまず終了とする。