Arduino UNO Qは、MCUにSTM32U585が採用されている(私は初物<嫌な予感しかない)。AD7730とはSPI通信を行っているのだが、AD7730のPOLをHIにしてSTMと接続、SPI MODE3(アイドル時にHI、立ち上がりでデータIN)にして利用すると、SPI.Transfer()毎に、開始時には準備?での立ち上がり(左側矢印)、完了後には約2.6us後にLOに落ちる(右側矢印)という挙動が発生しています。どうも低消費電力志向なのか、MODE3のHI電位が2.6us程度でLOに落ちるようです。この意図しないHI/LOエッジがAD7730側でデータがクロックインされる可能性が高く、看過できない状態です。
ESP32-C3では見られなかった事象であり、STM固有の仕様(いや不具合だろ)と思われます。
対策としては、MODE3にするとHI/LOエッジが発生してしまうので、MODE0で利用するしか対策はなさそうです。
原因判明まで2週間ロストしました。初物はこれがあるので怖いです…
| モード | CPOL (Clock Polarity) | CPHA (Clock Phase) | 説明 |
|---|---|---|---|
| SPI_MODE0 | 0 (Low) | 0 | アイドル時Low、立ち上がりでデータ取り込み |
| SPI_MODE1 | 0 (Low) | 1 | アイドル時Low、立ち下がりでデータ取り込み |
| SPI_MODE2 | 1 (High) | 0 | アイドル時High、立ち下がりでデータ取り込み |
| SPI_MODE3 | 1 (High) | 1 | アイドル時High、立ち上がりでデータ取り込み |