SIO2Arduino ( microSD )

du 400 au 130 xe

Modérateur : Politburo

Répondre
zaztaz
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 23
Enregistré le : 30 déc. 2015 21:20
Localisation : Bouches du Rhone

Re: SIO2Arduino ( microSD )

Message par zaztaz »

Toujours le même problème.

ça va finir en cacahuète !! :evil:
zaztaz
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 23
Enregistré le : 30 déc. 2015 21:20
Localisation : Bouches du Rhone

Re: SIO2Arduino ( microSD )

Message par zaztaz »

Je débute en C++

ne faut-il pas déclarer getDeviceStatus, readSector, writeSector, format avant la ligne

Code : Tout sélectionner

DriveAccess driveAccess(getDeviceStatus, readSector, writeSector, format);
le pb ne vient-il pas du compilateur (j'utilise l'outil gratuit du site Arduiono.cc)?

qu'utilises tu [antique] sous linux ?
zaztaz
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 23
Enregistré le : 30 déc. 2015 21:20
Localisation : Bouches du Rhone

Re: SIO2Arduino ( microSD )

Message par zaztaz »

j'ai testé la librairie sdfat avec un exemple livré avec

Code : Tout sélectionner

/*
 * This program attempts to initialize an SD card and analyze its structure.
 */
#include <SPI.h>
#include <SdFat.h>
/*
 * SD chip select pin.  Common values are:
 *
 * Arduino Ethernet shield, pin 4.
 * SparkFun SD shield, pin 8.
 * Adafruit SD shields and modules, pin 10.
 * Default SD chip select is the SPI SS pin.
 */
const uint8_t SD_CHIP_SELECT = 4;
/*
 * Set DISABLE_CHIP_SELECT to disable a second SPI device.
 * For example, with the Ethernet shield, set DISABLE_CHIP_SELECT
 * to 10 to disable the Ethernet controller.
 */
const int8_t DISABLE_CHIP_SELECT = 10;
SdFat sd;

// serial output steam
ArduinoOutStream cout(Serial);

// global for card size
uint32_t cardSize;

