??? 11/01/06 15:43 Read: times |
#127219 - 4Mb Flash 29C040 |
Has someone worked with this Flash?
I'm experiencing a lot of trouble to write and read. I am programing in c. here is the Code: <quote> /********************************************************************/ /* DIRECCION_PAGINA se le pasa como referencia el numero de pagina */ /********************************************************************/ long direccion_pagina(int pagina) { int page_address[MAX_PAGE_ADDRS]; long address=0; int i; /*inicializo el array PAGE_ADDRESS en 0*/ for(i=0;i< MAX_PAGE_ADDRS;i++) page_address[i] = 0; i = 0; while (pagina>1) { page_address[i+8] = pagina%2; pagina = pagina/2; i++; } page_address[i+8] = pagina; for (i=0;i<16;i++){ address=address + power(2,i)*page_address[i]; } if (page_address[16] == 1) a16 = 1; else a16 = 0; if (page_address[17] == 1) a17 = 1; else a17 = 0; if (page_address[18] == 1) a18 = 1; else //a18 = 1; a18 = 0; //hago esto para simular la memoria Flash y que no se solape //despues lo tengo que cambiar return address; } /*****************************************************************/ /* WRITE_FLASH_SECTOR copia el buffer de datos de la SRAM en la */ /* pagina del 29C040 que se pasa como argumento. Page_num es el */ /* numero de paginas de la EPROM y debe estar comprendido entre */ /* los valores 0 y 2047. */ /* Para escribir en la Flash es necesario primero realizaar 3 */ /* escrituras de prueba antes de grabar un byte. Recien entonces */ /* se lee el primer byte de la SRAM se copia el micro y del micro*/ /* a la FLASH. Este proceso se repite hasta escribir una pagina */ /* entera. */ /*****************************************************************/ void write_Flash_sector(char *s, int page_num) { int i; char datos; // datos: almacena un byte de datos char xdata *address_pointer; // apunta a direccion dentro de una // pagina de la FLASH long temp; EA = 0; CE_RAM=1; //deshabilito la RAM externa temp = direccion_pagina(page_num); P10 = 0; P11 = 0; P12 = 0; //Escribo 3 bytes de prueba e tres sectores especificos /*Escribo 0xAA en la direccion 0x05555 de la FLASH */ CE_FLASH=0; address_pointer = 0x5555; *address_pointer = 0xAA; CE_FLASH = 1; CE_FLASH=0; /*Escribo 0x55 en la direccion 0x02AAA de la FLASH */ address_pointer = 0x2AAA; *address_pointer = 0x55; CE_FLASH = 1; CE_FLASH=0; /*Escribo 0xA0 en la direccion 0x05555 de la FLASH */ address_pointer = 0x5555; *address_pointer = 0xA0; CE_FLASH = 1; /* Sucesivamente lee un Byte de la posicion i de la SRAM y lo almacena en el uC */ /* para luego escribirlo en la FLASH hasta completar la pagina */ address_pointer = (char*) temp; P10 = a16; P11 = a17; P12 = a18; i=0; while(i<=BUFFER_SIZE-1) { CE_RAM = 0; // HABILITO RAM EXTERNA datos = s[i]; // ram interna + externa CE_RAM = 1; // DESHABILITO RAM EXTERNA CE_FLASH = 0; // HABILITO FLASH *address_pointer = datos; CE_FLASH = 1; // DESHABILITO FLASH i++; address_pointer++; } CE_RAM = 0; EA = 1; delayms(10); /*10 miliseg delay para escribir pagina*/ } /**************************************************************************/ /* READ_FLASH_SECTOR copies a sector from the 29C040 into the SRAM buffer */ /* Either 256 or 512 bytes are transfered depending on the size of */ /* the sector. */ /**************************************************************************/ void read_Flash_sector(char *s, int page_num) { int i; char datos; // datos: almacena un byte de datos char xdata *address_pointer; // apunta a direccion dentro de una pagina de // la FLASH EA = 0; //setea al uC para que apunte a la pagina indicada address_pointer = (char *) direccion_pagina(page_num); P10 = a16; P11 = a17; P12 = a18; /* Sucesivamente lee un Byte de la posicion i de una pagina de la */ /* FLASH y lo almacena en el uC para luego escribirlo en la SRAM */ /* hasta completar el BUFFER */ i=0; CE_RAM = 1; while (i<MAX_msg_per_page*Msg_size) { CE_FLASH = 0; datos = *address_pointer; CE_FLASH = 1; CE_RAM = 0; s[i]=datos; CE_RAM = 1; address_pointer++; i++; } for (i=MAX_msg_per_page*Msg_size;i<=BUFFER_SIZE-1;i++) { s[i]='\0'; } CE_RAM = 0; EA = 1; } </quote> |
Topic | Author | Date |
4Mb Flash 29C040 | 01/01/70 00:00 | |
project description | 01/01/70 00:00 | |
which brand? | 01/01/70 00:00 | |
manufacturers datasheet link | 01/01/70 00:00 | |
neat chip | 01/01/70 00:00 | |
re posting code | 01/01/70 00:00 | |
newbie | 01/01/70 00:00 | |
a few things | 01/01/70 00:00 | |
bitwise operations | 01/01/70 00:00 | |
where are you?, please add location to profile | 01/01/70 00:00 | |
from Argentina![]() | 01/01/70 00:00 | |
Code | 01/01/70 00:00 | |
trouble description | 01/01/70 00:00 |