Hi,
Ich versuche einen Sensor mit dem SPI im Half-Duplex Mode auszulesen,
jedoch ist das Verhalten nicht wie erwünscht. Wenn ich im Full-Duplex
bin, MISO und MOSI kurzgeschlossen, dann sendet er mir richtig, jedoch
kann er natürlich nicht empfangen, aber ich kann das empfangene mit dem
Oszi hinter dem seriellen Widerstand auf der Leitung (470Ohm) messen. Im
Half-Duplex Mode (initialisiert mit CubeMX) scheint das ganze aber nicht
mehr zu funktionieren, es ist fast so, als würde irgendwas die Leitungen
extrem Hochohmig machen. Der uC ist ein STM32F410. Jemand eine Idee, was
da los ist? Der ungebrauchte MISO Pin im Half-Duplex wird übrigens als
Default belassen, aber auch eine Konfiguration als Input hat leider
nichts gebracht.
Kommunikation:
1 | HAL_GPIO_WritePin(SPI_CS_PORT, SPI_CS, LOW);
|
2 | spi_pos->Instance->CR1 |= (1<<SPI_CR1_BIDIOE);
|
3 | HAL_SPI_Transmit(spi_pos,&command,1,10);
|
4 | spi_pos->Instance->CR1 &= ~(1<<SPI_CR1_BIDIOE);
|
5 | asm("nop");
|
6 | HAL_SPI_Receive(spi_pos,data,size,10);
|
7 | HAL_GPIO_WritePin(SPI_CS_PORT, SPI_CS, HIGH);
|
SPI initialisierung:
1 | /* SPI2 parameter configuration*/
|
2 | hspi2.Instance = SPI2;
|
3 | hspi2.Init.Mode = SPI_MODE_MASTER;
|
4 | hspi2.Init.Direction = SPI_DIRECTION_1LINE;
|
5 | hspi2.Init.DataSize = SPI_DATASIZE_16BIT;
|
6 | hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
|
7 | hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;
|
8 | hspi2.Init.NSS = SPI_NSS_SOFT;
|
9 | hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
|
10 | hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
11 | hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
|
12 | hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
13 | hspi2.Init.CRCPolynomial = 15;
|