Giter VIP home page Giter VIP logo

spiflash's People

Contributors

ivankravets avatar jasonc0x0d avatar lowpowerlab avatar paulstoffregen avatar per1234 avatar tomws1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spiflash's Issues

SPI.transfer(0) returns 255 with IC not present

I am using the SPIFlash library on my device and it works great when the flash chip is present. I have found, however, that if the chip is not present, the library hangs when calling flash.initialize() from my Arduino sketch.

I have found that when a chip is not present on my hardware SPI.transfer(0) returns 255, which makes readStatus() always return 255, which makes busy() always return 1, which makes while(busy()); in command() loop forever, which makes my firmware hang.

The problem is that a flash chip not present looks like a busy flash chip. I think it would be great if a no present flash chip were not busy.

For my journey down this rabbit hole, see PaxInstruments/t400-firmware#125

Other flash

Whether to support other size flash other than 4Mb flash

LED pin hardcoded

Not a big issue, but in the SPIFlash_ReadWrite example, the LED pin is defined at the top, but is hardcoded to 9 in the actual use.

Can hang in busy() if Flash chip is powered down and there is noise on MISO

  1. Comment in code about using a pull down resistor can work, but other SPI devices like SD cards may need a pull up resistor.
  2. Better solution seems to be to be to track if the chip is powered down or not and if it is powered down, not to read any data on the MISO line since it will just be noise.
  3. Looked into other another SPI library and found they had this feature built in using a variable they called chipPoweredDown

Note: Bug found when using:
Hardware
Moteino Trace Antenna RFM69HCW 915MHz with Flash Memory Chip
LowPowerLab BME280 Board
1 400mAh LiPo battery (from Adafruit)
1 MOhm resistor from VIN to A7 - Battery Monitor
1 MOhm resistor from A7 to Ground
1 Solderless breadboard

Software
Default LowPowerLab WeatherMote Example sketch that was configured to the network.

class SPIFlash miss members

Arduino: 1.6.11 (Mac OS X), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

