通过Arduino从Apple ProFile硬盘读取数据

项目背景

Apple ProFile硬盘是1980年代为Apple III和Apple Lisa设计的外置存储设备,容量5MB,最初售价3500美元。该设备包含两个主要组件:5MB机械硬盘(带并行命令接口)和带有Z8微处理器及2KB RAM的控制板。

通信协议解析

ProFile通过DB-25电缆使用专有协议与主机通信,主要控制信号包括:

  • CMD命令引脚:主机拉低表示发送命令
  • BUSY忙信号:设备拉低表示忙碌状态
  • RRW读写控制:高电平读数据,低电平写数据
  • 8位双向数据总线:传输命令和数据
  • PSTRB选通信号:微秒级脉冲指示数据读写完成

完整读取协议包含10个步骤,涉及命令发送、地址指定、数据确认和实际数据传输阶段,通信速率可达1MHz。

硬件修复过程

电源问题解决

  • 检测发现5V电源轨无输出
  • 更换电源模块中全部老化电容(约20美元成本)
  • 修复后获得正确的5V和12V输出

电机故障处理

  • 手动旋转电机解除轴承卡滞
  • 使用加热灯预热驱动机构(从10°C升温)
  • 成功恢复电机旋转功能并通过自检

Arduino实现代码

核心控制逻辑

// 步骤1-4:初始化通信
digitalWrite(CMD, 0);
setup_read_bus();
delay(A_SHORT_WHILE);

while (digitalRead(BSY));
delay(A_SHORT_WHILE);

int is_ok = read_byte();
// 验证is_ok为0x01

setup_write_bus();
write_bus(0x55);
delay(A_SHORT_WHILE);

digitalWrite(CMD, 1);
delay(A_SHORT_WHILE);

while (!digitalRead(BSY));

数据读取函数

int read_byte() {
  int o = 0;
  digitalWrite(PSTRB, 0);
  for (int i = 0; i < 8; i++)  {
    o |= digitalRead(i+2)<<i;
  }
  int parity = digitalRead(PARITY);
  delayMicroseconds(A_VERY_SHORT_WHILE);
  digitalWrite(PSTRB, 1);
  delayMicroseconds(A_VERY_SHORT_WHILE);
  return (parity << 8) + o;
}

扇区读取命令

write_cmd(0x00); // 读操作
write_cmd(0x00); // 位置高位
write_cmd(sector1); 
write_cmd(sector2); // 位置低位
write_cmd(0x64); // 重试100次
write_cmd(0x14); // 未知参数

信号特性分析

通过示波器观测发现:

  • BSY信号电压约为3V(非标准5V逻辑)
  • 命令响应存在可测量的处理延迟
  • 数据传输前BSY线出现显著噪声
  • 数据信号存在过冲现象但功能正常

数据提取结果

成功读取完整5MB磁盘映像,通过字符串分析发现系统提示信息:

  • “ESCAPE cannot be used to exit this menu; use Quit instead.”
  • “No device drivers have been read.”
  • “You must use the ‘Read’ option first.”

磁盘映像分析显示包含代码段、疑似编码图像的模式化数据以及大量空块。

技术总结

本项目实现了通过Arduino读取复古硬盘的完整技术方案,包括硬件修复、协议逆向工程和实际数据提取。虽然读取速度仅为设备最大能力的1/20,但成功恢复了40年历史存储设备中的数据。

完整代码已开源在GitHub仓库供参考使用。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
公众号二维码
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