Go Down

Topic: [aide] EEPROM AT93C46 protocole SPI (Read 3 times) previous topic - next topic

lacolombenoir

J'ai indiquer dans le premier poste que je travaillais en 8 bit,

Sinon dans ton code ne donne pas plus de résultat, et tu a inverser l'état des broche cs vu que ses du wire 3,
J'ai découvert qu'il y avais une autre appelle a faire lors de wire

Quote


Write Operation:
Enable device via chip select high
Send write enable op code    ******************************
Disable device via chip select low
Enable device via chip select high
Send write op code with address
Send data byte/word
Write cycle begins
Disable device via chip select low


La ligne que j'ai indiquer fait référence a
Quote
EWEN |1|00|11XXXXX|11XXXX| Write enable must precede all |
programming modes
dans le datasheet


Sinon grand merci a B@tto car tu ma fais découvrir l'utilisation de Bitwise Operators,
Je vais continuer de m'acharner pour faire fonctionner cette eeprom.
www.hatokuro.comuf.com site consacrer au rétrogaming

lacolombenoir

j'ai travailler sur la base de ton code, voici se que j'ai obtenu

Code: [Select]
void Read(int adresse)//lecture
{
long Command=0b110<<7;
Command|=adresse;
Serial.print("  ");
Serial.println(Command,BIN);
digitalWrite(cs,HIGH);
delay(10);
SPI.transfer(Command);
data=SPI.transfer(0);
digitalWrite(cs,LOW);
}

void Write(int adresse,int donnees)//écriture
{
long Command=0b010<<8;
Command|=adresse;
Serial.print(Command,BIN);
Serial.print("  ");
digitalWrite(cs,HIGH);
delay(10);
  SPI.transfer(Command);
  SPI.transfer(donnees);
  digitalWrite(cs,LOW);
}



j'ai donc ceci qui s'affiche

Quote

1000110010    1100110010
247
247
247
...



théoriquement il devrais m'envoyer 100 comme valeur, donc si quelqu'un a une explication ?
www.hatokuro.comuf.com site consacrer au rétrogaming

B@tto

A mon avis ça vient de la le problème 
Code: [Select]

SPI.transfer(Command);
  SPI.transfer(donnees);

imagine du envoi la donnée 2 : ça va faire 10 au lieu de 00000010
Il faut faire comme je l'avais fait, décaler command et ajouter données et envoyer le tout

lacolombenoir

J'ai refait le code mais cette fois si en rajoutent Ewen qui est a mettre selon la documentation et toujours aucun changement.


Code: [Select]


void Write(int adresse,int donnees)//écriture
{
long Ewen = 0b0011000000;

long Command=0b010<<8;
Command|=adresse;
Command<<=8;
Command|=donnees;
Serial.print(Command,BIN);
Serial.print("  ");
digitalWrite(cs,HIGH);
delay(10);
  SPI.transfer(Ewen);
  SPI.transfer(0x01);
  digitalWrite(cs,LOW);
digitalWrite(cs,HIGH);
delay(10);
  SPI.transfer(Command);
  digitalWrite(cs,LOW);
}


Voici ce que j'ai dans la console.

Quote

100011000101100100    1100110001
247
247
247
...

www.hatokuro.comuf.com site consacrer au rétrogaming

fdufnews

#19
Nov 24, 2012, 03:06 pm Last Edit: Nov 24, 2012, 03:15 pm by fdufnews Reason: 1
Une lecture attentive de la doc de l'EEPROM et de la doc de la librairie SPI montre que les deux ne peuvent pas coucher ensemble.
L'EEPROM attend des paramètres sur 10bits en entrée alors que la méthode transfer() de la librairie SPI manipule des octets
Il va falloir que tu écrives ta propre librairie pour supporter ta mémoire. C'est pas super compliqué mais par contre tu ne pourras pas utiliser le SPI matériel. Du coup cela te permets de connecter la mémoire sur n'importe quelle IO.
En fait, il faut bien voir, que le SPI n'est pas du tout standardisé comme l'I²C ou le RS232 par exemple. Et du coup chaque fabricant l'implémente comme il l'entend. Utiliser le SPI c'est un peu partir à l'aventure. Alors laisse s'exprimer l'explorateur qui dort en toi.....

Go Up