初めに
こちらの記事で、マルチコアでセンサーをアクセスしてみたんだけど、それに対して、SpresenseのマルチIMUボードはどうなのかな?と思って記事を書きました。
使用したもの
・SpresenseのMainボード
・SPRESENSE向けマルチIMU Add-onボード [CXD5602PWBIMU1J]
・SPRESENSE用3軸加速度・3軸ジャイロ・気圧・温度センサ アドオンボード
※販売終了品です。
ブログ(元ネタ)
この記事は、以下のブログへ過去に投稿したもののまとめです。
マルチIMUとの他のセンサを同時に使う
マルチIMUのボードは、ボードの上面にもコネクタのメスが出ているので、I2Cのようにシーケンシャルにつなぐことが可能なIFであれば、ボードをスタッキングできるという仕様になっています。
ですので、I2Cのボードをこのようにスタッキングしたら使えそうなんですが、
同時にドライバを見てみると、
例えば、この関数などでは、I2Cによりパラメータを設定しています。
static int cxd5602pwbimu_putregsn(FAR struct cxd5602pwbimu_dev_s *priv,
int slaveid, uint8_t regaddr,
FAR uint8_t *buffer, uint8_t len)
{
struct i2c_msg_s msg[2];
int ret;
msg[0].frequency = priv->i2cfreq;
msg[0].addr = priv->i2caddr[slaveid];
msg[0].flags = I2C_M_NOSTOP;
msg[0].buffer = ®addr;
msg[0].length = 1;
msg[1].frequency = priv->i2cfreq;
msg[1].addr = priv->i2caddr[slaveid];
msg[1].flags = 0;
msg[1].buffer = buffer;
msg[1].length = len;
ret = I2C_TRANSFER(priv->i2c, msg, 2);
if (ret < 0)
{
snerr("I2C_TRANSFER failed: %d\n", ret);
}
return ret;
}
なので、I2Cのセンサーが本当に同時に使えるのか?が気になって試してみました。
そのサンプルがこちらになります。
実は、何の問題もなく呼び出せることがわかりました。
これにより、IMUに加えて、MAGやPressureセンサーもつなぐことができますね。
マルチIMUとの他のセンサをマルチコアで同時に使う
ここまでやって、では、マルチコアで、アクセスできるのか?例えば、SubCore1で、マルチIMUを呼び出し、SubCore2でPressureセンサを呼び出したりできるのか?ということが気になり、やってみました。
このマルチコアからのI2Cの呼び出し自体は、こちらの記事を参照してください。
どうあれ、同じように割り込みを操作して、排他で読み出せばちゃんと読めることが確認できました!
サンプルコードはこちらになります。
所感
マルチコアは楽しいですね。これからもいろいろなことを試してみたいと思います。
マルチIMU自体の記事はこちらになります。
こちらもご参考に。