// global for card erase size
uint32_t eraseSize;
//------------------------------------------------------------------------------
// store error strings in flash
#define sdErrorMsg(msg) sdErrorMsg_F(F(msg));
void sdErrorMsg_F(const __FlashStringHelper* str) {
  cout << str << endl;
  if (sd.card()->errorCode()) {
    cout << F("SD errorCode: ");
    cout << hex << int(sd.card()->errorCode()) << endl;
    cout << F("SD errorData: ");
    cout << int(sd.card()->errorData()) << dec << endl;
  }
}
//------------------------------------------------------------------------------
uint8_t cidDmp() {
  cid_t cid;
  if (!sd.card()->readCID(&cid)) {
    sdErrorMsg("readCID failed");
    return false;
  }
  cout << F("\nManufacturer ID: ");
  cout << hex << int(cid.mid) << dec << endl;
  cout << F("OEM ID: ") << cid.oid[0] << cid.oid[1] << endl;
  cout << F("Product: ");
  for (uint8_t i = 0; i < 5; i++) {
    cout << cid.pnm[i];
  }
  cout << F("\nVersion: ");
  cout << int(cid.prv_n) << '.' << int(cid.prv_m) << endl;
  cout << F("Serial number: ") << hex << cid.psn << dec << endl;
  cout << F("Manufacturing date: ");
  cout << int(cid.mdt_month) << '/';
  cout << (2000 + cid.mdt_year_low + 10 * cid.mdt_year_high) << endl;
  cout << endl;
  return true;
}
//------------------------------------------------------------------------------
uint8_t csdDmp() {
  csd_t csd;
  uint8_t eraseSingleBlock;
  if (!sd.card()->readCSD(&csd)) {
    sdErrorMsg("readCSD failed");
    return false;
  }
  if (csd.v1.csd_ver == 0) {
    eraseSingleBlock = csd.v1.erase_blk_en;
    eraseSize = (csd.v1.sector_size_high << 1) | csd.v1.sector_size_low;
  } else if (csd.v2.csd_ver == 1) {
    eraseSingleBlock = csd.v2.erase_blk_en;
    eraseSize = (csd.v2.sector_size_high << 1) | csd.v2.sector_size_low;
  } else {
    cout << F("csd version error\n");
    return false;
  }
  eraseSize++;
  cout << F("cardSize: ") << 0.000512*cardSize;
  cout << F(" MB (MB = 1,000,000 bytes)\n");

  cout << F("flashEraseSize: ") << int(eraseSize) << F(" blocks\n");
  cout << F("eraseSingleBlock: ");
  if (eraseSingleBlock) {
    cout << F("true\n");
  } else {
    cout << F("false\n");
  }
  return true;
}
//------------------------------------------------------------------------------
// print partition table
uint8_t partDmp() {
  cache_t *p = sd.vol()->cacheClear();
  if (!p) {
    sdErrorMsg("cacheClear failed");
    return false;
  }
  if (!sd.card()->readBlock(0, p->data)) {
    sdErrorMsg("read MBR failed");
    return false;
  }
  for (uint8_t ip = 1; ip < 5; ip++) {
    part_t *pt = &p->mbr.part[ip - 1];
    if ((pt->boot & 0X7F) != 0 || pt->firstSector > cardSize) {
      cout << F("\nNo MBR. Assuming Super Floppy format.\n");
      return true;
    }
  }
  cout << F("\nSD Partition Table\n");
  cout << F("part,boot,type,start,length\n");
  for (uint8_t ip = 1; ip < 5; ip++) {
    part_t *pt = &p->mbr.part[ip - 1];
    cout << int(ip) << ',' << hex << int(pt->boot) << ',' << int(pt->type);
    cout << dec << ',' << pt->firstSector <<',' << pt->totalSectors << endl;
  }
  return true;
}
//------------------------------------------------------------------------------
void volDmp() {
  cout << F("\nVolume is FAT") << int(sd.vol()->fatType()) << endl;
  cout << F("blocksPerCluster: ") << int(sd.vol()->blocksPerCluster()) << endl;
  cout << F("clusterCount: ") << sd.vol()->clusterCount() << endl;
  cout << F("freeClusters: ");
  uint32_t volFree = sd.vol()->freeClusterCount();
  cout <<  volFree << endl;
  float fs = 0.000512*volFree*sd.vol()->blocksPerCluster();
  cout << F("freeSpace: ") << fs << F(" MB (MB = 1,000,000 bytes)\n");
  cout << F("fatStartBlock: ") << sd.vol()->fatStartBlock() << endl;
  cout << F("fatCount: ") << int(sd.vol()->fatCount()) << endl;
  cout << F("blocksPerFat: ") << sd.vol()->blocksPerFat() << endl;
  cout << F("rootDirStart: ") << sd.vol()->rootDirStart() << endl;
  cout << F("dataStartBlock: ") << sd.vol()->dataStartBlock() << endl;
  if (sd.vol()->dataStartBlock() % eraseSize) {
    cout << F("Data area is not aligned on flash erase boundaries!\n");
    cout << F("Download and use formatter from www.sdsd.card()->org/consumer!\n");
  }
}
//------------------------------------------------------------------------------
void setup() {
  Serial.begin(9600);
  while(!Serial) {}  // wait for Leonardo

  // use uppercase in hex and use 0X base prefix
  cout << uppercase << showbase << endl;

  // pstr stores strings in flash to save RAM
  cout << F("SdFat version: ") << SD_FAT_VERSION << endl;
  if (DISABLE_CHIP_SELECT < 0) {
    cout << F(
           "\nAssuming the SD is the only SPI device.\n"
           "Edit DISABLE_CHIP_SELECT to disable another device.\n");
  } else {
    cout << F("\nDisabling SPI device on pin ");
    cout << int(DISABLE_CHIP_SELECT) << endl;
    pinMode(DISABLE_CHIP_SELECT, OUTPUT);
    digitalWrite(DISABLE_CHIP_SELECT, HIGH);
  }
  cout << F("\nAssuming the SD chip select pin is: ") <<int(SD_CHIP_SELECT);
  cout << F("\nEdit SD_CHIP_SELECT to change the SD chip select pin.\n");
}
//------------------------------------------------------------------------------
void loop() {
  // read any existing Serial data
  while (Serial.read() >= 0) {}

  // pstr stores strings in flash to save RAM
  cout << F("\ntype any character to start\n");
  while (Serial.read() <= 0) {}
  delay(400);  // catch Due reset problem

  uint32_t t = millis();
  // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with
  // breadboards.  use SPI_FULL_SPEED for better performance.
  if (!sd.cardBegin(SD_CHIP_SELECT, SPI_HALF_SPEED)) {
    sdErrorMsg("\ncardBegin failed");
    return;
  }
  t = millis() - t;

  cardSize = sd.card()->cardSize();
  if (cardSize == 0) {
    sdErrorMsg("cardSize failed");
    return;
  }
  cout << F("\ninit time: ") << t << " ms" << endl;
  cout << F("\nCard type: ");
  switch (sd.card()->type()) {
  case SD_CARD_TYPE_SD1:
    cout << F("SD1\n");
    break;

  case SD_CARD_TYPE_SD2:
    cout << F("SD2\n");
    break;

  case SD_CARD_TYPE_SDHC:
    if (cardSize < 70000000) {
      cout << F("SDHC\n");
    } else {
      cout << F("SDXC\n");
    }
    break;

  default:
    cout << F("Unknown\n");
  }
  if (!cidDmp()) {
    return;
  }
  if (!csdDmp()) {
    return;
  }
  uint32_t ocr;
  if (!sd.card()->readOCR(&ocr)) {
    sdErrorMsg("\nreadOCR failed");
    return;
  }
  cout << F("OCR: ") << hex << ocr << dec << endl;
  if (!partDmp()) {
    return;
  }
  if (!sd.fsBegin()) {
    sdErrorMsg("\nFile System initialization failed.\n");
    return;
  }
  volDmp();
}
tout se passe bien le moniteur m'indique bien les infos de la carte

