diff options
| author | JF <jf@codingfield.com> | 2020-05-24 14:58:29 (GMT) |
|---|---|---|
| committer | Gitea <gitea@fake.local> | 2020-05-24 14:58:29 (GMT) |
| commit | 82b4ddc25b4c7913e0e6a13a209a4415dff044f1 (patch) | |
| tree | 8eeafef1f4150a1cf238ee80e53c8901b0ec67af /src/drivers/SpiNorFlash.h | |
| parent | be1ad9b07083e656a649d223750ff4b14b781b7b (diff) | |
| parent | 073717980f5c00f553ac3b58a50b792b32a14c7a (diff) | |
Merge branch 'nimble-ota' of JF/PineTime into develop
Diffstat (limited to 'src/drivers/SpiNorFlash.h')
| -rw-r--r-- | src/drivers/SpiNorFlash.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/drivers/SpiNorFlash.h b/src/drivers/SpiNorFlash.h new file mode 100644 index 0000000..b5f1920 --- /dev/null +++ b/src/drivers/SpiNorFlash.h @@ -0,0 +1,60 @@ +#pragma once +#include <cstddef> + +namespace Pinetime { + namespace Drivers { + class Spi; + class SpiNorFlash { + public: + explicit SpiNorFlash(Spi& spi); + SpiNorFlash(const SpiNorFlash&) = delete; + SpiNorFlash& operator=(const SpiNorFlash&) = delete; + SpiNorFlash(SpiNorFlash&&) = delete; + SpiNorFlash& operator=(SpiNorFlash&&) = delete; + + typedef struct __attribute__((packed)) { + uint8_t manufacturer = 0; + uint8_t type = 0; + uint8_t density = 0; + } Identification; + + Identification ReadIdentificaion(); + uint8_t ReadStatusRegister(); + bool WriteInProgress(); + bool WriteEnabled(); + uint8_t ReadConfigurationRegister(); + void Read(uint32_t address, uint8_t* buffer, size_t size); + void Write(uint32_t address, uint8_t *buffer, size_t size); + void WriteEnable(); + void SectorErase(uint32_t sectorAddress); + uint8_t ReadSecurityRegister(); + bool ProgramFailed(); + bool EraseFailed(); + + + void Init(); + void Uninit(); + + + void Sleep(); + void Wakeup(); + private: + enum class Commands : uint8_t { + PageProgram = 0x02, + Read = 0x03, + ReadStatusRegister = 0x05, + WriteEnable = 0x06, + ReadConfigurationRegister = 0x15, + SectorErase = 0x20, + ReadSecurityRegister = 0x2B, + ReadIdentification = 0x9F, + }; + static constexpr uint16_t pageSize = 256; + + Spi& spi; + + }; + } +} + + |
