산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 기반 아마가 플로피 디스크 리더/라이터 v2.2 - 데이터 복구 및 쓰기 완벽 가이드

필요한 부품 및 소모품

필요한 앱 및 온라인 서비스

프로젝트 배경 및 목표

이 프로젝트는 이전 디스크 리더 프로젝트를 발전시킨 버전 2.2입니다. 자세한 정보는 프로젝트 공식 사이트를 참고하세요.

데이터 쓰기 도전기: 7번의 시도 끝에 성공

시도 1: 소프트웨어 흐름 제어 (실패)

디스크 읽기에 성공한 후 쓰기를 역으로 구현하려 했습니다. ADF 디스크 파일을 MFM 데이터로 변환해 인터페이스로 전송하는 방식이었습니다. 하지만 아두이노의 2KB 램과 1KB EEPROM으로는 한 트랙(14,848바이트)을 저장할 수 없어 1바이트씩 주고받는 양방향 확인 방식을 시도했습니다. 2M 보드레이트로 전송해도 OS 레벨에서 지연이 발생해 전체 쓰기 사이클이 디스크 한 바퀴 도는 시간보다 훨씬 길어져 완전 실패했습니다.

시도 2: 하드웨어 흐름 제어 (CTS/DTR 핀 활용, 실패)

FTDI 브레이크아웃 보드의 CTS(Clear To Send) 핀을 아두이노가 제어해 PC의 데이터 흐름을 조절하는 방식을 시도했습니다. 원형 버퍼 대신 단순하게 '데이터 필요 시 CTS=0, 불필요 시 CTS=1'로 제어했으나, CTS 신호 변경과 실제 데이터 흐름 중단 사이에 타이밍 갭이 있어 바이트 손실이 발생했습니다.

시도 3: 비트 쓰기 사이클 틈새에서 바이트 수신 (부분 성공)

시리얼 인터럽트를 쓰지 않고 비트 쓰기 사이의 CPU 사이클에서 수신 버퍼를 확인해 들어온 바이트를 임시 저장하는 방식을 구현했습니다. 데이터 손실 없이 쓰기 완료했으나, 읽어보면 데이터가 유효하지 않음이 확인되었습니다. 헤드 이동 문제(/WRITE_GATE 핀을 LOW로 유지해야 헤드 이동 가능)도 발견해 수정했습니다.

시도 4: 오실로스코프로 타이밍 분석 (중요한 발견)

0xAA 패턴(완벽한 사각파)을 계속 쓰며 오실로스코프로 파형을 관찰했습니다. 12비트마다 'HIGH' 상태가 지속되는 이상 현상 발견 → 흐름 제어 루프에서 매 바이트마다 대기 시간이 발생함을 확인. 두 번째 바이트 사용 후 CTS를 순간적으로 LOW→HIGH 토글해 다음 바이트가 미리 도착하도록 수정하니 완벽한 사각파 출력 성공.

아두이노 기반 아마가 플로피 디스크 리더/라이터 v2.2 - 데이터 복구 및 쓰기 완벽 가이드

하지만 실제 ADF 이미지 쓰기 후 읽어보니 섹터를 찾는 데 시간이 오래 걸리고, 실제 아마가(A500+)에서 부팅 시 체크섬 에러 발생. 쓰기 타이밍이나 데이터 품질 문제로 판단.

읽기 알고리즘 전면 개선 (100% 성공률 달성)

펄스 간 간격을 기록하는 방식으로 변경. 카운터를 프리런(0~255)시키고 펄스 발생 시 카운터 값을 읽어 value = (COUNTER - 16) / 32 공식으로 0~3 범위 2비트 값으로 압축. MFM 특성상 '00' 조합이 나올 수 없음을 이용해 디코딩:
01→01, 10→001, 11→0001

결과: 테스트한 모든 디스크 100% 완벽 읽기 성공. 위상 분석이나 재시도 로직이 거의 필요 없어졌습니다.

시도 5: 검증 기능 추가로 쓰기 품질 확보

타이머 카운터를 리셋하지 않고 누적값(16, 48, 80...)에서 비트 출력하도록 변경해 500kbps 정확도 확보. 시리얼 수신 루프도 최소화. 윈도우 앱에 검증(Verify) 기능 추가 후 재시도: 95% 트랙이 1회 통과, 나머지 5%는 1회 재시도 후 성공. 실제 아마가에서 완벽 부팅 확인!

시도 6: 바이트 경계 타이밍 보정

사용자 피드백으로 체크섬 에러가 간헐적 발생. 바이트 루프가 타이머 오버플로 전에 다음 바이트 첫 비트를 일찍 쓰는 현상 발견 → 타이머가 0으로 오버플로할 때까지 대기하는 루프 추가로 해결.

시도 7: 트랙 전체 지우기(Erase) 후 쓰기로 최종 해결

X-Copy Pro로 분석 시 헤더/데이터 영역 모두에서 체크섬 에러(코드 4, 6) 발생. 패딩 데이터를 256바이트에서 8바이트로 줄이자 검증 에러 다수 발생 → 쓰기 전 트랙 전체에 0xAA 패턴으로 지우기(Erase) 명령 추가 후 재시도: X-Copy 100% 통과.

진단 모드 탑재

배선 오류나 하드웨어 문제를 쉽게 찾도록 아두이노 펌웨어에 진단 명령어 세트와 자동 테스트 루틴을 내장했습니다.

향후 계획

소스 코드 및 회로도

제조공정

  1. 애니메이션의 진화와 기법: 초기 장치부터 CGI까지
  2. 플로피 디스크의 진화: 자기 매체에서 광학 저장장치로
  3. NeoPixel 링과 Arduino로 만드는 인터랙티브 자이로스코프 LED 디스플레이
  4. 블루투스 제어 아두이노 스파이봇(Spybot) 만들기
  5. 플릭모트(FlickMote): 스마트 홈을 위한 제스처 제어 IR 리모컨
  6. DIY 아두이노 TV B-Gone: 모든 TV를 끄는 만능 리모컨
  7. DIY 아두이노 USB 게임 컨트롤러 - 나만의 고성능 게임패드 만들기
  8. DIY 구름 의상: LED 스트립, 아두이노 나노 & 스파크펀 부품으로 만들기
  9. 아두이노로 만드는 대형 LED 마스터 시계 (알람 기능 포함, 12m 거리에서도 식별 가능)
  10. 아두이노 기반 아마가 플로피 디스크 리더 - 저렴한 오픈소스 데이터 복구 솔루션