Code : Tout sélectionner

SdFat version: 20150324

Disabling SPI device on pin 10

Assuming the SD chip select pin is: 4
Edit SD_CHIP_SELECT to change the SD chip select pin.

type any character to start

init time: 10 ms

Card type: SD2

Manufacturer ID: 0X3
OEM ID: SD
Product: SU02G
Version: 8.0
Serial number: 0XF3E70871
Manufacturing date: 10/2009

cardSize: 1977.61 MB (MB = 1,000,000 bytes)
flashEraseSize: 32 blocks
eraseSingleBlock: true
OCR: 0X80FF8000

SD Partition Table
part,boot,type,start,length
1,0X0,0X6,135,3858489
2,0X0,0X0,0,0
3,0X0,0X0,0,0
4,0X0,0X0,0,0

Volume is FAT16
blocksPerCluster: 64
clusterCount: 60280
freeClusters: 60278
freeSpace: 1975.19 MB (MB = 1,000,000 bytes)
fatStartBlock: 143
fatCount: 2
blocksPerFat: 236
rootDirStart: 615
dataStartBlock: 647
Data area is not aligned on flash erase boundaries!
Download and use formatter from www.sdsd.card()->org/consumer!

type any character to start
je commence à etre totalement perdu :cry:
Avatar du membre
Antique
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 240
Enregistré le : 05 sept. 2011 10:09
Localisation : 73- Savoie

Re: SIO2Arduino ( microSD )

Message par Antique »

zaztaz a écrit :Je débute en C++

