Program test for Coragem

Dependencies:   SX1272 SPI_MX25R

memory.txt

Committer:
marcoantonioara
Date:
2019-11-13
Revision:
4:05d5aa4d3f2d

File content as of revision 4:05d5aa4d3f2d:

#include <ctype.h>
#include "SPI_MX25R.h"


 
// SPI_MX25R(PinName mosi, PinName miso, PinName sclk, PinName cs) ;
SPI_MX25R spi_mem(P0_17, P0_20, P0_22, P0_24) ;


void rdRange(unsigned long rd_start_address, unsigned long rd_end_address)
{
    unsigned int i, j ;
    unsigned char data[0x10] ;
    unsigned long current_address = rd_start_address ;
    printf("\n\r") ;
    printf("rd_start_address = 0x%08X\n\r", rd_start_address) ;  
    printf("rd_end_address   = 0x%08X\n\r", rd_end_address) ;  
    printf("\n\r") ;
    printf("         ") ;             // print header +0 to +F
    for (i = 0 ; i < 0x10 ; i++ ) {
        printf("+%X ",i) ;
    }
    printf("\n\r") ;
    printf("         -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --") ;             
    printf("\n\r") ;
        for (i = rd_start_address ; current_address < rd_end_address ; i++ ) {
        printf("%06X : ", current_address ) ;   // print start address :
        for (j = 0 ; j <= 15 ; j++ ) {
            data[j] = spi_mem.read8(current_address ) ;
            printf("%02X ", data[j]) ;
            current_address = current_address + 0x01 ;
        }
        printf(": ") ;
        for (i = 0 ; i < 0x10 ; i++ ) {
            if (isprint(data[i])) {
                printf("%c", data[i]) ;
            } else {
                printf(".") ;
            }
        }
        printf(" :\n\r") ;
    }
    printf("\n\r") ;
}  
 
void rdSFDPRange(unsigned long rd_start_address, unsigned long rd_end_address)
{
    unsigned int i, j ;
    unsigned char data[0x10] ;
    unsigned long current_address = rd_start_address ;
    printf("\n\r") ;
    printf("rd_start_address = 0x%08X\n\r", rd_start_address) ;  
    printf("rd_end_address   = 0x%08X\n\r", rd_end_address) ;  
    printf("\n\r") ;
    printf("         ") ;             // print header +0 to +F
    for (i = 0 ; i < 0x10 ; i++ ) {
        printf("+%X ",i) ;
    }
    printf("\n\r") ;
    printf("         -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --") ;             
    printf("\n\r") ;
        for (i = rd_start_address ; current_address < rd_end_address ; i++ ) {
        printf("%06X : ", current_address ) ;   // print start address :
        for (j = 0 ; j <= 15 ; j++ ) {
            data[j] = spi_mem.readSFDP(current_address ) ;
            printf("%02X ", data[j]) ;
            current_address = current_address + 0x01 ;
        }
        printf(": ") ;
        for (i = 0 ; i < 0x10 ; i++ ) {
            if (isprint(data[i])) {
                printf("%c", data[i]) ;
            } else {
                printf(".") ;
            }
        }
        printf(" :\n\r") ;
    }
    printf("\n\r") ;
} 
 
void rdFREADRange(unsigned long rd_start_address, unsigned long rd_end_address)
{
    unsigned int i, j ;
    unsigned char data[0x10] ;
    unsigned long current_address = rd_start_address ;
    printf("\n\r") ;
    printf("rd_start_address = 0x%08X\n\r", rd_start_address) ;  
    printf("rd_end_address   = 0x%08X\n\r", rd_end_address) ;  
    printf("\n\r") ;
    printf("         ") ;             // print header +0 to +F
    for (i = 0 ; i < 0x10 ; i++ ) {
        printf("+%X ",i) ;
    }
    printf("\n\r") ;
    printf("         -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --") ;             
    printf("\n\r") ;
        for (i = rd_start_address ; current_address < rd_end_address ; i++ ) {
        printf("%06X : ", current_address ) ;   // print start address :
        for (j = 0 ; j <= 15 ; j++ ) {
            data[j] = spi_mem.readFREAD(current_address ) ;
            printf("%02X ", data[j]) ;
            current_address = current_address + 0x01 ;
        }
        printf(": ") ;
        for (i = 0 ; i < 0x10 ; i++ ) {
            if (isprint(data[i])) {
                printf("%c", data[i]) ;
            } else {
                printf(".") ;
            }
        }
        printf(" :\n\r") ;
    }
    printf("\n\r") ;
} 
 
