现今的微控制器都带有大容量的内部闪存。但有许多高性能MCU,如NXP i.MX RT系列控制器,都是不带闪存的,因为高性能内核的硅工艺与FLASH存储器技术不匹配,因此它们使用外部串行SPI或Quad-SPI(QSPI) )闪存来代替。
华邦w25q128串行闪存分线板
为什么不将外部SPI FLASH用于“普通”微控制器呢?
外部SPI闪存的典型用法是使用它来加载或存储数据。通过在SPI总线上添加一个小型外部器件,我可以轻松地为微控制器添加几兆字节的存储器。这样的SPI存储器设备非常便宜:我从AliExpress订购了一些带有Winbond W25Q128(16 MByte)的分线模块,每个1.50美元。该电路板使用以下引脚: ● VCC:3.3V ● GND ● DO:SPI MISO ● DI:SPI MOSI ● CS:SPI芯片选择 分线板模块上的红色LED灯指示电路板是否已通电。
通常我使用micro-SD卡来记录数据。它们很容易获得,提供几乎“无限”的存储空间,使用FatFS文件系统,我可以轻松地与主机交换数据。但是它需要PCB上的空间,SD卡插座需要可以接触,插座是机械部件,并且成本高,加上在振动和腐蚀的环境中不太可靠。使用FLASH芯片可能是更好的解决方案。
我用命令行界面创建了一个驱动程序:这样我可以读/写SPI FLASH存储设备的数据。 GitHub上提供了一个Eclipse示例项目。
该示例在NXP(Kinetis K20DX128)的ARM Cortex-M4上运行,可以轻松移植到任何其他微控制器。
k20dx128使用w25q128
该项目包括一个命令行shell:
串行闪存的命令行shell
使用shell我可以读/写串行闪存:
串行闪存读写
'status'命令提供发现设备的有关信息:
设备状态
总结 我现在有一个可以正常使用的Winbond W25Q128 16 MByte串行/ SPI闪存芯片的驱动程序。驱动程序仍处于早期阶段,我可能会更新它以支持其他Flash设备。使用命令行界面,我可以读/写内存。在下一步中,我计划将内存与文件系统一起使用,在以后的文章中将详细介绍。该项目可在GitHub上获得。 |