Skocz do zawartości
Alvedro

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

Pomocna odpowiedź

Napisano (edytowany)

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

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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. 🙃

Udostępnij ten post


Link to post
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...