CEBF746 Module.. PC <--> This Module (SPI Master) <-->

Dependencies:   cube_CEBF746 cube_crc_16 mbed

Committer:
gandol2
Date:
Wed Oct 12 00:48:11 2016 +0000
Revision:
0:9a61123385e9
Child:
1:37d21610ce62
Child:
5:589ab465ed00
master first

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gandol2 0:9a61123385e9 1 // firmware for NUCLEO-F746ZG
gandol2 0:9a61123385e9 2 // ======== SPI Master Pin
gandol2 0:9a61123385e9 3 // PA5 - SCK
gandol2 0:9a61123385e9 4 // PA6 - MISO
gandol2 0:9a61123385e9 5 // PA7 - MOSI
gandol2 0:9a61123385e9 6 // PA14 - SEL
gandol2 0:9a61123385e9 7
gandol2 0:9a61123385e9 8
gandol2 0:9a61123385e9 9 #include "mbed.h"
gandol2 0:9a61123385e9 10 #include <SPI.h>
gandol2 0:9a61123385e9 11
gandol2 0:9a61123385e9 12 #define DEBUG_SPI
gandol2 0:9a61123385e9 13
gandol2 0:9a61123385e9 14 #ifdef DEBUG_SPI
gandol2 0:9a61123385e9 15 #define PRINTD(arg1,arg2...) printf(arg1,##arg2)
gandol2 0:9a61123385e9 16 #endif
gandol2 0:9a61123385e9 17
gandol2 0:9a61123385e9 18 // ======== SPI Master Pin define
gandol2 0:9a61123385e9 19 #define SPI_SCLK PA_5
gandol2 0:9a61123385e9 20 #define SPI_MISO PA_6
gandol2 0:9a61123385e9 21 #define SPI_MOSI PA_7
gandol2 0:9a61123385e9 22 #define SPI_SSEL PA_4
gandol2 0:9a61123385e9 23
gandol2 0:9a61123385e9 24 #define MASTER
gandol2 0:9a61123385e9 25
gandol2 0:9a61123385e9 26 SPI spi_master(SPI_MOSI,SPI_MISO,SPI_SCLK); // MOSI, MISO, SCLK(CLK,SCK)
gandol2 0:9a61123385e9 27 DigitalOut cs(SPI_SSEL);
gandol2 0:9a61123385e9 28
gandol2 0:9a61123385e9 29 Serial pc_serial(USBTX, USBRX);
gandol2 0:9a61123385e9 30
gandol2 0:9a61123385e9 31
gandol2 0:9a61123385e9 32 void SPI_INIT()
gandol2 0:9a61123385e9 33 {
gandol2 0:9a61123385e9 34 pc_serial.printf("Set SPI init..\n");
gandol2 0:9a61123385e9 35 pc_serial.printf("Set SPI format..\n");
gandol2 0:9a61123385e9 36 spi_master.format(8,0);
gandol2 0:9a61123385e9 37 pc_serial.printf("Set frequency to default..\n");
gandol2 0:9a61123385e9 38 //spi_master.frequency(50000000); // default 1MHz
gandol2 0:9a61123385e9 39 spi_master.frequency(1000000);
gandol2 0:9a61123385e9 40 }
gandol2 0:9a61123385e9 41 /*
gandol2 0:9a61123385e9 42 void SPI_Write()
gandol2 0:9a61123385e9 43 {
gandol2 0:9a61123385e9 44 char temp;
gandol2 0:9a61123385e9 45 int i,value;
gandol2 0:9a61123385e9 46 char response;
gandol2 0:9a61123385e9 47 char tx_cnt = -1;
gandol2 0:9a61123385e9 48 char rx_cnt = -1;
gandol2 0:9a61123385e9 49 char tx_buffer[255]={0};
gandol2 0:9a61123385e9 50 char rx_buffer[255]={0};
gandol2 0:9a61123385e9 51 PRINTD("\n==========MASTER==========\n");
gandol2 0:9a61123385e9 52 PRINTD("DATA SEND START...\n");
gandol2 0:9a61123385e9 53 PRINTD("Lock SPI BUS..\n");
gandol2 0:9a61123385e9 54
gandol2 0:9a61123385e9 55 while(1)
gandol2 0:9a61123385e9 56 {
gandol2 0:9a61123385e9 57
gandol2 0:9a61123385e9 58 temp=getchar();
gandol2 0:9a61123385e9 59 tx_buffer[++tx_cnt]=temp;
gandol2 0:9a61123385e9 60 if(temp==0x0d)
gandol2 0:9a61123385e9 61 {
gandol2 0:9a61123385e9 62 tx_buffer[tx_cnt]=0;
gandol2 0:9a61123385e9 63 PRINTD("\nData send Finish...\n");
gandol2 0:9a61123385e9 64 for(i=0;i<=tx_cnt;++i)
gandol2 0:9a61123385e9 65 {
gandol2 0:9a61123385e9 66 PRINTD("%c[%02x]",tx_buffer[i],tx_buffer[i]);
gandol2 0:9a61123385e9 67 }
gandol2 0:9a61123385e9 68 PRINTD("\n\n");
gandol2 0:9a61123385e9 69 spi_master.lock();
gandol2 0:9a61123385e9 70 for(i=0;i<=tx_cnt;++i)
gandol2 0:9a61123385e9 71 {
gandol2 0:9a61123385e9 72 value=tx_buffer[i];
gandol2 0:9a61123385e9 73 PRINTD("[M]write[%d]=%c[%02x]\n",i,value,value);
gandol2 0:9a61123385e9 74 cs=0;
gandol2 0:9a61123385e9 75 response=spi_master.write(value);
gandol2 0:9a61123385e9 76 cs=-1;
gandol2 0:9a61123385e9 77 PRINTD("[M]receive=%c[%x]\n",response,response);
gandol2 0:9a61123385e9 78 rx_buffer[++rx_cnt]=response;
gandol2 0:9a61123385e9 79 }
gandol2 0:9a61123385e9 80 spi_master.unlock();
gandol2 0:9a61123385e9 81 for(i=0;i<255;++i)
gandol2 0:9a61123385e9 82 {
gandol2 0:9a61123385e9 83 tx_buffer[i]=0;
gandol2 0:9a61123385e9 84 }
gandol2 0:9a61123385e9 85 for(i=0;i<=tx_cnt;i++)
gandol2 0:9a61123385e9 86 {
gandol2 0:9a61123385e9 87 PRINTD("init_tx_buffer[%d]=%c\n",i,tx_buffer[i]);
gandol2 0:9a61123385e9 88 }
gandol2 0:9a61123385e9 89 tx_cnt=-1;
gandol2 0:9a61123385e9 90 }
gandol2 0:9a61123385e9 91 else
gandol2 0:9a61123385e9 92 {
gandol2 0:9a61123385e9 93 PRINTD("%c[%02x]",tx_buffer[tx_cnt],tx_buffer[tx_cnt]);
gandol2 0:9a61123385e9 94 }
gandol2 0:9a61123385e9 95 }
gandol2 0:9a61123385e9 96 }
gandol2 0:9a61123385e9 97 */
gandol2 0:9a61123385e9 98
gandol2 0:9a61123385e9 99 #define EEPROM_WREN 0x06 // Write Enable
gandol2 0:9a61123385e9 100 #define EEPROM_WRDI 0x04 // Write Disable
gandol2 0:9a61123385e9 101 #define EEPROM_RDSR 0x05 // Read Status Register
gandol2 0:9a61123385e9 102 #define EEPROM_WRSR 0x01 // Write Status Register
gandol2 0:9a61123385e9 103 #define EEPROM_READ 0x03 // Read EEPROM Memory
gandol2 0:9a61123385e9 104 #define EEPROM_WRITE 0x02 // Write EEPROM Memory
gandol2 0:9a61123385e9 105 #define EEPROM_MULTIREAD 0x07 // Write EEPROM Memory
gandol2 0:9a61123385e9 106
gandol2 0:9a61123385e9 107
gandol2 0:9a61123385e9 108 enum cubeMenu { EEPROM_Write_Enable = 1 ,
gandol2 0:9a61123385e9 109 EEPROM_Write_Disable,
gandol2 0:9a61123385e9 110 EEPROM_Read_Status,
gandol2 0:9a61123385e9 111 EEPROM_Write_Status,
gandol2 0:9a61123385e9 112 EEPROM_Write_Memory,
gandol2 0:9a61123385e9 113 EEPROM_Read_Memory,
gandol2 0:9a61123385e9 114 TEST_Multi_Byte_Read,
gandol2 0:9a61123385e9 115 EXIT_Program = 9
gandol2 0:9a61123385e9 116 };
gandol2 0:9a61123385e9 117
gandol2 0:9a61123385e9 118 void print_menu(void)
gandol2 0:9a61123385e9 119 {
gandol2 0:9a61123385e9 120 pc_serial.printf("\n\n\n\n\n\n\n");
gandol2 0:9a61123385e9 121 pc_serial.printf("-----------[MENU]----------\n");
gandol2 0:9a61123385e9 122 pc_serial.printf("1) Write Enable\n");//, cubeMenu.EEPROM_Write_Enable);
gandol2 0:9a61123385e9 123 pc_serial.printf("2) Write Disable\n");//, cubeMenu.EEPROM_Write_Disable);
gandol2 0:9a61123385e9 124 pc_serial.printf("3) Read Status Register\n");//, cubeMenu.EEPROM_Read_Status);
gandol2 0:9a61123385e9 125 pc_serial.printf("4) Write Status Register\n");//,cubeMenu.EEPROM_Write_Status);
gandol2 0:9a61123385e9 126 pc_serial.printf("5) Write Memory\n");//, cubeMenu.EEPROM_Write_Memory);
gandol2 0:9a61123385e9 127 pc_serial.printf("6) Read Memory\n");//, cubeMenu.EEPROM_Read_Memory);
gandol2 0:9a61123385e9 128 pc_serial.printf("7) multi byte read\n");//, cubeMenu.TEST_Multi_Byte_Read);
gandol2 0:9a61123385e9 129 pc_serial.printf("9) Exit program\n");//, cubeMenu.EXIT_Program);
gandol2 0:9a61123385e9 130 pc_serial.printf("---------------------------\n");
gandol2 0:9a61123385e9 131 pc_serial.printf("input menu : ");
gandol2 0:9a61123385e9 132 }
gandol2 0:9a61123385e9 133
gandol2 0:9a61123385e9 134 void spi_start(void)
gandol2 0:9a61123385e9 135 {
gandol2 0:9a61123385e9 136 spi_master.lock();
gandol2 0:9a61123385e9 137 cs = 0;
gandol2 0:9a61123385e9 138 wait_us(0);
gandol2 0:9a61123385e9 139 }
gandol2 0:9a61123385e9 140 void spi_end(void)
gandol2 0:9a61123385e9 141 {
gandol2 0:9a61123385e9 142 wait_us(10);
gandol2 0:9a61123385e9 143 cs = 1;
gandol2 0:9a61123385e9 144 spi_master.unlock();
gandol2 0:9a61123385e9 145 }
gandol2 0:9a61123385e9 146 void spi_dummy_write(void)
gandol2 0:9a61123385e9 147 {
gandol2 0:9a61123385e9 148 char dummy_read;
gandol2 0:9a61123385e9 149 spi_start();
gandol2 0:9a61123385e9 150 dummy_read = spi_master.write( 0x00 );
gandol2 0:9a61123385e9 151 spi_end();
gandol2 0:9a61123385e9 152 }
gandol2 0:9a61123385e9 153
gandol2 0:9a61123385e9 154 /*
gandol2 0:9a61123385e9 155 @convertedData : converted Data
gandol2 0:9a61123385e9 156 @sourceBuf : ASCII data array
gandol2 0:9a61123385e9 157 @lenght : sourceBuf length
gandol2 0:9a61123385e9 158
gandol2 0:9a61123385e9 159 @return : 0 is valid hex format, other is error
gandol2 0:9a61123385e9 160 */
gandol2 0:9a61123385e9 161 int converHex(char * convertedData, char * sourceBuf, int length)
gandol2 0:9a61123385e9 162 {
gandol2 0:9a61123385e9 163 int ret = 0;
gandol2 0:9a61123385e9 164 char tempBuf[length];
gandol2 0:9a61123385e9 165 *convertedData = 0;
gandol2 0:9a61123385e9 166
gandol2 0:9a61123385e9 167
gandol2 0:9a61123385e9 168 for(int iCnt = 0 ; iCnt < length ; iCnt++)
gandol2 0:9a61123385e9 169 {
gandol2 0:9a61123385e9 170 if( ('0' <= *(sourceBuf+iCnt)) && ('9' >= *(sourceBuf+iCnt)) )
gandol2 0:9a61123385e9 171 {
gandol2 0:9a61123385e9 172 tempBuf[iCnt] = (*(sourceBuf+iCnt) - 48);
gandol2 0:9a61123385e9 173 }
gandol2 0:9a61123385e9 174 else if( ('A' <= *(sourceBuf+iCnt)) && ('F' >= *(sourceBuf+iCnt)) )
gandol2 0:9a61123385e9 175 {
gandol2 0:9a61123385e9 176 tempBuf[iCnt] = (*(sourceBuf+iCnt) - 55);
gandol2 0:9a61123385e9 177 }
gandol2 0:9a61123385e9 178 else if( ('a' <= *(sourceBuf+iCnt)) && ('f' >= *(sourceBuf+iCnt)) )
gandol2 0:9a61123385e9 179 {
gandol2 0:9a61123385e9 180 tempBuf[iCnt] = (*(sourceBuf+iCnt) - 87);
gandol2 0:9a61123385e9 181 }
gandol2 0:9a61123385e9 182 else // error
gandol2 0:9a61123385e9 183 {
gandol2 0:9a61123385e9 184 ret = -1;
gandol2 0:9a61123385e9 185 return ret;
gandol2 0:9a61123385e9 186 }
gandol2 0:9a61123385e9 187 }
gandol2 0:9a61123385e9 188
gandol2 0:9a61123385e9 189 //pc_serial.printf("[TEST] tempBuf[0] = 0x%02X\n", tempBuf[0]);
gandol2 0:9a61123385e9 190 //pc_serial.printf("[TEST] tempBuf[1] = 0x%02X\n", tempBuf[1]);
gandol2 0:9a61123385e9 191 *convertedData = ((tempBuf[0] & 0x0F) << 4) | (tempBuf[1] & 0x0F);
gandol2 0:9a61123385e9 192 //pc_serial.printf("[TEST] convertedData = 0x%02X\n", *convertedData);
gandol2 0:9a61123385e9 193 return ret;
gandol2 0:9a61123385e9 194 }
gandol2 0:9a61123385e9 195
gandol2 0:9a61123385e9 196 // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ main();
gandol2 0:9a61123385e9 197 int main()
gandol2 0:9a61123385e9 198 {
gandol2 0:9a61123385e9 199 char dummyRead;
gandol2 0:9a61123385e9 200 char inputMenuNum = 0;
gandol2 0:9a61123385e9 201 char statusReg = 0x00;
gandol2 0:9a61123385e9 202 char test_data[10]={0};
gandol2 0:9a61123385e9 203
gandol2 0:9a61123385e9 204 int spiTxCnt = 0;
gandol2 0:9a61123385e9 205 int spiRxCnt = 0;
gandol2 0:9a61123385e9 206 char spiTxReadyFlag = 0;
gandol2 0:9a61123385e9 207
gandol2 0:9a61123385e9 208
gandol2 0:9a61123385e9 209 int res;
gandol2 0:9a61123385e9 210
gandol2 0:9a61123385e9 211
gandol2 0:9a61123385e9 212 int spiRxTempBuf = 0;
gandol2 0:9a61123385e9 213 char serialRxBuf[255];
gandol2 0:9a61123385e9 214 char spiRxBuf[255];
gandol2 0:9a61123385e9 215 int serialRxLen = 0;
gandol2 0:9a61123385e9 216
gandol2 0:9a61123385e9 217 char eepAddrBuf[2] = {0};
gandol2 0:9a61123385e9 218 char eepAddr = 0;
gandol2 0:9a61123385e9 219
gandol2 0:9a61123385e9 220 char eepDataBuf[2] = {0};
gandol2 0:9a61123385e9 221 char eepData = 0;
gandol2 0:9a61123385e9 222 int eepReadData = 0;
gandol2 0:9a61123385e9 223 int maxInputCnt = 0;
gandol2 0:9a61123385e9 224
gandol2 0:9a61123385e9 225
gandol2 0:9a61123385e9 226
gandol2 0:9a61123385e9 227 int ret;
gandol2 0:9a61123385e9 228
gandol2 0:9a61123385e9 229 SPI_INIT();
gandol2 0:9a61123385e9 230 spi_dummy_write();
gandol2 0:9a61123385e9 231
gandol2 0:9a61123385e9 232
gandol2 0:9a61123385e9 233
gandol2 0:9a61123385e9 234
gandol2 0:9a61123385e9 235 pc_serial.printf("\n\n========== SPI Master for EEPROM [Start] ==========\n");
gandol2 0:9a61123385e9 236
gandol2 0:9a61123385e9 237
gandol2 0:9a61123385e9 238 while(1)
gandol2 0:9a61123385e9 239 {
gandol2 0:9a61123385e9 240 print_menu();
gandol2 0:9a61123385e9 241 inputMenuNum = pc_serial.getc();
gandol2 0:9a61123385e9 242
gandol2 0:9a61123385e9 243 pc_serial.printf("[DEBUG] input menu number = %c\n", inputMenuNum);
gandol2 0:9a61123385e9 244
gandol2 0:9a61123385e9 245 if( ('0' < inputMenuNum) && ('9' >= inputMenuNum) )
gandol2 0:9a61123385e9 246 {
gandol2 0:9a61123385e9 247 inputMenuNum = inputMenuNum - 48;
gandol2 0:9a61123385e9 248 }
gandol2 0:9a61123385e9 249 else
gandol2 0:9a61123385e9 250 {
gandol2 0:9a61123385e9 251 pc_serial.printf("[INFO] correct input menu number.. please retry..\n");
gandol2 0:9a61123385e9 252 wait(1);
gandol2 0:9a61123385e9 253 continue;
gandol2 0:9a61123385e9 254 }
gandol2 0:9a61123385e9 255
gandol2 0:9a61123385e9 256
gandol2 0:9a61123385e9 257
gandol2 0:9a61123385e9 258 spi_start();
gandol2 0:9a61123385e9 259 switch(inputMenuNum)
gandol2 0:9a61123385e9 260 {
gandol2 0:9a61123385e9 261 case 1: // Write Enable =================================[OK]
gandol2 0:9a61123385e9 262 pc_serial.printf("[DEBUG] Write Enable progress..\n");
gandol2 0:9a61123385e9 263 dummyRead = spi_master.write(EEPROM_WREN);
gandol2 0:9a61123385e9 264 break;
gandol2 0:9a61123385e9 265
gandol2 0:9a61123385e9 266
gandol2 0:9a61123385e9 267
gandol2 0:9a61123385e9 268 case 2: // Write Disable =================================[OK]
gandol2 0:9a61123385e9 269 pc_serial.printf("[DEBUG] Write Disable progress..\n");
gandol2 0:9a61123385e9 270 dummyRead = spi_master.write(EEPROM_WRDI);
gandol2 0:9a61123385e9 271 break;
gandol2 0:9a61123385e9 272
gandol2 0:9a61123385e9 273
gandol2 0:9a61123385e9 274
gandol2 0:9a61123385e9 275 case 3: // Read Status Register =================================[OK]
gandol2 0:9a61123385e9 276 pc_serial.printf("[DEBUG] Read Status Register progress..\n");
gandol2 0:9a61123385e9 277 spi_master.write(EEPROM_RDSR);
gandol2 0:9a61123385e9 278 statusReg = spi_master.write(EEPROM_RDSR);
gandol2 0:9a61123385e9 279
gandol2 0:9a61123385e9 280 // TODO : print statusReg data to serial
gandol2 0:9a61123385e9 281 pc_serial.printf("[INFO] Status Register Data : 0x%02X\n", statusReg);
gandol2 0:9a61123385e9 282
gandol2 0:9a61123385e9 283 break;
gandol2 0:9a61123385e9 284
gandol2 0:9a61123385e9 285
gandol2 0:9a61123385e9 286
gandol2 0:9a61123385e9 287
gandol2 0:9a61123385e9 288
gandol2 0:9a61123385e9 289 case 4: // Write Status Register =================================
gandol2 0:9a61123385e9 290 pc_serial.printf("[DEBUG] Write Status Register progress..\n");
gandol2 0:9a61123385e9 291 // TODO : input data for serial
gandol2 0:9a61123385e9 292
gandol2 0:9a61123385e9 293 spi_master.write(EEPROM_WRSR);
gandol2 0:9a61123385e9 294 spi_master.write(statusReg);
gandol2 0:9a61123385e9 295 break;
gandol2 0:9a61123385e9 296
gandol2 0:9a61123385e9 297
gandol2 0:9a61123385e9 298
gandol2 0:9a61123385e9 299
gandol2 0:9a61123385e9 300
gandol2 0:9a61123385e9 301 case 5: // Write Memory =================================
gandol2 0:9a61123385e9 302 pc_serial.printf("[DEBUG] Write Memory progress..\n");
gandol2 0:9a61123385e9 303
gandol2 0:9a61123385e9 304
gandol2 0:9a61123385e9 305
gandol2 0:9a61123385e9 306
gandol2 0:9a61123385e9 307 // EEPROM Address input
gandol2 0:9a61123385e9 308
gandol2 0:9a61123385e9 309 maxInputCnt = 3;
gandol2 0:9a61123385e9 310 while(maxInputCnt--)
gandol2 0:9a61123385e9 311 {
gandol2 0:9a61123385e9 312 pc_serial.printf("input Address (hex format : 00~FF) : ");
gandol2 0:9a61123385e9 313 for(int iCnt = 0 ; iCnt < 2 ; ++iCnt)
gandol2 0:9a61123385e9 314 {
gandol2 0:9a61123385e9 315 eepAddrBuf[iCnt] = pc_serial.getc();
gandol2 0:9a61123385e9 316 pc_serial.printf("%c", eepAddrBuf[iCnt]);
gandol2 0:9a61123385e9 317 }
gandol2 0:9a61123385e9 318
gandol2 0:9a61123385e9 319 ret = converHex(&eepAddr , eepAddrBuf, 2);
gandol2 0:9a61123385e9 320
gandol2 0:9a61123385e9 321 if(0 == ret)
gandol2 0:9a61123385e9 322 {
gandol2 0:9a61123385e9 323 //pc_serial.printf("\n[DEBUG] before convert hex [0x%02x] \n", eepAddr);
gandol2 0:9a61123385e9 324 break;
gandol2 0:9a61123385e9 325 }
gandol2 0:9a61123385e9 326 else // error
gandol2 0:9a61123385e9 327 {
gandol2 0:9a61123385e9 328 pc_serial.printf("\n[INFO] hex formet error!\n");
gandol2 0:9a61123385e9 329 continue;
gandol2 0:9a61123385e9 330 }
gandol2 0:9a61123385e9 331 }
gandol2 0:9a61123385e9 332
gandol2 0:9a61123385e9 333
gandol2 0:9a61123385e9 334 if(0 == ret)
gandol2 0:9a61123385e9 335 {
gandol2 0:9a61123385e9 336 // EEPROM data input
gandol2 0:9a61123385e9 337 maxInputCnt = 3;
gandol2 0:9a61123385e9 338 while(maxInputCnt--)
gandol2 0:9a61123385e9 339 {
gandol2 0:9a61123385e9 340 pc_serial.printf("\ninput Data (hex format : 00~FF) : ");
gandol2 0:9a61123385e9 341 for(int iCnt = 0 ; iCnt < 2 ; ++iCnt)
gandol2 0:9a61123385e9 342 {
gandol2 0:9a61123385e9 343 eepDataBuf[iCnt] = pc_serial.getc();
gandol2 0:9a61123385e9 344 pc_serial.printf("%c", eepDataBuf[iCnt]);
gandol2 0:9a61123385e9 345 }
gandol2 0:9a61123385e9 346
gandol2 0:9a61123385e9 347 int ret = converHex(&eepData , eepDataBuf, 2);
gandol2 0:9a61123385e9 348 if(0 == ret)
gandol2 0:9a61123385e9 349 {
gandol2 0:9a61123385e9 350
gandol2 0:9a61123385e9 351 pc_serial.printf("\n[INFO] SPI Write Memory.... Start! \n");
gandol2 0:9a61123385e9 352 //pc_serial.printf("\n[DEBUG] Addr[0x%02X] Data[0x%02X] \n", eepAddr, eepData);
gandol2 0:9a61123385e9 353
gandol2 0:9a61123385e9 354 spi_master.write(EEPROM_RDSR);
gandol2 0:9a61123385e9 355 if(! (spi_master.write(EEPROM_RDSR) & 0x01) )
gandol2 0:9a61123385e9 356 {
gandol2 0:9a61123385e9 357 spi_master.write(EEPROM_WRITE);
gandol2 0:9a61123385e9 358 spi_master.write(eepAddr);
gandol2 0:9a61123385e9 359 spi_master.write(eepData);
gandol2 0:9a61123385e9 360 pc_serial.printf("\n[INFO] SPI Write success \n");
gandol2 0:9a61123385e9 361 }
gandol2 0:9a61123385e9 362 else
gandol2 0:9a61123385e9 363 {
gandol2 0:9a61123385e9 364 pc_serial.printf("\n[INFO] SPI Write fail.. device is busy! \n");
gandol2 0:9a61123385e9 365 }
gandol2 0:9a61123385e9 366
gandol2 0:9a61123385e9 367
gandol2 0:9a61123385e9 368 break;
gandol2 0:9a61123385e9 369 }
gandol2 0:9a61123385e9 370 else // error
gandol2 0:9a61123385e9 371 {
gandol2 0:9a61123385e9 372 pc_serial.printf("\n[INFO] hex formet error!\n");
gandol2 0:9a61123385e9 373 continue;
gandol2 0:9a61123385e9 374 }
gandol2 0:9a61123385e9 375 }
gandol2 0:9a61123385e9 376 }
gandol2 0:9a61123385e9 377
gandol2 0:9a61123385e9 378
gandol2 0:9a61123385e9 379 break;
gandol2 0:9a61123385e9 380
gandol2 0:9a61123385e9 381
gandol2 0:9a61123385e9 382
gandol2 0:9a61123385e9 383
gandol2 0:9a61123385e9 384
gandol2 0:9a61123385e9 385 case 6: // Read Memory =================================
gandol2 0:9a61123385e9 386 pc_serial.printf("[DEBUG] Read Memory progress..\n");
gandol2 0:9a61123385e9 387
gandol2 0:9a61123385e9 388 // EEPROM Address input
gandol2 0:9a61123385e9 389
gandol2 0:9a61123385e9 390 maxInputCnt = 3;
gandol2 0:9a61123385e9 391 while(maxInputCnt--)
gandol2 0:9a61123385e9 392 {
gandol2 0:9a61123385e9 393 pc_serial.printf("input Address (hex format : 00~FF) : ");
gandol2 0:9a61123385e9 394 for(int iCnt = 0 ; iCnt < 2 ; ++iCnt)
gandol2 0:9a61123385e9 395 {
gandol2 0:9a61123385e9 396 eepAddrBuf[iCnt] = pc_serial.getc();
gandol2 0:9a61123385e9 397 pc_serial.printf("%c", eepAddrBuf[iCnt]);
gandol2 0:9a61123385e9 398 }
gandol2 0:9a61123385e9 399
gandol2 0:9a61123385e9 400 ret = converHex(&eepAddr , eepAddrBuf, 2);
gandol2 0:9a61123385e9 401
gandol2 0:9a61123385e9 402 if(0 == ret)
gandol2 0:9a61123385e9 403 {
gandol2 0:9a61123385e9 404 //pc_serial.printf("\n[DEBUG] before convert hex [0x%02x] \n", eepAddr);
gandol2 0:9a61123385e9 405 spi_master.write(EEPROM_READ);
gandol2 0:9a61123385e9 406 spi_master.write(eepAddr);
gandol2 0:9a61123385e9 407
gandol2 0:9a61123385e9 408
gandol2 0:9a61123385e9 409 eepReadData = spi_master.write(0);
gandol2 0:9a61123385e9 410
gandol2 0:9a61123385e9 411
gandol2 0:9a61123385e9 412 pc_serial.printf("\n[DEBUG] Read EEPROM Addr[0x%02X] Data[0x%02X] \n", eepAddr, eepReadData);
gandol2 0:9a61123385e9 413 break;
gandol2 0:9a61123385e9 414 }
gandol2 0:9a61123385e9 415 else // error
gandol2 0:9a61123385e9 416 {
gandol2 0:9a61123385e9 417 pc_serial.printf("\n[INFO] hex formet error!\n");
gandol2 0:9a61123385e9 418 continue;
gandol2 0:9a61123385e9 419 }
gandol2 0:9a61123385e9 420 }
gandol2 0:9a61123385e9 421
gandol2 0:9a61123385e9 422
gandol2 0:9a61123385e9 423
gandol2 0:9a61123385e9 424 break;
gandol2 0:9a61123385e9 425
gandol2 0:9a61123385e9 426
gandol2 0:9a61123385e9 427 case 7:
gandol2 0:9a61123385e9 428 pc_serial.printf("\n[DEBUG] TEST_Multi_Byte_Read\n");
gandol2 0:9a61123385e9 429
gandol2 0:9a61123385e9 430 maxInputCnt = 3;
gandol2 0:9a61123385e9 431 while(maxInputCnt--)
gandol2 0:9a61123385e9 432 {
gandol2 0:9a61123385e9 433 pc_serial.printf("input Address (hex format : 00~FF) : ");
gandol2 0:9a61123385e9 434 for(int iCnt = 0 ; iCnt < 2 ; ++iCnt)
gandol2 0:9a61123385e9 435 {
gandol2 0:9a61123385e9 436 eepAddrBuf[iCnt] = pc_serial.getc();
gandol2 0:9a61123385e9 437 pc_serial.printf("%c", eepAddrBuf[iCnt]);
gandol2 0:9a61123385e9 438 }
gandol2 0:9a61123385e9 439
gandol2 0:9a61123385e9 440 ret = converHex(&eepAddr , eepAddrBuf, 2);
gandol2 0:9a61123385e9 441
gandol2 0:9a61123385e9 442 if(0 == ret)
gandol2 0:9a61123385e9 443 {
gandol2 0:9a61123385e9 444 spi_master.write(EEPROM_MULTIREAD);
gandol2 0:9a61123385e9 445 spi_master.write(eepAddr);
gandol2 0:9a61123385e9 446
gandol2 0:9a61123385e9 447
gandol2 0:9a61123385e9 448 for(int i=0;i<5;i++)
gandol2 0:9a61123385e9 449 {
gandol2 0:9a61123385e9 450 wait_ms(10);
gandol2 0:9a61123385e9 451 //test_data[i] = spi_master.write(0);
gandol2 0:9a61123385e9 452 //spi_master.write(++eepAddr);
gandol2 0:9a61123385e9 453 test_data[i] = spi_master.write(0); // dummy write
gandol2 0:9a61123385e9 454
gandol2 0:9a61123385e9 455 }
gandol2 0:9a61123385e9 456
gandol2 0:9a61123385e9 457 for(int i=0;i<5;i++)
gandol2 0:9a61123385e9 458 {
gandol2 0:9a61123385e9 459 printf("\n[DEBUG] Read EEPROM Data[0x%02X]\n",test_data[i]);
gandol2 0:9a61123385e9 460 }
gandol2 0:9a61123385e9 461
gandol2 0:9a61123385e9 462 //pc_serial.printf("\n[DEBUG] Read EEPROM Addr[0x%02X]\n", eepAddr);
gandol2 0:9a61123385e9 463 break;
gandol2 0:9a61123385e9 464 }
gandol2 0:9a61123385e9 465 else // error
gandol2 0:9a61123385e9 466 {
gandol2 0:9a61123385e9 467 pc_serial.printf("\n[INFO] hex formet error!\n");
gandol2 0:9a61123385e9 468 continue;
gandol2 0:9a61123385e9 469 }
gandol2 0:9a61123385e9 470 }
gandol2 0:9a61123385e9 471
gandol2 0:9a61123385e9 472
gandol2 0:9a61123385e9 473 break;
gandol2 0:9a61123385e9 474
gandol2 0:9a61123385e9 475
gandol2 0:9a61123385e9 476
gandol2 0:9a61123385e9 477
gandol2 0:9a61123385e9 478
gandol2 0:9a61123385e9 479 case 9:
gandol2 0:9a61123385e9 480 spi_end();
gandol2 0:9a61123385e9 481 pc_serial.printf("exit program... thank you\n");
gandol2 0:9a61123385e9 482 //return 0;
gandol2 0:9a61123385e9 483 default:
gandol2 0:9a61123385e9 484 }
gandol2 0:9a61123385e9 485 spi_end();
gandol2 0:9a61123385e9 486
gandol2 0:9a61123385e9 487 }
gandol2 0:9a61123385e9 488
gandol2 0:9a61123385e9 489
gandol2 0:9a61123385e9 490
gandol2 0:9a61123385e9 491
gandol2 0:9a61123385e9 492
gandol2 0:9a61123385e9 493
gandol2 0:9a61123385e9 494
gandol2 0:9a61123385e9 495
gandol2 0:9a61123385e9 496
gandol2 0:9a61123385e9 497
gandol2 0:9a61123385e9 498
gandol2 0:9a61123385e9 499
gandol2 0:9a61123385e9 500
gandol2 0:9a61123385e9 501
gandol2 0:9a61123385e9 502
gandol2 0:9a61123385e9 503
gandol2 0:9a61123385e9 504
gandol2 0:9a61123385e9 505
gandol2 0:9a61123385e9 506
gandol2 0:9a61123385e9 507
gandol2 0:9a61123385e9 508
gandol2 0:9a61123385e9 509
gandol2 0:9a61123385e9 510
gandol2 0:9a61123385e9 511
gandol2 0:9a61123385e9 512
gandol2 0:9a61123385e9 513
gandol2 0:9a61123385e9 514
gandol2 0:9a61123385e9 515
gandol2 0:9a61123385e9 516
gandol2 0:9a61123385e9 517 while(1)
gandol2 0:9a61123385e9 518 {
gandol2 0:9a61123385e9 519 if(0 != pc_serial.readable()) // wait serial input..
gandol2 0:9a61123385e9 520 {
gandol2 0:9a61123385e9 521 pc_serial.scanf("%s", serialRxBuf);
gandol2 0:9a61123385e9 522 serialRxLen = strlen(serialRxBuf);
gandol2 0:9a61123385e9 523 pc_serial.printf("len=[%d] %s\n", serialRxLen, serialRxBuf);
gandol2 0:9a61123385e9 524 spiTxReadyFlag = 1;
gandol2 0:9a61123385e9 525 }
gandol2 0:9a61123385e9 526 if(1 == spiTxReadyFlag)
gandol2 0:9a61123385e9 527 {
gandol2 0:9a61123385e9 528 // SPI Send Start
gandol2 0:9a61123385e9 529 spi_master.lock();
gandol2 0:9a61123385e9 530 cs = 0;
gandol2 0:9a61123385e9 531 for(spiTxCnt = 0 ; spiTxCnt < serialRxLen + 1 ; ++spiTxCnt)
gandol2 0:9a61123385e9 532 {
gandol2 0:9a61123385e9 533 //printf("send Cnt[%d] [0x%02X]\n", spiTxCnt, serialRxBuf[spiTxCnt]);
gandol2 0:9a61123385e9 534 spi_master.write(serialRxBuf[spiTxCnt]);
gandol2 0:9a61123385e9 535 //res=spi_master.write(serialRxBuf[spiTxCnt]);
gandol2 0:9a61123385e9 536 //PRINTD("res=%c 0x[%02x]\n",res,res);
gandol2 0:9a61123385e9 537 //spiRxBuf[spiRxCnt++]=res;
gandol2 0:9a61123385e9 538 }
gandol2 0:9a61123385e9 539 cs = 1;
gandol2 0:9a61123385e9 540 spi_master.unlock();
gandol2 0:9a61123385e9 541 spiTxReadyFlag = 0;
gandol2 0:9a61123385e9 542 }
gandol2 0:9a61123385e9 543
gandol2 0:9a61123385e9 544
gandol2 0:9a61123385e9 545
gandol2 0:9a61123385e9 546 /* TODO " ----(SPI)-----> master --> serial " */
gandol2 0:9a61123385e9 547
gandol2 0:9a61123385e9 548
gandol2 0:9a61123385e9 549 #if 0
gandol2 0:9a61123385e9 550 if(res!=0)
gandol2 0:9a61123385e9 551 {
gandol2 0:9a61123385e9 552 PRINTD("res=%d\n",res);
gandol2 0:9a61123385e9 553 PRINTD("res=%s\n",spiRxBuf);
gandol2 0:9a61123385e9 554 }
gandol2 0:9a61123385e9 555 #endif
gandol2 0:9a61123385e9 556
gandol2 0:9a61123385e9 557
gandol2 0:9a61123385e9 558 }
gandol2 0:9a61123385e9 559
gandol2 0:9a61123385e9 560
gandol2 0:9a61123385e9 561
gandol2 0:9a61123385e9 562
gandol2 0:9a61123385e9 563
gandol2 0:9a61123385e9 564
gandol2 0:9a61123385e9 565
gandol2 0:9a61123385e9 566
gandol2 0:9a61123385e9 567
gandol2 0:9a61123385e9 568
gandol2 0:9a61123385e9 569
gandol2 0:9a61123385e9 570
gandol2 0:9a61123385e9 571
gandol2 0:9a61123385e9 572
gandol2 0:9a61123385e9 573
gandol2 0:9a61123385e9 574
gandol2 0:9a61123385e9 575
gandol2 0:9a61123385e9 576
gandol2 0:9a61123385e9 577
gandol2 0:9a61123385e9 578
gandol2 0:9a61123385e9 579
gandol2 0:9a61123385e9 580
gandol2 0:9a61123385e9 581 #if 0 // 161005_BDK_backup2 start
gandol2 0:9a61123385e9 582 int send_data;
gandol2 0:9a61123385e9 583 SPI_INIT();
gandol2 0:9a61123385e9 584 while(1)
gandol2 0:9a61123385e9 585 {
gandol2 0:9a61123385e9 586 SPI_Write();
gandol2 0:9a61123385e9 587 }
gandol2 0:9a61123385e9 588 #endif // 161005_BDK_backup2 end
gandol2 0:9a61123385e9 589 return 0;
gandol2 0:9a61123385e9 590 }