/Applications/Arduino.app/Contents/Java/arduino-builder -dump-prefs -logger=machine -hardware /Applications/Arduino.app/Contents/Java/hardware -hardware /Users/WenhuiZhang/Library/Arduino15/packages -tools /Applications/Arduino.app/Contents/Java/tools-builder -tools /Applications/Arduino.app/Contents/Java/hardware/tools/avr -tools /Users/WenhuiZhang/Library/Arduino15/packages -built-in-libraries /Applications/Arduino.app/Contents/Java/libraries -libraries /Users/WenhuiZhang/Documents/Arduino/libraries -fqbn=arduino:avr:mega:cpu=atmega2560 -vid-pid=0X2341_0X0042 -ide-version=10611 -build-path /var/folders/qd/xz6y3zgn0sb8g920b3p_6tph0000gn/T/build437cbc79e0e0f2bf32157c84dc737f09.tmp -warnings=none -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=/Users/WenhuiZhang/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino6 -prefs=runtime.tools.avr-gcc.path=/Users/WenhuiZhang/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2 -verbose /Users/WenhuiZhang/Downloads/SPIFlash/examples/SPIFlash_ReadWrite/SPIFlash_ReadWrite.ino
/Applications/Arduino.app/Contents/Java/arduino-builder -compile -logger=machine -hardware /Applications/Arduino.app/Contents/Java/hardware -hardware /Users/WenhuiZhang/Library/Arduino15/packages -tools /Applications/Arduino.app/Contents/Java/tools-builder -tools /Applications/Arduino.app/Contents/Java/hardware/tools/avr -tools /Users/WenhuiZhang/Library/Arduino15/packages -built-in-libraries /Applications/Arduino.app/Contents/Java/libraries -libraries /Users/WenhuiZhang/Documents/Arduino/libraries -fqbn=arduino:avr:mega:cpu=atmega2560 -vid-pid=0X2341_0X0042 -ide-version=10611 -build-path /var/folders/qd/xz6y3zgn0sb8g920b3p_6tph0000gn/T/build437cbc79e0e0f2bf32157c84dc737f09.tmp -warnings=none -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=/Users/WenhuiZhang/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino6 -prefs=runtime.tools.avr-gcc.path=/Users/WenhuiZhang/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2 -verbose /Users/WenhuiZhang/Downloads/SPIFlash/examples/SPIFlash_ReadWrite/SPIFlash_ReadWrite.ino
Using board 'mega' from platform in folder: /Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14
Using core 'arduino' from platform in folder: /Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14
Build options changed, rebuilding all
Detecting libraries used...
"/Users/WenhuiZhang/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10611 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/cores/arduino" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/variants/mega" "/var/folders/qd/xz6y3zgn0sb8g920b3p_6tph0000gn/T/build437cbc79e0e0f2bf32157c84dc737f09.tmp/sketch/SPIFlash_ReadWrite.ino.cpp" -o "/dev/null"
"/Users/WenhuiZhang/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10611 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/cores/arduino" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/variants/mega" "-I/Users/WenhuiZhang/Documents/Arduino/libraries/SPIFlash" "/var/folders/qd/xz6y3zgn0sb8g920b3p_6tph0000gn/T/build437cbc79e0e0f2bf32157c84dc737f09.tmp/sketch/SPIFlash_ReadWrite.ino.cpp" -o "/dev/null"
"/Users/WenhuiZhang/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10611 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/cores/arduino" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/variants/mega" "-I/Users/WenhuiZhang/Documents/Arduino/libraries/SPIFlash" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/libraries/SPI/src" "/var/folders/qd/xz6y3zgn0sb8g920b3p_6tph0000gn/T/build437cbc79e0e0f2bf32157c84dc737f09.tmp/sketch/SPIFlash_ReadWrite.ino.cpp" -o "/dev/null"
"/Users/WenhuiZhang/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10611 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/cores/arduino" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/variants/mega" "-I/Users/WenhuiZhang/Documents/Arduino/libraries/SPIFlash" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/libraries/SPI/src" "/Users/WenhuiZhang/Documents/Arduino/libraries/SPIFlash/DMASPI.cpp" -o "/dev/null"
"/Users/WenhuiZhang/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10611 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/cores/arduino" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/variants/mega" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/libraries/SPI/src" "-I/Users/WenhuiZhang/Documents/Arduino/libraries/SPIFlash" "/Users/WenhuiZhang/Documents/Arduino/libraries/SPIFlash/SPIFlash.cpp" -o "/dev/null"
"/Users/WenhuiZhang/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10611 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/cores/arduino" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/variants/mega" "-I/Users/WenhuiZhang/Documents/Arduino/libraries/SPIFlash" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/libraries/SPI/src" "/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/libraries/SPI/src/SPI.cpp" -o "/dev/null"
"/Users/WenhuiZhang/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10611 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/cores/arduino" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/variants/mega" "-I/Users/WenhuiZhang/Documents/Arduino/libraries/SPIFlash" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/libraries/SPI/src" "/var/folders/qd/xz6y3zgn0sb8g920b3p_6tph0000gn/T/build437cbc79e0e0f2bf32157c84dc737f09.tmp/sketch/SPIFlash_ReadWrite.ino.cpp" -o "/dev/null"
Generating function prototypes...
"/Users/WenhuiZhang/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10611 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/cores/arduino" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/variants/mega" "-I/Users/WenhuiZhang/Documents/Arduino/libraries/SPIFlash" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/libraries/SPI/src" "/var/folders/qd/xz6y3zgn0sb8g920b3p_6tph0000gn/T/build437cbc79e0e0f2bf32157c84dc737f09.tmp/sketch/SPIFlash_ReadWrite.ino.cpp" -o "/var/folders/qd/xz6y3zgn0sb8g920b3p_6tph0000gn/T/build437cbc79e0e0f2bf32157c84dc737f09.tmp/preproc/ctags_target_for_gcc_minus_e.cpp"
"/Applications/Arduino.app/Contents/Java/tools-builder/ctags/5.8-arduino10/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "/var/folders/qd/xz6y3zgn0sb8g920b3p_6tph0000gn/T/build437cbc79e0e0f2bf32157c84dc737f09.tmp/preproc/ctags_target_for_gcc_minus_e.cpp"
Compiling sketch...
"/Users/WenhuiZhang/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -flto -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10611 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/cores/arduino" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/variants/mega" "-I/Users/WenhuiZhang/Documents/Arduino/libraries/SPIFlash" "-I/Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/libraries/SPI/src" "/var/folders/qd/xz6y3zgn0sb8g920b3p_6tph0000gn/T/build437cbc79e0e0f2bf32157c84dc737f09.tmp/sketch/SPIFlash_ReadWrite.ino.cpp" -o "/var/folders/qd/xz6y3zgn0sb8g920b3p_6tph0000gn/T/build437cbc79e0e0f2bf32157c84dc737f09.tmp/sketch/SPIFlash_ReadWrite.ino.cpp.o"
/Users/WenhuiZhang/Downloads/SPIFlash/examples/SPIFlash_ReadWrite/SPIFlash_ReadWrite.ino: In function 'void setup()':
SPIFlash_ReadWrite:69: error: 'class SPIFlash' has no member named 'initialize'
if (flash.initialize())
^
/Users/WenhuiZhang/Downloads/SPIFlash/examples/SPIFlash_ReadWrite/SPIFlash_ReadWrite.ino: In function 'void loop()':
SPIFlash_ReadWrite:100: error: 'class SPIFlash' has no member named 'chipErase'
flash.chipErase();
^
SPIFlash_ReadWrite:101: error: 'class SPIFlash' has no member named 'busy'
while(flash.busy());
^
SPIFlash_ReadWrite:107: error: 'class SPIFlash' has no member named 'readDeviceId'
Serial.println(flash.readDeviceId(), HEX);
^
Multiple libraries were found for "SPIFlash.h"
Used: /Users/WenhuiZhang/Documents/Arduino/libraries/SPIFlash
Not used: /Users/WenhuiZhang/Documents/Arduino/libraries/SPIFlash-master
Using library SPIFlash at version 2.5.0 in folder: /Users/WenhuiZhang/Documents/Arduino/libraries/SPIFlash
Using library SPI at version 1.0 in folder: /Users/WenhuiZhang/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/libraries/SPI
exit status 1
'class SPIFlash' has no member named 'initialize'

