@@ -86,24 +86,6 @@ uint8_t BME280::begin()
8686 case SPI_MODE:
8787 // start the SPI library:
8888 SPI.begin ();
89- #ifdef ARDUINO_ARCH_ESP32
90- SPI.setFrequency (1000000 );
91- // Data is read and written MSb first.
92- SPI.setBitOrder (SPI_MSBFIRST);
93- // Like the standard arduino/teensy comment below, mode0 seems wrong according to standards
94- // but conforms to the timing diagrams when used for the ESP32
95- SPI.setDataMode (SPI_MODE0);
96- #else
97- // Maximum SPI frequency is 10MHz, could divide by 2 here:
98- SPI.setClockDivider (SPI_CLOCK_DIV32);
99- // Data is read and written MSb first.
100- SPI.setBitOrder (MSBFIRST);
101- // Data is captured on rising edge of clock (CPHA = 0)
102- // Base value of the clock is HIGH (CPOL = 1)
103- // This was SPI_MODE3 for RedBoard, but I had to change to
104- // MODE0 for Teensy 3.1 operation
105- SPI.setDataMode (SPI_MODE3);
106- #endif
10789 // initialize the data ready and chip select pins:
10890 pinMode (settings.chipSelectPin , OUTPUT);
10991 digitalWrite (settings.chipSelectPin , HIGH);
@@ -580,6 +562,7 @@ void BME280::readRegisterRegion(uint8_t *outputPointer , uint8_t offset, uint8_t
580562 break ;
581563
582564 case SPI_MODE:
565+ SPI.beginTransaction (settings.spiSettings );
583566 // take the chip select low to select the device:
584567 digitalWrite (settings.chipSelectPin , LOW);
585568 // send the device the register you want to read:
@@ -593,6 +576,7 @@ void BME280::readRegisterRegion(uint8_t *outputPointer , uint8_t offset, uint8_t
593576 }
594577 // take the chip select high to de-select:
595578 digitalWrite (settings.chipSelectPin , HIGH);
579+ SPI.endTransaction ();
596580 break ;
597581
598582 default :
@@ -641,14 +625,7 @@ uint8_t BME280::readRegister(uint8_t offset)
641625 break ;
642626
643627 case SPI_MODE:
644- // take the chip select low to select the device:
645- digitalWrite (settings.chipSelectPin , LOW);
646- // send the device the register you want to read:
647- SPI.transfer (offset | 0x80 ); // Ored with "read request" bit
648- // send a value of 0 to read the first byte returned:
649- result = SPI.transfer (0x00 );
650- // take the chip select high to de-select:
651- digitalWrite (settings.chipSelectPin , HIGH);
628+ readRegisterRegion (&result, offset, 1 );
652629 break ;
653630
654631 default :
@@ -693,6 +670,7 @@ void BME280::writeRegister(uint8_t offset, uint8_t dataToWrite)
693670 break ;
694671
695672 case SPI_MODE:
673+ SPI.beginTransaction (settings.spiSettings );
696674 // take the chip select low to select the device:
697675 digitalWrite (settings.chipSelectPin , LOW);
698676 // send the device the register you want to read:
@@ -702,6 +680,7 @@ void BME280::writeRegister(uint8_t offset, uint8_t dataToWrite)
702680 // decrement the number of bytes left to read:
703681 // take the chip select high to de-select:
704682 digitalWrite (settings.chipSelectPin , HIGH);
683+ SPI.endTransaction ();
705684 break ;
706685
707686 default :
0 commit comments