Skip to content

Error compiling for board SparkFun SAMD51 Thing Plus #38

@kisom

Description

@kisom

I wanted to hook up my lovely SparkFun BME280 / CCS811 Qwiic board to my SAMD51 Thing Plus (for a solar-powered LoRaWAN environmental sensor :D), but ran into some issues compiling a sketch with this library.

I pared it down to this sketch, which I believe is the bare minimum needed to get the BME280 working:

#include <SparkFunBME280.h>

BME280  bme280;

void setup() {
  Serial.begin(9600);
  while (!Serial) ;
  bme280.settings.commInterface = I2C_MODE;
  bme280.settings.I2CAddress = 0x77;
  bme280.settings.runMode = 3; //  3, Normal mode
  bme280.settings.tStandby = 0; //  0, 0.5ms
  bme280.settings.filter = 0; //  0, filter off

  //tempOverSample can be:
  //  0, skipped
  //  1 through 5, oversampling *1, *2, *4, *8, *16 respectively
  bme280.settings.tempOverSample = 1;

  //pressOverSample can be:
  //  0, skipped
  //  1 through 5, oversampling *1, *2, *4, *8, *16 respectively
  bme280.settings.pressOverSample = 1;

  //humidOverSample can be:
  //  0, skipped
  //  1 through 5, oversampling *1, *2, *4, *8, *16 respectively
  bme280.settings.humidOverSample = 1;

  if (bme280.begin() != 0x60) {
    Serial.println("BME280 failed");
    while (1);
  }

  Serial.println("OK");
}

void loop() {
  // put your main code here, to run repeatedly:

}

But it doesn't compile:

Arduino: 1.8.9 (Linux), TD: 1.47, Board: "SparkFun SAMD51 Thing Plus"

Build options changed, rebuilding all
/home/kyle/Arduino/libraries/SparkFun_BME280/src/SparkFunBME280.cpp: In member function 'uint8_t BME280::begin()':
/home/kyle/Arduino/libraries/SparkFun_BME280/src/SparkFunBME280.cpp:98:23: error: 'SPI_CLOCK_DIV32' was not declared in this scope
   SPI.setClockDivider(SPI_CLOCK_DIV32);
                       ^
exit status 1
Error compiling for board SparkFun SAMD51 Thing Plus.

I've verified that this works with the RedBoard Turbo.

My investigation shows that the SparkFun SAMD core only defines the clock dividers for 48MHz CPUs; I'll try to follow on with a PR for that in that repo. In the meantime, I've added the following after the 48MHz definitions (in ~/.arduino15/packages/SparkFun/hardware/samd/1.7.0/libraries/SPI):

#if F_CPU == 120000000
  #define SPI_CLOCK_DIV2   15
  #define SPI_CLOCK_DIV4   30
  #define SPI_CLOCK_DIV8   60
  #define SPI_CLOCK_DIV16  120
  #define SPI_CLOCK_DIV32  240
  #define SPI_CLOCK_DIV64  480
  #define SPI_CLOCK_DIV128 960
#endif

where each value is (120 MHz / 16 MHz * divider), as with the block above it.

Cheers!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions