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

Dependencies:   cube_CEBF746 cube_crc_16 mbed

Committer:
bcup
Date:
Wed Oct 12 01:05:32 2016 +0000
Revision:
1:37d21610ce62
Parent:
0:9a61123385e9
Child:
2:d9a556df3264

        

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