6

現在、I2C 経由で通信するための stm32l152 (検出キット) のペアを取得しようとしています。(i2cを自分で実装したいので、STMが提供する標準周辺ライブラリを使用していません..)

私の構成は次のとおりです。

  • 7 ビット アドレッシング モード (デュアル アドレスなし、OAR1 のみ)

  • 100kHzの速度

  • ACK 有効 (スレーブ上)

  • ACK 無効 (マスターでは、常に 1 バイトのみがマスター/スレーブ間で転送されるため)

  • GPIOB (PB10) を SCL として、GPOB (PB11) を SDA として使用して、マスター/スレーブの両方で

ここで奇妙な部分があります。2 つの GPIOB ピンをプッシュプル (プルアップ/ダウンなし) として構成すると、マスターが開始ビット、アドレス バイトを送信するのをオシロスコープで見ることができます。

しかし、私のスレーブは確認応答を返していません。マスターがSR1でADDRビットをアサートしなかったため、これは確かです。スコープにACKが表示されず、スレーブも割り込みに移行しませんでした(スレーブでI2Cイベント割り込みを有効にしました)。

オシロスコープの波形を詳しく見てみると、信号 (SCL、SDA の両方) が完全に 0 ボルトになっていないことがわかりました。スレーブがマスターからアドレス バイトを読み取ることができず、ACK を返さなかったのは、おそらくこれが原因だと推測しています。

そこで、2 つの GPIO ピンをオープン ドレイン (プルアップ/ダウンなし) に構成します。しかし、マスターがスタート ビットを送信できなくなりました。 STARTビットを設定します..しかし、スコープのSDAおよびSCL信号に応答が見られません(両方とも3Vでハイです)。

(各ラインで 10kΩ を使用して、SCL と SDA の両方を 3v にプルしました)。

4

1 に答える 1