前回テスターで確認してみた感じだとSSD1309自体はI2Cにも対応してるんだけど、基板上でSPIモードに固定されてそうだったので基板を改造したI2Cに対応させてみた。
一応SSD1309な1.54インチのOLEDモジュールも何種類かあってSPIとI2Cが切り替えられるようなモジュールも存在しているのでI2C対応はできるはず!ということで調べてみると24PinのOLEDモジュールの仕様書的なものがあったのでその通りに配線してみた。
しかしBS1(LCD側の6番ピン)がどうやらコネクタの下でGNDに直結されてそうなのでOLEDモジュール自体を剥がして基板だけにしてみた。

OLEDディスプレイ自体は両面テープで固定されていたけど隙間からアルコールを数滴垂らして薄いコーキングヘラでゴシゴシしていたら剥がれた。糸とかのほうがいいかも。
OLEDディスプレイ自体は割れやすそうなので注意かも。

やっぱり表面には出ていなかったので、コネクタを剥がしてみた。予想通りコネクタの下で6番Pin(写真だと右から6番目)がGNDにつながっていた。
とりあえず6番Pinがコネクタの下で6Pinに接続されているのをパターンカットしてコネクタを戻した。6番Pinのパターンカットが失敗しているとI2Cの改造で3.3VとGNDがショートしてしまうのでちゃんとテスターチェック。

そんでもって5番PinがVDDなのでコネクタを取り付けたあとに5番Pinとショートさせた。さらにI2Cの場合はSDAとしてPin14とPin15を使用するので14がSDAにつながっていたので14と15をハンダでショートさせて使用した。
あとはI2CタイプのSSD1306モジュールのようにパワーオンリセット回路を追加した。手持ちの部品で1uFと2.2kΩで試してみたんだけど不安定だったので、1uFと10kΩの簡易CRリセット回路にしてみた。面実装のダイオードが手持ちでなかったのでダイオードはつけてない。ダイオードを付ける場合はカソード側をVCCで抵抗と並列につなぐ。
でもとりあえずこれで電源とI2Cの2本、計4本でマイコンに接続できる。

SPIだと画面を高速で切り替えられていいんだろうけど、あんまりスピードが必要ない用途にはやっぱりピン数が少なくて良いI2Cが便利かも。
ちなみにソフトウェアの方は基本的にはSSD1306とSSD1309は同じコマンドに対応しているので互換性があるっぽい。リセットの回路はSSD1306と同じ定数ではうまくリセットできないことが多かったので違いはそのへんかな?
SSD1306のライブラリでそのまま動かすことができた。u8g2では
U8G2_SSD1309_128X64_NONAME0_F_HW_I2C u8g2(U8G2_R0);
という設定も用意されているけどSSD1306のままでも行けた。
SSD1306搭載の0.96インチOLEDモジュールの置き換えとしてはSH1106搭載の1.3インチよりもこのSSD1309搭載の1.54インチのほうがソフトがそのまま使えて便利かも。画面も大きいし。