CEBF746 Module.. with TPM

Dependencies:   cube_CEBF746 cube_crypto cube_crc_16

Committer:
gandol2
Date:
Mon Oct 24 00:25:24 2016 +0000
Revision:
9:43c097befe90
Parent:
8:e20fe81cddbb
commit mbed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gandol2 0:86ca686388bb 1 // firmware for CBEF746
gandol2 0:86ca686388bb 2 // ======== SPI Slave Pin
gandol2 0:86ca686388bb 3 // PA5 - SCK
gandol2 0:86ca686388bb 4 // PA6 - MISO
gandol2 0:86ca686388bb 5 // PA7 - MOSI
gandol2 0:86ca686388bb 6 // PA14 - SEL
gandol2 0:86ca686388bb 7 // ======== I2C Pin for TPM
gandol2 0:86ca686388bb 8 // PB9 - SDA
gandol2 0:86ca686388bb 9 // PB8 - SCL
bcup 1:15f935f03383 10
gandol2 0:86ca686388bb 11 #include "mbed.h"
gandol2 4:85dda8d9a528 12 #include "lib_CEBF746.h"
gandol2 3:9ab0f5f0ed9e 13 #include "lib_crc.h"
gandol2 8:e20fe81cddbb 14 #include "cube_crypto.h"
gandol2 0:86ca686388bb 15
gandol2 4:85dda8d9a528 16
gandol2 0:86ca686388bb 17 #define DEBUG_SPI
gandol2 0:86ca686388bb 18 #ifdef DEBUG_SPI
gandol2 0:86ca686388bb 19 #define PRINTD(arg1,arg2...) printf(arg1,##arg2)
gandol2 0:86ca686388bb 20 #endif
gandol2 0:86ca686388bb 21
gandol2 0:86ca686388bb 22 // ======== SPI Slave Pin define
gandol2 0:86ca686388bb 23 #define SPI_MOSI PA_7
gandol2 0:86ca686388bb 24 #define SPI_MISO PA_6
gandol2 0:86ca686388bb 25 #define SPI_SCLK PA_5
gandol2 0:86ca686388bb 26 #define SPI_SSEL PA_4
gandol2 0:86ca686388bb 27
gandol2 3:9ab0f5f0ed9e 28 #define SPI_CONFIG_BIT 8
gandol2 3:9ab0f5f0ed9e 29 #define SPI_CONFIG_FREQUENCY 1000000 // 1Mhz
gandol2 3:9ab0f5f0ed9e 30 //#define SPI_CONFIG_FREQUENCY 50000000 // 50Mhz
gandol2 3:9ab0f5f0ed9e 31
gandol2 6:210b1bb7442b 32 #define SPI_INTERRUPT 0
gandol2 3:9ab0f5f0ed9e 33
gandol2 0:86ca686388bb 34 Serial pc_serial(USBTX, USBRX);
gandol2 4:85dda8d9a528 35 #if SPI_INTERRUPT
gandol2 3:9ab0f5f0ed9e 36 InterruptIn spi_interrupt(SPI_SSEL); // Falling Edge
gandol2 4:85dda8d9a528 37 #endif /* SPI_INTERRUPT */
gandol2 0:86ca686388bb 38
gandol2 4:85dda8d9a528 39 SPISlave spi_slave(SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_SSEL); // MOSI, MISO, SCLK(CLK), SSEL(CS)=NC
gandol2 4:85dda8d9a528 40
gandol2 8:e20fe81cddbb 41
gandol2 4:85dda8d9a528 42 uint8_t cebBufEncrypt[CEB_BUF_SIZE] = {}; // 암호화 예정 버퍼
gandol2 4:85dda8d9a528 43 uint8_t cebBufEncrypted[CEB_BUF_SIZE] = {}; // 암호화 완료된 버퍼
gandol2 4:85dda8d9a528 44
gandol2 4:85dda8d9a528 45 uint8_t cebBufDecrypt[CEB_BUF_SIZE] = {}; // 복호화 예정 버퍼
gandol2 4:85dda8d9a528 46 uint8_t cebBufDecrypted[CEB_BUF_SIZE] = {}; // 복호화 완료된 버퍼
gandol2 4:85dda8d9a528 47
gandol2 8:e20fe81cddbb 48
gandol2 5:79ea2d57baf3 49
gandol2 4:85dda8d9a528 50 extern uint8_t readSelfTestValidateData[CEB_BUF_SIZE];
gandol2 4:85dda8d9a528 51 extern uint8_t writeSelfTestValidateData[CEB_BUF_SIZE];
gandol2 4:85dda8d9a528 52
gandol2 3:9ab0f5f0ed9e 53
gandol2 6:210b1bb7442b 54 #if SPI_INTERRUPT
gandol2 3:9ab0f5f0ed9e 55
gandol2 4:85dda8d9a528 56 bool spi_receive_wait(void)
gandol2 4:85dda8d9a528 57 {
gandol2 4:85dda8d9a528 58 #define ISR_TIMEOUT 100
gandol2 4:85dda8d9a528 59 int timeout;
gandol2 4:85dda8d9a528 60
gandol2 4:85dda8d9a528 61 while(!spi_slave.receive()) // wait SPI data input...
gandol2 3:9ab0f5f0ed9e 62 {
gandol2 4:85dda8d9a528 63 timeout++;
gandol2 4:85dda8d9a528 64 if(ISR_TIMEOUT <= timeout)
gandol2 3:9ab0f5f0ed9e 65 {
gandol2 4:85dda8d9a528 66 pc_serial.printf("spi isr timeout\n");
gandol2 4:85dda8d9a528 67 return false;
gandol2 3:9ab0f5f0ed9e 68 }
gandol2 3:9ab0f5f0ed9e 69 }
gandol2 3:9ab0f5f0ed9e 70
gandol2 4:85dda8d9a528 71 return true;
gandol2 0:86ca686388bb 72 }
gandol2 0:86ca686388bb 73
gandol2 4:85dda8d9a528 74 void execute_spi_slave_isr( void )
gandol2 4:85dda8d9a528 75 {
gandol2 4:85dda8d9a528 76
gandol2 4:85dda8d9a528 77 char cebf746Func;
gandol2 4:85dda8d9a528 78
gandol2 4:85dda8d9a528 79 spi_receive_wait();
gandol2 4:85dda8d9a528 80
gandol2 4:85dda8d9a528 81 cebf746Func = spi_slave.read();
gandol2 4:85dda8d9a528 82
gandol2 4:85dda8d9a528 83
gandol2 4:85dda8d9a528 84 switch(cebf746Func)
gandol2 4:85dda8d9a528 85 {
gandol2 4:85dda8d9a528 86 case 0x01: // FUNC_STATUS_REG
gandol2 4:85dda8d9a528 87
gandol2 4:85dda8d9a528 88 //spi_receive_wait();
gandol2 4:85dda8d9a528 89
gandol2 4:85dda8d9a528 90
gandol2 4:85dda8d9a528 91 //printf("[DEBUG] [M to S] eepAddr=0x%02x\n",eepAddr);
gandol2 4:85dda8d9a528 92 //for(int i=0;i<3;i++)
gandol2 4:85dda8d9a528 93 {
gandol2 4:85dda8d9a528 94 spi_slave.reply( retCnt );
gandol2 4:85dda8d9a528 95
gandol2 4:85dda8d9a528 96 //++eepAddr;
gandol2 4:85dda8d9a528 97 //printf("[0x%02x] ",spiMulti);
gandol2 4:85dda8d9a528 98 }
gandol2 4:85dda8d9a528 99
gandol2 4:85dda8d9a528 100 printf("[DEBUG] [M to S] retCnt [0x%02X]\n", retCnt);
gandol2 4:85dda8d9a528 101 retCnt--;
gandol2 4:85dda8d9a528 102 break;
gandol2 4:85dda8d9a528 103 }
gandol2 4:85dda8d9a528 104
gandol2 6:210b1bb7442b 105 /* // backup code
gandol2 4:85dda8d9a528 106 #define ISR_TIMEOUT 100
gandol2 4:85dda8d9a528 107 int timeout;
gandol2 4:85dda8d9a528 108 char cebf746Func = 0;
gandol2 4:85dda8d9a528 109 //pc_serial.printf("init spi inturrupt!!\n");
gandol2 4:85dda8d9a528 110
gandol2 4:85dda8d9a528 111
gandol2 4:85dda8d9a528 112
gandol2 4:85dda8d9a528 113 timeout = 0;
gandol2 4:85dda8d9a528 114 while(!spi_slave.receive()) // wiat for cebf746 func byte (first byte)
gandol2 4:85dda8d9a528 115 {
gandol2 4:85dda8d9a528 116 timeout++;
gandol2 4:85dda8d9a528 117 if(ISR_TIMEOUT <= timeout)
gandol2 4:85dda8d9a528 118 {
gandol2 4:85dda8d9a528 119 pc_serial.printf("spi isr timeout\n");
gandol2 4:85dda8d9a528 120 return;
gandol2 4:85dda8d9a528 121 }
gandol2 4:85dda8d9a528 122 }
gandol2 4:85dda8d9a528 123
gandol2 4:85dda8d9a528 124 cebf746Func = spi_slave.read(); // read cebf746 func byte
gandol2 4:85dda8d9a528 125 //pc_serial.printf("[0x%02X]\n", cebf746Func);
gandol2 4:85dda8d9a528 126
gandol2 4:85dda8d9a528 127
gandol2 4:85dda8d9a528 128
gandol2 4:85dda8d9a528 129 switch(cebf746Func)
gandol2 4:85dda8d9a528 130 {
gandol2 4:85dda8d9a528 131 case 0x01: // FUNC_STATUS_REG
gandol2 4:85dda8d9a528 132 while(!spi_slave.receive());
gandol2 4:85dda8d9a528 133 spi_slave.reply( retCnt ); // return code
gandol2 4:85dda8d9a528 134 while(!spi_slave.receive());
gandol2 4:85dda8d9a528 135 spi_slave.reply( retCnt+1 ); // return code
gandol2 4:85dda8d9a528 136 while(!spi_slave.receive());
gandol2 4:85dda8d9a528 137 spi_slave.reply( retCnt+2 ); // return code
gandol2 4:85dda8d9a528 138 break;
gandol2 4:85dda8d9a528 139 }
gandol2 4:85dda8d9a528 140
gandol2 4:85dda8d9a528 141
gandol2 4:85dda8d9a528 142
gandol2 4:85dda8d9a528 143 pc_serial.printf("return code : 0x%02X \n", 0xBB);
gandol2 4:85dda8d9a528 144 pc_serial.printf("data : 0x%02X \n", retCnt);
gandol2 4:85dda8d9a528 145 retCnt++;
gandol2 4:85dda8d9a528 146 */
gandol2 4:85dda8d9a528 147 }
gandol2 6:210b1bb7442b 148
gandol2 6:210b1bb7442b 149 void SPI_InitInterrupt()
gandol2 6:210b1bb7442b 150 {
gandol2 6:210b1bb7442b 151 spi_interrupt.rise(&execute_spi_slave_isr);
gandol2 6:210b1bb7442b 152 spi_interrupt.enable_irq();
gandol2 6:210b1bb7442b 153 //spi_interrupt.mode(PullDown); // Pull down input
gandol2 6:210b1bb7442b 154 //spi_interrupt.fall(&execute_spi_slave_isr); // Attach the isr address to the falling edge interrupt
gandol2 6:210b1bb7442b 155 PRINTD("SPI Interrupt Init.. OK\n");
gandol2 6:210b1bb7442b 156 }
gandol2 4:85dda8d9a528 157 #endif /* SPI_INTERRUPT */
gandol2 3:9ab0f5f0ed9e 158
gandol2 3:9ab0f5f0ed9e 159 /** @brief slave init
gandol2 3:9ab0f5f0ed9e 160 *
gandol2 3:9ab0f5f0ed9e 161 */
gandol2 3:9ab0f5f0ed9e 162 void SPI_InitSlave()
gandol2 3:9ab0f5f0ed9e 163 {
gandol2 3:9ab0f5f0ed9e 164 spi_slave.format(SPI_CONFIG_BIT,0);
gandol2 3:9ab0f5f0ed9e 165 spi_slave.frequency(SPI_CONFIG_FREQUENCY);
gandol2 3:9ab0f5f0ed9e 166 PRINTD("SPI Init.. Packet bit size=[%d] Frequency=[%d]Mhz\n", SPI_CONFIG_BIT, (SPI_CONFIG_FREQUENCY/1000000));
gandol2 4:85dda8d9a528 167 PRINTD("SPI Init.. OK\n");
gandol2 6:210b1bb7442b 168 }
gandol2 4:85dda8d9a528 169
gandol2 4:85dda8d9a528 170
gandol2 4:85dda8d9a528 171
gandol2 3:9ab0f5f0ed9e 172
gandol2 0:86ca686388bb 173
gandol2 3:9ab0f5f0ed9e 174
gandol2 4:85dda8d9a528 175 Timeout receiveTimeOut;
gandol2 4:85dda8d9a528 176 bool timeOut = false;
gandol2 4:85dda8d9a528 177 #define CEBF746_TIMEOUT 10 // 1 sec
gandol2 4:85dda8d9a528 178
gandol2 4:85dda8d9a528 179 uint8_t slave_read_byte()
gandol2 4:85dda8d9a528 180 {
gandol2 5:79ea2d57baf3 181 while(!spi_slave.receive()); // ★★★★ 마스터 쪽에서 패킷이 수신 안됐을 경우 loop에서 나오지 못함. 예외 처리(time out) 적용 해야함.
gandol2 4:85dda8d9a528 182 return spi_slave.read();
gandol2 4:85dda8d9a528 183 }
gandol2 4:85dda8d9a528 184 void slave_write_byte(uint8_t txData)
gandol2 4:85dda8d9a528 185 {
gandol2 4:85dda8d9a528 186 spi_slave.reply( txData );
gandol2 5:79ea2d57baf3 187 while(!spi_slave.receive()); // ★★★★ 마스터 쪽에서 패킷이 수신 안됐을 경우 loop에서 나오지 못함. 예외 처리(time out) 적용 해야함.
gandol2 4:85dda8d9a528 188 spi_slave.read();
gandol2 4:85dda8d9a528 189 }
gandol2 4:85dda8d9a528 190
gandol2 4:85dda8d9a528 191 void slave_read_uint16(uint16_t* buf16)
gandol2 4:85dda8d9a528 192 {
gandol2 4:85dda8d9a528 193 uint16_t temp;
gandol2 4:85dda8d9a528 194
gandol2 4:85dda8d9a528 195 temp = slave_read_byte();
gandol2 4:85dda8d9a528 196 *buf16 = temp << 8;
gandol2 4:85dda8d9a528 197
gandol2 4:85dda8d9a528 198 temp = slave_read_byte();
gandol2 4:85dda8d9a528 199 *buf16 |= temp;
gandol2 4:85dda8d9a528 200
gandol2 4:85dda8d9a528 201 //*buf16 = (slave_read_byte() << 8) | (slave_read_byte());
gandol2 4:85dda8d9a528 202 }
gandol2 4:85dda8d9a528 203 void slave_read_multi_byte(uint8_t* buf, int size)
gandol2 4:85dda8d9a528 204 {
gandol2 4:85dda8d9a528 205 for(int iCnt = 0 ; iCnt < size ; ++iCnt)
gandol2 4:85dda8d9a528 206 *(buf+iCnt) = slave_read_byte();
gandol2 4:85dda8d9a528 207 }
gandol2 4:85dda8d9a528 208
gandol2 4:85dda8d9a528 209 void slave_write_multi_byte(uint8_t* buf, int size)
gandol2 4:85dda8d9a528 210 {
gandol2 4:85dda8d9a528 211 for(int iCnt = 0 ; iCnt < size ; ++iCnt)
gandol2 4:85dda8d9a528 212 slave_write_byte(*(buf+iCnt));
gandol2 4:85dda8d9a528 213 }
gandol2 4:85dda8d9a528 214
gandol2 4:85dda8d9a528 215
gandol2 5:79ea2d57baf3 216 void slave_write_packet(spiDataStr* packet)
gandol2 5:79ea2d57baf3 217 {
gandol2 5:79ea2d57baf3 218 slave_write_byte((packet->size >> 8) & 0xFF);
gandol2 5:79ea2d57baf3 219 slave_write_byte((packet->size ) & 0xFF);
gandol2 5:79ea2d57baf3 220 slave_write_multi_byte(packet->buf, packet->size);
gandol2 5:79ea2d57baf3 221 slave_write_byte((packet->crc16 >> 8) & 0xFF);
gandol2 5:79ea2d57baf3 222 slave_write_byte((packet->crc16 ) & 0xFF);
gandol2 5:79ea2d57baf3 223 }
gandol2 5:79ea2d57baf3 224
gandol2 4:85dda8d9a528 225 #define YSH_CODE 1
gandol2 4:85dda8d9a528 226 #if YSH_CODE
gandol2 4:85dda8d9a528 227
gandol2 4:85dda8d9a528 228
gandol2 4:85dda8d9a528 229
gandol2 4:85dda8d9a528 230
gandol2 4:85dda8d9a528 231 cube_sec_context tempContext;
gandol2 4:85dda8d9a528 232
gandol2 4:85dda8d9a528 233 #endif
gandol2 3:9ab0f5f0ed9e 234
gandol2 3:9ab0f5f0ed9e 235
gandol2 5:79ea2d57baf3 236
gandol2 3:9ab0f5f0ed9e 237 /** @brief main function ###################################################################
gandol2 3:9ab0f5f0ed9e 238 *
gandol2 3:9ab0f5f0ed9e 239 */
gandol2 0:86ca686388bb 240 int main()
gandol2 0:86ca686388bb 241 {
gandol2 9:43c097befe90 242 sec_spi_data tempConvertStruct;
gandol2 8:e20fe81cddbb 243
gandol2 3:9ab0f5f0ed9e 244
gandol2 4:85dda8d9a528 245 uint8_t spiRxTempBuf = 0;
gandol2 4:85dda8d9a528 246
gandol2 4:85dda8d9a528 247
gandol2 4:85dda8d9a528 248 bool crcCheck = false;
gandol2 8:e20fe81cddbb 249
gandol2 6:210b1bb7442b 250
gandol2 4:85dda8d9a528 251 uint16_t genCrc = 0;
gandol2 3:9ab0f5f0ed9e 252
gandol2 5:79ea2d57baf3 253 spiDataStr txData;
gandol2 4:85dda8d9a528 254 spiDataStr rxData;
gandol2 4:85dda8d9a528 255
gandol2 6:210b1bb7442b 256 pc_serial.printf("\n\n========== CEBF746 SPI Slave [Start] ==========\n");
gandol2 3:9ab0f5f0ed9e 257
gandol2 3:9ab0f5f0ed9e 258 SPI_InitSlave();
gandol2 8:e20fe81cddbb 259
gandol2 8:e20fe81cddbb 260 cube_sec_init();
gandol2 8:e20fe81cddbb 261 Thread encrypt(cube_Thread_AES_encrypt, NULL, osPriorityNormal, DEFAULT_STACK_SIZE);
gandol2 8:e20fe81cddbb 262 Thread decrypt(cube_Thread_AES_decrypt, NULL, osPriorityNormal, DEFAULT_STACK_SIZE);
gandol2 8:e20fe81cddbb 263
gandol2 4:85dda8d9a528 264 #if SPI_INTERRUPT
gandol2 4:85dda8d9a528 265 SPI_InitInterrupt();
gandol2 4:85dda8d9a528 266 while(1);
gandol2 4:85dda8d9a528 267 #endif /* SPI_INTERRUPT */
gandol2 3:9ab0f5f0ed9e 268
gandol2 9:43c097befe90 269
gandol2 4:85dda8d9a528 270 while(1)
gandol2 4:85dda8d9a528 271 {
gandol2 4:85dda8d9a528 272 pc_serial.printf("\n\nwaiting CEBF746 cmd...\n");
gandol2 4:85dda8d9a528 273
gandol2 4:85dda8d9a528 274
gandol2 4:85dda8d9a528 275 spiRxTempBuf = slave_read_byte();
gandol2 6:210b1bb7442b 276 //printf("menu[%02X]\n", spiRxTempBuf);
gandol2 6:210b1bb7442b 277 //cebf746_print_cmd(spiRxTempBuf);
gandol2 3:9ab0f5f0ed9e 278
gandol2 4:85dda8d9a528 279 switch(spiRxTempBuf)
gandol2 4:85dda8d9a528 280 {
gandol2 4:85dda8d9a528 281 case FUNC_READ_STATUS:
gandol2 8:e20fe81cddbb 282 slave_write_byte( cube_get_status() );
gandol2 8:e20fe81cddbb 283 printf("[INFO] Response Status reg [%02X]\n", cube_get_status());
gandol2 4:85dda8d9a528 284 break;
gandol2 4:85dda8d9a528 285
gandol2 8:e20fe81cddbb 286 case FUNC_WRITE_ENC_DATA: // 161020_1차 테스트 완료
gandol2 4:85dda8d9a528 287
gandol2 4:85dda8d9a528 288 uint16_t packetSize = 0;
gandol2 4:85dda8d9a528 289 uint8_t tempBuf[CEB_BUF_SIZE] = {0, };
gandol2 4:85dda8d9a528 290 uint16_t retCrc = 0;
gandol2 4:85dda8d9a528 291
gandol2 5:79ea2d57baf3 292 packetSize = 0;
gandol2 4:85dda8d9a528 293 slave_read_uint16(&packetSize);
gandol2 4:85dda8d9a528 294 if(packetSize != CEB_BUF_SIZE)
gandol2 4:85dda8d9a528 295 {
gandol2 4:85dda8d9a528 296 printf("[ERROR] %s : %d : packet size error, recived packet size[%d]\n", __FILE__, __LINE__, packetSize);
gandol2 4:85dda8d9a528 297 continue;
gandol2 4:85dda8d9a528 298 }
gandol2 4:85dda8d9a528 299 slave_read_multi_byte(tempBuf, CEB_BUF_SIZE);
gandol2 4:85dda8d9a528 300 slave_read_uint16(&retCrc);
gandol2 4:85dda8d9a528 301
gandol2 4:85dda8d9a528 302 cube_crc_16(CEB_BUF_SIZE, tempBuf, &genCrc);
gandol2 4:85dda8d9a528 303 crcCheck = cube_crc_compare(retCrc, genCrc);
gandol2 4:85dda8d9a528 304 if(true == crcCheck )
gandol2 4:85dda8d9a528 305 slave_write_byte(WRITE_SELF_TEST_RET_CODE);
gandol2 4:85dda8d9a528 306 else
gandol2 4:85dda8d9a528 307 slave_write_byte(0x00);
gandol2 8:e20fe81cddbb 308 _cebf746_print_packet(packetSize, tempBuf, retCrc);
gandol2 4:85dda8d9a528 309
gandol2 4:85dda8d9a528 310
gandol2 4:85dda8d9a528 311 if(true == crcCheck )
gandol2 4:85dda8d9a528 312 {
gandol2 5:79ea2d57baf3 313 /// ★★★여기서 윤주임코드 암호화 스레드 동작할수 있게 flag setting 해야함!!
gandol2 8:e20fe81cddbb 314
gandol2 8:e20fe81cddbb 315 tempConvertStruct.cmd = 0x42; // 0b01000010
gandol2 8:e20fe81cddbb 316 tempConvertStruct.data = tempBuf;
gandol2 8:e20fe81cddbb 317 tempConvertStruct.key_crc = NULL;
gandol2 8:e20fe81cddbb 318
gandol2 8:e20fe81cddbb 319 //cube_crypt_spi_cmd_set(&tempContext, 0x02,tempBuf, 0);
gandol2 8:e20fe81cddbb 320 cube_crypt_spi_cmd_set(&tempConvertStruct);
gandol2 4:85dda8d9a528 321 pc_serial.printf("call \"cube_crypt_spi_cmd_set()\"\n");
gandol2 8:e20fe81cddbb 322
gandol2 4:85dda8d9a528 323 }
gandol2 4:85dda8d9a528 324 else
gandol2 4:85dda8d9a528 325 {
gandol2 4:85dda8d9a528 326 printf("[ERROR] %s : %d : FUNC_WRITE_ENC_DATA CRC Error\n", __FILE__, __LINE__);
gandol2 4:85dda8d9a528 327 }
gandol2 4:85dda8d9a528 328
gandol2 4:85dda8d9a528 329 break;
gandol2 4:85dda8d9a528 330
gandol2 4:85dda8d9a528 331 case FUNC_READ_ENC_DATA:
gandol2 8:e20fe81cddbb 332 //uint16_t keyCrc = 0xAABB; // ★★★★ 윤주임 코드 들어오면 keyCrc 참조 변경 해야함
gandol2 8:e20fe81cddbb 333 //packetLength = CEB_BUF_SIZE+2;
gandol2 5:79ea2d57baf3 334
gandol2 8:e20fe81cddbb 335 // ★★★★ status reg 읽어오는 부분이 문제가 있는듯함 여기를 먼저 고쳐야함
gandol2 8:e20fe81cddbb 336 if(cube_get_status() == 0x02) // 암호화가 완료 되었으면
gandol2 8:e20fe81cddbb 337 {
gandol2 8:e20fe81cddbb 338 //printf("..\n");
gandol2 8:e20fe81cddbb 339 /*
gandol2 8:e20fe81cddbb 340 tempConvertStruct.cmd = 0x02; // 0b01000010
gandol2 8:e20fe81cddbb 341 tempConvertStruct.data = tempBuf;
gandol2 8:e20fe81cddbb 342 tempConvertStruct.key_crc = NULL;
gandol2 8:e20fe81cddbb 343
gandol2 8:e20fe81cddbb 344 cube_crypt_spi_cmd_set(&tempConvertStruct);
gandol2 8:e20fe81cddbb 345 */
gandol2 8:e20fe81cddbb 346
gandol2 8:e20fe81cddbb 347 txData = getEncTxPacket();
gandol2 8:e20fe81cddbb 348 slave_write_packet(&txData);
gandol2 8:e20fe81cddbb 349
gandol2 8:e20fe81cddbb 350 cebf746_print_packet(&txData);
gandol2 8:e20fe81cddbb 351
gandol2 8:e20fe81cddbb 352
gandol2 8:e20fe81cddbb 353 /*
gandol2 8:e20fe81cddbb 354
gandol2 8:e20fe81cddbb 355
gandol2 8:e20fe81cddbb 356
gandol2 8:e20fe81cddbb 357
gandol2 8:e20fe81cddbb 358 */
gandol2 8:e20fe81cddbb 359 /*
gandol2 5:79ea2d57baf3 360 memcpy(spiTXBuf, cebBufEncrypted, CEB_BUF_SIZE); // encrypted data copy
gandol2 5:79ea2d57baf3 361 spiTXBuf[CEB_BUF_SIZE + 0] = ((keyCrc >> 8) & 0xFF); // upper key crc copy
gandol2 5:79ea2d57baf3 362 spiTXBuf[CEB_BUF_SIZE + 1] = ((keyCrc ) & 0xFF); // lower key crc copy
gandol2 5:79ea2d57baf3 363
gandol2 5:79ea2d57baf3 364
gandol2 5:79ea2d57baf3 365 cebf746_set_packet(&txData, packetLength, spiTXBuf);
gandol2 8:e20fe81cddbb 366 */
gandol2 8:e20fe81cddbb 367 //_cebf746_print_packet(packetLength, spiTXBuf, genCrc);
gandol2 5:79ea2d57baf3 368
gandol2 5:79ea2d57baf3 369 }
gandol2 5:79ea2d57baf3 370 else
gandol2 5:79ea2d57baf3 371 {
gandol2 8:e20fe81cddbb 372 // printf("xx\n");
gandol2 5:79ea2d57baf3 373 }
gandol2 4:85dda8d9a528 374 break;
gandol2 4:85dda8d9a528 375
gandol2 4:85dda8d9a528 376 case FUNC_WRITE_DEC_DATA:
gandol2 4:85dda8d9a528 377 break;
gandol2 4:85dda8d9a528 378
gandol2 4:85dda8d9a528 379 case FUNC_READ_DEC_DATA:
gandol2 4:85dda8d9a528 380 break;
gandol2 4:85dda8d9a528 381
gandol2 4:85dda8d9a528 382
gandol2 4:85dda8d9a528 383 case FUNC_WRITE_SELF_TEST: // 161017_KSS_Test OK
gandol2 4:85dda8d9a528 384
gandol2 4:85dda8d9a528 385 slave_read_uint16(&rxData.size);
gandol2 4:85dda8d9a528 386
gandol2 4:85dda8d9a528 387 rxData.buf = (uint8_t*)malloc(rxData.size);
gandol2 4:85dda8d9a528 388 slave_read_multi_byte(rxData.buf, rxData.size);
gandol2 4:85dda8d9a528 389
gandol2 4:85dda8d9a528 390 slave_read_uint16(&rxData.crc16);
gandol2 4:85dda8d9a528 391
gandol2 4:85dda8d9a528 392
gandol2 4:85dda8d9a528 393
gandol2 4:85dda8d9a528 394 cube_crc_16(rxData.size, rxData.buf, &genCrc);
gandol2 4:85dda8d9a528 395
gandol2 4:85dda8d9a528 396 crcCheck = cube_crc_compare(rxData.crc16, genCrc);
gandol2 4:85dda8d9a528 397 if(true == crcCheck )
gandol2 4:85dda8d9a528 398 slave_write_byte(WRITE_SELF_TEST_RET_CODE);
gandol2 4:85dda8d9a528 399 else
gandol2 4:85dda8d9a528 400 slave_write_byte(0x00);
gandol2 4:85dda8d9a528 401
gandol2 4:85dda8d9a528 402 // ----- print rx buf
gandol2 4:85dda8d9a528 403 cebf746_print_packet(&rxData);
gandol2 4:85dda8d9a528 404
gandol2 4:85dda8d9a528 405 pc_serial.printf("crc read[%04X], gen[%04X] check...", rxData.crc16, genCrc);
gandol2 4:85dda8d9a528 406 if(true == crcCheck )
gandol2 4:85dda8d9a528 407 pc_serial.printf("[OK]\n");
gandol2 4:85dda8d9a528 408 else
gandol2 4:85dda8d9a528 409 pc_serial.printf("[FAIL]\n");
gandol2 4:85dda8d9a528 410
gandol2 4:85dda8d9a528 411 // ----- free()
gandol2 4:85dda8d9a528 412 free(rxData.buf);
gandol2 4:85dda8d9a528 413
gandol2 4:85dda8d9a528 414 break;
gandol2 4:85dda8d9a528 415
gandol2 5:79ea2d57baf3 416 case FUNC_READ_SELF_TEST: // 161017_KSS_Test OK
gandol2 4:85dda8d9a528 417
gandol2 5:79ea2d57baf3 418 cebf746_set_packet(&txData, CEB_BUF_SIZE, readSelfTestValidateData);
gandol2 5:79ea2d57baf3 419 slave_write_packet(&txData);
gandol2 4:85dda8d9a528 420
gandol2 5:79ea2d57baf3 421 printf("--FUNC_READ_SELF_TEST end\n");
gandol2 4:85dda8d9a528 422 break;
gandol2 4:85dda8d9a528 423
gandol2 4:85dda8d9a528 424 }
gandol2 3:9ab0f5f0ed9e 425
gandol2 4:85dda8d9a528 426
gandol2 3:9ab0f5f0ed9e 427
gandol2 4:85dda8d9a528 428
gandol2 0:86ca686388bb 429 }
gandol2 3:9ab0f5f0ed9e 430
gandol2 0:86ca686388bb 431
gandol2 3:9ab0f5f0ed9e 432
gandol2 0:86ca686388bb 433
gandol2 3:9ab0f5f0ed9e 434
gandol2 0:86ca686388bb 435
gandol2 3:9ab0f5f0ed9e 436
gandol2 0:86ca686388bb 437 }//end of main