Add SPI NOR Flash driver, WIP.
parent
f96c048deb
commit
0b8e6c3fa2
@ -0,0 +1,29 @@
|
||||
#include <hal/nrf_gpio.h>
|
||||
#include "Spi.h"
|
||||
|
||||
using namespace Pinetime::Drivers;
|
||||
|
||||
Spi::Spi(SpiMaster& spiMaster, uint8_t pinCsn) :
|
||||
spiMaster{spiMaster}, pinCsn{pinCsn} {
|
||||
|
||||
}
|
||||
|
||||
bool Spi::Write(const uint8_t *data, size_t size) {
|
||||
return spiMaster.Write(pinCsn, data, size);
|
||||
}
|
||||
|
||||
bool Spi::Read(uint8_t *data, size_t size) {
|
||||
return spiMaster.Read(pinCsn, data, size);
|
||||
}
|
||||
|
||||
void Spi::Sleep() {
|
||||
// TODO sleep spi
|
||||
nrf_gpio_cfg_default(pinCsn);
|
||||
}
|
||||
|
||||
bool Spi::Init() {
|
||||
nrf_gpio_pin_set(pinCsn); /* disable Set slave select (inactive high) */
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,33 @@
|
||||
#pragma once
|
||||
#include <FreeRTOS.h>
|
||||
#include <cstdint>
|
||||
#include <cstddef>
|
||||
#include <array>
|
||||
#include <atomic>
|
||||
#include <task.h>
|
||||
|
||||
#include "BufferProvider.h"
|
||||
#include "SpiMaster.h"
|
||||
|
||||
namespace Pinetime {
|
||||
namespace Drivers {
|
||||
class Spi {
|
||||
public:
|
||||
Spi(SpiMaster& spiMaster, uint8_t pinCsn);
|
||||
Spi(const Spi&) = delete;
|
||||
Spi& operator=(const Spi&) = delete;
|
||||
Spi(Spi&&) = delete;
|
||||
Spi& operator=(Spi&&) = delete;
|
||||
|
||||
bool Init();
|
||||
bool Write(const uint8_t* data, size_t size);
|
||||
bool Read(uint8_t* data, size_t size);
|
||||
void Sleep();
|
||||
void Wakeup();
|
||||
|
||||
private:
|
||||
SpiMaster& spiMaster;
|
||||
uint8_t pinCsn;
|
||||
};
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
#include <hal/nrf_gpio.h>
|
||||
#include <libraries/delay/nrf_delay.h>
|
||||
#include <libraries/log/nrf_log.h>
|
||||
#include "SpiNorFlash.h"
|
||||
#include "Spi.h"
|
||||
|
||||
using namespace Pinetime::Drivers;
|
||||
|
||||
SpiNorFlash::SpiNorFlash(Spi& spi) : spi{spi} {
|
||||
|
||||
}
|
||||
|
||||
void SpiNorFlash::Init() {
|
||||
uint8_t cmd = 0x9F;
|
||||
spi.Write(&cmd, 1);
|
||||
|
||||
uint8_t data[3];
|
||||
data[0] = 0;
|
||||
data[1] = 0;
|
||||
data[2] = 0;
|
||||
spi.Read(data, 3);
|
||||
|
||||
NRF_LOG_INFO("Manufacturer : %d, Device : %d", data[0], (data[1] + (data[2]<<8)));
|
||||
}
|
||||
|
||||
void SpiNorFlash::Uninit() {
|
||||
|
||||
}
|
||||
|
||||
void SpiNorFlash::Sleep() {
|
||||
|
||||
}
|
||||
|
||||
void SpiNorFlash::Wakeup() {
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
#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;
|
||||
|
||||
void Init();
|
||||
void Uninit();
|
||||
|
||||
|
||||
void Sleep();
|
||||
void Wakeup();
|
||||
private:
|
||||
Spi& spi;
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue