ดาวน์โหลดรีลีสที่เสถียรล่าสุดจากที่นี่ โปรดรายงานข้อบกพร่องใด ๆ ในปัญหา
ไลบรารี Arduino นี้มีไว้สำหรับใช้กับชิปหน่วยความจำ Flash และ Fram ที่สื่อสารโดยใช้โปรโตคอล SPI ในรูปแบบปัจจุบันรองรับการระบุชิป Flash/Fram และคุณสมบัติต่าง ๆ การจัดสรรและการจัดการที่อยู่อัตโนมัติ การเขียนและการอ่านข้อมูลหลายประเภทตั้งแต่ 8 บิตถึง 32 บิต (ลงนามและไม่ได้ลงนาม) ค่าลอย, สตริง, อาร์เรย์ของไบต์/ตัวอักษรและโครงสร้างไปยังและจากสถานที่ต่าง ๆ ; เซกเตอร์บล็อกและชิปลบ; และเพิ่มพลังให้กับการทำงานของพลังงานต่ำ
| คอนโทรลเลอร์ขนาดเล็ก | บอร์ดที่ทดสอบด้วย | หมายเหตุ |
|---|---|---|
| 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 Feather | - |
| ATSAMD51J19 (ARM Cortex M4) | Adafruit Metro M4 | - |
| STM32F091RCT6 | นิวเคลียส -F091RC | |
| STM32L0 | นิวเคลียส L031K6 | |
| esp8266 | Adafruit ESP8266 Feather SparkFun esp8266 สิ่งต่างๆ | - |
| esp32 | Adafruit ESP32 Feather SparkFun esp32 | หน่วยความจำแฟลชออนบอร์ด อ้างถึงเชิงอรรถ £ ด้านล่าง |
| การดูหมิ่น | Sparkfun Simblee | - |
£ ESP32 บอร์ดมักจะมีแฟลช SPI ที่แนบมากับ PIN SS เริ่มต้นแล้วดังนั้นผู้ใช้จะต้องประกาศพิน ChipSelect อย่างชัดเจนที่ใช้กับตัวสร้าง
| ผู้ผลิต | แฟลช IC | หมายเหตุ |
|---|---|---|
| วินบอน | W25Q16BV W25Q64FV W25Q64JV W25Q80BV W25Q256FV | ควรทำงานร่วมกับ W25QXXXBV, W25QXXXFV & ครอบครัว W25QXXXJV |
| ไมโครชิป | SST25VF064C SST26VF016B SST26VF032B SST26VF064B | ควรทำงานกับครอบครัว SST25 & SST26 |
| ไซเปรส/สแควร์ | S25FL032P s25fl116k S25FL127S | ควรทำงานกับตระกูล S25FL |
| บนเซมิคอนดักเตอร์ | le25u40cmc | |
| อื้ออึง | A25L512A0 | |
| ไมครอน | M25P40 | |
| อาดิสโต | AT25SF041 | |
| macronix | MX25L4005 MX25L4005 | |
| อุปกรณ์ Giga | GD25Q16C | (ใช้กับ Adafruit Itsybitsy M0 Express) |
| ผู้ผลิต | แฟลช IC | หมายเหตุ |
|---|---|---|
| ไซเปรส/สแควร์ | FM25W256 | ควรทำงานกับครอบครัว FM25W |
ไลบรารีถูกเรียกโดยการประกาศตัวสร้าง SPIFlash flash(csPin*) ซึ่งสามารถแทนที่ 'แฟลช' ได้โดยตัวสร้างผู้ใช้ที่เลือกและ 'CSPIN' คือ Chip Select Pin สำหรับโมดูลแฟลช
* ไม่จำเป็น. อย่ารวม CSPIN หากใช้ PIN SELECT SLAVE เริ่มต้นสำหรับบอร์ดของคุณ
ไลบรารีทุกรุ่น> = v3.0.0 รองรับความสามารถในการใช้อินเทอร์เฟซ SPI หลายตัว (หากไมโครคอนโทรลเลอร์ของคุณรองรับ) การสลับเพื่อใช้อินเทอร์เฟซ SPI อื่นทำได้โดยเรียก SPIFlash flash(csPin, &SPI1); (หรือ & spi2 และอื่น ๆ ) แทนที่จะเป็น SPIFlash flash(csPin)
* หมายเหตุ: ปัจจุบันได้รับการสนับสนุนในสถาปัตยกรรม SAMD และ STM32 เท่านั้น
สามารถใช้งาน SPIFlash flash (SPIPinsArray) ของตัวสร้างได้ (เฉพาะกับบอร์ด ESP32 ณ ตอนนี้) เพื่อเปิดใช้งานการใช้พิน SPI แบบกำหนดเอง SPIPinsArray จะต้องเป็นอาร์เรย์ 4 องค์ประกอบที่มีหมายเลข PIN SPI ที่กำหนดเอง (เป็นจำนวนเต็มที่ลงนาม - INT8_T) ในลำดับต่อไปนี้ - SCK, MISO, MOSI, SS
ตรวจสอบให้แน่ใจว่าได้รวม flash.begin(CHIPSIZE*) ใน void setup() สิ่งนี้ช่วยให้ไลบรารีสามารถตรวจจับประเภทของชิปแฟลชที่ติดตั้งและโหลดพารามิเตอร์ที่เหมาะสม
* ไม่จำเป็น
ตั้งแต่ V3.2.1 การค้นพบพารามิเตอร์ SFDP เป็นตัวเลือกที่ผู้ใช้ควบคุม เพื่อให้ไลบรารีทำงานกับชิปหน่วยความจำแฟลชที่เข้ากันได้กับ SFDP ซึ่งไม่ได้รับการสนับสนุนอย่างเป็นทางการโดยไลบรารีผู้ใช้จะต้องไม่รู้สึกตัว '//#define use_sfdp' ใน 'spimemory.h'
ไลบรารีมีที่อยู่ Overflow ที่เปิดใช้งานโดยค่าเริ่มต้น - IE หากที่อยู่ที่อ่าน/เขียนจาก/ถึงในฟังก์ชั่นใด ๆ คือ 0xFFFFF จากนั้นที่อยู่ถัดไปอ่าน/เขียนจาก/ถึงคือ 0x00000 สิ่งนี้สามารถปิดการใช้งานได้โดยการไม่ลงรอยกัน #define DISABLEOVERFLOW ใน spimemory.h (ที่อยู่ล้นใช้งานได้เฉพาะสำหรับฟังก์ชั่นการอ่าน / เขียนฟังก์ชั่นลบลบเพียงจำนวนบล็อก / ภาคส่วนที่ตั้งไว้โดยไม่คำนึงถึงการล้น)
ฟังก์ชั่นการเขียนทั้งหมดมีการตรวจสอบข้อผิดพลาดที่เปิดใช้งานโดยค่าเริ่มต้น - เช่นทุกไบต์ที่เขียนลงในหน่วยความจำแฟลชจะถูกตรวจสอบกับข้อมูลที่เก็บไว้ใน Arduino ผู้ใช้ที่ต้องการความเร็วในการเขียนที่มากขึ้นสามารถปิดการใช้งานฟังก์ชั่นนี้ได้โดยการตั้งค่าอาร์กิวเมนต์ 'errorCheck' สุดท้ายในฟังก์ชั่นการเขียนใด ๆ เป็น noerrchk - สำหรับเช่น เรียกฟังก์ชั่น writeByte(address, *data_buffer, NOERRCHK) แทน writeByte(address, *data_buffer)
ไลบรารีถูกเรียกโดยการประกาศตัวสร้าง SPIFram fram(csPin*) ที่สามารถแทนที่ 'fram' โดยตัวสร้างผู้ใช้ที่เลือกและ 'CSPIN' คือ Chip Select Pin สำหรับโมดูล FRAM
* ไม่จำเป็น. อย่ารวม CSPIN หากใช้ PIN SELECT SLAVE เริ่มต้นสำหรับบอร์ดของคุณ
ไลบรารีทุกรุ่น> = v3.0.0 รองรับความสามารถในการใช้อินเทอร์เฟซ SPI หลายตัว (หากไมโครคอนโทรลเลอร์ของคุณรองรับ) การสลับเพื่อใช้อินเทอร์เฟซ SPI อื่นทำได้โดยเรียก SPIFram fram(csPin, &SPI1); (หรือ & spi2 และอื่น ๆ ) แทนที่จะเป็น SPIFram fram(csPin)
* หมายเหตุ: ปัจจุบันได้รับการสนับสนุนอย่างเป็นทางการในสถาปัตยกรรม SAMD และ STM32 เท่านั้น
ตรวจสอบให้แน่ใจว่าได้รวม fram.begin(CHIPSIZE*) ใน void setup() สิ่งนี้ช่วยให้ไลบรารีสามารถตรวจจับประเภทของชิป Fram ที่ติดตั้งและโหลดพารามิเตอร์ที่เหมาะสม
^ ปัจจุบันอยู่ในเบต้า วิธีการใน 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)
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 ถูกดึงขึ้นไปที่ VCC |
| 0x07 | ภาคนี้มีข้อมูลอยู่แล้ว โปรดตรวจสอบให้แน่ใจว่าภาคส่วนที่ถูกเขียนเพื่อลบ |
| 0x08 | คุณกำลังวิ่งต่ำบน RAM โปรดเพิ่มประสิทธิภาพรหัสของคุณเพื่อการใช้ RAM ที่ดีขึ้น |
| 0x09 | ไม่สามารถระงับ/ดำเนินการต่อได้ โปรดเพิ่มปัญหา |
| 0x0a | ฟังก์ชั่นการเขียนล้มเหลว errorCheck โปรดเพิ่มปัญหา |
| 0x0b | ตรวจสอบสายไฟของคุณ แฟลชชิปไม่ตอบสนอง |
| 0x0c | ฟังก์ชั่นนี้ไม่ได้รับการสนับสนุนโดยฮาร์ดแวร์หน่วยความจำ |
| 0x0d | ไม่สามารถเปิดใช้งานที่อยู่ 4 ไบต์ โปรดเพิ่มปัญหา |
| 0x0e | ไม่สามารถปิดการใช้งาน 4 ไบต์ โปรดเพิ่มปัญหา |
| 0x0f | ชิปกำลังขับเคลื่อนลง |
| 0x10 | ชิปแฟลชไม่รองรับ SFDP |
| 0x11 | ไม่สามารถอ่านลบพารามิเตอร์จากชิป การคืนค่าเป็นค่าเริ่มต้นห้องสมุด |
| 0x12 | ไม่สามารถอ่านเวลาลบออกจากหน่วยความจำแฟลช การคืนค่าเป็นค่าเริ่มต้นห้องสมุด |
| 0x13 | ไม่สามารถอ่านเวลาโปรแกรมจากหน่วยความจำแฟลช การคืนค่าเป็นค่าเริ่มต้นห้องสมุด |
| 0x14 | ไม่มีชิปเลือกพินที่กำหนดไว้ในอาร์เรย์ SPI ที่กำหนดเอง อ้างถึงส่วนเกี่ยวกับตัวสร้างสำหรับข้อมูลเกี่ยวกับวิธีการใช้พิน SPI ที่กำหนดเอง |
| 0xfe | ข้อผิดพลาดที่ไม่รู้จัก โปรดเพิ่มปัญหา |