Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ This Arduino library is for use with flash and FRAM memory chips that communicat
| ATSAMD51J19 (ARM Cortex M4) | Adafruit Metro M4 | - |
| STM32F091RCT6 | Nucleo-F091RC | |
| STM32L0 | Nucleo-L031K6 | |
| STM32F4 | STM32F407VET6 | |
| ESP8266 | Adafruit ESP8266 Feather, <br> Sparkfun ESP8266 Thing | - |
| ESP32 | Adafruit ESP32 Feather, <br> Sparkfun ESP32 Thing | Onboard flash memory. Refer to footnote<sup>£</sup> below. |
| Simblee | Sparkfun Simblee | - |
Expand All @@ -46,7 +47,7 @@ This Arduino library is for use with flash and FRAM memory chips that communicat

| Manufacturer | Flash IC | Notes |
| ------------ | -------- | ----- |
| Winbond | W25Q16BV <br> W25Q64FV <br> W25Q64JV <br> W25Q80BV <br> W25Q256FV | Should work with the W25QXXXBV, W25QXXXFV & <br> W25QXXXJV families |
| Winbond | W25Q16BV <br> W25Q64FV <br> W25Q64JV <br> W25Q80BV <br> W25Q256FV <br> W25Q16JV| Should work with the W25QXXXBV, W25QXXXFV & <br> W25QXXXJV families |
| Microchip | SST25VF064C <br> SST26VF016B <br> SST26VF032B <br> SST26VF064B | Should work with the SST25 & SST26 families |
| Cypress/Spansion | S25FL032P <br> S25FL116K <br> S25FL127S | Should work with the S25FL family |
| ON Semiconductor | LE25U40CMC | |
Expand Down
12 changes: 6 additions & 6 deletions src/SPIFlashIO.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@

#if defined (ARDUINO_ARCH_SAM)
due.SPIInit(DUE_SPI_CLK);
#elif defined (ARDUINO_ARCH_SAMD)
#elif defined (ARDUINO_ARCH_SAMD) || defined(ARCH_STM32)
#ifdef SPI_HAS_TRANSACTION
_spi->beginTransaction(_settings);
#else
Expand Down Expand Up @@ -231,7 +231,7 @@

//Reads/Writes next byte. Call 'n' times to read/write 'n' number of bytes. Should be called after _beginSPI()
uint8_t SPIFlash::_nextByte(char IOType, uint8_t data) {
#if defined (ARDUINO_ARCH_SAMD)
#if defined (ARDUINO_ARCH_SAMD) || defined(ARCH_STM32)
#ifdef ENABLEZERODMA
union {
uint8_t dataBuf[1];
Expand All @@ -250,7 +250,7 @@

//Reads/Writes next int. Call 'n' times to read/write 'n' number of integers. Should be called after _beginSPI()
uint16_t SPIFlash::_nextInt(uint16_t data) {
#if defined (ARDUINO_ARCH_SAMD)
#if defined (ARDUINO_ARCH_SAMD) || defined(ARCH_STM32)
return _spi->transfer16(data);
#else
return SPI.transfer16(data);
Expand All @@ -267,7 +267,7 @@
case READDATA:
#if defined (ARDUINO_ARCH_SAM)
due.SPIRecByte(&(*data_buffer), size);
#elif defined (ARDUINO_ARCH_SAMD)
#elif defined (ARDUINO_ARCH_SAMD) || defined(ARCH_STM32)
#ifdef ENABLEZERODMA
spi_read(&(*data_buffer), size);
#else
Expand All @@ -286,7 +286,7 @@
case PAGEPROG:
#if defined (ARDUINO_ARCH_SAM)
due.SPISendByte(&(*data_buffer), size);
#elif defined (ARDUINO_ARCH_SAMD)
#elif defined (ARDUINO_ARCH_SAMD) || defined(ARCH_STM32)
#ifdef ENABLEZERODMA
spi_write(&(*data_buffer), size);
#else
Expand All @@ -313,7 +313,7 @@
}

#ifdef SPI_HAS_TRANSACTION
#if defined (ARDUINO_ARCH_SAMD)
#if defined (ARDUINO_ARCH_SAMD) || defined(ARCH_STM32)
_spi->endTransaction();
#else
SPI.endTransaction();
Expand Down
51 changes: 26 additions & 25 deletions src/SPIMemory.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,32 @@
//#define ZERO_SPISERCOM SERCOM4 //
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

#include <Arduino.h>
#include <SPI.h>
#include "defines.h"
#include "SPIFlash.h"
#include "SPIFram.h"
#include "diagnostics.h"
#ifndef ARCH_STM32
#if defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32L0) || defined(__STM32F1__) || defined(STM32F1) || defined(STM32F3) || defined(STM32F4) || defined(STM32F0xx)
#define ARCH_STM32
#endif
#endif
#if defined (ARDUINO_ARCH_SAM) || defined (ARDUINO_ARCH_SAMD) || defined (ARDUINO_ARCH_ESP8266) || defined (SIMBLEE) || defined (ARDUINO_ARCH_ESP32) || defined (BOARD_RTL8195A) || defined(ARCH_STM32) || defined(ESP32) || defined(NRF52)
// RTL8195A included - @boseji <[email protected]> 02.03.17
#define _delay_us(us) delayMicroseconds(us)
#else
#include <util/delay.h>
#endif

#define SPIFLASH_LIBVER 3
#define SPIFLASH_LIBSUBVER 4
#define SPIFLASH_REVVER 0

#define SPIFRAM_LIBVER 0
#define SPIFRAM_LIBSUBVER 0
#define SPIFRAM_REVVER 1

#include <Arduino.h>
#include <SPI.h>
#include "defines.h"
#include "SPIFlash.h"
#include "SPIFram.h"
#include "diagnostics.h"

#if defined (ARDUINO_ARCH_SAM)
#include <malloc.h>
Expand Down Expand Up @@ -102,25 +122,6 @@
#endif
#endif

#ifndef ARCH_STM32
#if defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32L0) || defined(__STM32F1__) || defined(STM32F1) || defined(STM32F3) || defined(STM32F4) || defined(STM32F0xx)
#define ARCH_STM32
#endif
#endif
#if defined (ARDUINO_ARCH_SAM) || defined (ARDUINO_ARCH_SAMD) || defined (ARDUINO_ARCH_ESP8266) || defined (SIMBLEE) || defined (ARDUINO_ARCH_ESP32) || defined (BOARD_RTL8195A) || defined(ARCH_STM32) || defined(ESP32) || defined(NRF52)
// RTL8195A included - @boseji <[email protected]> 02.03.17
#define _delay_us(us) delayMicroseconds(us)
#else
#include <util/delay.h>
#endif

#define SPIFLASH_LIBVER 3
#define SPIFLASH_LIBSUBVER 4
#define SPIFLASH_REVVER 0

#define SPIFRAM_LIBVER 0
#define SPIFRAM_LIBSUBVER 0
#define SPIFRAM_REVVER 1

class SPIMemory {
public:
Expand Down