8#include "libxr_def.hpp"
9#include "libxr_type.hpp"
27template <
typename,
typename =
void>
28struct HasFlashPage : std::false_type
32template <
typename,
typename =
void>
33struct HasFlashBank : std::false_type
38struct HasFlashPage<T, std::void_t<decltype(std::declval<T>().Page)>> : std::true_type
43struct HasFlashBank<T, std::void_t<decltype(std::declval<T>().Banks)>> : std::true_type
49typename std::enable_if<!HasFlashPage<T>::value>::type SetNbPages(T& init, uint32_t addr,
53 init.PageAddress = addr;
58typename std::enable_if<HasFlashPage<T>::value>::type SetNbPages(T& init, uint32_t addr,
67typename std::enable_if<!HasFlashBank<T>::value>::type SetBanks(T& init)
74typename std::enable_if<HasFlashBank<T>::value>::type SetBanks(T& init)
103 :
STM32Flash(sectors, sector_count, sector_count - 1)
107 ErrorCode
Erase(
size_t offset,
size_t size)
override;
113 uint32_t base_address_;
114 uint32_t program_type_;
115 size_t sector_count_;
117 static constexpr uint32_t DetermineProgramType()
119#ifdef FLASH_TYPEPROGRAM_BYTE
120 return FLASH_TYPEPROGRAM_BYTE;
121#elif defined(FLASH_TYPEPROGRAM_HALFWORD)
122 return FLASH_TYPEPROGRAM_HALFWORD;
123#elif defined(FLASH_TYPEPROGRAM_WORD)
124 return FLASH_TYPEPROGRAM_WORD;
125#elif defined(FLASH_TYPEPROGRAM_DOUBLEWORD)
126 return FLASH_TYPEPROGRAM_DOUBLEWORD;
127#elif defined(FLASH_TYPEPROGRAM_FLASHWORD)
128 return FLASH_TYPEPROGRAM_FLASHWORD;
130#error "No supported FLASH_TYPEPROGRAM_xxx defined"
134 static constexpr size_t DetermineMinWriteSize()
136#ifdef FLASH_TYPEPROGRAM_BYTE
138#elif defined(FLASH_TYPEPROGRAM_HALFWORD)
140#elif defined(FLASH_TYPEPROGRAM_WORD)
142#elif defined(FLASH_TYPEPROGRAM_DOUBLEWORD)
144#elif defined(FLASH_TYPEPROGRAM_FLASHWORD)
145 return FLASH_NB_32BITWORD_IN_FLASHWORD * 4;
147#error "No supported FLASH_TYPEPROGRAM_xxx defined"
151 bool IsInRange(uint32_t addr,
size_t size)
const;
常量原始数据封装类。 A class for encapsulating constant raw data.
Abstract base class representing a flash memory interface. 抽象基类,表示闪存接口。
STM32Flash 通用类,构造时传入扇区列表,自动判断编程粒度。
ErrorCode Write(size_t offset, ConstRawData data) override
Writes data to the flash memory. 向闪存写入数据。
STM32Flash(const FlashSector *sectors, size_t sector_count)
STM32Flash 类,自动取最后两个扇区
STM32Flash(const FlashSector *sectors, size_t sector_count, size_t start_sector)
STM32Flash 类,构造时传入扇区列表,自动判断编程粒度。
ErrorCode Erase(size_t offset, size_t size) override
Erases a section of the flash memory. 擦除闪存的指定区域。
STM32Flash 通用类,构造时传入扇区列表,自动判断编程粒度。