基于Arduino的EPSP软驱模拟器设计与实现
1. 项目概述基于Arduino的EPSP软驱模拟器在复古计算机爱好者圈子里给老机器扩展存储设备一直是个热门话题。我最近折腾的这台PFBDK设备本质上是个用现代硬件模拟老式软驱的有趣方案。它通过Arduino Mega 2560和Micro Pro开发板配合定制PCB完美复刻了Epson PX-8/PX-4计算机所需的四台软盘驱动器功能。这个项目的独特之处在于它没有采用常见的并行接口而是通过串行口使用EPSP协议与主机通信。EPSP其实是Epson对CP/M NET协议的魔改版本原本用于连接便携计算机与外设比如软驱终端和视频接口。我实测下来这套方案在传输稳定性上表现相当不错115200bps的波特率下基本感受不到延迟。提示如果你手头有Epson HX-20、PX-4或PX-8这些经典机型PFBDK可能是目前性价比最高的存储扩展方案。整套硬件成本不超过200元远低于原装TF-20软驱现在动辄上千元的二手价格。2. 硬件架构解析2.1 核心组件选型项目采用了双MCU设计Arduino Mega 2560作为主控制器负责协议处理和磁盘映像管理Micro Pro则专攻串口通信。这种分工明确的架构有个明显优势——Mega 2560的256KB Flash和8KB RAM能轻松应对CP/M-80的文件系统操作而Micro Pro的硬件串口确保了通信时序的精确性。电路设计上有几个关键细节值得注意RS-232电平转换采用MAX3232而非传统MAX232实测在3.3V系统下更稳定SD卡模块必须选用带电平转换的版本5V转3.3V原型板的RS-232地线接错问题在v1.1版PCB中已修正原v1.0版将地线误接至Pin12.2 设备链式连接方案原版设计有个痛点无法像真实TF-20设备那样支持多设备串联。通过研究EPSP协议我发现其设备选择机制其实很巧妙——每个消息头都包含目标设备ID理论上完全支持总线式连接。最新方案增加了硬件AND逻辑电路主机输出信号经缓冲后广播给所有设备各设备输出通过74HC08与门级联信号经过LM393比较器完成RS-232与TTL电平转换// 伪代码示例设备响应逻辑 if(receivedMessage.deviceID myID || receivedMessage.deviceID BROADCAST_ID){ processMessage(); } else { forwardToNextDevice(); // 透传非本机消息 }3. 固件深度剖析3.1 EPSP协议实现协议栈由三个核心层构成物理层RS-232C异步串行默认配置为115200-8-N-1传输层基于CP/M NET的精简版每个数据包包含2字节起始标志0xA5,0x5A1字节设备ID1字节命令码2字节数据长度n字节有效载荷2字节CRC校验应用层实现磁盘读写、状态查询等18种标准命令实测中发现个有趣现象PX-4的BASIC解释器会频繁发送STATUS命令每秒约5次这就要求固件必须优化响应速度。我的解决方案是预生成状态缓存只有在磁盘状态真正变化时才更新缓存。3.2 磁盘映像管理固件支持标准的.IMG格式映像文件文件命名规则很有讲究D.IMG ~ G.IMG对应四个虚拟驱动器文件必须位于SD卡根目录建议使用WinImage工具在PC端创建映像特别提醒CP/M-80文件系统有个坑——不同计算机的磁盘参数可能不同。PX-8需要256字节/扇区的格式而PX-4则使用128字节/扇区。固件会自动根据主机类型调整参数但创建映像时仍需注意匹配。4. 实战搭建指南4.1 物料清单组件规格数量备注Arduino Mega 2560-1建议国产兼容版Arduino Micro Pro5V/16MHz1必须带ATmega32U4MAX3232模块-1注意买3.3V兼容版SD卡模块带电平转换1推荐SPI接口款74HC08SOIC-141仅多设备时需要3D打印外壳Unibox设计1厚度建议1.2mm4.2 烧录与配置步骤使用Arduino IDE 1.8.x版本新版可能有库冲突安装必要库git clone https://github.com/fjkraan/PFBDK.git cp -r PFBDK/libraries/* ~/Documents/Arduino/libraries/编译并上传固件先烧录Micro Pro的SerialBridge工程再烧录Mega 2560的PFBDK主固件SD卡准备mkfs.fat -F 16 -s 4 -S 512 /dev/sdX # Linux下格式化 dd if/dev/zero ofD.IMG bs1M count1 # 创建空映像5. 疑难问题排查5.1 常见故障速查表现象可能原因解决方案主机不识别设备波特率不匹配检查PX侧CMOS设置随机读写错误SD卡接触不良用橡皮擦金手指只能识别部分驱动器映像文件命名错误确认D.IMG~G.IMG存在传输中断线缆过长使用带屏蔽的串口线5.2 性能优化技巧在PX-8上使用MODE FAST命令可提升传输速度约30%定期运行PARK命令等效于sync防止数据丢失避免在BASIC程序运行时切换磁盘映像6. 功能扩展思路目前正在开发PX-8的原生管理工具主要突破点在于利用PX-8的三CPU架构特性主CPUZ80从CPUZ80子CPUuPD78C11通过BIOS调用劫持实现热插拔功能开发通用型Submit脚本实现自动挂载最近还加入了HX-20的Disk-BASIC支持这意味着现在一套设备可以通吃Epson三大经典机型。测试中发现个有趣现象HX-20的BASIC实现居然比PX-4的更接近MSX标准。