Autor Tema: Solucionado: Problemas con sst25vf016b y pic32mx575  (Leído 3500 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fantabuloso

  • PIC10
  • *
  • Mensajes: 24
Solucionado: Problemas con sst25vf016b y pic32mx575
« en: 04 de Enero de 2012, 17:08:57 »
Hola, revisando los ejemplos de Suky, trate de conectar la memoria con el micro, y no pude utilizar la libreria de microchip, ya q se colgaba en algun lugar. Por lo q escribi las mias basandome en las del libro de c32, funcionó bien o es lo q yo pensaba ya q siempre escribia y leía en la misma ubicación, pero me encontre con la sorpresa de que luego de escrita una posición, cuando la trataba de escribir nuevamente, obvio con otro dato, esta no cambia el contenido, entonces traté de realizar un borrado del chip con la instruccion 0x60, pero n o tuve exito, aca dejo el codigo para q lo vean, pero no se cual pueda ser el inconveniente, es la primera vez que pruebo estas memorias, gracias de antemano.

Código: [Seleccionar]
#include <p32xxxx.h>
#include "see.h"

// I/O definitions
#define CSEE    _RB11       // select line for Serial EEPROM
#define TCSEE   _TRISB11    // tris control for CSEE pin
// peripheral configurations
#define SPI_CONF    0x8120  // SPI on, 8-bit master,CKE=1,CKP=0
#define SPI_BAUD    39//1       // clock divider Fpb/(2 * (15+1))

// sst25vf016 Serial EEPROM commands
#define WRSR     0x01       // guarda o escribe el registro de stado
#define WRITE   0x02       // comando escribir byte memoria
#define READ_LOW    0x03       // comando leer memoria hasta 25MHz
#define WRDI     0x04       // write disable
#define STATUS     0x05       // read status register
#define WREN     0x06       // write enable
#define READ_HIGH   0x0b // comando leer memoria hasta 80Mhz
#define ERASE4K 0x20 // borra 4K
#define ERASE32K 0x52 // borra 32K
#define ERASE64K 0xd8 // borra 64K
#define ERASEFULL 0x60 // borra 64K
#define AAI 0xAD // autoincrementa programacion
#define EWSR 0x50 // habilita escrtura registro
#define RDID 0x90 // lee id
#define JEDEC 0x9f // lee jedec id
#define EBSY 0x70 // habilita SO durante AAI
#define DBSY 0x80 // desabilita SO durante AAI
#define DUMMY 0x00 // dummy

char prueba = 0xff;

int writeSPI3A( int i)
{
    SPI3ABUF = i;                  
    while( !SPI3ASTATbits.SPIRBF);
    return SPI3ABUF;              
}


void initSEE( void)
{
    TCSEE = 0;
    CSEE = 1;                  
    SPI3ACON = SPI_CONF;        
    SPI3ABRG = SPI_BAUD;        
    if (readStatus() == 28)
    {
   CSEE = 0;              
     writeSPI3A(EWSR);    
     CSEE = 1;
DelayUS(1);
CSEE = 0;              
     writeSPI3A(WRSR);    
writeSPI3A(0x00);    
     CSEE = 1;
     }
     while (readStatus() & 0x1);
     CSEE = 0;                 // agregado para borra chip  
     writeSPI3A(0xC7);     //  
     CSEE = 1;  
     DelayMS(60);            // tiempo de borrado minimo 50us segun HdD  
}

int readStatus(void)
{
    int i;
    CSEE = 0;                  
    writeSPI3A(STATUS);      
    i = writeSPI3A(0);          
    CSEE = 1;                  
    return i;
}

char readSEE(int address)
{
    char i;
    while (readStatus() & 0x1);
    CSEE = 0;                  
    writeSPI3A(READ_LOW);      
    //writeSPI3A(address >> 16);
    //writeSPI3A(address >> 8);
    //writeSPI3A(address);
    writeSPI3A(0x10);   //deje direcciones fijas para probar
    writeSPI3A(0x10);
    writeSPI3A(0x12);
    i = writeSPI3A(DUMMY);  //lectura        
    CSEE = 1;
    return ( i);
}

void writeEnable(void)
{
    CSEE = 0;              
    writeSPI3A(WREN);    
    CSEE = 1;              
}  

void writeSEE(int address, char data)
{
    while (readStatus() & 0x1);
    writeEnable();
    CSEE = 0;                  
    writeSPI3A(WRITE);      
    //writeSPI3A(address >> 16);
    //writeSPI3A(address >> 8);
    //writeSPI3A(address);
    writeSPI3A(0x10);    //deje direcciones fijas para probar
    writeSPI3A(0x10);
    writeSPI3A(0x12);
    writeSPI3A(0x67);    //deje dato fijo para probar
    CSEE = 1;
}


Editado: Soy un Sr. nabo, me lataba WREN antes de mandar 0x60 o 0xc7. y bue pasa en las mejores familias
« Última modificación: 04 de Enero de 2012, 17:17:54 por fantabuloso »