diff --git a/README.md b/README.md
index f730003..d00622a 100644
--- a/README.md
+++ b/README.md
@@ -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,
Sparkfun ESP8266 Thing | - |
| ESP32 | Adafruit ESP32 Feather,
Sparkfun ESP32 Thing | Onboard flash memory. Refer to footnote£ below. |
| Simblee | Sparkfun Simblee | - |
@@ -46,7 +47,7 @@ This Arduino library is for use with flash and FRAM memory chips that communicat
| Manufacturer | Flash IC | Notes |
| ------------ | -------- | ----- |
-| Winbond | W25Q16BV
W25Q64FV
W25Q64JV
W25Q80BV
W25Q256FV | Should work with the W25QXXXBV, W25QXXXFV &
W25QXXXJV families |
+| Winbond | W25Q16BV
W25Q64FV
W25Q64JV
W25Q80BV
W25Q256FV
W25Q16JV| Should work with the W25QXXXBV, W25QXXXFV &
W25QXXXJV families |
| Microchip | SST25VF064C
SST26VF016B
SST26VF032B
SST26VF064B | Should work with the SST25 & SST26 families |
| Cypress/Spansion | S25FL032P
S25FL116K
S25FL127S | Should work with the S25FL family |
| ON Semiconductor | LE25U40CMC | |
diff --git a/src/SPIFlashIO.cpp b/src/SPIFlashIO.cpp
index 083ed29..e3e2833 100644
--- a/src/SPIFlashIO.cpp
+++ b/src/SPIFlashIO.cpp
@@ -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
@@ -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];
@@ -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);
@@ -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
@@ -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
@@ -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();
diff --git a/src/SPIMemory.h b/src/SPIMemory.h
index cd1fcd9..36f8afd 100644
--- a/src/SPIMemory.h
+++ b/src/SPIMemory.h
@@ -69,12 +69,32 @@
//#define ZERO_SPISERCOM SERCOM4 //
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
- #include
- #include
- #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 02.03.17
+ #define _delay_us(us) delayMicroseconds(us)
+#else
+ #include
+#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
+#include
+#include "defines.h"
+#include "SPIFlash.h"
+#include "SPIFram.h"
+#include "diagnostics.h"
#if defined (ARDUINO_ARCH_SAM)
#include
@@ -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 02.03.17
- #define _delay_us(us) delayMicroseconds(us)
-#else
- #include
-#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: