MPU9250について実際に使用した時の各設定について書いておきます。
1)chip select
0x6Bに0x80を送信
(100ms のdelay)
2)wakeup device
0x6Bに0x01を送信
3)Active function
0x6Aに0x30を送信
4)加速度センサ測定レンジ設定(±8g)
0x1Cに0x10を送信
5)加速度サンプリング設定(4kHz sampling)
0x1Dに0x08を送信
6)ジャイロセンサ測定レンジ設定(±1000dps)
0x1Bに0x10を送信
7)地磁気センササンプリング設定(100Hz)
0x19に0x09を送信
8)I2Cクロック設定(400kHz)
0x24に0x0Dを送信
(MPU9250は地磁気のみ内部にある別センサAK8963とのI2C通信によって接続されている。従って、MPU9250とSPI通信するにしてもこの設定が必要?)
9)AK8963スレーブアドレス
0x31に0x0Cを送信
10)CTRL2の設定(なんの設定かは忘れたデータシートを参照)
0x32に0x0Bを送信
11)reset enable
0x33に0x01を送信
12)send data
0x34に0x80を送信
(20ms待つ)
13)CTRL1の設定(これも何の設定だったか忘れた)
0x32に0x0Aを送信
14)地磁気を100Hzで連続測定するための設定
0x33に0x16を送信
15)send data
0x34に0x80を送信
(20ms待つ)
16)AK8963のデータを読む
0x25に0x8Cを送信
17)hxl (hxlが何を意味するのか忘れたデータシート参照)
0x26に0x03を送信
18)7byte data receive -> ext_sens_data_00
0x27に0x87を送信
以上18項目の設定
コメント
・一つ送信するたびに1msのdelayを入れないとうまくいかなかった。
・send dataのところは20ms のdelay
・私はARMマイコンのnRF52832チップに対してEmbedded studioにてプログラムを行なった。通信方式はSPI通信。
従って、送信の書き方は
uint8_t reg_chipreset[2] = {PWR_MGMT_1,0x80};
nrf_drv_spi_transfer(&spi,reg_chipreset,sizeof(reg_chipreset),NULL,0);//chip reset
nrf_delay_ms(100);
のようになる。