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:
Konfiguracja SPI2 z CubeMX:
Schemat:
Sekwencja zapisu/odczytu SPI:
Przykład połączenia:
Rejestr, który próbuję odczytać:
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. 🙂