diff --git a/boards/samr30-xpro/include/board.h b/boards/samr30-xpro/include/board.h index 9067d5215e47..d6eb0fc9aabb 100644 --- a/boards/samr30-xpro/include/board.h +++ b/boards/samr30-xpro/include/board.h @@ -36,7 +36,7 @@ extern "C" { #define AT86RF2XX_PARAM_INT GPIO_PIN(PB, 0) #define AT86RF2XX_PARAM_SLEEP GPIO_PIN(PA, 20) #define AT86RF2XX_PARAM_RESET GPIO_PIN(PB, 15) -#define AT86RF2XX_PARAM_SPI_CLK SPI_CLK_1MHZ +#define AT86RF2XX_PARAM_SPI_CLK SPI_CLK_5MHZ /** @}*/ /** diff --git a/cpu/sam0_common/periph/spi.c b/cpu/sam0_common/periph/spi.c index f76e2a028dbb..ff6e85862055 100644 --- a/cpu/sam0_common/periph/spi.c +++ b/cpu/sam0_common/periph/spi.c @@ -103,8 +103,11 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk) /* configure bus clock, in synchronous mode its calculated from * BAUD.reg = (f_ref / (2 * f_bus) - 1) - * with f_ref := CLOCK_CORECLOCK as defined by the board */ - const uint8_t baud = (sam0_gclk_freq(spi_config[bus].gclk_src) / (2 * clk) - 1); + * with f_ref := CLOCK_CORECLOCK as defined by the board + * to mitigate the rounding error due to integer arithmetic, the + * equation is modified to + * BAUD.reg = ((f_ref + f_bus) / (2 * f_bus) - 1) */ + const uint8_t baud = ((sam0_gclk_freq(spi_config[bus].gclk_src) + clk) / (2 * clk) - 1); /* configure device to be master and set mode and pads, *