一.四层架构思路详解层级对应文件核心职责应用层main.c整合功能逻辑实现业务需求设备层W25Q64.c / W25Q64.h依据芯片手册调用通信协议控制外设协议层MySPI.c / MySPI.h实现 SPI 通信时序规则与具体外设无关硬件引脚层MySPI.c底层函数封装 GPIO 引脚操作适配单片机硬件二、硬件引脚层最底层核心思路将引脚电平操作独立封装实现硬件与上层代码解耦便于改引脚、跨板移植。分类详情说明对应函数MySPI_W_SS、MySPI_W_SCK、MySPI_W_MOSI、MySPI_R_MISO主要作用统一封装 GPIO 读写操作隔离硬件引脚配置规则CS/SCK/MOSI推挽输出MISO上拉输入防止电平浮空乱跳上电默认状态CS 1取消片选、SCK 0匹配 SPI 模式 0设计优势更换引脚仅需修改本层代码上层逻辑无需改动三、SPI 协议层驱动核心核心思路遵循SPI 模式 0时序实现全双工通信发送 1 字节数据的同时必然接收 1 字节数据。分类详情说明核心函数MySPI_SwapByte字节交换函数通信标准SPI 模式 0时钟空闲为低电平上升沿采样数据收发规则数据从最高位 (bit7)开始逐位传输共循环 8 次关键语法!!(ByteSend (0x80 i))重点坑点1. 运算符优先级高于必须添加括号2.!!作用将非 0 值统一转为标准高电平 1协议本质纯全双工通信不存在只发不收、只收不发的情况四、W25Q64 设备层芯片驱动层核心思路完全参照芯片数据手册固定「发指令→发地址→收发数据」的执行流程操作顺序不可颠倒。操作类型完整执行流程补充规则读操作读 ID / 读数据1. 拉低 CS选中芯片2. 发送功能指令3. 发送 24 位地址4. 循环收发数据5. 拉高 CS结束通信无需写使能、无需等待忙状态写 / 擦除操作1. 执行写使能芯片开锁2. 拉低 CS3. 发送指令4. 发送 24 位地址5. 传输数据6. 拉高 CS7. 等待芯片空闲1. 写使能必须在拉 CS 之前2. 等待忙状态必须在拉高 CS 之后Flash 固有特性1. 仅能将数据 1 改写为 0写数据前必须先擦除2. 擦除最小单位4KB 扇区3. 单次写入上限256 字节1 页违反规则会导致数据错乱、写入失败五、应用层main.c 业务层核心思路调用下层封装好的接口函数按业务逻辑串联完整功能。执行步骤具体操作操作目的1初始化所有外设OLED、W25Q64完成硬件上电配置2读取芯片 ID校验硬件接线、SPI 通信、芯片是否正常3扇区擦除清空指定地址空间满足 Flash 写入要求4页编程写入数据将目标数据存储到 Flash 指定地址5读取 Flash 数据验证写入结果是否正确6循环刷新显示保证 OLED 画面稳定避免乱码六、四层架构综合对比表层级所属文件核心工作依赖层级日常修改范围应用层main.c实现业务功能、流程调度设备层功能逻辑、执行顺序设备层W25Q64.c/h解析芯片指令、控制外设动作协议层指令、时序、操作流程协议层MySPI.c/h实现 SPI 通信时序、字节收发硬件引脚层通信时序、位操作逻辑硬件引脚层MySPI.c配置 GPIO、读写引脚电平单片机寄存器引脚编号、GPIO 模式七、通用外设驱动开发通用步骤表适用于 SPI/I2C 等各类外设驱动开发统一流程、减少踩坑。步骤序号开发内容1查阅芯片手册确定通信协议、引脚定义与指令集2编写硬件引脚层代码封装 GPIO 基础操作3编写协议层代码实现标准通信时序4编写设备层代码按照手册实现各类功能指令5编写应用层代码调用接口串联完整功能6优先测试简易功能如读芯片 ID分步排查问题