LPS25HB使用方法
table:LPS25HBpin_SPI通信
Pin1 VDD 電源V:3.3V
Pin2 SPC SPI_Clock
Pin3 SDI Serial Data In
Pin4 SDO Serial Data Out
Pin5 CS Chip Select
Pin6 NC NC
Pin7 INT Interrupt or Data Ready(割り込み又はデータディレイ)
Pin8 GND GND
※SPI通信は、3線で行う方法と、4線で行う方法がある。
今回は、4線で行う。
MISO-SDIを接続??
table:Mbed pin
PB4 D5 SPI1_MISO
PB5 D4 SPI1_MOSI
PB3 D3 SPI1_CLK
PA10 D2 LPS25HB_CS
PA5 GPIO_OUT
PC13 GPIO_IN
table:接続
LPS25HB Mbed
Pin1 3.3V
Pin2 PB3:D3(CLK)
Pin3(SDI) PB4:D5(MISO)
Pin4(SDO) PB5:D4(MOSI)
Pin5(CS) PA10:D2(GPIO)
Pin6 NC
Pin7 NC
Pin8 GND
SPIの仕様:
CS:LOWにして、SPI開始。 HIGHでSPI終了
clockのアイドル状態はHIGH
立下りエッジで、駆動、立ち上がりエッジで、キャプチャと記載してある。
これは、立ち上がりエッジでサンプリングして、立,下りエッジでシフトする。
その為、モード3を使用する。
クロック:最大10MHzなので、今回は10MHzを使用する。
https://gyazo.com/d7d720ff14051455b8003c9e51ed31f6
CubeMxの設定
table:CubeMx設定
Clock Cnfiguration APB2 = 16MHz
Mode Full Duplex Master
Hardware NSS Signal Disable
Frame Format Motorola
Data Size 8bits
First Bit MSB First
Presdcaler 2 SPIクロック周波数 = 8MHz
CPOL HIGH
CPHA 1Edge
CRC Calculation Disabled
NSS Signal Type Software
デバイスには、その動作を制御し、圧力と温度のデータを取得するために使用される一連のレジスタが含まれています。
レジスタ アドレスは 7 ビットで構成され、それらを識別し、シリアル インターフェイスを介してデータを読み書きするために使用されます。
使用したい機能に合わせて、下記レジスタを指定する。
LPS25HBの仕様
table:レジスタアドレスマップ
Name Register(Hex) 機能
REF_P_XL 08 基準電圧(LSB)
REF_P_L 09 基準圧力(中間部)
REF_P_H 0A 基準圧力 (MSB データ)
WHO_AM_I 0F デバイス確認
RES_CONF 10 圧力と温度の分解能を指定
CTRL_REG1 20 Control register 1を使用
CTRL_REG2 21 Control register 2を使用
CTRL_REG3 22 割り込み構成
CTRL_REG4 23 割り込み構成
INTERRUPT_CFG 24 割り込み構成
INT_SOURCE 25 割り込み要因
Reserved 26
STATUS_REG 27 ステータスレジスタ
PRESS_OUT_XL 28 圧力出力値(LSB)
PRESS_OUT_L 29 圧力出力値(中間部)
PRESS_OUT_H 2A 圧力出力値(MSB)
TEMP_OUT_L 2B 温度出力値(LSB)
TEMP_OUT_H 2C 温度出力値(中間部)
Reserved 2D 温度出力値(MSB)
FIFO_CTRL 2E FIFOコントロール
FIFO_STATUS 2F FIFOステータス
THS_P_L 30 圧力割り込み生成のしきい値の最下位ビット。
THS_P_H 31 圧力割り込み生成のしきい値の最上位ビット。
Reserved 32-38 ー
RPDS_L 39 圧力オフセット (LSB データ)
RPDS_H 3A 圧力オフセット (MSB データ)
圧力出力値は、測定された圧力を含む 24 ビット データです。
PRESS_OUT_H(2Ah)、PRESS_OUT_L(29h)、PRESS_OUT_XL(28h)で構成されています。
値は 2 の補数で表されます。
つまり、気圧の値を取得する場合は、0x28でLSB、0x29で中間部、0x2AでMSBを指定する。
https://gyazo.com/3e2d8c4fd71a5822f57dc347c00fda2b
bit0:
0:データDIが書き込まれる。(書き込み:LPS25HBからSTM32にデータが送信される時)
1:データDOが書き込まれる。(読み込み:STM32からLPS25HBに送信する時)
bit1:
0:複数読み取り書き込みする場合に、アドレスが残る。
1:複数読み取り書き込みする場合に、アドレスが自動インクリメント(自動で増加)される。
bit2-7:
インデックス付きレジスタを指定する。(レジスタのアドレスを設定)
bit8-15:
データ DI(7:0) (書き込みモード)の時 : デバイスに書き込まれるデータ (MSb ファースト)。
データ DO(7:0) (読み取りモード)の時: デバイスから読み取られるデータです (MSb ファースト)。
※複数の読み取り/書き込みコマンドでは、さらに 8 クロック周期のブロックが追加されます。
MS ビットが 0 の場合:データの読み取り/書き込みに使用されるアドレスは、すべてのブロックで同じまま。
MS ビットが 1 の場合:データの読み取り/書き込みに使用されるアドレスはブロックごとに増加。
SDI と SDO の機能と動作は変更されない。
デバイス確認
SPI通信コマンド送信:0x0F|0x80
table:気圧取得データ
bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
1 0 0 0 0 1 1 1 1
数字確認:
気圧を取得する場合:
STM32→LPS25HBに送信
bit0:DOに設定
bit1:自動更新しないので、0に設定
bit2-7:CTRL_REG1レジスタ:0x20を指定
bit3-15:
table:気圧取得データ
bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0 0
SPI通信は、CTRL_REG1を使用する。
0x80:10000000
0x80|addr でwrite
16bitが返って来るので、
その値を受信する。
※データシートの8章を参照
参考:
https://www.youtube.com/watch?v=wW3ZDPwir2o