BMP280_SPI
Posted: Mon Jul 22, 2024 4:02 pm
Hi,
can anyone check if this code is functional.
This code should send the ID register address (0xD0) of BMP280 and return the value (0x58) by using SPI.
knowing that the used board is ESP32.
another question: what is queue_size ??
Thank you for your help.
can anyone check if this code is functional.
This code should send the ID register address (0xD0) of BMP280 and return the value (0x58) by using SPI.
knowing that the used board is ESP32.
another question: what is queue_size ??
Code: Select all
#include <stdio.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/spi_master.h"
#include "esp_log.h"
#include "driver/gpio.h"
#define GPIO_MOSI 23
#define GPIO_MISO 19
#define GPIO_SCLK 18
#define GPIO_CS 5
void app_main(void)
{
spi_device_handle_t handle;
spi_bus_config_t buscfg = {
.mosi_io_num = GPIO_MOSI,
.miso_io_num = GPIO_MISO,
.sclk_io_num = GPIO_SCLK,
.quadwp_io_num = -1,
.quadhd_io_num = -1
};
spi_device_interface_config_t devcfg = {
.command_bits = 0,
.address_bits = 0,
.dummy_bits = 0,
.clock_speed_hz = 400000,
.duty_cycle_pos = 128,
.mode = 0,
.spics_io_num = GPIO_CS,
.queue_size = 7,
};
spi_bus_initialize(VSPI_HOST, &buscfg, SPI_DMA_CH_AUTO);
spi_bus_add_device(VSPI_HOST, &devcfg, &handle);
uint8_t recvbuf[1];
uint8_t sendbuf[1] = {0xD0};
spi_transaction_t t;
memset(&t, 0, sizeof(t));
t.length = 16;
t.rxlength = 8;
t.tx_buffer = sendbuf;
t.rx_buffer = recvbuf;
spi_device_transmit(handle, &t);
printf("ID: %x\n", recvbuf[0]);
}