Skip to content

Commit 752496d

Browse files
committed
[driver] vl53 spi driver without tx buffer, fails with DMA
1 parent ead0741 commit 752496d

File tree

3 files changed

+13
-13
lines changed

3 files changed

+13
-13
lines changed

examples/nucleo_h723zg/vl53/vl53l8_spi/main.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ extern "C" {
2626

2727
using namespace Board;
2828

29-
using SpiMaster = SpiMaster2_Dma<Dma1::Channel0, Dma1::Channel1>;
29+
// using SpiMaster = SpiMaster2_Dma<Dma1::Channel0, Dma1::Channel1>;
30+
using SpiMaster = SpiMaster2;
3031
using Cs = GpioC0;
3132
using Mosi = GpioB15;
3233
using Miso = GpioC2;

ext/vl53/vl53_transport.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ class Vl53SpiTransport : public modm::SpiDevice<SpiMaster>, public Vl53Transport
8282
resetSensor() override;
8383

8484
private:
85-
uint8_t tx_buffer[VL53LMZ_COMMS_CHUNK_SIZE + 2];
8685
uint8_t rx_buffer[VL53LMZ_COMMS_CHUNK_SIZE + 2];
8786

8887
static uint16_t

ext/vl53/vl53_transport_impl.hpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,15 @@ Vl53SpiTransport<SpiMaster, Cs, Lpn, VL53LMZ_COMMS_CHUNK_SIZE>::writeMulti(uint1
4141

4242
const uint16_t temp = RegisterAddress + position;
4343

44-
tx_buffer[0] = SPI_WRITE_MASK(temp) >> 8;
45-
tx_buffer[1] = SPI_WRITE_MASK(temp) & 0xFF;
46-
47-
for (uint32_t i = 0; i < data_size; i++) { tx_buffer[i + 2] = p_values[position + i]; }
48-
49-
data_size += 2;
44+
uint8_t addr_buffer[2];
45+
addr_buffer[0] = SPI_WRITE_MASK(temp) >> 8;
46+
addr_buffer[1] = SPI_WRITE_MASK(temp) & 0xFF;
5047

5148
modm::this_fiber::poll([&] { return this->acquireMaster(); });
5249
Cs::reset();
53-
SpiMaster::transfer(&tx_buffer[0], nullptr, data_size);
50+
// SpiMaster::transfer(&tx_buffer[0], nullptr, data_size);
51+
SpiMaster::transfer(addr_buffer, nullptr, sizeof(addr_buffer));
52+
SpiMaster::transfer(&p_values[position], nullptr, data_size);
5453

5554
if (this->releaseMaster()) { Cs::set(); }
5655
}
@@ -82,12 +81,13 @@ Vl53SpiTransport<SpiMaster, Cs, Lpn, VL53LMZ_COMMS_CHUNK_SIZE>::readMulti(uint16
8281

8382
const uint16_t temp = RegisterAddress + position;
8483

85-
tx_buffer[0] = SPI_READ_MASK(temp) >> 8;
86-
tx_buffer[1] = SPI_READ_MASK(temp) & 0xFF;
84+
uint8_t addr_buffer[2];
85+
addr_buffer[0] = SPI_WRITE_MASK(temp) >> 8;
86+
addr_buffer[1] = SPI_WRITE_MASK(temp) & 0xFF;
8787

8888
modm::this_fiber::poll([&] { return this->acquireMaster(); });
8989
Cs::reset();
90-
SpiMaster::transfer(&tx_buffer[0], &rx_buffer[0], data_size + 2);
90+
SpiMaster::transfer(&addr_buffer[0], &rx_buffer[0], data_size + 2);
9191
// SpiMaster::transfer(nullptr, p_values + position, data_size);
9292
if (this->releaseMaster()) { Cs::set(); }
9393

@@ -155,7 +155,7 @@ Vl53I2cTransport<I2cMaster, Lpn>::writeByte(uint16_t RegisterAddress, uint8_t va
155155
data_write[0] = (RegisterAddress >> 8) & 0xFF;
156156
data_write[1] = RegisterAddress & 0xFF;
157157
data_write[2] = value & 0xFF;
158-
158+
159159
const auto status = I2cDevice<I2cMaster>::write(&data_write[0], 3);
160160
return static_cast<uint8_t>(not status);
161161
}

0 commit comments

Comments
 (0)