Arduino SPI + SPI Flash芯片W25Q80BV#

W25Q80BV是台湾华邦电子(Winbond)生产的8M-bit串行flash芯片。主要特性有:

  • 工作电压:2.5 ~ 3.6 V

  • 功耗:读写(active)时4mA,低功耗(power-down)时<1μA

  • 容量:8M-bit/1M-byte,包含4096个页(每页大小256字节)

  • 接口:Standard/Dual/Quad SPI,支持时钟频率最高104MHz

  • 支持以4/32/64k-bytes为单位进行Sector/Block擦除

  • 一次写入最多256字节

  • 软件/硬件写保护功能

  • 大于10万次擦除/编程寿命

  • 大于20年的数据保存时间

  • 封装:SOIC/USON/WSON/PDIP

管脚定义#

img

img

与Arduino的连接#

采用工作于3.3V的Pro Mini版本进行简单调试,接法如下。

img

其中HOLD脚须上拉接到3.3V,否则器件无法正常工作;WP脚可以浮空。

W25Q80BV Pro Mini (3.3V/8MHz)

VCC <------> 3.3V

GND <------> GND

/CS <------> SS (D10)

DI <------> MOSI (D11)

DO <------> MISO (D12)

CLK <------> SCK (D13)

功能调试#

  1. 与I2C不同,利用SPI库操作时,读和写都用同一个函数SPI.transfer()实现。

  2. 读取时,可以任意地址、任意长度进行读取。

  3. 与EEPROM不同,SPI Flash写入前,需要对写入的存储空间进行擦除(Erase)操作,否则写入不成功。芯片支持Chip Erase(整片擦除)、Block Erase(32K bytes/64K bytes块擦除)和Sector Erase(4K bytes扇区擦除)。

  4. 当写操作对应的地址空间到达page的边界,再继续写入时目的地址会自动roll over到本页的起始位置。

测试代码#

读取芯片的ID信息,向W25Q80BV写入一段字符串,再将写入的信息反复读出:

img

参考资料#

W25Q80BV datasheet - Winbond Arduino - SPI Designing with Discrete SPI Flash Memory - Instructables Flash芯片硬件特性