HardFOC Core
API reference
Loading...
Searching...
No Matches
At25040Handler.h
Go to the documentation of this file.
1
9#pragma once
10
11#include "core/hf-core-drivers/external/hf-at25040-driver/inc/at25040.hpp"
12#include "base/BaseSpi.h"
13#include "base/BaseGpio.h"
14#include "RtosMutex.h"
16
17#include <cstdint>
18
22class At25040SpiAdapter : public at25040::SpiInterface<At25040SpiAdapter> {
23 public:
25 explicit At25040SpiAdapter(BaseSpi& spi) noexcept : spi_(spi) {}
26
35 bool transfer(const uint8_t* tx, uint8_t* rx, std::size_t len,
36 uint32_t timeout_ms) {
37 return spi_.Transfer(tx, rx, static_cast<uint16_t>(len), timeout_ms) ==
38 hf_spi_err_t::SPI_SUCCESS;
39 }
40
45 void delay_us(uint32_t us) noexcept { handler_utils::DelayUs(us); }
46
47 private:
48 BaseSpi& spi_;
49};
50
55 public:
57 enum class ProbeResult : uint8_t {
58 NotBound = 0,
59 Absent = 1,
60 Present = 2,
61 };
62
67 explicit At25040Handler(BaseSpi& spi, BaseGpio* wp = nullptr) noexcept
68 : adapter_(spi), device_(adapter_), wp_(wp) {}
69
71 ProbeResult Probe() noexcept;
73 uint8_t LastRdsr() const noexcept { return device_.LastRdsr(); }
81 bool Read(uint16_t addr, uint8_t* dst, uint16_t len) noexcept;
91 bool Write(uint16_t addr, const uint8_t* src, uint16_t len) noexcept;
93 void ReleaseWriteProtect() noexcept;
95 void ParkWriteProtect() noexcept;
96
97 private:
99 at25040::Device<At25040SpiAdapter> device_;
100 BaseGpio* wp_{nullptr};
101 mutable RtosMutex mutex_{};
102};
Shared utility functions for handler CRTP communication adapters.
Thread-safe AT25040B EEPROM façade (BaseSpi + optional /WP GPIO).
Definition At25040Handler.h:54
ProbeResult
Result of a non-destructive presence probe.
Definition At25040Handler.h:57
@ NotBound
SPI not attached / constructor-only state.
@ Present
RDSR / identity bytes look like AT25040.
@ Absent
Bus answered with no device.
at25040::Device< At25040SpiAdapter > device_
Definition At25040Handler.h:99
At25040Handler(BaseSpi &spi, BaseGpio *wp=nullptr) noexcept
Definition At25040Handler.h:67
void ParkWriteProtect() noexcept
Drive /WP active (protect) after a write burst.
Definition At25040Handler.cpp:35
BaseGpio * wp_
Definition At25040Handler.h:100
ProbeResult Probe() noexcept
SPI probe; does not parse product identity.
Definition At25040Handler.cpp:14
RtosMutex mutex_
Definition At25040Handler.h:101
bool Read(uint16_t addr, uint8_t *dst, uint16_t len) noexcept
Read len bytes starting at addr.
Definition At25040Handler.cpp:24
void ReleaseWriteProtect() noexcept
Drive /WP inactive so page writes can proceed.
Definition At25040Handler.cpp:4
uint8_t LastRdsr() const noexcept
Definition At25040Handler.h:73
bool Write(uint16_t addr, const uint8_t *src, uint16_t len) noexcept
Page-loop write. Caller owns identity / calibration policy.
Definition At25040Handler.cpp:42
At25040SpiAdapter adapter_
Definition At25040Handler.h:98
CRTP adapter mapping BaseSpi::Transfer onto at25040::SpiInterface.
Definition At25040Handler.h:22
At25040SpiAdapter(BaseSpi &spi) noexcept
Definition At25040Handler.h:25
void delay_us(uint32_t us) noexcept
Optional driver hook: sleep between RDSR polls of the write cycle.
Definition At25040Handler.h:45
BaseSpi & spi_
Definition At25040Handler.h:48
bool transfer(const uint8_t *tx, uint8_t *rx, std::size_t len, uint32_t timeout_ms)
Full-duplex transfer used by the AT25040 driver.
Definition At25040Handler.h:35
void DelayUs(uint32_t us) noexcept
Microsecond delay with automatic fallback to RTOS delay for large values.
Definition HandlerCommon.h:117