Gr-peachでのi2c0およびi2c3を使った通信について

Mbed OSに直接関係ないのかもしれませんが質問させてください。

GR-PEACH FULLで、温度センサ(BME280)をI2Cで接続しようと考えています。
BME280のドライバについては公開されているものを使いました。

その結果、I2C1では正常な通信ができることを確認しました。
SDA=P1_3(CN9 NO.1ピン)
SCL=P1_4(CN9 NO.2ピン)

このため、同じBME280とドライバとで他のI2CであるI2C0とI2C3で通信しようとしたのですが通信ができませんでした。
I2C0
SDA=P1_1(CN16 NO.2ピン)
SCL=P1_0(CN16 NO.3ピン)
I2C3
SDA=P1_7(CN16 NO.5ピン)
SCL=P1_6(CN16 NO.6ピン)

このため質問としては、I2C0やI2C3で通信をする際は何か特別な設定が必要なのでしょうか?

実際に動作確認しての回答ではありませんが、I2Cのピンアサインが最新のmbed-os6上では、下記のようになっています。
https://github.com/ARMmbed/mbed-os/blob/master/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PeripheralPins.c/#L161
従って、Mbed OSを使用するのであれば、

I2C             i2c0(P1_1, P1_0); // SDA, SCL
I2C             i2c3(P1_7, P1_6);

のコンストラクタ設定で使用できると思われます。

こんにちは。

実機で試してみました。以下のようなコードで、I2C1, I2C0, I2C3 すべて問題なく動作しました。


#include "mbed.h"
#include "BME280.h"

DigitalOut led(LED1);

BME280 sensor(I2C_SDA, I2C_SCL); // i2c1
//BME280 sensor(P1_1, P1_0);  // i2c0
//BME280 sensor(P1_7, P1_6); // i2c3

// Blinking rate in milliseconds
#define BLINKING_RATE_MS  500

int main()
{
    printf("hello, mbed world.\n");
 
    while (true) {
        led = !led;
        printf("%2.2f degC, %04.2f hPa, %2.2f %%\n", sensor.getTemperature(), sensor.getPressure(), sensor.getHumidity());
        ThisThread::sleep_for(BLINKING_RATE_MS);
    }
}

kenjiAraiさん、MACRUMさん、返答ありがとうございました。

MACRUMさんが実機で動いたということから、公開されているBME280ライブラリを別のものに変えたところ動作しました。

動作後にもともと採用していたライブラリと比較をしたところ、初期化の関数を入れる必要があったようです。

どうもありがとうございました。

1 Like