Hello Srmojo,
Did you had any luck with your board?
I do have one also and would like to implement the library.
Thanks.
Tim
Hello Srmojo,
Did you had any luck with your board?
I do have one also and would like to implement the library.
Thanks.
Tim
OK ive am at my wits end and come to the masters for help.
I have a Teensy LC and trying to communicate with a SST26VF064B Flash chip.
Using only raw SPI commands I can communicate with the chip. Get ID and read the status regs. But I cant write! Whey do they make it so damn hard to write!
Marzogh perhaps you can lend some insight into my SST26 chip.
Starting factory fresh with SPIMemory Library this is the result of the test code:
Initialising..........
Chip Diagnostics initiated.
No Chip size defined by user. Automated identification initiated.
Chip identified. This chip is fully supported by the library.
SPIMemory Library version: 3.2.1
JEDEC ID: 0xBF2643
Man ID: 0xBF
Memory ID: 0x26
Capacity: 8388608
Max Pages: 0
Unique ID: 04294967040, 0xFFFFFFFFFFFFFF00
-----------------------------------------------------------------------------------------------------------------------------
Testing library code
-----------------------------------------------------------------------------------------------------------------------------
Function Test result Runtime
-----------------------------------------------------------------------------------------------------------------------------
Power Down This function is not supported by the flash memory hardware.
FAIL Not all chips support power down. Check your datasheet.
Power Up PASS 44 us
Erase Chip PASS 60 us
Erase 72KB PASS 176 us
Erase 64KB PASS 68 us
Erase 32KB PASS 76 us
Erase 4KB PASS 76 us
-----------------------------------------------------------------------------------------------------------------------------
Data type I/O Result Write time Read time
-----------------------------------------------------------------------------------------------------------------------------
Byte FAIL 0 us 40 us
Char FAIL 0 us 40 us
Word FAIL 0 us 44 us
Short FAIL 0 us 40 us
ULong FAIL 0 us 44 us
Long FAIL 0 us 48 us
Float FAIL 0 us 48 us
Write Function has failed errorcheck.
If this does not help resolve/clarify this issue, please raise an issue at http://www.github.com/Marzogh/SPIMemory/issues with the details of what your were doing when this error occurred
Struct FAIL 0 us 112 us
Byte Array FAIL 0, FAIL 1, FAIL 2, FAIL 3, FAIL 4, FAIL 5, FAIL 6, FAIL 7, FAIL 8, FAIL 9, FAIL 10, FAIL 11, FAIL 12, FAIL 13, FAIL 14, FAIL 15, FAIL 16, FAIL 17, FAIL 18, FAIL 19, FAIL 20, FAIL 21, FAIL 22, FAIL 23, FAIL 24, FAIL 25, FAIL 26, FAIL 27, FAIL 28, FAIL 29, FAIL 30, FAIL 31, FAIL 32, FAIL 33, FAIL 34, FAIL 35, FAIL 36, FAIL 37, FAIL 38, FAIL 39, FAIL 40, FAIL 41, FAIL 42, FAIL 43, FAIL 44, FAIL 45, FAIL 46, FAIL 47, FAIL 48, FAIL 49, FAIL 50, FAIL 51, FAIL 52, FAIL 53, FAIL 54, FAIL 55, FAIL 56, FAIL 57, FAIL 58, FAIL 59, FAIL 60, FAIL 61, FAIL 62, FAIL 63, FAIL 64, FAIL 65, FAIL 66, FAIL 67, FAIL 68, FAIL 69, FAIL 70, FAIL 71, FAIL 72, FAIL 73, FAIL 74, FAIL 75, FAIL 76, FAIL 77, FAIL 78, FAIL 79, FAIL 80, FAIL 81, FAIL 82, FAIL 83, FAIL 84, FAIL 85, FAIL 86, FAIL 87, FAIL 88, FAIL 89, FAIL 90, FAIL 91, FAIL 92, FAIL 93, FAIL 94, FAIL 95, FAIL 96, FAIL 97, FAIL 98, FAIL 99, FAIL 100, FAIL 101, FAIL 102, FAIL 103, FAIL 104, FAIL 105, FAIL 106, FAIL 107, FAIL 108, FAIL 109, FAIL 110, FAIL 111, FAIL 112, FAIL 113, FAIL 114, FAIL 115, FAIL 116, FAIL 117, FAIL 118, FAIL 119, FAIL 120, FAIL 121, FAIL 122, FAIL 123, FAIL 124, FAIL 125, FAIL 126, FAIL 127, FAIL 128, FAIL 129, FAIL 130, FAIL 131, FAIL 132, FAIL 133, FAIL 134, FAIL 135, FAIL 136, FAIL 137, FAIL 138, FAIL 139, FAIL 140, FAIL 141, FAIL 142, FAIL 143, FAIL 144, FAIL 145, FAIL 146, FAIL 147, FAIL 148, FAIL 149, FAIL 150, FAIL 151, FAIL 152, FAIL 153, FAIL 154, FAIL 155, FAIL 156, FAIL 157, FAIL 158, FAIL 159, FAIL 160, FAIL 161, FAIL 162, FAIL 163, FAIL 164, FAIL 165, FAIL 166, FAIL 167, FAIL 168, FAIL 169, FAIL 170, FAIL 171, FAIL 172, FAIL 173, FAIL 174, FAIL 175, FAIL 176, FAIL 177, FAIL 178, FAIL 179, FAIL 180, FAIL 181, FAIL 182, FAIL 183, FAIL 184, FAIL 185, FAIL 186, FAIL 187, FAIL 188, FAIL 189, FAIL 190, FAIL 191, FAIL 192, FAIL 193, FAIL 194, FAIL 195, FAIL 196, FAIL 197, FAIL 198, FAIL 199, FAIL 200, FAIL 201, FAIL 202, FAIL 203, FAIL 204, FAIL 205, FAIL 206, FAIL 207, FAIL 208, FAIL 209, FAIL 210, FAIL 211, FAIL 212, FAIL 213, FAIL 214, FAIL 215, FAIL 216, FAIL 217, FAIL 218, FAIL 219, FAIL 220, FAIL 221, FAIL 222, FAIL 223, FAIL 224, FAIL 225, FAIL 226, FAIL 227, FAIL 228, FAIL 229, FAIL 230, FAIL 231, FAIL 232, FAIL 233, FAIL 234, FAIL 235, FAIL 236, FAIL 237, FAIL 238, FAIL 239, FAIL 240, FAIL 241, FAIL 242, FAIL 243, FAIL 244, FAIL 245, FAIL 246, FAIL 247, FAIL 248, FAIL 249, FAIL 250, FAIL 251, FAIL 252, FAIL 253, FAIL 254, PASS 0 us 512 us
Write Function has failed errorcheck.
If this does not help resolve/clarify this issue, please raise an issue at http://www.github.com/Marzogh/SPIMemory/issues with the details of what your were doing when this error occurred
String FAIL 0 us 84 us
I have disable the WP and HOLD pins with the IOC Register but still not getting anywhere. What is next to investigate?
Thank you!
hello thanks for your great work
are that library support sst25vf010a or LE25U40CMDTWG cause those are the parts i have
i also try to use sst25vf010a but it return 00h as chip id and manufacture id
thanks in advance
hello @Marzogh.
Im having some issues with the SPImemory library, specifically it doesn't work for the writing operations.
Hardware:
Arduino UNO
W25Q80BV
Wiring:
1cs ----> pin10
2DO ----> MISO
3WP ----> 3.3v
4GND ----> GND
5DI ----> MOSI
6CLK ----> SCK
7HOLD ----> 3.3v
8VCC ----> 3.3v
I interfaced the Arduino and Flash using the level shifter.
and FlashDiagnostics line 40 has been changed to:
SPIFlash flash(10);
The library version 3.2.1 and 3.2.0 both do not work.
Any help is appreciated.
The output is below
Initialising..........
SPIMemory Library version: 3.2.1
JEDEC ID: 0xEF4014
Man ID: 0xEF
Memory ID: 0x40
Capacity: 1048576
Max Pages: 4294967295
Unique ID: 2815588997737984, 0x60A88003660B2E00
-----------------------------------------------------------------------------------------------------------------------------
Testing library code
-----------------------------------------------------------------------------------------------------------------------------
Function Test result Runtime
-----------------------------------------------------------------------------------------------------------------------------
Power Down FAIL Not all chips support power down. Check your datasheet.
Power Up PASS 0 us
Erase Chip PASS 0 us
Erase 72KB PASS 0 us
Erase 64KB PASS 0 us
Erase 32KB PASS 0 us
Erase 4KB PASS 0 us
-----------------------------------------------------------------------------------------------------------------------------
Data type I/O Result Write time Read time
-----------------------------------------------------------------------------------------------------------------------------
Byte FAIL 0 us
Char FAIL 0 us
Word FAIL 0 us
Short FAIL 0 us
ULong FAIL 0 us
Long FAIL 0 us
Float FAIL 0 us
Struct FAIL 0 us
Byte Array FAIL 1, FAIL 2, FAIL 3, FAIL 4, FAIL 5, FAIL 6, FAIL 7, FAIL 8, FAIL 9, FAIL 10, FAIL 11, FAIL 12, FAIL 13, FAIL 14, FAIL 15, FAIL 16, FAIL 17, FAIL 18, FAIL 19, FAIL 20, FAIL 21, FAIL 22, FAIL 23, FAIL 24, FAIL 25, FAIL 26, FAIL 27, FAIL 28, FAIL 29, FAIL 30, FAIL 31, FAIL 32, FAIL 33, FAIL 34, FAIL 35, FAIL 36, FAIL 37, FAIL 38, FAIL 39, FAIL 40, FAIL 41, FAIL 42, FAIL 43, FAIL 44, FAIL 45, FAIL 46, FAIL 47, FAIL 48, FAIL 49, FAIL 50, FAIL 51, FAIL 52, FAIL 53, FAIL 54, FAIL 55, FAIL 56, FAIL 57, FAIL 58, FAIL 59, FAIL 60, FAIL 61, FAIL 62, FAIL 63, FAIL 64, FAIL 65, FAIL 66, FAIL 67, FAIL 68, FAIL 69, FAIL 70, FAIL 71, FAIL 72, FAIL 73, FAIL 74, FAIL 75, FAIL 76, FAIL 77, FAIL 78, FAIL 79, FAIL 80, FAIL 81, FAIL 82, FAIL 83, FAIL 84, FAIL 85, FAIL 86, FAIL 87, FAIL 88, FAIL 89, FAIL 90, FAIL 91, FAIL 92, FAIL 93, FAIL 94, FAIL 95, FAIL 96, FAIL 97, FAIL 98, FAIL 99, FAIL 100, FAIL 101, FAIL 102, FAIL 103, FAIL 104, FAIL 105, FAIL 106, FAIL 107, FAIL 108, FAIL 109, FAIL 110, FAIL 111, FAIL 112, FAIL 113, FAIL 114, FAIL 115, FAIL 116, FAIL 117, FAIL 118, FAIL 119, FAIL 120, FAIL 121, FAIL 122, FAIL 123, FAIL 124, FAIL 125, FAIL 126, FAIL 127, FAIL 128, FAIL 129, FAIL 130, FAIL 131, FAIL 132, FAIL 133, FAIL 134, FAIL 135, FAIL 136, FAIL 137, FAIL 138, FAIL 139, FAIL 140, FAIL 141, FAIL 142, FAIL 143, FAIL 144, FAIL 145, FAIL 146, FAIL 147, FAIL 148, FAIL 149, FAIL 150, FAIL 151, FAIL 152, FAIL 153, FAIL 154, FAIL 155, FAIL 156, FAIL 157, FAIL 158, FAIL 159, FAIL 160, FAIL 161, FAIL 162, FAIL 163, FAIL 164, FAIL 165, FAIL 166, FAIL 167, FAIL 168, FAIL 169, FAIL 170, FAIL 171, FAIL 172, FAIL 173, FAIL 174, FAIL 175, FAIL 176, FAIL 177, FAIL 178, FAIL 179, FAIL 180, FAIL 181, FAIL 182, FAIL 183, FAIL 184, FAIL 185, FAIL 186, FAIL 187, FAIL 188, FAIL 189, FAIL 190, FAIL 191, FAIL 192, FAIL 193, FAIL 194, FAIL 195, FAIL 196, FAIL 197, FAIL 198, FAIL 199, FAIL 200, FAIL 201, FAIL 202, FAIL 203, FAIL 204, FAIL 205, FAIL 206, FAIL 207, FAIL 208, FAIL 209, FAIL 210, FAIL 211, FAIL 212, FAIL 213, FAIL 214, FAIL 215, FAIL 216, FAIL 217, FAIL 218, FAIL 219, FAIL 220, FAIL 221, FAIL 222, FAIL 223, FAIL 224, FAIL 225, FAIL 226, FAIL 227, FAIL 228, FAIL 229, FAIL 230, FAIL 231, FAIL 232, FAIL 233, FAIL 234, FAIL 235, FAIL 236, FAIL 237, FAIL 238, FAIL 239, FAIL 240, FAIL 241, FAIL 242, FAIL 243, FAIL 244, FAIL 245, FAIL 246, FAIL 247, FAIL 248, FAIL 249, FAIL 250, FAIL 251, FAIL 252, FAIL 253, FAIL 254, FAIL 255, PASS 0 us
String FAIL 0 us
-----------------------------------------------------------------------------------------------------------------------------
To see function runtimes ncomment RUNDIAGNOSTIC in SPIMemory.h.
Hi, Im using ESP8266, then executing flash.begin() and without spi flash connected ... >> getting WDT reset. I cant add delay(0) ... is in your library ...
... with spi flash inserted (connected) - all ok.
ESP.wdtDisable();
ESP.wdtFeed();
if (!flash.begin()) {
Serial.println(flash.error(VERBOSE));
}
ESP.wdtEnable(1000);
same with wdtDisable() after ~10 seconds WDT reset .... your library stack in infinite loop on flash.begin() .... any help ?
OK ... find the bug, in defines.h change ... for esp8266 BUSY_TIMEOUT set ~2 seconds (was 1000 seconds)
// #define BUSY_TIMEOUT 1000000000L
#if defined (ARDUINO_ARCH_ESP8266)
#define BUSY_TIMEOUT 2000000L
#else
#define BUSY_TIMEOUT 1000000000L
#endif
... now work ok
and may be in this code must be done some fixes:
// Polls the status register 1 until busy flag is cleared or timeout
bool SPIFlash::_notBusy(uint32_t timeout) {
_delay_us(WINBOND_WRITE_DELAY);
uint32_t _time = micros();
do {
#if defined (ARDUINO_ARCH_ESP8266)
delay(0);
#endif
_readStat1();
if (!(stat1 & BUSY))
{
return true;
}
} while ((micros() - _time) < timeout);
if (timeout <= (micros() - _time)) {
_troubleshoot(CHIPBUSY);
return false;
}
return true;
}
change code >
do {
** #if defined (ARDUINO_ARCH_ESP8266)**
** delay(0);**
** #endif**
** _readStat1();**
same with cheapErase() fix
//Erases whole chip. Think twice before using.
bool SPIFlash::eraseChip(void) {
#ifdef RUNDIAGNOSTIC
_spifuncruntime = micros();
#endif
if(_isChipPoweredDown() || !_notBusy() || !_writeEnable()) {
return false;
}
_beginSPI(chipErase.opcode);
_endSPI();
while(_readStat1() & BUSY) {
#if defined (ARDUINO_ARCH_ESP8266)
delay(0);
#endif
//_delay_us(30000L);
}
_endSPI();
#ifdef RUNDIAGNOSTIC
_spifuncruntime = micros() - _spifuncruntime;
#endif
return true;
}
Just pushed an update through to v3.3.0 with the following changes:
Bugs squashed:
Enhancements:
New flash memory chips supported:
New Fram memory chips supported:
Work on proper documentation continues. As polaroi8d pointed out here, the old ReadMe was getting far too unwieldy and the Github Wiki is not the easiest thing to poke around. I hope to have the documentation done soon - (Rst + Sphinx). Check out the progress of the documentation here! Any recommendations are welcome 8)
@walterpre, @BigEyetuna & @jacky4566 : jetty840 identified the issue with the SST26 series and its been fixed with v3.3.0.
@Srmojo & @timoteo_mendes: I've just tested the latest version of the library - v3.3.0 - with the W25Q64JV on the Adafruit 328p feather and it works fine. I do not have an Adalogger handy, but AFAIK, the both of them use the same µC - hope it helps!
@amirezz: There was a bug in v3.2.1 that prevented the library from writing to the SST25 and SST26 series. This has been fixed in v3.3.0. Also, the library supports the LE25U40C.
@zhliao: Could you check and confirm that v3.3.0 also causes the same issue? If it does, please let me know and I will take a look at it right away.
Marzogh you can probably update the compatibility tables. I haven't thoughly tested but it does seem to work just fine with Teensy 3.2 and Teensy LC.
I am also using the Adesto AT25SL641. Which won't be very popular at 1.8v but it passed all checks with the LC and works perfectly.
@jacky4566: Thanks for the heads up. Its good to know its working with the Teensys and with the AT25SL641. Have you had to make any mods to get the library to run on the Teensy?
Marzogh:
@jacky4566: Thanks for the heads up. Its good to know its working with the Teensys and with the AT25SL641. Have you had to make any mods to get the library to run on the Teensy?
No mods. Using default SPI pins since its a custom board I cant really test the alternate pins. CPU clock 48MHz, SPI clock speed 12MHz. Power down works fine as well.
Any chance you will support CY15B104Q 4Mbit FRAM, I have one and have never got it working.
Thanks and Regards
I have been able to run the FlashDiagnostics on the Sparkfun RedBoard Turbo. A M0 processor with W25Q32BV 32M-Bit Winbond memory chip. I had to modify the variant.h and variant.cpp files as Sparkfun had omitted to include Arduino access for the on board SPImemory.
I have posted details of the edits and a copy of the output obtained on the Sparkfun forum:
https://forum.sparkfun.com/viewtopic.php?f=145&t=49805
Thanks for the library
Ted
@tfcroft4 Thank you for the heads up I'm glad the library works for you
@BobTrex I add support for ICs based on the ones I can get my hands on. Please raise an 'feature request' issue on Github for support for this chip and I'll put it into the pipeline
Just pushed an update through to v3.4.0 with the following changes:
Bugs squashed:
Enhancements:
-An alternate version of the constructor SPIFlash flash(int8_t *SPIPinsArray); can be used (only with ESP32 boards as of now) to enable the use of custom SPI pins. SPIPinsArray has to be a 4 element array containing the custom SPI pin numbers (as signed integers - int8_t) in the following order - sck, miso, mosi, ss. Refer to the wiki for more information. Resolves issue #113
Created new error code NOCHIPSELECTDECLARED
for errors with declaring custom SPI pins.
Using other SPI ports (HSPI, VSPI, SPI1, SPI2 etc.) is now also supported on ESP32 boards - along with SAMD and STM32 boards (supported since v3.0.0). Resolves issue #177
The new version changes the way [setClock()](http://(Library instantiation functions · Marzogh/SPIMemory Wiki · GitHub) works and allows for the definition of clock speed before the SPI Bus is instantiated. Refer to wiki for further details. Thanks @rambo.(PR #156)
Reduce SRAM footprint when running Diagnostics.ino. Thanks @rambo
Officially supports the ESP32 (tested on the ESP32 Feather)
Now supports FRAM memory chips via the SPIFram constructor
Changed Diagnostics output in _chipID() to match situation better.
Fixed _chipID() to run more efficiently.
New µCs supported:
New flash memory chips supported:
Work on proper documentation continues. As polaroi8d pointed out here, the old ReadMe was getting far too unwieldy and the Github Wiki is not the easiest thing to poke around. I hope to have the documentation done soon - (Rst + Sphinx). Check out the progress of the documentation here! Any recommendations are welcome 8)
Hi There
I'm in the process of designing a shield for an Arduino Due. and unfortunately after all our PCBs have been
manufactured I was shocked to find the Due has no EEPROM (I only need 90 bytes). Thats fine I thought, we
have plenty of SPI flash chips in the factory I can use.... only to notice the "4" SPI units the Due is supposed to have. One is connected to a silly header with 5V (instead of 3.3). I have to get my SPI working over some
pins that are actually on the regular pins. and I found the second SPI is only on the BGA version of the micro.
So I asked what about the other 2? Does your library support using the USARTs in SPI mod? and if so how?
Hi,
I didn't manage to make this library work on a NodeMCU v1.0 board, it uses an ESP12 (ESP8266 + 32Mbit Flash)). I don't understand as it's supposed to work with an Adafruit Feather HUZZAH board which is uses an ESP12 too.
I'm using the TestFlash example to test.
First I have to force the SPI to SPI_PINS_HSPI_OVERLAP mode, otherwise I get a watchdog reset.
Why is the SPI frequency set to 104 Mhz by default ? The Winbond-W25Q32 chip is not supposed to work above 80 MHz and the SPI library uses 40 Mhz...
The CS signal set to pin GPIO15 for the ARDUINO_ARCH_ESP8266, which is correct for user SPI, but on an ESP12 the SPI0 must be used (SPI_PINS_HSPI_OVERLAP mode), which has CS on GPIO11. When I try to change CS to 11 I get a watchdog reset.
I tried to access the flash directly without your library by trying to read Jedec ID, I can get all the signals correct (I think) except the SDIO_DATA3 (GPIO10) signal which is kept low, thus disabling the flash (this signal is connected to HOLD pin on the flash chip.
I compared to the signals I have when I call the SDK function spi_flash_get_id() (which works). If I try to force the SDIO_DATA3 (GPIO10) signal high in the code, I get a watchdog reset.
I've tried to post on the Espressif forum to ask for help, but after a few days my message has still not been validated by moderator...
I really don't know what to do now.
Cheetor:
Hi There
I'm in the process of designing a shield for an Arduino Due. and unfortunately after all our PCBs have been
manufactured I was shocked to find the Due has no EEPROM (I only need 90 bytes). Thats fine I thought, we
have plenty of SPI flash chips in the factory I can use.... only to notice the "4" SPI units the Due is supposed to have. One is connected to a silly header with 5V (instead of 3.3). I have to get my SPI working over some
pins that are actually on the regular pins. and I found the second SPI is only on the BGA version of the micro.
So I asked what about the other 2? Does your library support using the USARTs in SPI mod? and if so how?
Hi Cheetor, The short answer is, I'm afraid not. Sorry. The latest version (3.4.0) does let you switch between existing SPI interfaces, so perhaps that might be helpful.
Hi Etienne, let me try to answer your questions in order:
Every version of the library >= v3.0.0 supports the ability to use any of multiple SPI interfaces (if your micro-controller supports them). Switching to use another SPI interface is done by calling SPIFlash flash(csPin, &SPI1); (or &SPI2 and so on), instead of SPIFlash flash(csPin)[/u]
HI! I'm using SPIMemory to work with board Heltec Wifi Kit 32(pinout WiFi_Kit_series/WIFI Kit 32.pdf at master · Heltec-Aaron-Lee/WiFi_Kit_series · GitHub) + Winbond w25q128jvsq (installed on board), and allways, in all samples i can't see this flash
Init class:
SPIFlash flash(5);
Output:
rst:0x1 (POWERON_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:928
ho 0 tail 12 room 4
load:0x40078000,len:8516
load:0x40080400,len:5816
entry 0x4008069c
Initialising..........
SPIMemory Library version: < 2.5.0
No comms. Check wiring. Is chip supported? If unable to fix, raise an issue on Github
What i'm doing wrong?
P.S. Sorry for my english
Hi,
I'm trying to use SPIMemory with FM25L16-G and get get understanding how to change defines to successfully work with examples. I need a little guide through there. I'm using ATMega 2560.
Thank in advance.