ne faut-il pas déclarer getDeviceStatus, readSector, writeSector, format avant la ligne

Code : Tout sélectionner

DriveAccess driveAccess(getDeviceStatus, readSector, writeSector, format);
le pb ne vient-il pas du compilateur (j'utilise l'outil gratuit du site Arduiono.cc)?

qu'utilises tu [antique] sous linux ?
pour la déclaration comme le reste ça se compile bien chez moi, donc c'est pas une erreur du source.

de mon coté je compile aussi avec l'arduino ide (version 1.1.0.5 + dfsg2-2)

juste un truc est ce que tu as essayer d'installer ta librairie par la fonction Croquis/Importer bibliothèque ?
zaztaz
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 23
Enregistré le : 30 déc. 2015 21:20
Localisation : Bouches du Rhone

Re: SIO2Arduino ( microSD )

Message par zaztaz »

Comme dit un peu plus haut j'ai testé la librairie Sdfat avec un exemple fourni avec et elle fonctionne très bien (log fournis plus haut)

j'ai tout de même essayé ce que tu m'a dit [antique] : importer la librairie zip par l'IDE

même résultat

[antique] as tu modifié d'autres fichiers (a part SIO2Arduino.ino, Config.h et diskimage.cpp)du projet dispo sur https://github.com/whizzosoftware/SIO2Arduino ?
Avatar du membre
Antique
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 240
Enregistré le : 05 sept. 2011 10:09
Localisation : 73- Savoie

Re: SIO2Arduino ( microSD )

Message par Antique »

non, j'ai suivi ce qui est dit dans le lien : http://www.kernelcrash.com/blog/arduino ... 015/09/08/

tu as essayer la lib que je t'ai envoyé ?

dans le pire des cas tu pourrait essayer un linux live avec l'ide pour linux (c'est une piste un peu longue, mais on sait jamais)

pour le reste comme je te l'ai dit de mon coté j'arrive à compiler ton .ino sans soucis, donc tu as du faire les choses correctement de ce coté là.

sinon a tu essayer de recharger le source sur https://github.com/whizzosoftware/SIO2Arduino ?

autre piste, une réinstallation complète du dev arduino
Avatar du membre
Antique
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 240
Enregistré le : 05 sept. 2011 10:09
Localisation : 73- Savoie

Re: SIO2Arduino ( microSD )

Message par Antique »

un truc simple que tu peux tester c'est de copier le contenu de sdfat.lib dans le dossier ou tu as ton .ino, il me semble que j'avais eu un soucis une fois avec une lib ...
zaztaz
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 23
Enregistré le : 30 déc. 2015 21:20
Localisation : Bouches du Rhone

Re: SIO2Arduino ( microSD )

Message par zaztaz »

Antique a écrit :un truc simple que tu peux tester c'est de copier le contenu de sdfat.lib dans le dossier ou tu as ton .ino, il me semble que j'avais eu un soucis une fois avec une lib ...
j'ai donc déplacé tout le contenu de sdfat dans le dossier de mon projet et changer tous les #include <...> par #include "..." afin de donner le chemin du projet.

Meme probleme
Avatar du membre
Antique
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 240
Enregistré le : 05 sept. 2011 10:09
Localisation : 73- Savoie

Re: SIO2Arduino ( microSD )

Message par Antique »

pour être sur d’être certain j'ai rechargé le source sio2arduino (du lien que je t'ai mis un peu avant), j'ai changé le .ino et le .cpp par tes versions et j'ai tout compilé, c'est toujours ok, donc de ce coté la pas de soucis.
de ton coté tu arrive à compiler l'exemple de la sdfatlib donc ça devrait être ok, je vais quand même tenter de la refaire de mon coté pour être sur ...
Avatar du membre
Antique
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 240
Enregistré le : 05 sept. 2011 10:09
Localisation : 73- Savoie

Re: SIO2Arduino ( microSD )

Message par Antique »

