Skocz do zawartości

[STM32] Magnetometr MMC5983MA nie zwraca danych po SPI, cisza na MISO


Alvedro

Pomocna odpowiedź

Cześć, to już któryś wieczór, kiedy siedzę i próbuję zrozumieć dlaczego nie mogę połączyć się z magnetometrem MMC5983MA po SPI, więc postanowiłem się podzielić problemem. Na własnej płytce mam STM32F4, kilka układów na SPI1, SPI5, które działają i nieszczęsny magnetometr MMC5983MA na SPI2, który korzysta z tych samych funkcji, lecz nie chce rozmawiać. Odbiór danych w kodzie wygląda tak:

	uint8_t bufferSize = 2U;
	uint8_t readWriteBit = 0x80;
	uint8_t timeout = 10U;
	uint8_t productIdAddress = 0x2F;

	uint8_t txBuffer[2] =  { productIdAddress | readWriteBit, 0x00 };
	uint8_t rxBuffer[2] = { 0 };

	HAL_GPIO_WritePin(MMC5983MA_SPI2_CS_GPIO_Port, MMC5983MA_SPI2_CS_Pin, GPIO_PIN_RESET);
	HAL_SPI_TransmitReceive(&hspi2, txBuffer, rxBuffer, bufferSize, timeout);
	HAL_GPIO_WritePin(MMC5983MA_SPI2_CS_GPIO_Port, MMC5983MA_SPI2_CS_Pin, GPIO_PIN_SET);

Na analizatorze wygląda to tak, układ w ogóle nie macha linią MISO:
image.thumb.png.eac9716bac1df8230813007b7c4e4ae0.png

Konfiguracja SPI2 z CubeMX:
image.thumb.png.b7ce3700e7dbe4b6835c00ded02887c0.png

image.png.20c67e334ed8f804cd2bb452a4b9391e.png

Schemat:
image.thumb.png.bbfeda81d58d340556328a7860c4dadc.png

Sekwencja zapisu/odczytu SPI:
image.thumb.png.c26a5b44a63965ca8f65b23e2c199b8c.png

Przykład połączenia:
image.thumb.png.269ae81fa4b080dab19ac3a17ed68825.png

Rejestr, który próbuję odczytać:
image.thumb.png.ca71ae0b0a73c5b32ce41cd87a10b621.png

Mam polutowane 4 płytki i na żadnej z nich nie udało mi się nawiązać połączenia, nie jest to dowód na to, że z pcb na pewno jest wszystko w porządku, ale chciałbym najpierw potwierdzić, że sposób odczytu danych od strony programowej jest poprawny. W erracie używanego procka nie ma żadnej wzmianki, która mogłaby mieć bezpośredni związek z moim problemem. Czy ktoś ma jakiś pomysł co mogę jeszcze sprawdzić?

Edit: Płytki wypiekam w piecu IR, rampa jest bardzo zbliżona do tej z dokumentacji układu magnetometru, do tej pory nie udało mi się upalić pozostałych układów, więc obstawiałbym, że proces lutowania ich nie zabija. 🙂

 

Edytowano przez Alvedro
Link do komentarza
Share on other sites

Ja nie jestem zbytnio doświadczony w kwestii interfejsów komunikacyjnych, ale mam jedno pytanie. Próbowałeś może zmienić długość słowa interfejsu SPI z 8 bitów na 16? Chodzi mi o to, żeby nie było przerwy w generowaniu zegara pomiędzy bajtami – chociaż chyba to bez znaczenia, ale zawsze możesz sprawdzić, nie zaszkodzi.

Link do komentarza
Share on other sites

Aż głupio się przyznać, ale przy zamawianiu wkradł mi się błąd i zamiast układu MMC5983MA zamówiłem MMC5883MA, a ten układ komunikuje się jedynie po I2C. Zamawiam teraz już ten właściwy i jak przyjdzie to dam znać czy konfiguracja była poprawna. 🙃

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.