06-08-2020 06:23 AM
I tried to use STM32 MCU to use SPI to communicate with BMX160, but I can't get CHIPID, I already use github bmi.h and bmi.c files, please tell me which part is missing to read CHIPID normally
06-09-2020 06:13 AM - edited 06-09-2020 06:15 AM
Hi
BMIX60 prilimary interface defaut is I2C, need switch to SPI. Usually we using a dummy ready to change the interface to SPI. You could refer to chapter 3.1 in BMX160 datasheet. The read chip id process as bellow.
06-09-2020 03:03 PM - edited 06-09-2020 08:31 PM
您好魚
我已閱讀數據表
要使用SPI,CSB需要一個上升信號
我已經將CSB設置為具有上升信號
結果是錯誤代碼rslt = -3(BMI160_E_DEV_NOT_FOUND)
*In bmc.c file bmi160_init() function,
if ((rslt == BMI160_OK) && (dev->chip_id == BMI160_CHIP_ID))
This line will not be established!! rslt = -3 (BMI160_E_DEV_NOT_FOUND)
If you look at the if judgment separately, the first half (rslt == BMI160_OK) is established,
But the second half dev->chip_id == BMI160_CHIP_ID) is not established.
dev->chip_id=0
BMI160_CHIP_ID = 0xD8
Why can't my dev->chip_id = 0xD8
*對不起,請問我應該使用PIN SPI VDDIO
以下是我的接線
MCU <--------------------------> BMX160
-------------------- ------------------------
VDD ------------------------- -> VDD(3.3 V)
MISO -------------------------> MISO
MOSI -------------- -----------> MOSI
CLK ---------------------------> CLK
GPIO_輸出------ -------> CS
VDDID ----> VDD(BMX160 VDDVDD)
06-10-2020 06:00 AM
Hi,
I think you could check MISO & MOSI connection. Meanwhile, VDD&VDDIO can powered by 3.3V.
You had better check the SPI waveform with logic analyzer tool or oscilloscope.
MCU <--------------------------> BMX160
-------------------- ------------------------
VDD ------------------------- -> VDD(3.3 V)
MISO <------------------------- SDO(PIN 1)
MOSI -------------- -----------> SDX (PIN 14)
CLK ---------------------------> SCX(PIN 13)
GPIO_輸出------ -------> CS
VDDID ----> VDD(BMX160 VDDVDD)
06-10-2020 06:46 AM - edited 06-10-2020 06:47 AM
I run bmi_init ( )
get rslt =-3
*In bmc.c file bmi160_init() function,
if ((rslt == BMI160_OK) && (dev->chip_id == BMI160_CHIP_ID))
This line will not be established!! rslt = -3 (BMI160_E_DEV_NOT_FOUND)
If you look at the if judgment separately, the first half (rslt == BMI160_OK) is established,
But the second half dev->chip_id == BMI160_CHIP_ID) is not established.
dev->chip_id=0
BMI160_CHIP_ID = 0xD8
06-10-2020 07:35 AM
Hi,
rslt == BMI160_OK, just prove the param dev of function int8_t bmi160_init(struct bmi160_dev *dev) isn't NULL pointer.
Would you please provide SPI waveform during read BMX160 chip id?