Interfacciare Hard-Disk IDE/PATA con Arduino?

Salve a tutti, sono un nuovo iscritto e mi sono poco fa presentato nei nuovi.

a casa mi ritrovo molti HD usati smontati da vecchi PC ma ancora funzionanti con l'interfaccia IDE, quella parallela, e avevo intenzione di usarli per sperimentarci qualcosa.
leggendo in giro in forum sugli atmel ho visto che qualcuno afferma di poter interfacciare e gestire questi HD con l'arduino....

secondo voi è una cosa fattibile? o i micro avr non hanno tale capacità di interfacciamento.

grazie

un membro del forum, magari lo nomino dopo,
mi ha segnalato questo link Google Code Archive - Long-term storage for Google Code Project Hosting.
dopo aver unzippato il file in una directory ho provato a compilare uno degli esempi per arduino mega2560

il file IDEFatInfo.pde

/*
 * This sketch attempts to initialize a IDE drive and analyze its structure.
 */
#include <IDEFat.h>
#include <IDEFatUtil.h>

// offset to partition table
#define PART_OFFSET (512-64-2) 

IDE ide;
IDEVolume vol;

//global for ide erase sector size
uint32_t sectorSize; 

void IDEError(void) {
  PgmPrintln("IDE error");
  PgmPrint("errorCode: ");
  Serial.println(ide.errorCode(), HEX);
  PgmPrint("errorData: ");
  Serial.println(ide.errorData(), HEX);  
  return;
}

// print partition table
uint8_t partDmp(void) {
  part_t pt;
  PgmPrintln("\npart,boot,type,start,length");  
  for (uint8_t ip = 1; ip < 5; ip++) {
    if (!ide.readData(0, PART_OFFSET + 16*(ip-1), 16, (uint8_t *)&pt)) {
      PgmPrint("read partition table failed");
      IDEError();
      return false;
    }
    Serial.print(ip, DEC);
    Serial.print(',');
    Serial.print(pt.boot,HEX);
    Serial.print(',');
    Serial.print(pt.type, HEX);
    Serial.print(',');
    Serial.print(pt.firstSector);
    Serial.print(',');
    Serial.println(pt.totalSectors); 
  }
  return true;
}

void volDmp(void) {
  PgmPrint("\nVolume is FAT");
  Serial.println(vol.fatType(), DEC);
  PgmPrint("blocksPerCluster: ");
  Serial.println(vol.blocksPerCluster(), DEC);
  PgmPrint("clusterCount: ");
  Serial.println(vol.clusterCount());
  PgmPrint("fatStartBlock: ");
  Serial.println(vol.fatStartBlock());
  PgmPrint("fatCount: ");
  Serial.println(vol.fatCount(), DEC);
  PgmPrint("blocksPerFat: ");
  Serial.println(vol.blocksPerFat());
  PgmPrint("rootDirStart: ");
  Serial.println(vol.rootDirStart());
  PgmPrint("dataStartBlock: ");
  Serial.println(vol.dataStartBlock());
  if (vol.dataStartBlock()%sectorSize) {
    PgmPrintln("Data area is not aligned on flash erase boundaries!");
  }
}

void setup() {
  Serial.begin(9600);
}

void loop() {
  PgmPrintln("\ntype any character to start");
  while (!Serial.available());
  Serial.flush();
  uint32_t t = millis();

    uint8_t r = ide.init();
  t = millis() - t;
  if (!r) {
    PgmPrintln("\nide.init failed");
    IDEError();
    return;
  }
  PgmPrint("\ninit time: ");
  Serial.println(t);
  PgmPrint("\nide type: ");
  if(!partDmp()) return;
  if (!vol.init(&ide, 2)) {
    PgmPrintln("\nvol.init failed");
    IDEError();
    return;
  }
  volDmp();
}

mi genera un pò di errori con la versione IDE 1.0.1

purtroppo non ho molta dimestichezza con l'ide e non so se mancano librerie etc.
c'è qualcuno che può aiutarmi?

cmq grazie molte a flz47655 .... :slight_smile:

primo step risolto....

con la 1.0.1 ha problemi ....devo controllare cosa non va

con la 0022 funziona perfettamente...

Secondo step

Modificare la riga #include "WProgram.h", presente in almeno una delle librerie xxx.h
con

#include "Arduino.h"

modificati gli #include

scusa brunello ma mi genera ancora errori:

In file included from IDEFatInfo.cpp:4:
C:\arduino-1.0.1\libraries\IDEFat/IDEFat.h:286: error: conflicting return type specified for 'virtual void IDEFile::write(uint8_t)'
C:\arduino-1.0.1\hardware\arduino\cores\arduino/Print.h:48: error: overriding 'virtual size_t Print::write(uint8_t)'

invece con la 0022 compila senza problemi

Allora usa la 022..... :slight_smile:

scusa, ma l'hardisk una volta smontato dopo pochi giorni diventa inutilizzabile..... che te ne fai

se tieni smontato l'hardisk, questo si rompe perché le particelle di polvere ostacolano le operazioni della testina rendendo il tutto inutilizzabile

cece99, ma penso tu stia scherzando :slight_smile:

scusa, ma perchè dovresti aprire gli Harddisk?.....

io ho detto che li ho smontati da vecchi PC non è che li ho aperti.. gli HD sono da 250GB.
sto provando altre soluzioni.... e sto valutando anche l'opzione AVR-DOS che però è a pagamento.

vedi:

Features:
· Read and write ASCII-Files
· Read and write Binary-Files
· Drivers available for Compact Flash Cards, Hard disk, MMC, SD etc.
· Completly written in AVR-Assembler (fast and compact)

sisi, scusa avevo letto male: avevo capito che avevi sontato gli hardisk!