littlebot
Published on 2025-04-09 / 0 Visits
0

【源码】基于ARM STM32F103C8T6的SPI NOR闪存读写器

项目简介

本项目是基于ARM STM32F103C8T6开发板(“蓝药丸”)的SPI NOR闪存读写器,主要用于转储和替换Ubiquiti Unifi接入点(UAP)中使用的Winbond 25Q64CVFIG芯片。NOR闪存存在比特翻转问题,会致使UAP出现内核崩溃、随机锁定或无法启动等状况,此读写器可有效修复这类问题。

项目的主要特性和功能

  1. 闪存转储:能通过SSH或SPI接口转储UAP中Winbond 25Q64CVFIG芯片的数据,可备份包含设备特定数据(如MAC地址和校准信息)的“EEPROM”分区。
  2. 闪存编程:可擦除芯片并将转储文件编程到芯片中,同时对编程后的芯片进行验证。
  3. TFTP编程:支持通过TFTP协议对NOR闪存的特定分区(如Linux内核和根文件系统)进行编程和验证。
  4. 诊断辅助:提供诊断方法,帮助用户识别NOR闪存比特翻转问题,如查看启动加载器错误和squashfs错误。

安装使用步骤

硬件准备

  1. 准备以下硬件:
    • 1块STM32F103C8T6“蓝药丸”开发板
    • 1个ST - Link v2调试器
    • 若干个替换用的25Q64CVFIG芯片
    • 3个4K7电阻
    • 1块面包板
    • 1个热风枪
    • 1根FTDI或类似的3.3V串口转USB线
  2. 若无法启动UAP的Linux系统,需按schematic目录中的电路图将芯片连接到“蓝药丸”开发板。

软件准备

安装以下开发工具: - Eclipse(Mars.2) - GNU ARM Eclipse插件 - GCC for ARM工具链(gcc - arm - none - eabi - 4_9 - 2015q3) - OpenOCD(0.90)

闪存转储

通过SSH转储

若UAP能正常启动,可使用以下命令通过SSH转储闪存数据: bash cd openocd ./dump - via - ssh.sh <ip address> 建议多次转储并比较结果,确保数据准确。

通过SPI转储

  1. 导入项目(dump_spi_flash文件夹),使用launch_configurations文件夹中的启动配置。
  2. 启动OpenOCD: bash cd openocd ./launch.sh
  3. 在Eclipse中选择Debug配置,运行项目(dump_spi_flash Debug)。
  4. 在OpenOCD界面中,根据提示输入相应命令操作:
    • d:读取闪存数据并保存到dump.bin文件。
    • p:擦除芯片并将dump.bin文件编程到芯片中,然后验证。
    • v:读取闪存数据并与dump.bin文件比较。

TFTP编程

  1. 配置TFTP服务器(如使用tftpd - hpa或OS X内置服务器),确保UAP和TFTP服务器的IP地址正确配置。
  2. 根据需要,使用U - boot命令通过TFTP对NOR闪存的特定分区进行编程和验证,例如: bash ar7240> tftp 83000000 mtdblock2 ar7240> protect off all ar7240> erase 0x9f050000 +0x100000 ar7240> cp.b 0x83000000 0x9f050000 0x100000 ar7240> cmp.b 0x83000000 0x9f050000 0x100000 可多次运行验证命令,检查是否存在比特翻转问题。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】