Program test for Coragem

Dependencies:   SX1272 SPI_MX25R

Committer:
marcoantonioara
Date:
Wed Nov 13 16:42:06 2019 +0000
Revision:
4:05d5aa4d3f2d
Test version firmware Coragem using all sensors

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcoantonioara 4:05d5aa4d3f2d 1 #include <ctype.h>
marcoantonioara 4:05d5aa4d3f2d 2 #include "SPI_MX25R.h"
marcoantonioara 4:05d5aa4d3f2d 3
marcoantonioara 4:05d5aa4d3f2d 4
marcoantonioara 4:05d5aa4d3f2d 5
marcoantonioara 4:05d5aa4d3f2d 6 // SPI_MX25R(PinName mosi, PinName miso, PinName sclk, PinName cs) ;
marcoantonioara 4:05d5aa4d3f2d 7 SPI_MX25R spi_mem(P0_17, P0_20, P0_22, P0_24) ;
marcoantonioara 4:05d5aa4d3f2d 8
marcoantonioara 4:05d5aa4d3f2d 9
marcoantonioara 4:05d5aa4d3f2d 10 void rdRange(unsigned long rd_start_address, unsigned long rd_end_address)
marcoantonioara 4:05d5aa4d3f2d 11 {
marcoantonioara 4:05d5aa4d3f2d 12 unsigned int i, j ;
marcoantonioara 4:05d5aa4d3f2d 13 unsigned char data[0x10] ;
marcoantonioara 4:05d5aa4d3f2d 14 unsigned long current_address = rd_start_address ;
marcoantonioara 4:05d5aa4d3f2d 15 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 16 printf("rd_start_address = 0x%08X\n\r", rd_start_address) ;
marcoantonioara 4:05d5aa4d3f2d 17 printf("rd_end_address = 0x%08X\n\r", rd_end_address) ;
marcoantonioara 4:05d5aa4d3f2d 18 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 19 printf(" ") ; // print header +0 to +F
marcoantonioara 4:05d5aa4d3f2d 20 for (i = 0 ; i < 0x10 ; i++ ) {
marcoantonioara 4:05d5aa4d3f2d 21 printf("+%X ",i) ;
marcoantonioara 4:05d5aa4d3f2d 22 }
marcoantonioara 4:05d5aa4d3f2d 23 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 24 printf(" -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --") ;
marcoantonioara 4:05d5aa4d3f2d 25 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 26 for (i = rd_start_address ; current_address < rd_end_address ; i++ ) {
marcoantonioara 4:05d5aa4d3f2d 27 printf("%06X : ", current_address ) ; // print start address :
marcoantonioara 4:05d5aa4d3f2d 28 for (j = 0 ; j <= 15 ; j++ ) {
marcoantonioara 4:05d5aa4d3f2d 29 data[j] = spi_mem.read8(current_address ) ;
marcoantonioara 4:05d5aa4d3f2d 30 printf("%02X ", data[j]) ;
marcoantonioara 4:05d5aa4d3f2d 31 current_address = current_address + 0x01 ;
marcoantonioara 4:05d5aa4d3f2d 32 }
marcoantonioara 4:05d5aa4d3f2d 33 printf(": ") ;
marcoantonioara 4:05d5aa4d3f2d 34 for (i = 0 ; i < 0x10 ; i++ ) {
marcoantonioara 4:05d5aa4d3f2d 35 if (isprint(data[i])) {
marcoantonioara 4:05d5aa4d3f2d 36 printf("%c", data[i]) ;
marcoantonioara 4:05d5aa4d3f2d 37 } else {
marcoantonioara 4:05d5aa4d3f2d 38 printf(".") ;
marcoantonioara 4:05d5aa4d3f2d 39 }
marcoantonioara 4:05d5aa4d3f2d 40 }
marcoantonioara 4:05d5aa4d3f2d 41 printf(" :\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 42 }
marcoantonioara 4:05d5aa4d3f2d 43 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 44 }
marcoantonioara 4:05d5aa4d3f2d 45
marcoantonioara 4:05d5aa4d3f2d 46 void rdSFDPRange(unsigned long rd_start_address, unsigned long rd_end_address)
marcoantonioara 4:05d5aa4d3f2d 47 {
marcoantonioara 4:05d5aa4d3f2d 48 unsigned int i, j ;
marcoantonioara 4:05d5aa4d3f2d 49 unsigned char data[0x10] ;
marcoantonioara 4:05d5aa4d3f2d 50 unsigned long current_address = rd_start_address ;
marcoantonioara 4:05d5aa4d3f2d 51 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 52 printf("rd_start_address = 0x%08X\n\r", rd_start_address) ;
marcoantonioara 4:05d5aa4d3f2d 53 printf("rd_end_address = 0x%08X\n\r", rd_end_address) ;
marcoantonioara 4:05d5aa4d3f2d 54 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 55 printf(" ") ; // print header +0 to +F
marcoantonioara 4:05d5aa4d3f2d 56 for (i = 0 ; i < 0x10 ; i++ ) {
marcoantonioara 4:05d5aa4d3f2d 57 printf("+%X ",i) ;
marcoantonioara 4:05d5aa4d3f2d 58 }
marcoantonioara 4:05d5aa4d3f2d 59 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 60 printf(" -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --") ;
marcoantonioara 4:05d5aa4d3f2d 61 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 62 for (i = rd_start_address ; current_address < rd_end_address ; i++ ) {
marcoantonioara 4:05d5aa4d3f2d 63 printf("%06X : ", current_address ) ; // print start address :
marcoantonioara 4:05d5aa4d3f2d 64 for (j = 0 ; j <= 15 ; j++ ) {
marcoantonioara 4:05d5aa4d3f2d 65 data[j] = spi_mem.readSFDP(current_address ) ;
marcoantonioara 4:05d5aa4d3f2d 66 printf("%02X ", data[j]) ;
marcoantonioara 4:05d5aa4d3f2d 67 current_address = current_address + 0x01 ;
marcoantonioara 4:05d5aa4d3f2d 68 }
marcoantonioara 4:05d5aa4d3f2d 69 printf(": ") ;
marcoantonioara 4:05d5aa4d3f2d 70 for (i = 0 ; i < 0x10 ; i++ ) {
marcoantonioara 4:05d5aa4d3f2d 71 if (isprint(data[i])) {
marcoantonioara 4:05d5aa4d3f2d 72 printf("%c", data[i]) ;
marcoantonioara 4:05d5aa4d3f2d 73 } else {
marcoantonioara 4:05d5aa4d3f2d 74 printf(".") ;
marcoantonioara 4:05d5aa4d3f2d 75 }
marcoantonioara 4:05d5aa4d3f2d 76 }
marcoantonioara 4:05d5aa4d3f2d 77 printf(" :\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 78 }
marcoantonioara 4:05d5aa4d3f2d 79 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 80 }
marcoantonioara 4:05d5aa4d3f2d 81
marcoantonioara 4:05d5aa4d3f2d 82 void rdFREADRange(unsigned long rd_start_address, unsigned long rd_end_address)
marcoantonioara 4:05d5aa4d3f2d 83 {
marcoantonioara 4:05d5aa4d3f2d 84 unsigned int i, j ;
marcoantonioara 4:05d5aa4d3f2d 85 unsigned char data[0x10] ;
marcoantonioara 4:05d5aa4d3f2d 86 unsigned long current_address = rd_start_address ;
marcoantonioara 4:05d5aa4d3f2d 87 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 88 printf("rd_start_address = 0x%08X\n\r", rd_start_address) ;
marcoantonioara 4:05d5aa4d3f2d 89 printf("rd_end_address = 0x%08X\n\r", rd_end_address) ;
marcoantonioara 4:05d5aa4d3f2d 90 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 91 printf(" ") ; // print header +0 to +F
marcoantonioara 4:05d5aa4d3f2d 92 for (i = 0 ; i < 0x10 ; i++ ) {
marcoantonioara 4:05d5aa4d3f2d 93 printf("+%X ",i) ;
marcoantonioara 4:05d5aa4d3f2d 94 }
marcoantonioara 4:05d5aa4d3f2d 95 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 96 printf(" -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --") ;
marcoantonioara 4:05d5aa4d3f2d 97 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 98 for (i = rd_start_address ; current_address < rd_end_address ; i++ ) {
marcoantonioara 4:05d5aa4d3f2d 99 printf("%06X : ", current_address ) ; // print start address :
marcoantonioara 4:05d5aa4d3f2d 100 for (j = 0 ; j <= 15 ; j++ ) {
marcoantonioara 4:05d5aa4d3f2d 101 data[j] = spi_mem.readFREAD(current_address ) ;
marcoantonioara 4:05d5aa4d3f2d 102 printf("%02X ", data[j]) ;
marcoantonioara 4:05d5aa4d3f2d 103 current_address = current_address + 0x01 ;
marcoantonioara 4:05d5aa4d3f2d 104 }
marcoantonioara 4:05d5aa4d3f2d 105 printf(": ") ;
marcoantonioara 4:05d5aa4d3f2d 106 for (i = 0 ; i < 0x10 ; i++ ) {
marcoantonioara 4:05d5aa4d3f2d 107 if (isprint(data[i])) {
marcoantonioara 4:05d5aa4d3f2d 108 printf("%c", data[i]) ;
marcoantonioara 4:05d5aa4d3f2d 109 } else {
marcoantonioara 4:05d5aa4d3f2d 110 printf(".") ;
marcoantonioara 4:05d5aa4d3f2d 111 }
marcoantonioara 4:05d5aa4d3f2d 112 }
marcoantonioara 4:05d5aa4d3f2d 113 printf(" :\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 114 }
marcoantonioara 4:05d5aa4d3f2d 115 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 116 }
marcoantonioara 4:05d5aa4d3f2d 117
marcoantonioara 4:05d5aa4d3f2d 118 void commandMenu(void) // TeraTerm Display (Enable Terminal Local Echo On).
marcoantonioara 4:05d5aa4d3f2d 119 {
marcoantonioara 4:05d5aa4d3f2d 120 printf("== Commands =========== (Comments) ===============================================\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 121 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 122 printf(" wren (Write Enable, set WEL=1, 06h)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 123 printf(" wrdi (Write Disable, set WEL=0, 04h)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 124 printf(" rdid (Read Manu & JEDEC Dev ID, 9Fh)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 125 printf(" rems (Read Elect. Manu & Dev ID,90h)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 126 printf(" res (Read Elect. Signiture, ABh)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 127 printf(" rdsr (Read Status Register, 05h)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 128 printf(" rdcr (Read Config Register, 15h)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 129 printf(" rdscr (Read Security Register, 2Bh)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 130 printf(" enso (Enter Secure OTP Area, B1h)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 131 printf(" exso (Exit Secure OTP Area, C1h)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 132 printf(" reset (ResetEnable + SoftwareReset = 66h + 99h)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 133 printf(" hp (Enter HP mode = WREN=06h + WRSR= 01h 000002h)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 134 printf(" lp (Enter LP mode = WREN=06h + WRSR= 01h 000000h)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 135 printf(" wrsr data_3B (Write SR 01h +3B data,ex: wrsr 000002h, set wren 1st)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 136 printf(" wrscr data_1B (Write Security Reg 2Fh +1B data, caution LDSO bit OTP!)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 137 printf(" se address (4KB Sector Erase, ex: be 0x00 <- note: sets WEL)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 138 printf(" be address (64KB Block Erase, ex: be 0x00 <- note: sets WEL)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 139 printf(" 32Kbe address (32KB Block Erase, ex: 32kbe 0x00 <- note: sets WEL)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 140 printf(" ce (Chip Erase = C7h, ex: ce <- note: sets WEL)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 141 printf(" pp address (256B Page Program, ex: pp 0x00 <- note: sets WEL)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 142 printf(" read address (read 1 byte of data, ex: read 0x0000)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 143 printf(" rd1 startadr endadr (read range of data, ex: rd1 0x00 0x10)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 144 printf(" fread startadr endadr (read range of data, ex: sfdp 0x00 0x10)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 145 printf(" sfdp startadr endadr (read range of SFDP, ex: sfdp 0x00 0x10)\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 146 printf("==================================================================================\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 147 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 148 }
marcoantonioara 4:05d5aa4d3f2d 149 /*
marcoantonioara 4:05d5aa4d3f2d 150 void page_program (int address, int numData){
marcoantonioara 4:05d5aa4d3f2d 151
marcoantonioara 4:05d5aa4d3f2d 152
marcoantonioara 4:05d5aa4d3f2d 153 int i ;
marcoantonioara 4:05d5aa4d3f2d 154
marcoantonioara 4:05d5aa4d3f2d 155 //scanf("%X", &address) ;
marcoantonioara 4:05d5aa4d3f2d 156 printf("writing %d bytes to 0x%X\n\r",numData, address) ;
marcoantonioara 4:05d5aa4d3f2d 157 spi_mem.writeEnable() ; // send WREN 1st
marcoantonioara 4:05d5aa4d3f2d 158 for (i = 0 ; i < numData ; i++ ) {
marcoantonioara 4:05d5aa4d3f2d 159 data[i] = i & 0xFF ;
marcoantonioara 4:05d5aa4d3f2d 160 }
marcoantonioara 4:05d5aa4d3f2d 161 spi_mem.programPage(address, data, numData) ;
marcoantonioara 4:05d5aa4d3f2d 162 data[0] = 0 ;
marcoantonioara 4:05d5aa4d3f2d 163 while((data[0] & 0x01) != 0x01 ) {
marcoantonioara 4:05d5aa4d3f2d 164 printf(".") ;
marcoantonioara 4:05d5aa4d3f2d 165 data[0] = spi_mem.readStatus() ;
marcoantonioara 4:05d5aa4d3f2d 166 wait(0.01) ;
marcoantonioara 4:05d5aa4d3f2d 167 }
marcoantonioara 4:05d5aa4d3f2d 168 printf("\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 169 printf(" PP = 02h done\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 170
marcoantonioara 4:05d5aa4d3f2d 171
marcoantonioara 4:05d5aa4d3f2d 172 }*/
marcoantonioara 4:05d5aa4d3f2d 173
marcoantonioara 4:05d5aa4d3f2d 174
marcoantonioara 4:05d5aa4d3f2d 175 void memory_test() {
marcoantonioara 4:05d5aa4d3f2d 176
marcoantonioara 4:05d5aa4d3f2d 177
marcoantonioara 4:05d5aa4d3f2d 178 char cmd[32] ;
marcoantonioara 4:05d5aa4d3f2d 179 //int i ;
marcoantonioara 4:05d5aa4d3f2d 180 int numData = 256 ;
marcoantonioara 4:05d5aa4d3f2d 181 unsigned long address = 0 ;
marcoantonioara 4:05d5aa4d3f2d 182 unsigned long rd_start_address = 0 ;
marcoantonioara 4:05d5aa4d3f2d 183 unsigned long rd_end_address = 0 ;
marcoantonioara 4:05d5aa4d3f2d 184 uint8_t data[256] ;
marcoantonioara 4:05d5aa4d3f2d 185
marcoantonioara 4:05d5aa4d3f2d 186 int i ;
marcoantonioara 4:05d5aa4d3f2d 187
marcoantonioara 4:05d5aa4d3f2d 188 spi_mem.writeEnable() ; // send WREN 1st
marcoantonioara 4:05d5aa4d3f2d 189 spi_mem.sectorErase(address) ;
marcoantonioara 4:05d5aa4d3f2d 190 data[0] = 0x01 ; // poll if WIP bit SR<0>=1
marcoantonioara 4:05d5aa4d3f2d 191 for (i=0 ; i<25 ; i++){
marcoantonioara 4:05d5aa4d3f2d 192
marcoantonioara 4:05d5aa4d3f2d 193 while((data[0] & 0x01) != 0 ) {
marcoantonioara 4:05d5aa4d3f2d 194 printf(".\n") ;
marcoantonioara 4:05d5aa4d3f2d 195 data[0] = spi_mem.readStatus() ;
marcoantonioara 4:05d5aa4d3f2d 196 wait(0.1) ;
marcoantonioara 4:05d5aa4d3f2d 197 } // end poll
marcoantonioara 4:05d5aa4d3f2d 198 printf("SE = 20h done\n\r") ;
marcoantonioara 4:05d5aa4d3f2d 199
marcoantonioara 4:05d5aa4d3f2d 200
marcoantonioara 4:05d5aa4d3f2d 201
marcoantonioara 4:05d5aa4d3f2d 202
marcoantonioara 4:05d5aa4d3f2d 203
marcoantonioara 4:05d5aa4d3f2d 204
marcoantonioara 4:05d5aa4d3f2d 205 address =0;
marcoantonioara 4:05d5aa4d3f2d 206 printf("writing %d bytes to 0x%X\n\r",numData, address) ;
marcoantonioara 4:05d5aa4d3f2d 207 spi_mem.writeEnable() ; // send WREN 1st
marcoantonioara 4:05d5aa4d3f2d 208 for (i = 0 ; i < numData ; i++ ) {
marcoantonioara 4:05d5aa4d3f2d 209 data[i] = i+1 & 0xFF ;
marcoantonioara 4:05d5aa4d3f2d 210 }
marcoantonioara 4:05d5aa4d3f2d 211 spi_mem.programPage(address, data, numData) ;
marcoantonioara 4:05d5aa4d3f2d 212 data[0] = 0 ;
marcoantonioara 4:05d5aa4d3f2d 213 i=0;
marcoantonioara 4:05d5aa4d3f2d 214 while((data[0] & 0x01) != 0x01 ) {
marcoantonioara 4:05d5aa4d3f2d 215 printf(",\n") ;
marcoantonioara 4:05d5aa4d3f2d 216 data[0] = spi_mem.readStatus() ;
marcoantonioara 4:05d5aa4d3f2d 217 wait(0.01) ;
marcoantonioara 4:05d5aa4d3f2d 218 if (i > 3000) break;
marcoantonioara 4:05d5aa4d3f2d 219 else i++;
marcoantonioara 4:05d5aa4d3f2d 220 }
marcoantonioara 4:05d5aa4d3f2d 221 }