Witam,
próbuję uruchomić akcelerometr LIS3DHH ( https://www.st.com/en/mems-and-sensors/lis3dhh.html ) na zestawie Nucleo F411RE ( https://www.st.com/en/evaluation-tools/nucleo-f411re.html ). Czujnik mam w postaci adaptera STEVAL-MKI180V1 ( https://www.st.com/en/evaluation-tools/steval-mki180v1.html ). Konfigurację dla mikrokontrolera generuję za pomocą CubeMX 5.0.1 z bibliotekami HAL dla rodziny STM32F4, w wersji 1.23.0. Próbę uruchomienia czujnika rozpocząłem od wykorzystania bibliotek: https://github.com/STMicroelectronics/STMems_Standard_C_drivers/tree/master/lis3dhh_STdC a dokładnie od przykładu: read_data_simple.c.
Po dużej liczbie nieudanych prób komunikacji, maksymalnie uprościłem przykład. Aktualnie próbuję odczytać wartość rejestru WHO_AM_I. Adres rejestru to: 0x0F. Podczas odczytu danych, bit SMB adresu powinien mieć wartość 1, więc modyfikuję adres rejestru do wartości 0x8F.
Wartość rejestru WHO_AM_I powinna wynosić 0x11, a ja otrzymuję wartość 0x00.
Wszystkie linie SPI są sprzętowo podciągnięte do plusa zasilania, za pomocą wewnętrznych rezystorów mikrokontrolera. Korzystam z SPI2. Jego konfiguracja to: CPOL = High, CPHA = 2 Edge, prędkość: 1.3125 Mbits/s. Sygnał CS jest generowany programowo.
Poniżej przedstawiam fragment kodu źródłowego odpowiedzialnego za inicjalizację SPI oraz próbę odczytania rejestru WHO_AM_I.
Inicjalizacja SPI:
Próba odczytu zawartości rejestru WHO_AM_I (zawarte w funkcji main):
Poniżej przedstawiam przebiegi uzyskane z analizatora stanów logicznych:
W załączniku przesyłam plik konfiguracyjny dla CubeMX oraz kod źródłowy programu testowego.
Dodam, że testy przeprowadzałem na dwóch czujnikach, oraz dodatkowo na zestawie z mikrokontrolerem STM32F103 (blue PCB). Modyfikowałem na wiele sposobów konfigurację SPI oraz odczyt rejestrów. Efekt za każdym razem taki sam.
Czy ktoś ma pomysł co robię nie tak, że za każdym razem otrzymuję wartość zero z rejestru WHO_AM_I?
próbuję uruchomić akcelerometr LIS3DHH ( https://www.st.com/en/mems-and-sensors/lis3dhh.html ) na zestawie Nucleo F411RE ( https://www.st.com/en/evaluation-tools/nucleo-f411re.html ). Czujnik mam w postaci adaptera STEVAL-MKI180V1 ( https://www.st.com/en/evaluation-tools/steval-mki180v1.html ). Konfigurację dla mikrokontrolera generuję za pomocą CubeMX 5.0.1 z bibliotekami HAL dla rodziny STM32F4, w wersji 1.23.0. Próbę uruchomienia czujnika rozpocząłem od wykorzystania bibliotek: https://github.com/STMicroelectronics/STMems_Standard_C_drivers/tree/master/lis3dhh_STdC a dokładnie od przykładu: read_data_simple.c.
Po dużej liczbie nieudanych prób komunikacji, maksymalnie uprościłem przykład. Aktualnie próbuję odczytać wartość rejestru WHO_AM_I. Adres rejestru to: 0x0F. Podczas odczytu danych, bit SMB adresu powinien mieć wartość 1, więc modyfikuję adres rejestru do wartości 0x8F.
Wartość rejestru WHO_AM_I powinna wynosić 0x11, a ja otrzymuję wartość 0x00.
Wszystkie linie SPI są sprzętowo podciągnięte do plusa zasilania, za pomocą wewnętrznych rezystorów mikrokontrolera. Korzystam z SPI2. Jego konfiguracja to: CPOL = High, CPHA = 2 Edge, prędkość: 1.3125 Mbits/s. Sygnał CS jest generowany programowo.
Poniżej przedstawiam fragment kodu źródłowego odpowiedzialnego za inicjalizację SPI oraz próbę odczytania rejestru WHO_AM_I.
Inicjalizacja SPI:
Kod: C / C++
Próba odczytu zawartości rejestru WHO_AM_I (zawarte w funkcji main):
Kod: C / C++
Poniżej przedstawiam przebiegi uzyskane z analizatora stanów logicznych:
W załączniku przesyłam plik konfiguracyjny dla CubeMX oraz kod źródłowy programu testowego.
Dodam, że testy przeprowadzałem na dwóch czujnikach, oraz dodatkowo na zestawie z mikrokontrolerem STM32F103 (blue PCB). Modyfikowałem na wiele sposobów konfigurację SPI oraz odczyt rejestrów. Efekt za każdym razem taki sam.
Czy ktoś ma pomysł co robię nie tak, że za każdym razem otrzymuję wartość zero z rejestru WHO_AM_I?