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で通信をする際は何か特別な設定が必要なのでしょうか?
kenjiArai
(Kenji Arai)
2
実際に動作確認しての回答ではありませんが、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);
のコンストラクタ設定で使用できると思われます。
MACRUM
(Toyomasa Watarai)
3
こんにちは。
実機で試してみました。以下のようなコードで、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