bon j'ai donc rechargé la lib (https://github.com/greiman/SdFat) que j'ai remis à la place de ma lib, relancé l'ide arduino (les modifs ne sont prisent en compte qu’après redémarrage de l'appli), compilé tout le bintz et ça marche encore.
j'ai essayé de virer des include mais je n'arrive toujours pas à avoir les mêmes erreur que toi ...
du coup je suis un peu à cour d'idées
zaztaz
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 23
Enregistré le : 30 déc. 2015 21:20
Localisation : Bouches du Rhone

Re: SIO2Arduino ( microSD )

Message par zaztaz »

Antique a écrit :pour être sur d’être certain j'ai rechargé le source sio2arduino (du lien que je t'ai mis un peu avant), j'ai changé le .ino et le .cpp par tes versions et j'ai tout compilé, c'est toujours ok, donc de ce coté la pas de soucis.
de ton coté tu arrive à compiler l'exemple de la sdfatlib donc ça devrait être ok, je vais quand même tenter de la refaire de mon coté pour être sur ...
Merci

juste une question de newbie

l'erreur de compil pointe plutot vers des variables de driveaccess.cpp et drivecontrol.cpp alors pourquoi on cherche vers sdfat?
Avatar du membre
Antique
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 240
Enregistré le : 05 sept. 2011 10:09
Localisation : 73- Savoie

Re: SIO2Arduino ( microSD )

Message par Antique »

ton fichier source semble correct, après il y a toujours des appels entre la lib et le source (héritage toussa toussa), chacun programme à sa façon donc parfois les erreurs sont pas là ou on les attends, surtout quand on utilise des source qu'on à pas pondus soi même.

pour l'instant mon conseil c'est d'installer une machine virtuel et de mettre un linux dedans pour tenter une compil sur un autre system (ou un live en clé usb)
zaztaz
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 23
Enregistré le : 30 déc. 2015 21:20
Localisation : Bouches du Rhone

Re: SIO2Arduino ( microSD )

Message par zaztaz »

merci pour test et précisions

j'ai essayé sur un vieux windows XP mais meme soucis donc je vais faire une VM sous ubuntu
zaztaz
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 23
Enregistré le : 30 déc. 2015 21:20
Localisation : Bouches du Rhone

Re: SIO2Arduino ( microSD )

Message par zaztaz »

Je n'y crois pas

VMWare > Lubuntu> Arduino IDE > Sdfat.zip fichier envoyé par email de [antique] installation via IDE arduino ajout librairie zip>

fichier sio2arduino telechargé de github
les modifs suivantes appliquées
Antique a écrit : http://www.kernelcrash.com/blog/arduino ... 015/09/08/, j'essaye d'expliquer (avant de zapper):
on charge la derniere lib du sd fat : https://github.com/greiman/SdFat
on remplace dans le fichier .ino (dans le dossier du sio2arduino)
- file.getFilename(name); par file.getName(name,13);
et dans le fichier diskimage.cpp (toujours dans le dossier sio2arduino)
- file->getFilename((char*)&filename); par file->getName((char*)&filename,13);
et dans l'en tête du fichier .ino on ajoute (les lignes en rouge) :
#include "config.h"
#define USE_SD_VOLUME
#include <SdFat.h>
#include <SdFatUtil.h>

#include <SdVolume.h>
#include "atari.h"
et toujours les mêmes erreurs

l'année commence mal !!!!
Avatar du membre
Antique
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 240
Enregistré le : 05 sept. 2011 10:09
Localisation : 73- Savoie

Re: SIO2Arduino ( microSD )

Message par Antique »

là va falloir que je réfléchisse un peu, essaye sans les modifs pour voir ... (tu devrais avoir l'erreur que j'ai indiqué au début de ce post)

sinon peut être sur un forum arduino voir si quelqu’un à une idée ...

en tout cas j'y réfléchit et je te dis si je trouve quelque chose
Répondre

Retourner vers « Atari 8bits »