void commandMenu(void)  // TeraTerm Display (Enable Terminal Local Echo On).
{
    printf("== Commands =========== (Comments) ===============================================\n\r") ;
    printf("\n\r") ;
    printf("  wren                  (Write Enable,  set WEL=1, 06h)\n\r") ;
    printf("  wrdi                  (Write Disable, set WEL=0, 04h)\n\r") ;
    printf("  rdid                  (Read Manu & JEDEC Dev ID, 9Fh)\n\r") ;
    printf("  rems                  (Read Elect. Manu & Dev ID,90h)\n\r") ;
    printf("  res                   (Read Elect. Signiture,    ABh)\n\r") ;
    printf("  rdsr                  (Read Status Register,     05h)\n\r") ;
    printf("  rdcr                  (Read Config Register,     15h)\n\r") ;
    printf("  rdscr                 (Read Security Register,   2Bh)\n\r") ;
    printf("  enso                  (Enter Secure OTP Area,    B1h)\n\r") ;
    printf("  exso                  (Exit Secure OTP Area,     C1h)\n\r") ;
    printf("  reset                 (ResetEnable + SoftwareReset = 66h + 99h)\n\r") ;
    printf("  hp                    (Enter HP mode = WREN=06h + WRSR= 01h 000002h)\n\r") ;
    printf("  lp                    (Enter LP mode = WREN=06h + WRSR= 01h 000000h)\n\r") ;
    printf("  wrsr  data_3B         (Write SR 01h +3B data,ex: wrsr 000002h, set wren 1st)\n\r") ;
    printf("  wrscr data_1B         (Write Security Reg 2Fh +1B data, caution LDSO bit OTP!)\n\r") ;
    printf("  se    address         (4KB Sector Erase,     ex: be 0x00    <- note: sets WEL)\n\r") ;
    printf("  be    address         (64KB Block Erase,     ex: be 0x00    <- note: sets WEL)\n\r") ;
    printf("  32Kbe address         (32KB Block Erase,     ex: 32kbe 0x00 <- note: sets WEL)\n\r") ;
    printf("  ce                    (Chip Erase = C7h,     ex: ce         <- note: sets WEL)\n\r") ;
    printf("  pp    address         (256B Page Program,    ex: pp 0x00    <- note: sets WEL)\n\r") ;
    printf("  read  address         (read 1 byte of data,  ex: read 0x0000)\n\r") ;
    printf("  rd1   startadr endadr (read range of data,   ex: rd1  0x00 0x10)\n\r") ;
    printf("  fread startadr endadr (read range of data,   ex: sfdp 0x00 0x10)\n\r") ;
    printf("  sfdp  startadr endadr (read range of SFDP,   ex: sfdp 0x00 0x10)\n\r") ;
    printf("==================================================================================\n\r") ;
    printf("\n\r") ;
}
/*
void page_program (int address, int numData){
    
    
int i ;
    
    //scanf("%X", &address) ;
    printf("writing %d bytes to 0x%X\n\r",numData, address) ;
    spi_mem.writeEnable() ; // send WREN 1st
    for (i = 0 ; i < numData ; i++ ) {
        data[i] = i & 0xFF ;
    }
    spi_mem.programPage(address, data, numData) ;
    data[0] = 0 ;
    while((data[0] & 0x01) != 0x01 ) {
        printf(".") ;
        data[0] = spi_mem.readStatus() ;
        wait(0.01) ;
    }
    printf("\n\r") ;
    printf("                               PP = 02h done\n\r") ;
    
       
}*/


void memory_test() {
    
    
    char cmd[32] ;
    //int i ;
    int numData = 256 ;
    unsigned long address = 0 ;
    unsigned long rd_start_address = 0 ;
    unsigned long rd_end_address = 0 ;
    uint8_t data[256] ;

    int i ;

    spi_mem.writeEnable() ; // send WREN 1st
    spi_mem.sectorErase(address) ;
    data[0] = 0x01 ;           // poll if WIP bit SR<0>=1
    for (i=0 ; i<25 ; i++){
        
    while((data[0] & 0x01) != 0 ) {
        printf(".\n") ;
        data[0] = spi_mem.readStatus() ;
        wait(0.1) ;
    }                  // end poll
    printf("SE = 20h done\n\r") ;

    
    
    
    
    
    address =0;
    printf("writing %d bytes to 0x%X\n\r",numData, address) ;
    spi_mem.writeEnable() ; // send WREN 1st
    for (i = 0 ; i < numData ; i++ ) {
        data[i] = i+1 & 0xFF ;
    }
    spi_mem.programPage(address, data, numData) ;
    data[0] = 0 ;
    i=0;
    while((data[0] & 0x01) != 0x01 ) {
        printf(",\n") ;
        data[0] = spi_mem.readStatus() ;
        wait(0.01) ;
        if (i > 3000) break;
            else i++;   
    }
}