Descargue el último lanzamiento estable desde aquí. Informe cualquier error en los problemas.
Esta biblioteca Arduino es para usar con chips de memoria Flash y Fram que se comunican con el protocolo SPI. En su forma actual, admite la identificación del chip Flash/Fram y sus diversas características; asignación y gestión de direcciones automáticas; Escribir y leer varios tipos diferentes de datos, que van desde valores de 8 bits a 32 bits (firmados y sin firmar), flotadores, cadenas, conjuntos de bytes/caracteres y estructuras hacia y desde varias ubicaciones; sector, bloqueo y borrado de chips; y alimentando hacia abajo para una operación de baja potencia.
| Micro controladores | Tableros de desarrollo probados con | Notas |
|---|---|---|
| ATMEGA328P | Arduino Uno, Arduino Micro, Arduino Fio, Arduino Nano | - |
| ATMEGA32U4 | Arduino Leonardo, Arduino Fio V3 | - |
| ATMEGA2560 | Mega Arduino | - |
| ATSAMD21G18 (ARM Cortex M0+) | Adafruit Feather M0, Adafruit Feather M0 Express, Adafruit Itsybitsy M0 Express | - |
| AT91SAM3X8E (ARM Cortex M3) | Arduino debido | - |
| NRF52832 (ARM Cortex M4F) | Pluma de Adafruit NRF52 | - |
| ATSAMD51J19 (ARM Cortex M4) | Adafruit Metro M4 | - |
| STM32F091RCT6 | Nucleo-f091rc | |
| STM32L0 | Nucleo-L031K6 | |
| ESP8266 | Adafruit ESP8266 Feather, Sparkfun ESP8266 Cosa | - |
| ESP32 | Feather Adafruit ESP32, Sparkfun ESP32 | Memoria flash a bordo. Consulte la nota al pie de página a continuación. |
| Simblee | Sparkfun Simblee | - |
Los tableros £ ESP32 generalmente tienen un flash SPI ya conectado a su PIN SS predeterminado, por lo que el usuario debe declarar explícitamente el PIN ChipSelect que se usa con el constructor
| Fabricante | Flash IC | Notas |
|---|---|---|
| Winbond | W25q16bv W25Q64FV W25q64jv W25Q80BV W25Q256FV | Debería funcionar con W25QXXXBV, W25QXXXFV & Familias W25QXXXJV |
| Pastilla | SST25VF064C SST26VF016B SST26VF032B SST26VF064B | Debe trabajar con las familias SST25 y SST26 |
| Ciprés/abundancia | S25FL032P S25FL116K S25FL127S | Debería trabajar con la familia S25FL |
| En semiconductor | LE25U40CMC | |
| Amico | A25L512A0 | |
| Micrón | M25P40 | |
| Adesto | AT25SF041 | |
| Macronix | MX25L4005 MX25L4005 | |
| Dispositivos giga | GD25Q16C | (Usado en el Adafruit Itsybitsy M0 Express) |
| Fabricante | Flash IC | Notas |
|---|---|---|
| Ciprés/abundancia | FM25W256 | Debería trabajar con la familia FM25W |
La biblioteca se llama declarando el constructor SPIFlash flash(csPin*) donde 'Flash' puede ser reemplazado por un constructor de usuarios de elección y 'CSpin' es el pin de selección de chip para el módulo flash.
* Opcional. No incluya CSPIN si se usa el PIN de selección de esclavos predeterminado para su placa.
Cada versión de la biblioteca> = v3.0.0 admite la capacidad de usar cualquiera de las múltiples interfaces SPI (si su microcontrolador las admite). El cambio para usar otra interfaz SPI se realiza llamando a SPIFlash flash(csPin, &SPI1); (O & SPI2 y así sucesivamente), en lugar de SPIFlash flash(csPin) .
* Nota: este actualmente solo es compatible con las arquitecturas SAMD y STM32.
Se puede usar una versión alternativa SPIFlash flash (SPIPinsArray) del constructor (solo con la placa ESP32 a partir de ahora) para habilitar el uso de pines SPI personalizados. SPIPinsArray tiene que ser una matriz de 4 elementos que contenga los números de pin SPI personalizados (como Integers firmados - INT8_T) en el siguiente orden - SCK, MISO, MOSI, SS.
También asegúrese de incluir flash.begin(CHIPSIZE*) en void setup() . Esto permite que la biblioteca detecte el tipo de chip de flash instalado y cargue los parámetros correctos.
* Opcional
A partir de V3.2.1, el descubrimiento de parámetros SFDP es una opción controlada por el usuario. Para que la biblioteca funcione con chips de memoria flash compatible con SFDP que no son compatibles oficialmente por la biblioteca, el usuario debe desenchufar '//#define usos_sfdp' en 'spimemory.h'.
La biblioteca tiene el desbordamiento de la dirección habilitado de forma predeterminada, es decir, si la última dirección leída/escrita de/to, en cualquier función, es 0xfffff entonces, la siguiente dirección leída/escrita desde/a es 0x00000. Esto se puede deshabilitar incommentando #define DISABLEOVERFLOW en Spimemory.h. (El desbordamiento de la dirección solo funciona para las funciones de lectura / escritura. Borrar las funciones borrar solo un número establecido de bloques / sectores independientemente del desbordamiento).
Todas las funciones de escritura tienen la verificación de errores activados de forma predeterminada, es decir, todos los bytes escritos en la memoria flash se verificarán con los datos almacenados en el Arduino. Los usuarios que requieren mayores velocidades de escritura pueden deshabilitar esta función estableciendo un último argumento opcional 'ErrorCheck' en cualquier función de escritura a NOERRCHK - para EG. Llame a la función writeByte(address, *data_buffer, NOERRCHK) en lugar de writeByte(address, *data_buffer) .
La biblioteca se llama declarando el constructor SPIFram fram(csPin*) donde 'fram' puede ser reemplazado por un constructor de usuarios de elección y 'cspin' es el pin de selección de chip para el módulo de fram.
* Opcional. No incluya CSPIN si se usa el PIN de selección de esclavos predeterminado para su placa.
Cada versión de la biblioteca> = v3.0.0 admite la capacidad de usar cualquiera de las múltiples interfaces SPI (si su microcontrolador las admite). El cambio para usar otra interfaz SPI se realiza llamando SPIFram fram(csPin, &SPI1); (o & Spi2 y así sucesivamente), en lugar de SPIFram fram(csPin) .
* Nota: Actualmente, esto solo es compatible oficialmente en las arquitecturas SAMD y STM32.
También asegúrese de incluir fram.begin(CHIPSIZE*) en void setup() . Esto permite que la biblioteca detecte el tipo de chip de estructura instalado y cargue los parámetros correctos.
^ Actualmente en Beta. Los métodos en SpiFram no son finales y están sujetos a cambios en las próximas revisiones.
La biblioteca habilita las siguientes funciones:
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)Todos los comandos de escritura solo toman una variable de dirección de 32 bits en lugar del número de página de 16 bits opcional y variables de desplazamiento de 8 bits en versiones anteriores de la biblioteca (<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()Nota: Si no puede corregir el error/s, plantee un problema aquí con los detalles de su chip de flash y lo que estaba haciendo cuando ocurrió este error. Siga la plantilla de problema que aparece en el enlace
| Código de error | Explicación |
|---|---|
| 0x00 | Función ejecutada correctamente |
| 0x01 | *constructor_of_choice*.begin() no se llamó en void setup() |
| 0x02 | No se puede identificar el chip. ¿Este chip es oficialmente compatible? |
| 0x03 | Incapaz de identificar la capacidad. ¿Este chip es oficialmente compatible? Si no, defina una constante CAPACITY e incluya en flash.begin(CAPACITY) . |
| 0x04 | Chip está ocupado. Asegúrese de que todos los pines se hayan conectado correctamente. |
| 0x05 | El desbordamiento de la página ha sido deshabilitado y la dirección llamada excede la memoria |
| 0x06 | No se puede permitir escribir en Chip. Asegúrese de que los pines Hold & WriteProtect se lleven a VCC. |
| 0x07 | Este sector ya contiene datos. Asegúrese de que se borren los sectores. |
| 0x08 | Te estás quedando sin RAM. Optimice su código para un mejor uso de RAM |
| 0x09 | No se puede suspender/reanudar la operación. Por favor plantee un problema. |
| 0x0a | La función de escritura ha fallado ErrorCheck. Por favor plantee un problema. |
| 0x0b | Revise su cableado. El chip flash no responde. |
| 0x0c | Esta función no es compatible con el hardware de memoria. |
| 0x0d | No se puede habilitar el direccionamiento de 4 bytes. Por favor plantee un problema. |
| 0x0e | No se puede deshabilitar el direccionamiento de 4 bytes. Por favor plantee un problema. |
| 0x0f | El chip actualmente está apagado. |
| 0x10 | El chip Flash no es compatible con SFDP. |
| 0x11 | No se puede leer los parámetros de borrado del chip. Volver a los valores predeterminados de la biblioteca. |
| 0x12 | No se puede leer los tiempos de borrado de la memoria flash. Volver a los valores predeterminados de la biblioteca. |
| 0x13 | No se puede leer los tiempos de programa de Flash Memory. Volver a los valores predeterminados de la biblioteca. |
| 0x14 | No hay Pin de selección de chip definido en la matriz SPI personalizada. Consulte la sección sobre Constructor para obtener información sobre cómo usar pines SPI personalizados. |
| 0xfe | Error desconocido. Por favor plantee un problema. |