ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
bme280_spi.cpp
Go to the documentation of this file.
1#include <cstdint>
2#include <cstddef>
3
4#include "bme280_spi.h"
6
8
9uint8_t set_bit(uint8_t num, int position) {
10 int mask = 1 << position;
11 return num | mask;
12}
13
14uint8_t clear_bit(uint8_t num, int position) {
15 int mask = 1 << position;
16 return num & ~mask;
17}
18
19void BME280SPIComponent::setup() {
20 this->spi_setup();
21 BME280Component::setup();
22};
23
24// In SPI mode, only 7 bits of the register addresses are used; the MSB of register address is not used
25// and replaced by a read/write bit (RW = ‘0’ for write and RW = ‘1’ for read).
26// Example: address 0xF7 is accessed by using SPI register address 0x77. For write access, the byte
27// 0x77 is transferred, for read access, the byte 0xF7 is transferred.
28// https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme280-ds002.pdf
29
30bool BME280SPIComponent::read_byte(uint8_t a_register, uint8_t *data) {
31 this->enable();
32 this->transfer_byte(set_bit(a_register, 7));
33 *data = this->transfer_byte(0);
34 this->disable();
35 return true;
36}
37
38bool BME280SPIComponent::write_byte(uint8_t a_register, uint8_t data) {
39 this->enable();
40 this->transfer_byte(clear_bit(a_register, 7));
41 this->transfer_byte(data);
42 this->disable();
43 return true;
44}
45
46bool BME280SPIComponent::read_bytes(uint8_t a_register, uint8_t *data, size_t len) {
47 this->enable();
48 this->transfer_byte(set_bit(a_register, 7));
49 this->read_array(data, len);
50 this->disable();
51 return true;
52}
53
54bool BME280SPIComponent::read_byte_16(uint8_t a_register, uint16_t *data) {
55 this->enable();
56 this->transfer_byte(set_bit(a_register, 7));
57 ((uint8_t *) data)[1] = this->transfer_byte(0);
58 ((uint8_t *) data)[0] = this->transfer_byte(0);
59 this->disable();
60 return true;
61}
62
63} // namespace esphome::bme280_spi
float position
Definition cover.h:0
uint8_t set_bit(uint8_t num, int position)
Definition bme280_spi.cpp:9
uint8_t clear_bit(uint8_t num, int position)
const void size_t len
Definition hal.h:64