@@ -62,6 +62,7 @@ LSM6DS3Core::LSM6DS3Core( uint8_t busType, uint8_t inputArg) : commInterface(I2C
62
62
status_t LSM6DS3Core::beginCore (void )
63
63
{
64
64
status_t returnError = IMU_SUCCESS;
65
+ uint32_t spiPortSpeed = 5000000 ;
65
66
66
67
switch (commInterface) {
67
68
@@ -72,32 +73,20 @@ status_t LSM6DS3Core::beginCore(void)
72
73
case SPI_MODE:
73
74
// start the SPI library:
74
75
SPI.begin ();
75
- // Maximum SPI frequency is 10MHz, could divide by 2 here:
76
- SPI.setClockDivider (SPI_CLOCK_DIV4);
77
- // Data is read and written MSb first.
78
- #ifdef ESP32
79
- SPI.setBitOrder (SPI_MSBFIRST);
80
- #elif ESP8266
81
- SPI.setBitOrder (SPI_MSBFIRST);
82
- #else
83
- SPI.setBitOrder (MSBFIRST);
76
+
77
+ #ifdef __AVR__
78
+ mySpiSettings = SPISettings (spiPortSpeed, MSB_FIRST, SPI_MODE1);
84
79
#endif
85
- // Data is captured on rising edge of clock (CPHA = 0)
86
- // Base value of the clock is HIGH (CPOL = 1)
87
-
88
- // MODE3 for 328p operation
89
- #ifdef __AVR__
90
- SPI.setDataMode (SPI_MODE3);
91
- #else
80
+ #if defined(ESP32) || defined(ESP8266)
81
+ mySpiSettings = SPISettings (spiPortSpeed, MSB_FIRST, SPI_MODE1);
92
82
#endif
93
-
94
- // MODE0 for Teensy 3.1 operation
95
83
#ifdef __MK20DX256__
96
- SPI.setDataMode (SPI_MODE0);
97
- #else
84
+ mySpiSettings = SPISettings (spiPortSpeed, MSB_FIRST, SPI_MODE0);
98
85
#endif
99
-
100
- // initalize the data ready and chip select pins:
86
+ #ifdef ARDUINO_NANO33BLE
87
+ mySpiSettings = SPISettings (spiPortSpeed, MSB_FIRST, SPI_MODE0);
88
+ #endif
89
+
101
90
pinMode (chipSelectPin, OUTPUT);
102
91
digitalWrite (chipSelectPin, HIGH);
103
92
break ;
@@ -304,6 +293,7 @@ status_t LSM6DS3Core::writeRegister(uint8_t offset, uint8_t dataToWrite) {
304
293
305
294
case SPI_MODE:
306
295
// take the chip select low to select the device:
296
+ SPI.beginTransaction (mySpiSettings);
307
297
digitalWrite (chipSelectPin, LOW);
308
298
// send the device the register you want to read:
309
299
SPI.transfer (offset);
0 commit comments