SPIFlash in a CH552 microcontroller

Hello. I'm writing this issue with hope that you could give me some help or guidance.
I've ported your library to work with CH552 microcontrollers, it was simple because your library is easy to use and well written. Source is here https://github.com/DeqingSun/ch55xduino/tree/ch55xduino/ch55xduino/ch55x/libraries/SPIFlash
During my tests, I'm facing a strange behavior when I'm reading data. I'm using a W25Q32 (4MB)
Let me explain step-by-step what happens, maybe you've already been through this. Any help is appreciated:

  • I have the W25Q32 all erased
  • I wrote the same byte (e.g. 0xAA) in all of the 16 pages of the first sector (total of 4096 bytes)
  • When I read the sector, I have inconsistent data. Some bytes are correct but others not (example below)
  • If I read using an Arduino and your library, it works, the whole sector (4096) are fulfilled with the byte I have written (0xAA).
  • I tried a lot of things, my ideas are running out now :\

Notice there is a pattern in the readings, only the page 1,2,4,8 and 16 contains the byte I wrote.

//I'm reading the flash like this:
for (int j=0; j<16; j++) {    
  readBytes((j*256), _sbuffer, 255);
    
  for (uint8_t i=0; i<255; i++) {
    USBSerial_print(_sbuffer[i], HEX);
    USBSerial_print(".");    
  }  
}



OUTPUT:

Reading addr: 0 until 255
1) AA.AA.AA.AA.AA.AA.AA.AA.AA.AA. . (abbreviated for brevity reason) . .AA.AA.AA.AA.

Reading addr: 256 until 511
2) AA.AA.AA.AA.AA.AA.AA.AA.AA.AA. . . .AA.AA.AA.AA.

Reading addr: 512 until 767
3) FF.FF.FF.FF.FF.FF.FF.FF.FF.FF. . . .FF.FF.FF.FF.

Reading addr: 768 until 1023
4) AA.AA.AA.AA.AA.AA.AA.AA.AA.AA. . . .AA.AA.AA.AA.

Reading addr: 1024 until 1279
5) FF.FF.FF.FF.FF.FF.FF.FF.FF.FF. . . .FF.FF.FF.FF.

Reading addr: 1280 until 1535
6) FF.FF.FF.FF.FF.FF.FF.FF.FF.FF. . . .FF.FF.FF.FF.

Reading addr: 1536 until 1791
7) FF.FF.FF.FF.FF.FF.FF.FF.FF.FF. . . .FF.FF.FF.FF.

Reading addr: 1792 until 2047
8) AA.AA.AA.AA.AA.AA.AA.AA.AA.AA. . . .AA.AA.AA.AA.

Reading addr: 2048 until 2303
9) FF.FF.FF.FF.FF.FF.FF.FF.FF.FF. . . .FF.FF.FF.FF.

Reading addr: 2304 until 2559
10) FF.FF.FF.FF.FF.FF.FF.FF.FF.FF. . . .FF.FF.FF.FF.

Reading addr: 2560 until 2815
11) FF.FF.FF.FF.FF.FF.FF.FF.FF.FF. . . .FF.FF.FF.FF.

Reading addr: 2816 until 3071
12) FF.FF.FF.FF.FF.FF.FF.FF.FF.FF. . . .FF.FF.FF.FF.

Reading addr: 3072 until 3327
13) FF.FF.FF.FF.FF.FF.FF.FF.FF.FF. . . .FF.FF.FF.FF.

