Intel Quark D2000 Zephyr BMC150

Intel Quark Microcontroller Dev Kit D2000には、ボード上にBOSCH社製6軸センサ(3軸加速度、3軸磁気)BMC150を搭載しています。
https://www.bosch-sensortec.com/bst/products/all_products/bmc150
BMC150は、I2CとSPIで接続できますが、D2000とは、I2Cで接続されています。SPピンのレベルでインターフェースの毛帝をします。Kitは、SPピンがプルアップされているのでI2Cとなります。
今回は、ZephyrのI2C APIを使って接続します。
I2Cのアドレスもピン設定で2種類選択できます。SDOピンをGNDレベルにすると加速度センサのアドレスが0x10、磁気センサのアドレスが0x12となります。SDOピンをVDDレベルにすると加速度センサのアドレスが0x11、磁気センサのアドレスが0x13となります。この設定は、J1ジャンパーで切り替えられます。J1をオープンにするとSDOがGNDにプルダウンされ、加速度センサのアドレスが0x10、磁気センサのアドレスが0x12となります。J1をクローズするとSDOがVDDにつながり、加速度センサのアドレスが0x11、磁気センサのアドレスが0x13となります。
今回は、J1はオープンのまま使用します。
I2Cの使用方法は、Zephyrのサンプルにあるi2c_lsm9ds0を利用しました。APIのリファレンスは以下にあります。
http://docs.zephyrproject.org/api/io_interfaces.html#i2c-interface
Zhephyrのサンプルの中にBMC150はありませんが、QMSI側にBMC150のサンプルAccelerometerがあります。これも参考にしました。
I2Cの初期化はそのまま使用できます。
cfg.raw = 0;
cfg.bits.use_10_bit_addr = 0;
cfg.bits.speed = I2C_SPEED_STANDARD;
cfg.bits.is_master_device = 1;

dev = device_get_binding(“I2C_0”);
if (!dev) {
printk(“I2C0: Device not found.\n”);
return;
}

if (i2c_configure(dev, cfg.raw) != 0) {
printk(“Error on i2c_configure()\n”);
return;
}

I2Cの読み書きは、以下の関数で行えます。
i2c_write(dev, &data, sizeof(data), ADDR) ;
i2c_read(dev, &data, sizeof(data), ADDR) ;
次にBMC150から温度の取得を行ってみたいと思います。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

© 2014 Spineedge Corporation.