Go Down

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

lacolombenoir

Et bien je n'en sais rien, si seulement tout les essais que j'ai fais pour l'écriture avais fonctionner peu être que j'aurais pu vérifier si la lecture fonctionnais

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


Voila mon dernier code pour la lecture

Code: [Select]
digitalWrite(cs,HIGH);
  SPI.transfer(B01); // opcode binaire 01
  digitalWrite(cs,LOW);
  digitalWrite(cs,HIGH);
  SPI.transfer(B01000110); // opcode binaire 01
  SPI.transfer(B00000111);
  digitalWrite(cs,LOW);
www.hatokuro.comuf.com site consacrer au rétrogaming

Artouste

#11
Nov 22, 2012, 12:52 pm Last Edit: Nov 22, 2012, 01:08 pm by Artouste Reason: 1

Et bien je n'en sais rien, si seulement tout les essais que j'ai fais pour l'écriture avais fonctionner peu être que j'aurais pu vérifier si la lecture fonctionnais

...

bonjour
ça ne resoud pas ton probleme, mais lire çà :
http://arduino.cc/forum/index.php?topic=96411.0

il semblerait que la 93C46 pose des problemes/questions sous pas mal d'environnements

Quote
When I read the Erase command from AT93C46 as shown below:

ERASE (ERASE): The Erase (ERASE) instruction programs all bits in the specified
memory location to the logical "1" state. The self-timed erase cycle starts once the
ERASE instruction and address are decoded. The DO pin outputs the READY/BUSY
status of the part if CS is brought high after being kept low for a minimum of 250 ns (tCS). A logic "1" at pin DO indicates that the selected memory location has been erased, and the part is ready for another instruction.

Am I right that when erase process completes, all of bits in DOUT indicates "1" states?

The reason that I asked about this is that everytime I erase the data and read the same address and 0xFF which is completely opposite to what I expected because I expected to receive 0x00 instead of 0xFF. Unless there is problem in my erase_command function prototype!

SesechXP


Voila mon dernier code pour la lecture

Code: [Select]
digitalWrite(cs,HIGH);
  SPI.transfer(B01); // opcode binaire 01
  digitalWrite(cs,LOW);
  digitalWrite(cs,HIGH);
  SPI.transfer(B01000110); // opcode binaire 01
  SPI.transfer(B00000111);
  digitalWrite(cs,LOW);



Il ne manquerait pas quelques bits au premier envoi ? Car là c'est comme si tu envoyais B00000001 et non pas B01000000.

++

lacolombenoir

#13
Nov 23, 2012, 01:09 am Last Edit: Nov 23, 2012, 02:14 am by lacolombenoir Reason: 1
J'ai remplacer B01 par ta proposition et toujours aucun changement,
Je commence a croire que je suis tomber sur tomber sur le pire modèle d'eeprom que je pouvais rencontré,
Je pensais que du faite que sa soit de marque Atmel je risquais rien, c'était bien ma vaine dans commander 100  :smiley-yell: heureusement que sa ma couter que 14 euro  :*
www.hatokuro.comuf.com site consacrer au rétrogaming

B@tto

#14
Nov 23, 2012, 01:18 pm Last Edit: Nov 23, 2012, 01:25 pm by B@tto Reason: 1
Non mais la y'a des gros soucis dans le code, pourquoi envoyer 01 avant ? Deja quelle organisation as-tu choisi : 8 ou 16 bit ?

Ensuite ton code devrait plus ressembler à ça (en mode 8 bits):

Code: [Select]

#include <SPI.h>

const int cs = 10;
int data=0;

void Read(int adresse)//lecture
{
long Command=0b110<<7;
Command&=adresse;
digitalWrite(cs,LOW);
delaymicroseconds(10);
SPI.transfer(Command);
data=SPI.tranfer(0);
digitalWrite(cs,HIGH);
}

void Write(int adresse,int donnees)//écriture
{
long Command=0b101<<7;
Command&=adresse;
Command<<8;
Command&=donnees;
 digitalWrite(cs,LOW);
delaymicroseconds(10);
 SPI.transfer(Command);
 digitalWrite(cs,HIGH);
}

}

void setup()
{
 pinMode(cs,OUTPUT);
digitalWrite(cs,HIGH);
 
 SPI.setBitOrder(MSBFIRST);
 SPI.setDataMode(SPI_MODE0);// mode 0. Au repos l'horloge est à 0 (CPOL = 0). les données sont prises en compte sur un front montant de l'horloge (CPHA = 0).
 SPI.setClockDivider(SPI_CLOCK_DIV8);// sk 2mhz, 16 MHz diviser par 8.
 SPI.begin();
 Serial.begin(9600);
}

void loop()
{
 Write(50,100);
 Read(50);
 
 Serial.println(data);
 delay(1000);
}


Go Up