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++; } }