Skip to content

Commit 6d68009

Browse files
committed
fix(spi): init never called at begin
Regression introduced during ArduinoCore-API deployment. (_spiSettings != settings) conditions always false by default (if busMode not changed). The only way to get SPI functional was to call begin_transaction with a different settings else error handler is called. Signed-off-by: Frederic Pillon <frederic.pillon@st.com>
1 parent 36a8f85 commit 6d68009

2 files changed

Lines changed: 8 additions & 29 deletions

File tree

‎libraries/SPI/src/SPI.cpp‎

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,6 @@
1313

1414
SPIClass SPI;
1515

16-
void SPIClass::configSpi(const SPISettings &settings)
17-
{
18-
if (_spiSettings != settings) {
19-
_spiSettings = settings;
20-
21-
uint32_t clock = settings.getClockFreq();
22-
SPIMode dataMode = settings.getDataMode();
23-
BitOrder order = settings.getBitOrder();
24-
SPIBusMode busMode = settings.getBusMode();
25-
26-
// Mapping API dataMode → spi_mode_e C
27-
spi_mode_e cspimode = static_cast<spi_mode_e>(dataMode);
28-
// Mapping API busMode → spi_busmode_e C
29-
spi_busmode_e cbusmode = static_cast<spi_busmode_e>(busMode);
30-
31-
spi_init(&_spi, clock, cspimode, order, cbusmode);
32-
}
33-
}
34-
3516
/**
3617
* @brief Default Constructor. Uses pin configuration of default SPI
3718
* defined in the variant*.h.
@@ -73,13 +54,9 @@ void SPIClass::begin(SPIBusMode busMode)
7354
_spi.handle.State = HAL_SPI_STATE_RESET;
7455
#endif
7556

76-
SPISettings defaultSettings(
77-
SPI_SPEED_CLOCK_DEFAULT, // 4 MHz
78-
MSBFIRST,
79-
SPI_MODE0,
80-
busMode
81-
);
82-
configSpi(defaultSettings);
57+
_spiSettings = SPISettings(4000000, MSBFIRST, SPI_MODE0, busMode);
58+
spi_init(&_spi, _spiSettings.getClockFreq(), (spi_mode_e)_spiSettings.getDataMode(),
59+
_spiSettings.getBitOrder(), (spi_busmode_e)_spiSettings.getBusMode());
8360
}
8461

8562
/**
@@ -89,7 +66,11 @@ void SPIClass::begin(SPIBusMode busMode)
8966
*/
9067
void SPIClass::beginTransaction(SPISettings settings)
9168
{
92-
configSpi(settings);
69+
if (_spiSettings != settings) {
70+
_spiSettings = settings;
71+
spi_init(&_spi, _spiSettings.getClockFreq(), (spi_mode_e)_spiSettings.getDataMode(),
72+
_spiSettings.getBitOrder(), (spi_busmode_e)_spiSettings.getBusMode());
73+
}
9374
}
9475

9576
/**

‎libraries/SPI/src/SPI.h‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,6 @@ class SPIClass : public HardwareSPI {
134134
private:
135135
/* Current SPISettings */
136136
SPISettings _spiSettings = SPISettings();
137-
138-
void configSpi(const SPISettings &settings);
139137
};
140138

141139
extern SPIClass SPI;

0 commit comments

Comments
 (0)