CEBF746 Module.. with TPM
Dependencies: cube_CEBF746 cube_crypto cube_crc_16
main.cpp@4:85dda8d9a528, 2016-10-19 (annotated)
- Committer:
- gandol2
- Date:
- Wed Oct 19 08:53:08 2016 +0000
- Revision:
- 4:85dda8d9a528
- Parent:
- 3:9ab0f5f0ed9e
- Child:
- 5:79ea2d57baf3
implement
; - MENU_READ_STATUS_REG
; - MENU_SPI_SELF_TEST_WRITE
; - MENU_SPI_SELF_TEST_READ
; - MENU_SPI_WRITE_ENC_DATA
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:86ca686388bb | 14 | |
gandol2 | 4:85dda8d9a528 | 15 | #define SPI_INTERRUPT 0 |
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 | // ======== SPI Func define |
gandol2 | 0:86ca686388bb | 29 | #define EEPROM_WREN 0x06 // Write Enable |
gandol2 | 0:86ca686388bb | 30 | #define EEPROM_WRDI 0x04 // Write Disable |
gandol2 | 0:86ca686388bb | 31 | #define EEPROM_RDSR 0x05 // Read Status Register |
gandol2 | 0:86ca686388bb | 32 | #define EEPROM_WRSR 0x01 // Write Status Register |
gandol2 | 0:86ca686388bb | 33 | #define EEPROM_READ 0x03 // Read EEPROM Memory |
gandol2 | 0:86ca686388bb | 34 | #define EEPROM_WRITE 0x02 // Write EEPROM Memory |
gandol2 | 0:86ca686388bb | 35 | #define EEPROM_MULTIREAD 0x07 // Read Multibyte EEPROM Memory |
gandol2 | 0:86ca686388bb | 36 | |
gandol2 | 3:9ab0f5f0ed9e | 37 | #define SPI_CONFIG_BIT 8 |
gandol2 | 3:9ab0f5f0ed9e | 38 | #define SPI_CONFIG_FREQUENCY 1000000 // 1Mhz |
gandol2 | 3:9ab0f5f0ed9e | 39 | //#define SPI_CONFIG_FREQUENCY 50000000 // 50Mhz |
gandol2 | 3:9ab0f5f0ed9e | 40 | |
gandol2 | 3:9ab0f5f0ed9e | 41 | |
gandol2 | 0:86ca686388bb | 42 | Serial pc_serial(USBTX, USBRX); |
gandol2 | 4:85dda8d9a528 | 43 | #if SPI_INTERRUPT |
gandol2 | 3:9ab0f5f0ed9e | 44 | InterruptIn spi_interrupt(SPI_SSEL); // Falling Edge |
gandol2 | 4:85dda8d9a528 | 45 | #endif /* SPI_INTERRUPT */ |
gandol2 | 0:86ca686388bb | 46 | |
gandol2 | 4:85dda8d9a528 | 47 | SPISlave spi_slave(SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_SSEL); // MOSI, MISO, SCLK(CLK), SSEL(CS)=NC |
gandol2 | 4:85dda8d9a528 | 48 | |
gandol2 | 3:9ab0f5f0ed9e | 49 | |
gandol2 | 4:85dda8d9a528 | 50 | uint8_t cebStatus; // 1byte Status Register |
gandol2 | 4:85dda8d9a528 | 51 | uint8_t cebBufEncrypt[CEB_BUF_SIZE] = {}; // 암호화 예정 버퍼 |
gandol2 | 4:85dda8d9a528 | 52 | uint8_t cebBufEncrypted[CEB_BUF_SIZE] = {}; // 암호화 완료된 버퍼 |
gandol2 | 4:85dda8d9a528 | 53 | |
gandol2 | 4:85dda8d9a528 | 54 | uint8_t cebBufDecrypt[CEB_BUF_SIZE] = {}; // 복호화 예정 버퍼 |
gandol2 | 4:85dda8d9a528 | 55 | uint8_t cebBufDecrypted[CEB_BUF_SIZE] = {}; // 복호화 완료된 버퍼 |
gandol2 | 4:85dda8d9a528 | 56 | |
gandol2 | 4:85dda8d9a528 | 57 | extern uint8_t readSelfTestValidateData[CEB_BUF_SIZE]; |
gandol2 | 4:85dda8d9a528 | 58 | extern uint8_t writeSelfTestValidateData[CEB_BUF_SIZE]; |
gandol2 | 4:85dda8d9a528 | 59 | |
gandol2 | 3:9ab0f5f0ed9e | 60 | |
gandol2 | 3:9ab0f5f0ed9e | 61 | |
gandol2 | 4:85dda8d9a528 | 62 | enum cubeMenu |
gandol2 | 0:86ca686388bb | 63 | { |
gandol2 | 4:85dda8d9a528 | 64 | CEBF746_SPI_SELF_TEST = 1, |
gandol2 | 4:85dda8d9a528 | 65 | CEBF746_SPI_SELF_TEST2 = 2, |
gandol2 | 4:85dda8d9a528 | 66 | CEBF746_READ_STATUS_REG = 3, |
gandol2 | 4:85dda8d9a528 | 67 | MENU_EXIT_Program = 9 |
gandol2 | 4:85dda8d9a528 | 68 | }; |
gandol2 | 4:85dda8d9a528 | 69 | |
gandol2 | 4:85dda8d9a528 | 70 | static char cebf746_status_reg = 0xAA; |
gandol2 | 4:85dda8d9a528 | 71 | |
gandol2 | 3:9ab0f5f0ed9e | 72 | |
gandol2 | 4:85dda8d9a528 | 73 | bool spi_receive_wait(void) |
gandol2 | 4:85dda8d9a528 | 74 | { |
gandol2 | 4:85dda8d9a528 | 75 | #define ISR_TIMEOUT 100 |
gandol2 | 4:85dda8d9a528 | 76 | int timeout; |
gandol2 | 4:85dda8d9a528 | 77 | |
gandol2 | 4:85dda8d9a528 | 78 | while(!spi_slave.receive()) // wait SPI data input... |
gandol2 | 3:9ab0f5f0ed9e | 79 | { |
gandol2 | 4:85dda8d9a528 | 80 | timeout++; |
gandol2 | 4:85dda8d9a528 | 81 | if(ISR_TIMEOUT <= timeout) |
gandol2 | 3:9ab0f5f0ed9e | 82 | { |
gandol2 | 4:85dda8d9a528 | 83 | pc_serial.printf("spi isr timeout\n"); |
gandol2 | 4:85dda8d9a528 | 84 | return false; |
gandol2 | 3:9ab0f5f0ed9e | 85 | } |
gandol2 | 3:9ab0f5f0ed9e | 86 | } |
gandol2 | 3:9ab0f5f0ed9e | 87 | |
gandol2 | 4:85dda8d9a528 | 88 | return true; |
gandol2 | 0:86ca686388bb | 89 | } |
gandol2 | 0:86ca686388bb | 90 | |
gandol2 | 4:85dda8d9a528 | 91 | static char retCnt=0xFF; |
gandol2 | 4:85dda8d9a528 | 92 | |
gandol2 | 4:85dda8d9a528 | 93 | #if SPI_INTERRUPT |
gandol2 | 4:85dda8d9a528 | 94 | void execute_spi_slave_isr( void ) |
gandol2 | 4:85dda8d9a528 | 95 | { |
gandol2 | 4:85dda8d9a528 | 96 | |
gandol2 | 4:85dda8d9a528 | 97 | char cebf746Func; |
gandol2 | 4:85dda8d9a528 | 98 | |
gandol2 | 4:85dda8d9a528 | 99 | spi_receive_wait(); |
gandol2 | 4:85dda8d9a528 | 100 | |
gandol2 | 4:85dda8d9a528 | 101 | cebf746Func = spi_slave.read(); |
gandol2 | 4:85dda8d9a528 | 102 | |
gandol2 | 4:85dda8d9a528 | 103 | |
gandol2 | 4:85dda8d9a528 | 104 | switch(cebf746Func) |
gandol2 | 4:85dda8d9a528 | 105 | { |
gandol2 | 4:85dda8d9a528 | 106 | case 0x01: // FUNC_STATUS_REG |
gandol2 | 4:85dda8d9a528 | 107 | |
gandol2 | 4:85dda8d9a528 | 108 | //spi_receive_wait(); |
gandol2 | 4:85dda8d9a528 | 109 | |
gandol2 | 4:85dda8d9a528 | 110 | |
gandol2 | 4:85dda8d9a528 | 111 | //printf("[DEBUG] [M to S] eepAddr=0x%02x\n",eepAddr); |
gandol2 | 4:85dda8d9a528 | 112 | //for(int i=0;i<3;i++) |
gandol2 | 4:85dda8d9a528 | 113 | { |
gandol2 | 4:85dda8d9a528 | 114 | spi_slave.reply( retCnt ); |
gandol2 | 4:85dda8d9a528 | 115 | |
gandol2 | 4:85dda8d9a528 | 116 | //++eepAddr; |
gandol2 | 4:85dda8d9a528 | 117 | //printf("[0x%02x] ",spiMulti); |
gandol2 | 4:85dda8d9a528 | 118 | } |
gandol2 | 4:85dda8d9a528 | 119 | |
gandol2 | 4:85dda8d9a528 | 120 | printf("[DEBUG] [M to S] retCnt [0x%02X]\n", retCnt); |
gandol2 | 4:85dda8d9a528 | 121 | retCnt--; |
gandol2 | 4:85dda8d9a528 | 122 | break; |
gandol2 | 4:85dda8d9a528 | 123 | |
gandol2 | 4:85dda8d9a528 | 124 | |
gandol2 | 4:85dda8d9a528 | 125 | |
gandol2 | 4:85dda8d9a528 | 126 | } |
gandol2 | 4:85dda8d9a528 | 127 | |
gandol2 | 4:85dda8d9a528 | 128 | |
gandol2 | 4:85dda8d9a528 | 129 | |
gandol2 | 4:85dda8d9a528 | 130 | |
gandol2 | 4:85dda8d9a528 | 131 | |
gandol2 | 4:85dda8d9a528 | 132 | /* |
gandol2 | 4:85dda8d9a528 | 133 | #define ISR_TIMEOUT 100 |
gandol2 | 4:85dda8d9a528 | 134 | int timeout; |
gandol2 | 4:85dda8d9a528 | 135 | char cebf746Func = 0; |
gandol2 | 4:85dda8d9a528 | 136 | //pc_serial.printf("init spi inturrupt!!\n"); |
gandol2 | 4:85dda8d9a528 | 137 | |
gandol2 | 4:85dda8d9a528 | 138 | |
gandol2 | 4:85dda8d9a528 | 139 | |
gandol2 | 4:85dda8d9a528 | 140 | timeout = 0; |
gandol2 | 4:85dda8d9a528 | 141 | while(!spi_slave.receive()) // wiat for cebf746 func byte (first byte) |
gandol2 | 4:85dda8d9a528 | 142 | { |
gandol2 | 4:85dda8d9a528 | 143 | timeout++; |
gandol2 | 4:85dda8d9a528 | 144 | if(ISR_TIMEOUT <= timeout) |
gandol2 | 4:85dda8d9a528 | 145 | { |
gandol2 | 4:85dda8d9a528 | 146 | pc_serial.printf("spi isr timeout\n"); |
gandol2 | 4:85dda8d9a528 | 147 | return; |
gandol2 | 4:85dda8d9a528 | 148 | } |
gandol2 | 4:85dda8d9a528 | 149 | } |
gandol2 | 4:85dda8d9a528 | 150 | |
gandol2 | 4:85dda8d9a528 | 151 | cebf746Func = spi_slave.read(); // read cebf746 func byte |
gandol2 | 4:85dda8d9a528 | 152 | //pc_serial.printf("[0x%02X]\n", cebf746Func); |
gandol2 | 4:85dda8d9a528 | 153 | |
gandol2 | 4:85dda8d9a528 | 154 | |
gandol2 | 4:85dda8d9a528 | 155 | |
gandol2 | 4:85dda8d9a528 | 156 | switch(cebf746Func) |
gandol2 | 4:85dda8d9a528 | 157 | { |
gandol2 | 4:85dda8d9a528 | 158 | case 0x01: // FUNC_STATUS_REG |
gandol2 | 4:85dda8d9a528 | 159 | while(!spi_slave.receive()); |
gandol2 | 4:85dda8d9a528 | 160 | spi_slave.reply( retCnt ); // return code |
gandol2 | 4:85dda8d9a528 | 161 | while(!spi_slave.receive()); |
gandol2 | 4:85dda8d9a528 | 162 | spi_slave.reply( retCnt+1 ); // return code |
gandol2 | 4:85dda8d9a528 | 163 | while(!spi_slave.receive()); |
gandol2 | 4:85dda8d9a528 | 164 | spi_slave.reply( retCnt+2 ); // return code |
gandol2 | 4:85dda8d9a528 | 165 | break; |
gandol2 | 4:85dda8d9a528 | 166 | } |
gandol2 | 4:85dda8d9a528 | 167 | |
gandol2 | 4:85dda8d9a528 | 168 | |
gandol2 | 4:85dda8d9a528 | 169 | |
gandol2 | 4:85dda8d9a528 | 170 | pc_serial.printf("return code : 0x%02X \n", 0xBB); |
gandol2 | 4:85dda8d9a528 | 171 | pc_serial.printf("data : 0x%02X \n", retCnt); |
gandol2 | 4:85dda8d9a528 | 172 | retCnt++; |
gandol2 | 4:85dda8d9a528 | 173 | */ |
gandol2 | 4:85dda8d9a528 | 174 | } |
gandol2 | 4:85dda8d9a528 | 175 | #endif /* SPI_INTERRUPT */ |
gandol2 | 3:9ab0f5f0ed9e | 176 | |
gandol2 | 3:9ab0f5f0ed9e | 177 | /** @brief slave init |
gandol2 | 3:9ab0f5f0ed9e | 178 | * |
gandol2 | 3:9ab0f5f0ed9e | 179 | */ |
gandol2 | 3:9ab0f5f0ed9e | 180 | void SPI_InitSlave() |
gandol2 | 3:9ab0f5f0ed9e | 181 | { |
gandol2 | 3:9ab0f5f0ed9e | 182 | spi_slave.format(SPI_CONFIG_BIT,0); |
gandol2 | 3:9ab0f5f0ed9e | 183 | spi_slave.frequency(SPI_CONFIG_FREQUENCY); |
gandol2 | 3:9ab0f5f0ed9e | 184 | PRINTD("SPI Init.. Packet bit size=[%d] Frequency=[%d]Mhz\n", SPI_CONFIG_BIT, (SPI_CONFIG_FREQUENCY/1000000)); |
gandol2 | 3:9ab0f5f0ed9e | 185 | |
gandol2 | 4:85dda8d9a528 | 186 | /* |
gandol2 | 4:85dda8d9a528 | 187 | spi_slave.reply(0); |
gandol2 | 4:85dda8d9a528 | 188 | spi_slave.reply(0); |
gandol2 | 4:85dda8d9a528 | 189 | spi_slave.reply(0); |
gandol2 | 4:85dda8d9a528 | 190 | spi_slave.reply(0); |
gandol2 | 4:85dda8d9a528 | 191 | spi_slave.reply(0); |
gandol2 | 4:85dda8d9a528 | 192 | spi_slave.reply(0); |
gandol2 | 4:85dda8d9a528 | 193 | */ |
gandol2 | 4:85dda8d9a528 | 194 | PRINTD("SPI Init.. OK\n"); |
gandol2 | 4:85dda8d9a528 | 195 | |
gandol2 | 4:85dda8d9a528 | 196 | |
gandol2 | 4:85dda8d9a528 | 197 | |
gandol2 | 3:9ab0f5f0ed9e | 198 | } |
gandol2 | 3:9ab0f5f0ed9e | 199 | |
gandol2 | 4:85dda8d9a528 | 200 | #if SPI_INTERRUPT |
gandol2 | 4:85dda8d9a528 | 201 | void SPI_InitInterrupt() |
gandol2 | 4:85dda8d9a528 | 202 | { |
gandol2 | 4:85dda8d9a528 | 203 | spi_interrupt.rise(&execute_spi_slave_isr); |
gandol2 | 4:85dda8d9a528 | 204 | spi_interrupt.enable_irq(); |
gandol2 | 4:85dda8d9a528 | 205 | //spi_interrupt.mode(PullDown); // Pull down input |
gandol2 | 4:85dda8d9a528 | 206 | //spi_interrupt.fall(&execute_spi_slave_isr); // Attach the isr address to the falling edge interrupt |
gandol2 | 4:85dda8d9a528 | 207 | PRINTD("SPI Interrupt Init.. OK\n"); |
gandol2 | 4:85dda8d9a528 | 208 | } |
gandol2 | 4:85dda8d9a528 | 209 | #endif /* SPI_INTERRUPT */ |
gandol2 | 3:9ab0f5f0ed9e | 210 | |
gandol2 | 0:86ca686388bb | 211 | void SPI_SlaveWrite() |
gandol2 | 0:86ca686388bb | 212 | { |
gandol2 | 0:86ca686388bb | 213 | char tx_buffer[255]={0}; |
gandol2 | 0:86ca686388bb | 214 | char i; |
gandol2 | 0:86ca686388bb | 215 | char temp; |
gandol2 | 0:86ca686388bb | 216 | char tx_cnt = 0; |
gandol2 | 0:86ca686388bb | 217 | int value; |
gandol2 | 0:86ca686388bb | 218 | PRINTD("Input Strging="); |
gandol2 | 0:86ca686388bb | 219 | while(1) |
gandol2 | 0:86ca686388bb | 220 | { |
gandol2 | 3:9ab0f5f0ed9e | 221 | |
gandol2 | 0:86ca686388bb | 222 | temp=getchar(); |
gandol2 | 0:86ca686388bb | 223 | tx_buffer[tx_cnt++]=temp; |
gandol2 | 0:86ca686388bb | 224 | if(temp==0x0d) |
gandol2 | 0:86ca686388bb | 225 | { |
gandol2 | 0:86ca686388bb | 226 | tx_buffer[tx_cnt]=0; |
gandol2 | 0:86ca686388bb | 227 | PRINTD("\nData send Finish...\n"); |
gandol2 | 0:86ca686388bb | 228 | for(i=0;i<=tx_cnt;++i) |
gandol2 | 0:86ca686388bb | 229 | { |
gandol2 | 0:86ca686388bb | 230 | PRINTD("%c[%02x]",tx_buffer[i],tx_buffer[i]); |
gandol2 | 0:86ca686388bb | 231 | } |
gandol2 | 0:86ca686388bb | 232 | PRINTD("\n\n"); |
gandol2 | 0:86ca686388bb | 233 | for(i=0;i<=tx_cnt;++i) |
gandol2 | 0:86ca686388bb | 234 | { |
gandol2 | 0:86ca686388bb | 235 | value=tx_buffer[i]; |
gandol2 | 0:86ca686388bb | 236 | PRINTD("write[%d]=%c[%02x]\n",i,value,value); |
gandol2 | 0:86ca686388bb | 237 | spi_slave.reply(value); |
gandol2 | 0:86ca686388bb | 238 | } |
gandol2 | 0:86ca686388bb | 239 | for(i=0;i<tx_cnt;++i) |
gandol2 | 0:86ca686388bb | 240 | { |
gandol2 | 0:86ca686388bb | 241 | tx_buffer[i]=0; |
gandol2 | 0:86ca686388bb | 242 | PRINTD("init_tx_buf[%d]=%c\n",i,tx_buffer[i]); |
gandol2 | 0:86ca686388bb | 243 | } |
gandol2 | 0:86ca686388bb | 244 | tx_cnt=0; |
gandol2 | 0:86ca686388bb | 245 | PRINTD("break\n"); |
gandol2 | 0:86ca686388bb | 246 | break; |
gandol2 | 0:86ca686388bb | 247 | } |
gandol2 | 0:86ca686388bb | 248 | else |
gandol2 | 0:86ca686388bb | 249 | { |
gandol2 | 0:86ca686388bb | 250 | PRINTD("%c[%02x]",tx_buffer[tx_cnt],tx_buffer[tx_cnt]); |
gandol2 | 0:86ca686388bb | 251 | } |
gandol2 | 0:86ca686388bb | 252 | } |
gandol2 | 0:86ca686388bb | 253 | return; |
gandol2 | 0:86ca686388bb | 254 | } |
gandol2 | 0:86ca686388bb | 255 | |
gandol2 | 0:86ca686388bb | 256 | void spi_dummy_reply(void) |
gandol2 | 0:86ca686388bb | 257 | { |
gandol2 | 0:86ca686388bb | 258 | spi_slave.reply( 0xA0 ); |
gandol2 | 0:86ca686388bb | 259 | } |
gandol2 | 0:86ca686388bb | 260 | |
gandol2 | 0:86ca686388bb | 261 | #define EEPROM_SIZE 256 |
gandol2 | 4:85dda8d9a528 | 262 | |
gandol2 | 0:86ca686388bb | 263 | char eepBuf[EEPROM_SIZE]; |
gandol2 | 0:86ca686388bb | 264 | |
gandol2 | 3:9ab0f5f0ed9e | 265 | /** @brief char buf print |
gandol2 | 3:9ab0f5f0ed9e | 266 | * |
gandol2 | 3:9ab0f5f0ed9e | 267 | * @param buf print buf |
gandol2 | 3:9ab0f5f0ed9e | 268 | * @param length buf length |
gandol2 | 3:9ab0f5f0ed9e | 269 | */ |
gandol2 | 0:86ca686388bb | 270 | void printBuf(char * buf, int length) |
gandol2 | 0:86ca686388bb | 271 | { |
gandol2 | 0:86ca686388bb | 272 | pc_serial.printf("=======================[EEPROM]========================\n"); |
gandol2 | 0:86ca686388bb | 273 | pc_serial.printf(" |"); |
gandol2 | 0:86ca686388bb | 274 | for(int iCnt = 0 ; iCnt < 16 ; ++iCnt) |
gandol2 | 0:86ca686388bb | 275 | { |
gandol2 | 0:86ca686388bb | 276 | pc_serial.printf("%02X|", iCnt); |
gandol2 | 0:86ca686388bb | 277 | } |
gandol2 | 0:86ca686388bb | 278 | pc_serial.printf("\n"); |
gandol2 | 3:9ab0f5f0ed9e | 279 | |
gandol2 | 3:9ab0f5f0ed9e | 280 | |
gandol2 | 0:86ca686388bb | 281 | for(int iCnt = 0 ; iCnt < length ; ++iCnt) |
gandol2 | 0:86ca686388bb | 282 | { |
gandol2 | 0:86ca686388bb | 283 | if(0 == ((iCnt) % 16)) |
gandol2 | 0:86ca686388bb | 284 | { |
gandol2 | 0:86ca686388bb | 285 | pc_serial.printf("[0x%02X] ", iCnt); |
gandol2 | 0:86ca686388bb | 286 | } |
gandol2 | 3:9ab0f5f0ed9e | 287 | |
gandol2 | 0:86ca686388bb | 288 | pc_serial.printf("%02X ", *(buf + iCnt)); |
gandol2 | 3:9ab0f5f0ed9e | 289 | |
gandol2 | 0:86ca686388bb | 290 | if(0 == ((iCnt+1) % 16)) |
gandol2 | 0:86ca686388bb | 291 | { |
gandol2 | 0:86ca686388bb | 292 | pc_serial.printf("\n"); |
gandol2 | 3:9ab0f5f0ed9e | 293 | |
gandol2 | 0:86ca686388bb | 294 | } |
gandol2 | 3:9ab0f5f0ed9e | 295 | |
gandol2 | 0:86ca686388bb | 296 | } |
gandol2 | 0:86ca686388bb | 297 | pc_serial.printf("=======================================================\n"); |
gandol2 | 0:86ca686388bb | 298 | } |
gandol2 | 0:86ca686388bb | 299 | |
gandol2 | 3:9ab0f5f0ed9e | 300 | |
gandol2 | 4:85dda8d9a528 | 301 | Timeout receiveTimeOut; |
gandol2 | 4:85dda8d9a528 | 302 | bool timeOut = false; |
gandol2 | 4:85dda8d9a528 | 303 | #define CEBF746_TIMEOUT 10 // 1 sec |
gandol2 | 4:85dda8d9a528 | 304 | |
gandol2 | 4:85dda8d9a528 | 305 | uint8_t slave_read_byte() |
gandol2 | 4:85dda8d9a528 | 306 | { |
gandol2 | 4:85dda8d9a528 | 307 | while(!spi_slave.receive()); |
gandol2 | 4:85dda8d9a528 | 308 | return spi_slave.read(); |
gandol2 | 4:85dda8d9a528 | 309 | } |
gandol2 | 4:85dda8d9a528 | 310 | void slave_write_byte(uint8_t txData) |
gandol2 | 4:85dda8d9a528 | 311 | { |
gandol2 | 4:85dda8d9a528 | 312 | spi_slave.reply( txData ); |
gandol2 | 4:85dda8d9a528 | 313 | while(!spi_slave.receive()); |
gandol2 | 4:85dda8d9a528 | 314 | spi_slave.read(); |
gandol2 | 4:85dda8d9a528 | 315 | } |
gandol2 | 4:85dda8d9a528 | 316 | |
gandol2 | 4:85dda8d9a528 | 317 | void slave_read_uint16(uint16_t* buf16) |
gandol2 | 4:85dda8d9a528 | 318 | { |
gandol2 | 4:85dda8d9a528 | 319 | uint16_t temp; |
gandol2 | 4:85dda8d9a528 | 320 | |
gandol2 | 4:85dda8d9a528 | 321 | temp = slave_read_byte(); |
gandol2 | 4:85dda8d9a528 | 322 | *buf16 = temp << 8; |
gandol2 | 4:85dda8d9a528 | 323 | |
gandol2 | 4:85dda8d9a528 | 324 | temp = slave_read_byte(); |
gandol2 | 4:85dda8d9a528 | 325 | *buf16 |= temp; |
gandol2 | 4:85dda8d9a528 | 326 | |
gandol2 | 4:85dda8d9a528 | 327 | //*buf16 = (slave_read_byte() << 8) | (slave_read_byte()); |
gandol2 | 4:85dda8d9a528 | 328 | } |
gandol2 | 4:85dda8d9a528 | 329 | void slave_read_multi_byte(uint8_t* buf, int size) |
gandol2 | 4:85dda8d9a528 | 330 | { |
gandol2 | 4:85dda8d9a528 | 331 | for(int iCnt = 0 ; iCnt < size ; ++iCnt) |
gandol2 | 4:85dda8d9a528 | 332 | *(buf+iCnt) = slave_read_byte(); |
gandol2 | 4:85dda8d9a528 | 333 | } |
gandol2 | 4:85dda8d9a528 | 334 | |
gandol2 | 4:85dda8d9a528 | 335 | void slave_write_multi_byte(uint8_t* buf, int size) |
gandol2 | 4:85dda8d9a528 | 336 | { |
gandol2 | 4:85dda8d9a528 | 337 | for(int iCnt = 0 ; iCnt < size ; ++iCnt) |
gandol2 | 4:85dda8d9a528 | 338 | slave_write_byte(*(buf+iCnt)); |
gandol2 | 4:85dda8d9a528 | 339 | } |
gandol2 | 4:85dda8d9a528 | 340 | |
gandol2 | 4:85dda8d9a528 | 341 | |
gandol2 | 4:85dda8d9a528 | 342 | #define YSH_CODE 1 |
gandol2 | 4:85dda8d9a528 | 343 | #if YSH_CODE |
gandol2 | 4:85dda8d9a528 | 344 | typedef struct // #include <aes.h> -> mbed tls lib |
gandol2 | 4:85dda8d9a528 | 345 | { |
gandol2 | 4:85dda8d9a528 | 346 | int nr; /*!< number of rounds */ |
gandol2 | 4:85dda8d9a528 | 347 | uint32_t rk; /*!< AES round keys */ |
gandol2 | 4:85dda8d9a528 | 348 | uint32_t buf[68]; /*!< unaligned data */ |
gandol2 | 4:85dda8d9a528 | 349 | } |
gandol2 | 4:85dda8d9a528 | 350 | mbedtls_aes_context; |
gandol2 | 4:85dda8d9a528 | 351 | |
gandol2 | 4:85dda8d9a528 | 352 | typedef struct |
gandol2 | 4:85dda8d9a528 | 353 | { |
gandol2 | 4:85dda8d9a528 | 354 | uint8_t iv[16]; |
gandol2 | 4:85dda8d9a528 | 355 | uint8_t key[32]; |
gandol2 | 4:85dda8d9a528 | 356 | uint8_t key_size; |
gandol2 | 4:85dda8d9a528 | 357 | uint16_t key_crc; |
gandol2 | 4:85dda8d9a528 | 358 | } |
gandol2 | 4:85dda8d9a528 | 359 | cube_sec_key; |
gandol2 | 4:85dda8d9a528 | 360 | |
gandol2 | 4:85dda8d9a528 | 361 | typedef struct |
gandol2 | 4:85dda8d9a528 | 362 | { |
gandol2 | 4:85dda8d9a528 | 363 | uint8_t input_data[16]; |
gandol2 | 4:85dda8d9a528 | 364 | uint8_t output_data[16]; |
gandol2 | 4:85dda8d9a528 | 365 | uint8_t input_data_size; |
gandol2 | 4:85dda8d9a528 | 366 | uint8_t output_data_size; |
gandol2 | 4:85dda8d9a528 | 367 | } |
gandol2 | 4:85dda8d9a528 | 368 | cube_sec_data; |
gandol2 | 4:85dda8d9a528 | 369 | |
gandol2 | 4:85dda8d9a528 | 370 | typedef struct |
gandol2 | 4:85dda8d9a528 | 371 | { |
gandol2 | 4:85dda8d9a528 | 372 | mbedtls_aes_context mbed_ctx; |
gandol2 | 4:85dda8d9a528 | 373 | uint8_t cmd; |
gandol2 | 4:85dda8d9a528 | 374 | cube_sec_data sec_data; |
gandol2 | 4:85dda8d9a528 | 375 | cube_sec_key sec_key; |
gandol2 | 4:85dda8d9a528 | 376 | } |
gandol2 | 4:85dda8d9a528 | 377 | cube_sec_context; |
gandol2 | 4:85dda8d9a528 | 378 | |
gandol2 | 4:85dda8d9a528 | 379 | |
gandol2 | 4:85dda8d9a528 | 380 | void print_mbedtls_aes_context(mbedtls_aes_context printStr) |
gandol2 | 4:85dda8d9a528 | 381 | { |
gandol2 | 4:85dda8d9a528 | 382 | printf("-------------mbedtls_aes_context---------\n"); |
gandol2 | 4:85dda8d9a528 | 383 | printf("number of rounds : %d\n", printStr.nr); |
gandol2 | 4:85dda8d9a528 | 384 | printf("AES round keys : 0x%X\n", printStr.rk); |
gandol2 | 4:85dda8d9a528 | 385 | printf("unaligned data : "); |
gandol2 | 4:85dda8d9a528 | 386 | for(int iCnt = 0 ; iCnt < 68 ; iCnt++) |
gandol2 | 4:85dda8d9a528 | 387 | { |
gandol2 | 4:85dda8d9a528 | 388 | printf("%X",printStr.buf[iCnt]); |
gandol2 | 4:85dda8d9a528 | 389 | } |
gandol2 | 4:85dda8d9a528 | 390 | printf("\n"); |
gandol2 | 4:85dda8d9a528 | 391 | //printf("-----------------------------------------\n"); |
gandol2 | 4:85dda8d9a528 | 392 | } |
gandol2 | 4:85dda8d9a528 | 393 | void print_cube_sec_data(cube_sec_data printStr) |
gandol2 | 4:85dda8d9a528 | 394 | { |
gandol2 | 4:85dda8d9a528 | 395 | printf("--------------cube_sec_data--------------\n"); |
gandol2 | 4:85dda8d9a528 | 396 | printf("input_data : "); |
gandol2 | 4:85dda8d9a528 | 397 | for(int iCnt = 0 ; iCnt < 16 ; iCnt++) |
gandol2 | 4:85dda8d9a528 | 398 | { |
gandol2 | 4:85dda8d9a528 | 399 | printf("%02X ",printStr.input_data[iCnt]); |
gandol2 | 4:85dda8d9a528 | 400 | } |
gandol2 | 4:85dda8d9a528 | 401 | printf("\n"); |
gandol2 | 4:85dda8d9a528 | 402 | |
gandol2 | 4:85dda8d9a528 | 403 | printf("output_data : "); |
gandol2 | 4:85dda8d9a528 | 404 | for(int iCnt = 0 ; iCnt < 16 ; iCnt++) |
gandol2 | 4:85dda8d9a528 | 405 | { |
gandol2 | 4:85dda8d9a528 | 406 | printf("%02X ",printStr.output_data[iCnt]); |
gandol2 | 4:85dda8d9a528 | 407 | } |
gandol2 | 4:85dda8d9a528 | 408 | printf("\n"); |
gandol2 | 4:85dda8d9a528 | 409 | |
gandol2 | 4:85dda8d9a528 | 410 | printf("input_data_size : %d\n", printStr.input_data_size); |
gandol2 | 4:85dda8d9a528 | 411 | printf("output_data_size : %d\n", printStr.output_data_size); |
gandol2 | 4:85dda8d9a528 | 412 | |
gandol2 | 4:85dda8d9a528 | 413 | //printf("-----------------------------------------\n"); |
gandol2 | 4:85dda8d9a528 | 414 | } |
gandol2 | 4:85dda8d9a528 | 415 | void print_cube_sec_key(cube_sec_key printStr) |
gandol2 | 4:85dda8d9a528 | 416 | { |
gandol2 | 4:85dda8d9a528 | 417 | printf("-------------cube_sec_key------------------\n"); |
gandol2 | 4:85dda8d9a528 | 418 | printf("iv : "); |
gandol2 | 4:85dda8d9a528 | 419 | for(int iCnt = 0 ; iCnt < 16 ; iCnt++) |
gandol2 | 4:85dda8d9a528 | 420 | { |
gandol2 | 4:85dda8d9a528 | 421 | printf("%02X ",printStr.iv[iCnt]); |
gandol2 | 4:85dda8d9a528 | 422 | } |
gandol2 | 4:85dda8d9a528 | 423 | printf("\n"); |
gandol2 | 4:85dda8d9a528 | 424 | |
gandol2 | 4:85dda8d9a528 | 425 | printf("key : "); |
gandol2 | 4:85dda8d9a528 | 426 | for(int iCnt = 0 ; iCnt < 32 ; iCnt++) |
gandol2 | 4:85dda8d9a528 | 427 | { |
gandol2 | 4:85dda8d9a528 | 428 | printf("%02X ",printStr.key[iCnt]); |
gandol2 | 4:85dda8d9a528 | 429 | } |
gandol2 | 4:85dda8d9a528 | 430 | printf("\n"); |
gandol2 | 4:85dda8d9a528 | 431 | |
gandol2 | 4:85dda8d9a528 | 432 | printf("key_size : %d\n", printStr.key_size); |
gandol2 | 4:85dda8d9a528 | 433 | printf("key_crc : %04X\n", printStr.key_crc); |
gandol2 | 4:85dda8d9a528 | 434 | |
gandol2 | 4:85dda8d9a528 | 435 | //printf("-----------------------------------------\n"); |
gandol2 | 4:85dda8d9a528 | 436 | } |
gandol2 | 4:85dda8d9a528 | 437 | void print_cube_sec_context(cube_sec_context printStr) |
gandol2 | 4:85dda8d9a528 | 438 | { |
gandol2 | 4:85dda8d9a528 | 439 | printf("=============cube sec context print================\n"); |
gandol2 | 4:85dda8d9a528 | 440 | print_mbedtls_aes_context(printStr.mbed_ctx); |
gandol2 | 4:85dda8d9a528 | 441 | printf("---------------- cmd --------------------\n"); |
gandol2 | 4:85dda8d9a528 | 442 | printf("cmd : %02X\n", printStr.cmd); |
gandol2 | 4:85dda8d9a528 | 443 | //printf("-----------------------------------------\n"); |
gandol2 | 4:85dda8d9a528 | 444 | print_cube_sec_data(printStr.sec_data); |
gandol2 | 4:85dda8d9a528 | 445 | print_cube_sec_key(printStr.sec_key); |
gandol2 | 4:85dda8d9a528 | 446 | printf("===================================================\n"); |
gandol2 | 4:85dda8d9a528 | 447 | } |
gandol2 | 4:85dda8d9a528 | 448 | |
gandol2 | 4:85dda8d9a528 | 449 | bool cube_crypt_spi_cmd_set(cube_sec_context *cube_ctx, uint8_t cmd, // test func |
gandol2 | 4:85dda8d9a528 | 450 | uint8_t input_data[16], uint16_t keycrc) |
gandol2 | 4:85dda8d9a528 | 451 | { |
gandol2 | 4:85dda8d9a528 | 452 | bool ret = false; |
gandol2 | 4:85dda8d9a528 | 453 | |
gandol2 | 4:85dda8d9a528 | 454 | cube_ctx->cmd = cmd; |
gandol2 | 4:85dda8d9a528 | 455 | for(int iCnt = 0 ; iCnt < 16 ; ++iCnt) |
gandol2 | 4:85dda8d9a528 | 456 | cube_ctx->sec_data.input_data[iCnt] = input_data[iCnt]; |
gandol2 | 4:85dda8d9a528 | 457 | cube_ctx->sec_key.key_crc = keycrc; |
gandol2 | 4:85dda8d9a528 | 458 | |
gandol2 | 4:85dda8d9a528 | 459 | print_cube_sec_context(*cube_ctx); |
gandol2 | 4:85dda8d9a528 | 460 | |
gandol2 | 4:85dda8d9a528 | 461 | return ret; |
gandol2 | 4:85dda8d9a528 | 462 | } |
gandol2 | 4:85dda8d9a528 | 463 | |
gandol2 | 4:85dda8d9a528 | 464 | cube_sec_context tempContext; |
gandol2 | 4:85dda8d9a528 | 465 | |
gandol2 | 4:85dda8d9a528 | 466 | #endif |
gandol2 | 3:9ab0f5f0ed9e | 467 | |
gandol2 | 3:9ab0f5f0ed9e | 468 | |
gandol2 | 3:9ab0f5f0ed9e | 469 | /** @brief main function ################################################################### |
gandol2 | 3:9ab0f5f0ed9e | 470 | * |
gandol2 | 3:9ab0f5f0ed9e | 471 | */ |
gandol2 | 0:86ca686388bb | 472 | int main() |
gandol2 | 0:86ca686388bb | 473 | { |
gandol2 | 4:85dda8d9a528 | 474 | uint8_t ret; |
gandol2 | 4:85dda8d9a528 | 475 | uint8_t spiMOSIBuf[255]; |
gandol2 | 4:85dda8d9a528 | 476 | uint8_t spiMISOBuf[255]; |
gandol2 | 3:9ab0f5f0ed9e | 477 | char eepAddr = 0; |
gandol2 | 0:86ca686388bb | 478 | char eepData = 0; |
gandol2 | 0:86ca686388bb | 479 | |
gandol2 | 4:85dda8d9a528 | 480 | int packetLength = 0; |
gandol2 | 3:9ab0f5f0ed9e | 481 | |
gandol2 | 4:85dda8d9a528 | 482 | uint8_t spiRxTempBuf = 0; |
gandol2 | 4:85dda8d9a528 | 483 | |
gandol2 | 4:85dda8d9a528 | 484 | |
gandol2 | 4:85dda8d9a528 | 485 | bool crcCheck = false; |
gandol2 | 4:85dda8d9a528 | 486 | uint16_t size = 0; |
gandol2 | 4:85dda8d9a528 | 487 | uint16_t readCrc = 0; |
gandol2 | 4:85dda8d9a528 | 488 | uint16_t genCrc = 0; |
gandol2 | 3:9ab0f5f0ed9e | 489 | |
gandol2 | 4:85dda8d9a528 | 490 | spiDataStr rxData; |
gandol2 | 4:85dda8d9a528 | 491 | |
gandol2 | 4:85dda8d9a528 | 492 | pc_serial.printf("\n\n========== KSS SPI Slave1 [Start] ==========\n"); |
gandol2 | 3:9ab0f5f0ed9e | 493 | |
gandol2 | 3:9ab0f5f0ed9e | 494 | SPI_InitSlave(); |
gandol2 | 3:9ab0f5f0ed9e | 495 | |
gandol2 | 4:85dda8d9a528 | 496 | #if SPI_INTERRUPT |
gandol2 | 4:85dda8d9a528 | 497 | SPI_InitInterrupt(); |
gandol2 | 4:85dda8d9a528 | 498 | while(1); |
gandol2 | 4:85dda8d9a528 | 499 | #endif /* SPI_INTERRUPT */ |
gandol2 | 3:9ab0f5f0ed9e | 500 | |
gandol2 | 4:85dda8d9a528 | 501 | pc_serial.printf("\n\n========== KSS SPI Slave2 [Start] ==========\n"); |
gandol2 | 3:9ab0f5f0ed9e | 502 | |
gandol2 | 0:86ca686388bb | 503 | |
gandol2 | 4:85dda8d9a528 | 504 | memset(spiMISOBuf, 0, 255); |
gandol2 | 4:85dda8d9a528 | 505 | memset(spiMOSIBuf, 0, 255); |
gandol2 | 4:85dda8d9a528 | 506 | while(1) |
gandol2 | 4:85dda8d9a528 | 507 | { |
gandol2 | 4:85dda8d9a528 | 508 | pc_serial.printf("\n\nwaiting CEBF746 cmd...\n"); |
gandol2 | 4:85dda8d9a528 | 509 | |
gandol2 | 4:85dda8d9a528 | 510 | |
gandol2 | 4:85dda8d9a528 | 511 | |
gandol2 | 4:85dda8d9a528 | 512 | |
gandol2 | 4:85dda8d9a528 | 513 | spiRxTempBuf = slave_read_byte(); |
gandol2 | 4:85dda8d9a528 | 514 | printf("menu[%02X]\n", spiRxTempBuf); |
gandol2 | 3:9ab0f5f0ed9e | 515 | |
gandol2 | 4:85dda8d9a528 | 516 | switch(spiRxTempBuf) |
gandol2 | 4:85dda8d9a528 | 517 | { |
gandol2 | 4:85dda8d9a528 | 518 | case FUNC_READ_STATUS: |
gandol2 | 4:85dda8d9a528 | 519 | slave_write_byte( cebf746_status_reg ); |
gandol2 | 4:85dda8d9a528 | 520 | printf("[INFO] Response Status reg [%02X]\n", cebf746_status_reg); |
gandol2 | 4:85dda8d9a528 | 521 | break; |
gandol2 | 4:85dda8d9a528 | 522 | |
gandol2 | 4:85dda8d9a528 | 523 | case FUNC_WRITE_ENC_DATA: |
gandol2 | 4:85dda8d9a528 | 524 | |
gandol2 | 4:85dda8d9a528 | 525 | uint16_t packetSize = 0; |
gandol2 | 4:85dda8d9a528 | 526 | uint8_t tempBuf[CEB_BUF_SIZE] = {0, }; |
gandol2 | 4:85dda8d9a528 | 527 | uint16_t retCrc = 0; |
gandol2 | 4:85dda8d9a528 | 528 | |
gandol2 | 4:85dda8d9a528 | 529 | |
gandol2 | 4:85dda8d9a528 | 530 | slave_read_uint16(&packetSize); |
gandol2 | 4:85dda8d9a528 | 531 | if(packetSize != CEB_BUF_SIZE) |
gandol2 | 4:85dda8d9a528 | 532 | { |
gandol2 | 4:85dda8d9a528 | 533 | printf("[ERROR] %s : %d : packet size error, recived packet size[%d]\n", __FILE__, __LINE__, packetSize); |
gandol2 | 4:85dda8d9a528 | 534 | continue; |
gandol2 | 4:85dda8d9a528 | 535 | } |
gandol2 | 4:85dda8d9a528 | 536 | slave_read_multi_byte(tempBuf, CEB_BUF_SIZE); |
gandol2 | 4:85dda8d9a528 | 537 | slave_read_uint16(&retCrc); |
gandol2 | 4:85dda8d9a528 | 538 | |
gandol2 | 4:85dda8d9a528 | 539 | cube_crc_16(CEB_BUF_SIZE, tempBuf, &genCrc); |
gandol2 | 4:85dda8d9a528 | 540 | crcCheck = cube_crc_compare(retCrc, genCrc); |
gandol2 | 4:85dda8d9a528 | 541 | if(true == crcCheck ) |
gandol2 | 4:85dda8d9a528 | 542 | slave_write_byte(WRITE_SELF_TEST_RET_CODE); |
gandol2 | 4:85dda8d9a528 | 543 | else |
gandol2 | 4:85dda8d9a528 | 544 | slave_write_byte(0x00); |
gandol2 | 4:85dda8d9a528 | 545 | |
gandol2 | 4:85dda8d9a528 | 546 | _cebf746_print_packet(packetSize, tempBuf, retCrc); |
gandol2 | 4:85dda8d9a528 | 547 | |
gandol2 | 4:85dda8d9a528 | 548 | if(true == crcCheck ) |
gandol2 | 4:85dda8d9a528 | 549 | { |
gandol2 | 4:85dda8d9a528 | 550 | cube_crypt_spi_cmd_set(&tempContext, 0x02,tempBuf, 0); |
gandol2 | 4:85dda8d9a528 | 551 | pc_serial.printf("call \"cube_crypt_spi_cmd_set()\"\n"); |
gandol2 | 4:85dda8d9a528 | 552 | } |
gandol2 | 4:85dda8d9a528 | 553 | else |
gandol2 | 4:85dda8d9a528 | 554 | { |
gandol2 | 4:85dda8d9a528 | 555 | printf("[ERROR] %s : %d : FUNC_WRITE_ENC_DATA CRC Error\n", __FILE__, __LINE__); |
gandol2 | 4:85dda8d9a528 | 556 | } |
gandol2 | 4:85dda8d9a528 | 557 | |
gandol2 | 4:85dda8d9a528 | 558 | break; |
gandol2 | 4:85dda8d9a528 | 559 | |
gandol2 | 4:85dda8d9a528 | 560 | case FUNC_READ_ENC_DATA: |
gandol2 | 4:85dda8d9a528 | 561 | break; |
gandol2 | 4:85dda8d9a528 | 562 | |
gandol2 | 4:85dda8d9a528 | 563 | case FUNC_WRITE_DEC_DATA: |
gandol2 | 4:85dda8d9a528 | 564 | break; |
gandol2 | 4:85dda8d9a528 | 565 | |
gandol2 | 4:85dda8d9a528 | 566 | case FUNC_READ_DEC_DATA: |
gandol2 | 4:85dda8d9a528 | 567 | break; |
gandol2 | 4:85dda8d9a528 | 568 | |
gandol2 | 4:85dda8d9a528 | 569 | |
gandol2 | 4:85dda8d9a528 | 570 | case FUNC_WRITE_SELF_TEST: // 161017_KSS_Test OK |
gandol2 | 4:85dda8d9a528 | 571 | |
gandol2 | 4:85dda8d9a528 | 572 | slave_read_uint16(&rxData.size); |
gandol2 | 4:85dda8d9a528 | 573 | |
gandol2 | 4:85dda8d9a528 | 574 | rxData.buf = (uint8_t*)malloc(rxData.size); |
gandol2 | 4:85dda8d9a528 | 575 | slave_read_multi_byte(rxData.buf, rxData.size); |
gandol2 | 4:85dda8d9a528 | 576 | |
gandol2 | 4:85dda8d9a528 | 577 | slave_read_uint16(&rxData.crc16); |
gandol2 | 4:85dda8d9a528 | 578 | |
gandol2 | 4:85dda8d9a528 | 579 | |
gandol2 | 4:85dda8d9a528 | 580 | |
gandol2 | 4:85dda8d9a528 | 581 | cube_crc_16(rxData.size, rxData.buf, &genCrc); |
gandol2 | 4:85dda8d9a528 | 582 | |
gandol2 | 4:85dda8d9a528 | 583 | crcCheck = cube_crc_compare(rxData.crc16, genCrc); |
gandol2 | 4:85dda8d9a528 | 584 | if(true == crcCheck ) |
gandol2 | 4:85dda8d9a528 | 585 | slave_write_byte(WRITE_SELF_TEST_RET_CODE); |
gandol2 | 4:85dda8d9a528 | 586 | else |
gandol2 | 4:85dda8d9a528 | 587 | slave_write_byte(0x00); |
gandol2 | 4:85dda8d9a528 | 588 | |
gandol2 | 4:85dda8d9a528 | 589 | // ----- print rx buf |
gandol2 | 4:85dda8d9a528 | 590 | cebf746_print_packet(&rxData); |
gandol2 | 4:85dda8d9a528 | 591 | |
gandol2 | 4:85dda8d9a528 | 592 | pc_serial.printf("crc read[%04X], gen[%04X] check...", rxData.crc16, genCrc); |
gandol2 | 4:85dda8d9a528 | 593 | if(true == crcCheck ) |
gandol2 | 4:85dda8d9a528 | 594 | pc_serial.printf("[OK]\n"); |
gandol2 | 4:85dda8d9a528 | 595 | else |
gandol2 | 4:85dda8d9a528 | 596 | pc_serial.printf("[FAIL]\n"); |
gandol2 | 4:85dda8d9a528 | 597 | |
gandol2 | 4:85dda8d9a528 | 598 | // ----- free() |
gandol2 | 4:85dda8d9a528 | 599 | free(rxData.buf); |
gandol2 | 4:85dda8d9a528 | 600 | |
gandol2 | 4:85dda8d9a528 | 601 | break; |
gandol2 | 4:85dda8d9a528 | 602 | |
gandol2 | 4:85dda8d9a528 | 603 | case FUNC_READ_SELF_TEST: // 161017_KSS_Test OK |
gandol2 | 4:85dda8d9a528 | 604 | //printf("FUNC_READ_SELF_TEST\n"); |
gandol2 | 4:85dda8d9a528 | 605 | // TODO check status reg |
gandol2 | 4:85dda8d9a528 | 606 | |
gandol2 | 4:85dda8d9a528 | 607 | cube_crc_16(CEB_BUF_SIZE, readSelfTestValidateData, &genCrc); |
gandol2 | 4:85dda8d9a528 | 608 | |
gandol2 | 4:85dda8d9a528 | 609 | |
gandol2 | 4:85dda8d9a528 | 610 | slave_write_byte((CEB_BUF_SIZE >> 8) & 0xFF); |
gandol2 | 4:85dda8d9a528 | 611 | slave_write_byte((CEB_BUF_SIZE ) & 0xFF); |
gandol2 | 4:85dda8d9a528 | 612 | slave_write_multi_byte(readSelfTestValidateData, CEB_BUF_SIZE); |
gandol2 | 4:85dda8d9a528 | 613 | slave_write_byte((genCrc >> 8) & 0xFF); |
gandol2 | 4:85dda8d9a528 | 614 | slave_write_byte((genCrc ) & 0xFF); |
gandol2 | 4:85dda8d9a528 | 615 | |
gandol2 | 4:85dda8d9a528 | 616 | |
gandol2 | 4:85dda8d9a528 | 617 | |
gandol2 | 4:85dda8d9a528 | 618 | printf("--send end\n"); |
gandol2 | 4:85dda8d9a528 | 619 | |
gandol2 | 4:85dda8d9a528 | 620 | wait_ms(100); |
gandol2 | 4:85dda8d9a528 | 621 | |
gandol2 | 4:85dda8d9a528 | 622 | break; |
gandol2 | 4:85dda8d9a528 | 623 | |
gandol2 | 4:85dda8d9a528 | 624 | |
gandol2 | 3:9ab0f5f0ed9e | 625 | |
gandol2 | 3:9ab0f5f0ed9e | 626 | |
gandol2 | 3:9ab0f5f0ed9e | 627 | |
gandol2 | 4:85dda8d9a528 | 628 | } |
gandol2 | 3:9ab0f5f0ed9e | 629 | |
gandol2 | 4:85dda8d9a528 | 630 | |
gandol2 | 3:9ab0f5f0ed9e | 631 | |
gandol2 | 4:85dda8d9a528 | 632 | |
gandol2 | 0:86ca686388bb | 633 | } |
gandol2 | 3:9ab0f5f0ed9e | 634 | |
gandol2 | 0:86ca686388bb | 635 | |
gandol2 | 3:9ab0f5f0ed9e | 636 | |
gandol2 | 0:86ca686388bb | 637 | |
gandol2 | 3:9ab0f5f0ed9e | 638 | |
gandol2 | 0:86ca686388bb | 639 | |
gandol2 | 3:9ab0f5f0ed9e | 640 | |
gandol2 | 0:86ca686388bb | 641 | }//end of main |