ESPHome 2026.4.0-dev
Loading...
Searching...
No Matches
bmp581_spi.cpp
Go to the documentation of this file.
1#include <cstdint>
2#include <cstddef>
3
4#include "bmp581_spi.h"
7
9
10static const char *const TAG = "bmp581_spi";
11
12// OR (|) register with BMP_SPI_READ for read
13inline constexpr uint8_t BMP_SPI_READ = 0x80;
14
15// AND (&) register with BMP_SPI_WRITE for write
16inline constexpr uint8_t BMP_SPI_WRITE = 0x7F;
17
19 BMP581Component::dump_config();
20 LOG_SPI_DEVICE(this);
21}
22
24 this->spi_setup();
25 BMP581Component::setup();
26}
27
29 // - forces the device into SPI mode using a dummy read
30 uint8_t dummy_read = 0;
32}
33
34// In SPI mode, only 7 bits of the register addresses are used; the MSB of register address is not used
35// and replaced by a read/write bit (RW = ‘0’ for write and RW = ‘1’ for read).
36// Example: address 0xF7 is accessed by using SPI register address 0x77. For write access, the byte
37// 0x77 is transferred, for read access, the byte 0xF7 is transferred.
38// The expressions BMP_SPI_READ (| with register) and BMP_SPI_WRITE (& with register)
39// are defined for readability.
40// https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp581-ds004.pdf
41
42bool BMP581SPIComponent::bmp_read_byte(uint8_t a_register, uint8_t *data) {
43 this->enable();
44 this->transfer_byte(a_register | BMP_SPI_READ);
45 *data = this->transfer_byte(0);
46 this->disable();
47 return true;
48}
49
50bool BMP581SPIComponent::bmp_write_byte(uint8_t a_register, uint8_t data) {
51 this->enable();
52 this->transfer_byte(a_register & BMP_SPI_WRITE);
53 this->transfer_byte(data);
54 this->disable();
55 return true;
56}
57
58bool BMP581SPIComponent::bmp_read_bytes(uint8_t a_register, uint8_t *data, size_t len) {
59 this->enable();
60 this->transfer_byte(a_register | BMP_SPI_READ);
61 this->read_array(data, len);
62 this->disable();
63 return true;
64}
65
66bool BMP581SPIComponent::bmp_write_bytes(uint8_t a_register, uint8_t *data, size_t len) {
67 this->enable();
68 this->transfer_byte(a_register & BMP_SPI_WRITE);
69 this->write_array(data, len);
70 this->disable();
71 return true;
72}
73} // namespace esphome::bmp581_spi
bool bmp_write_bytes(uint8_t a_register, uint8_t *data, size_t len) override
bool bmp_read_byte(uint8_t a_register, uint8_t *data) override
bool bmp_write_byte(uint8_t a_register, uint8_t data) override
bool bmp_read_bytes(uint8_t a_register, uint8_t *data, size_t len) override
constexpr uint8_t BMP_SPI_READ
constexpr uint8_t BMP_SPI_WRITE
std::string size_t len
Definition helpers.h:1045