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

Dependencies:   cube_CEBF746 cube_crc_16 mbed

Committer:
gandol2
Date:
Wed Oct 12 15:49:01 2016 +0900
Revision:
4:412d5f3e34ae
Parent:
2:d9a556df3264
33

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