从此处下载最新的稳定版本。请在问题中报告任何错误。
这个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 | 未知错误。 请提出一个问题。 |