Reading addr: 3328 until 3583
14) FF.FF.FF.FF.FF.FF.FF.FF.FF.FF. . . .FF.FF.FF.FF.

Reading addr: 3584 until 3839
15) FF.FF.FF.FF.FF.FF.FF.FF.FF.FF. . . .FF.FF.FF.FF.

Reading addr: 3840 until 4095
16) AA.AA.AA.AA.AA.AA.AA.AA.AA.AA. . . .AA.AA.AA.AA.

Library name

Any chance of changing the library name to prevent a conflict with the following:
https://github.com/Marzogh/SPIFlash

Always seems to give a "library update is available" message which is annoying. When you go in to manage the libraries, it comes up with a different SPIFlash by Prajwal Bhattaram - I have never used this library but it somehow seems integrated to the Arduino environment.

lib

How to use the library for SPI2 and SPI3 or SPI_2 and SPI_3

How to use this library for black pill STM32F401CCU6?
The files SPIFlash.cpp and SPIFlash.h, as I understand it, are an "add-on" over the main SPI library from Arduino?
I am using an arduino IDE and two cores to work with a microcontroller STM32F401CCU6.
Each kernel folder has its own files with examples for working with SPI.
Accordingly, I have three folders on the PC with the same file names in them:

  1. Arduino(C:\Users\Admin\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\libraries\SPI) SPI.cpp and SPI.h
  2. STM core for Arduino IDE(C:\Users\Admin\AppData\Local\Arduino15\packages\STMicroelectronics\hardware\stm32\2.5.0\libraries\SPI) SPI.cpp and SPI.h
  3. Rogerclark core for Arduino IDE(C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI) SPI.cpp and SPI.h
    And I don't understand which of these three files to "load" from file SPIFlash.h
    #include <SPI.h>
    Or rather, as far as I understand - depending on the selected kernel through the plan menu, such a file will be loaded during compilation.
    But these questions do not remove questions about how to work with external flash memory through the SPI2 and SPI3 interfaces, but rather add questions and confuse even more.

error to record page 256 (0x100)

when recording page 256 (0x100)repeat recording page 0 (0x01) and when recording page 257 (0x101) repeat recording page 1(0x01) ..... etc
does not read correctly page 256(0x100) or higher
the above using TestFlash example

SPIFlash.begin() location and JEDEC-ID

SPI.begin must be call even in the SPI library with " transaction" included in the Arduino IDE 1.8.5.
See that example : https://www.arduino.cc/en/Tutorial/SPITransaction.
A good place to include it could be in SPIFlash initialize around line 94 and delete around line 70
/// setup SPI, read device ID etc...
boolean SPIFlash::initialize()
{
_SPCR = SPCR;
_SPSR = SPSR;
pinMode(_slaveSelectPin, OUTPUT);
SPI.begin();
#ifdef SPI_HAS_TRANSACTION
_settings = SPISettings(4000000, MSBFIRST, SPI_MODE0);
#endif

also to get the complete jedecID (3 bytes):
in SPIFlash.h ๐Ÿ‘
line 106: uint32_t readDeviceId();

in SPIFlash.cpp:
uint32_t SPIFlash::readDeviceId()
{
#if defined(AVR_ATmega32U4) // Arduino Leonardo, MoteinoLeo
command(SPIFLASH_IDREAD); // Read JEDEC ID
#else
select();
SPI.transfer(SPIFLASH_IDREAD);
#endif

uint32_t jedecid = SPI.transfer(0) ;
jedecid = jedecid << 16 & 0x00ffffff ;
jedecid |= SPI.transfer(0) << 8 ;
jedecid |= SPI.transfer(0);
unselect();
return jedecid;
}

SPIFlash_ReadWrite doesn't work

The example code in SPIFlash_ReadWrite.ino does not seem to work unless you add SPI.begin() before flash.initialize(). I noticed this when the "node" example from the RFM69 library worked but this example did not.

Arduino 1.6

This library works perfectly fine on Arduino 1.0.6 but inside the new release 1.6.0 the sketch hangs very soon. Is easy to check using the SPIFlash_ReadWrite example. I think this issue is because of changes on SPI.h library but didn't found any solution.

Infinite loop when executing command on sleeping device (including wakeup())

According to datasheet, powered down chip will ignore every instruction except "Release from Power-Down" and "Device ID". This includes the Read Status Register.

In such scenario (at least on my platform) SPI.transfer(SPIFLASH_STATUSREAD) always returns 0xFF, so while(busy()) loop will never complete.
This loop is executed before sending instruction to the chip, so there is no way to access flash after sleeping it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.