從此處下載最新的穩定版本。請在問題中報告任何錯誤。
這個Arduino庫可與使用SPI協議通信的Flash和Fram內存芯片一起使用。在當前形式中,它支持識別閃光/幀芯片及其各種功能。自動地址分配和管理;編寫和讀取許多不同類型的數據,範圍從8位到32位(簽名和未簽名)值,浮點,字符串,字節/字符/chars和structs in and Structs to and Locations的數組;部門,塊和芯片擦除;並為低功率操作提供電源。
| 微控制器 | 開發板測試 | 筆記 |
|---|---|---|
| Atmega328p | Arduino Uno,Arduino Micro, Arduino Fio,Arduino Nano | - |
| Atmega32U4 | Arduino Leonardo,Arduino Fio V3 | - |
| ATMEGA2560 | Arduino Mega | - |
| ATSAMD21G18(ARM Cortex M0+) | Adafruit Feather M0, Adafruit Feather M0 Express, Adafruit Itsybitsy M0 Express | - |
| AT91SAM3X8E(ARM Cortex M3) | Arduino應得 | - |
| NRF52832(ARM Cortex M4F) | Adafruit NRF52羽毛 | - |
| ATSAMD51J19(ARM Cortex M4) | Adafruit Metro M4 | - |
| STM32F091RCT6 | Nucleo-F091RC | |
| STM32L0 | Nucleo-L031K6 | |
| ESP8266 | Adafruit ESP8266羽毛, Sparkfun ESP8266 | - |
| ESP32 | Adafruit ESP32羽毛, Sparkfun ESP32事情 | 板載閃存。請參閱下面的腳註£ 。 |
| Simblee | Sparkfun Simblee | - |
£ ESP32板通常已經在其默認的SS PIN上附有SPI閃光燈,因此用戶必須明確聲明與構造函數一起使用的ChipSelect PIN
| 製造商 | Flash IC | 筆記 |
|---|---|---|
| 溫邦德 | W25Q16BV W25Q64FV W25Q64JV W25Q80BV W25Q256FV | 應與W25QXXXBV,W25QXXXFV&一起使用 W25QXXXJV家庭 |
| 微芯片 | SST25VF064C SST26VF016B SST26VF032B SST26VF064B | 應該與SST25和SST26家庭合作 |
| 柏樹/跨度 | S25FL032P S25FL116K S25FL127S | 應該與S25FL家族一起工作 |
| 在半導體上 | LE25U40CMC | |
| 友善 | A25L512A0 | |
| 微米 | M25P40 | |
| Adesto | AT25SF041 | |
| 大元 | MX25L4005 MX25L4005 | |
| GIGA設備 | GD25Q16C | (在Adafruit Itsybitsy M0 Express上使用) |
| 製造商 | Flash IC | 筆記 |
|---|---|---|
| 柏樹/跨度 | FM25W256 | 應該與FM25W家庭一起工作 |
通過聲明SPIFlash flash(csPin*)構造函數來調用庫,其中“ flash”可以被選擇的用戶構造函數替換,而'cspin'是Flash模塊的芯片選擇引腳。
* 選修的。如果使用默認從屬選擇引腳為您的板子,請勿包含CSPIN。
庫的每個版本> = V3.0.0都支持使用多個SPI接口中的任何一個(如果您的微控制器支持它們)。通過調用SPIFlash flash(csPin, &SPI1); (OR&spi2等),而不是SPIFlash flash(csPin) 。
*注意:目前僅在SAMD和STM32架構上支持。
構造函數的替代版本SPIFlash flash (SPIPinsArray)可以使用(目前僅使用ESP32板)來啟用自定義SPI引腳。 SPIPinsArray必須是一個4個元素數組,其中包含以下順序的自定義SPI引腳編號(作為簽名的整數-INT8_T)-SCK,MISO,MOSI,SS。
另外,請確保將flash.begin(CHIPSIZE*)包括在void setup()中。這使庫可以檢測已安裝的閃存芯片的類型並加載正確的參數。
* 選修的
從v3.2.1開始,SFDP參數發現是用戶控制的選項。為了使庫與庫不正式支持的SFDP兼容閃存芯片,用戶必須刪除'//#define use_sfdp'in'spimemory.h'。
該庫的地址溢出默認情況下啟用了溢出 - IE如果在任何函數中/to中的最後一個地址為0xfffff,則下一個從/to/to is 0x00000讀取/書寫的地址。可以通過在spimemory.h中刪除#define DISABLEOVERFLOW來禁用這一點。 (地址溢出僅適用於讀 /寫功能。擦除功能僅消除一組塊 /扇區,無論溢出不管溢出如何。)
默認情況下,所有寫入功能都有錯誤檢查的打開 - 即,將每個字節寫入閃存的每個字節都將被檢查與存儲在Arduino上的數據。需要更高寫入速度的用戶可以通過將任何寫入功能中的可選的最後一個“錯誤檢查”參數設置為noerrchk - 例如。調用函數writeByte(address, *data_buffer, NOERRCHK)而不是writeByte(address, *data_buffer) 。
通過聲明SPIFram fram(csPin*)構造函數來調用庫,其中可以將“ Fram”替換為選擇的用戶構造函數,而“ CSPIN”是Fram模塊的芯片選擇PIN。
* 選修的。如果使用默認從屬選擇引腳為您的板子,請勿包含CSPIN。
庫的每個版本> = V3.0.0都支持使用多個SPI接口中的任何一個(如果您的微控制器支持它們)。通過調用SPIFram fram(csPin, &SPI1); (OR&spi2等),而不是SPIFram fram(csPin) 。
*注意:目前僅在SAMD和STM32架構上正式支持。
另外,請確保將fram.begin(CHIPSIZE*)包含在void setup()中。這使庫能夠檢測已安裝的Fram芯片的類型並加載正確的參數。
^目前在Beta中。 SPIFRAM中的方法不是最終的,並且可能會在接下來的幾個修訂中發生變化。
該庫啟用以下功能:
begin(_chipsize)setClock(clockSpeed)error(_verbosity)getManID()getJEDECID()getUniqueID()getAddress(sizeOfData)sizeofStr()getCapacity()getMaxPage()functionRunTime()readAnything(address, value)readByte(address)readChar(address)readWord(address)readShort(address)readULong(address)readLong(address)readFloat(address)readStr(address, outputStr)readAnything(address, value)所有寫入命令僅使用32位地址變量,而不是可選的16位頁碼和8位偏移變量(<v3.0.0)中的8位偏移變量(<v3.0.0)
writeByte(address, data)writeChar(address, data)writeWord(address, data)writeShort(address, data)writeULong(address, data)writeLong(address, data)writeFloat(address, data)writeStr(address, data)writeAnything(address, value)readByteArray(address, *data_buffer, bufferSize)writeByteArray(address, *data_buffer, bufferSize)readCharArray(address, *data_buffer, bufferSize)writeCharArray(address, *data_buffer, bufferSize)eraseSector(address)eraseBlock32K(address)eraseBlock64K(address)eraseChip()eraseSection(address, sizeOfData)suspendProg()resumeProg()powerDown()powerUp()注意:如果您無法修復錯誤/s,請在此處提出一個問題,其中包含閃光芯片的詳細信息以及發生此錯誤時正在做什麼。請遵循出現在鏈接上的問題模板
| 錯誤代碼 | 解釋 |
|---|---|
| 0x00 | 功能成功執行 |
| 0x01 | *constructor_of_choice*.begin()在void setup()中未調用 |
| 0x02 | 無法識別芯片。 這個芯片是否得到了正式支持? |
| 0x03 | 無法識別能力。 這個芯片是否得到了正式支持? 如果不是,請定義一個 CAPACITY常數,並將其包括在flash.begin(CAPACITY)中。 |
| 0x04 | 芯片很忙。確保所有引腳都已正確連接。 |
| 0x05 | 頁面溢出已被禁用,地址超過了內存 |
| 0x06 | 無法使寫作能夠芯片。 請確保將“ Hold&WriteProtect Pins”提升到VCC。 |
| 0x07 | 該部門已經包含數據。 請確保刪除所寫的扇區。 |
| 0x08 | 您在RAM上運行低。 請優化您的代碼以更好地使用RAM |
| 0x09 | 無法暫停/恢復操作。 請提出一個問題。 |
| 0x0a | 寫功能失敗了錯誤檢查。 請提出一個問題。 |
| 0x0b | 檢查您的佈線。 Flash芯片無反應。 |
| 0x0c | 內存硬件不支持此功能。 |
| 0x0d | 無法啟用4個字節的地址。 請提出一個問題。 |
| 0x0e | 無法禁用4個字節的地址。 請提出一個問題。 |
| 0x0f | 該芯片目前已關閉。 |
| 0x10 | Flash芯片不支持SFDP。 |
| 0x11 | 無法讀取芯片擦除參數。 恢復到庫默認值。 |
| 0x12 | 無法從閃存中讀取擦除時間。 恢復到庫默認值。 |
| 0x13 | 無法從閃存讀取程序時間。 恢復到庫默認值。 |
| 0x14 | 在自定義SPI陣列中未定義的芯片選擇引腳。 有關如何使用自定義SPI引腳的信息,請參閱有關構造函數的部分。 |
| 0xfe | 未知錯誤。 請提出一個問題。 |