teste de publish

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

Committer:
brunofgc
Date:
Fri Jun 08 22:14:21 2018 +0000
Revision:
38:07d3907b74e5
Parent:
34:348991c54ff3
teste de publish para compilar no mbed-cli

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brunofgc 13:b9183b4bc049 1 #include "bootloader.h"
brunofgc 13:b9183b4bc049 2 #define IAP_LOCATION 0x1fff1ff1
brunofgc 13:b9183b4bc049 3 #define memBufTam 1024
brunofgc 13:b9183b4bc049 4 bool callBootLoader = false;
brunofgc 34:348991c54ff3 5 char memBufConfigBootLoader[256];
brunofgc 34:348991c54ff3 6 char executaBootLoader;
brunofgc 34:348991c54ff3 7 uint32_t tamFirmware;
brunofgc 34:348991c54ff3 8 //firmwareDescriptor firmDesc;
brunofgc 34:348991c54ff3 9 IAP IAP_call;
brunofgc 13:b9183b4bc049 10 /*****************************************************************************//**
brunofgc 13:b9183b4bc049 11 * @brief De-initializes the NVIC peripheral registers to their default
brunofgc 13:b9183b4bc049 12 * reset values.
brunofgc 13:b9183b4bc049 13 * @param None
brunofgc 13:b9183b4bc049 14 * @return None
brunofgc 13:b9183b4bc049 15 *
brunofgc 13:b9183b4bc049 16 * These following NVIC peripheral registers will be de-initialized:
brunofgc 13:b9183b4bc049 17 * - Disable Interrupt (32 IRQ interrupt sources that matched with LPC17xx)
brunofgc 13:b9183b4bc049 18 * - Clear all Pending Interrupts (32 IRQ interrupt source that matched with LPC17xx)
brunofgc 13:b9183b4bc049 19 * - Clear all Interrupt Priorities (32 IRQ interrupt source that matched with LPC17xx)
brunofgc 13:b9183b4bc049 20 *******************************************************************************/
brunofgc 13:b9183b4bc049 21 void NVIC_DeInit(void)
brunofgc 13:b9183b4bc049 22 {
brunofgc 13:b9183b4bc049 23 uint8_t tmp;
brunofgc 13:b9183b4bc049 24
brunofgc 13:b9183b4bc049 25 /* Disable all interrupts */
brunofgc 13:b9183b4bc049 26 NVIC->ICER[0] = 0xFFFFFFFF;
brunofgc 13:b9183b4bc049 27 NVIC->ICER[1] = 0x00000001;
brunofgc 13:b9183b4bc049 28 /* Clear all pending interrupts */
brunofgc 13:b9183b4bc049 29 NVIC->ICPR[0] = 0xFFFFFFFF;
brunofgc 13:b9183b4bc049 30 NVIC->ICPR[1] = 0x00000001;
brunofgc 13:b9183b4bc049 31
brunofgc 13:b9183b4bc049 32 /* Clear all interrupt priority */
brunofgc 13:b9183b4bc049 33 for (tmp = 0; tmp < 32; tmp++) {
brunofgc 13:b9183b4bc049 34 NVIC->IP[tmp] = 0x00;
brunofgc 13:b9183b4bc049 35 }
brunofgc 13:b9183b4bc049 36 }
brunofgc 13:b9183b4bc049 37
brunofgc 34:348991c54ff3 38
brunofgc 34:348991c54ff3 39
brunofgc 13:b9183b4bc049 40 /*****************************************************************************//**
brunofgc 13:b9183b4bc049 41 * @brief De-initializes the SCB peripheral registers to their default
brunofgc 13:b9183b4bc049 42 * reset values.
brunofgc 13:b9183b4bc049 43 * @param none
brunofgc 13:b9183b4bc049 44 * @return none
brunofgc 13:b9183b4bc049 45 *
brunofgc 13:b9183b4bc049 46 * These following SCB NVIC peripheral registers will be de-initialized:
brunofgc 13:b9183b4bc049 47 * - Interrupt Control State register
brunofgc 13:b9183b4bc049 48 * - Interrupt Vector Table Offset register
brunofgc 13:b9183b4bc049 49 * - Application Interrupt/Reset Control register
brunofgc 13:b9183b4bc049 50 * - System Control register
brunofgc 13:b9183b4bc049 51 * - Configuration Control register
brunofgc 13:b9183b4bc049 52 * - System Handlers Priority Registers
brunofgc 13:b9183b4bc049 53 * - System Handler Control and State Register
brunofgc 13:b9183b4bc049 54 * - Configurable Fault Status Register
brunofgc 13:b9183b4bc049 55 * - Hard Fault Status Register
brunofgc 13:b9183b4bc049 56 * - Debug Fault Status Register
brunofgc 13:b9183b4bc049 57 *******************************************************************************/
brunofgc 13:b9183b4bc049 58 void NVIC_SCBDeInit(void)
brunofgc 13:b9183b4bc049 59 {
brunofgc 13:b9183b4bc049 60 uint8_t tmp;
brunofgc 13:b9183b4bc049 61
brunofgc 13:b9183b4bc049 62 SCB->ICSR = 0x0A000000;
brunofgc 13:b9183b4bc049 63 SCB->VTOR = 0x00000000;
brunofgc 13:b9183b4bc049 64 SCB->AIRCR = 0x05FA0000;
brunofgc 13:b9183b4bc049 65 SCB->SCR = 0x00000000;
brunofgc 13:b9183b4bc049 66 SCB->CCR = 0x00000000;
brunofgc 13:b9183b4bc049 67
brunofgc 13:b9183b4bc049 68 for (tmp = 0; tmp < 32; tmp++) {
brunofgc 13:b9183b4bc049 69 SCB->SHP[tmp] = 0x00;
brunofgc 13:b9183b4bc049 70 }
brunofgc 13:b9183b4bc049 71
brunofgc 13:b9183b4bc049 72 SCB->SHCSR = 0x00000000;
brunofgc 13:b9183b4bc049 73 SCB->CFSR = 0xFFFFFFFF;
brunofgc 13:b9183b4bc049 74 SCB->HFSR = 0xFFFFFFFF;
brunofgc 13:b9183b4bc049 75 SCB->DFSR = 0xFFFFFFFF;
brunofgc 13:b9183b4bc049 76 }
brunofgc 13:b9183b4bc049 77
brunofgc 13:b9183b4bc049 78 #define APPL_RUN_ADDR 0x70000
brunofgc 13:b9183b4bc049 79 __asm void boot_jump(uint32_t address)
brunofgc 13:b9183b4bc049 80 {
brunofgc 13:b9183b4bc049 81 LDR SP, [R0]
brunofgc 13:b9183b4bc049 82 LDR PC, [R0, #4]
brunofgc 13:b9183b4bc049 83 }
brunofgc 13:b9183b4bc049 84
brunofgc 34:348991c54ff3 85 void flashPrepare(){
brunofgc 34:348991c54ff3 86 IAP_call=(IAP) IAP_LOCATION;
brunofgc 34:348991c54ff3 87 }
brunofgc 34:348991c54ff3 88
brunofgc 34:348991c54ff3 89 void firmDescToFlash(){
brunofgc 34:348991c54ff3 90 //Guardo tamanho do firmware em bytes na flash no setor 29
brunofgc 34:348991c54ff3 91 //Preparing flash sectors to write
brunofgc 34:348991c54ff3 92 unsigned int commandBytes[5];
brunofgc 34:348991c54ff3 93 unsigned int outputBytes[5];
brunofgc 34:348991c54ff3 94
brunofgc 34:348991c54ff3 95 //Preparo setores
brunofgc 34:348991c54ff3 96 commandBytes[0]=50;
brunofgc 34:348991c54ff3 97 commandBytes[1]=29;
brunofgc 34:348991c54ff3 98 commandBytes[2]=29;
brunofgc 34:348991c54ff3 99 commandBytes[3]=96000;
brunofgc 34:348991c54ff3 100 commandBytes[4]=0x0;
brunofgc 34:348991c54ff3 101 IAP_call(commandBytes,outputBytes);
brunofgc 34:348991c54ff3 102 if(outputBytes[0]!=0x0){
brunofgc 34:348991c54ff3 103 printf("Falha na escrita em flash parte 7 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 34:348991c54ff3 104 return;
brunofgc 34:348991c54ff3 105 }
brunofgc 34:348991c54ff3 106
brunofgc 34:348991c54ff3 107 //Erasing flash sectors
brunofgc 34:348991c54ff3 108 commandBytes[0]=52;
brunofgc 34:348991c54ff3 109 commandBytes[1]=29;
brunofgc 34:348991c54ff3 110 commandBytes[2]=29;
brunofgc 34:348991c54ff3 111 commandBytes[3]=96000;
brunofgc 34:348991c54ff3 112 commandBytes[4]=0x0;
brunofgc 34:348991c54ff3 113 IAP_call(commandBytes,outputBytes);
brunofgc 34:348991c54ff3 114 if(outputBytes[0]!=0x0){
brunofgc 34:348991c54ff3 115 printf("Falha na escrita em flash parte 2 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 34:348991c54ff3 116 return;
brunofgc 34:348991c54ff3 117 }
brunofgc 34:348991c54ff3 118
brunofgc 34:348991c54ff3 119 //Preparo setores
brunofgc 34:348991c54ff3 120 commandBytes[0]=50;
brunofgc 34:348991c54ff3 121 commandBytes[1]=29;
brunofgc 34:348991c54ff3 122 commandBytes[2]=29;
brunofgc 34:348991c54ff3 123 commandBytes[3]=96000;
brunofgc 34:348991c54ff3 124 commandBytes[4]=0x0;
brunofgc 34:348991c54ff3 125 IAP_call(commandBytes,outputBytes);
brunofgc 34:348991c54ff3 126 if(outputBytes[0]!=0x0){
brunofgc 34:348991c54ff3 127 printf("Falha na escrita em flash parte 7 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 34:348991c54ff3 128 return;
brunofgc 34:348991c54ff3 129 }
brunofgc 34:348991c54ff3 130
brunofgc 34:348991c54ff3 131 memBufConfigBootLoader[0]=(tamFirmware>>24)&0xFF;
brunofgc 34:348991c54ff3 132 memBufConfigBootLoader[1]=(tamFirmware>>16)&0xFF;
brunofgc 34:348991c54ff3 133 memBufConfigBootLoader[2]=(tamFirmware>>8)&0xFF;
brunofgc 34:348991c54ff3 134 memBufConfigBootLoader[3]=(tamFirmware>>0)&0xFF;
brunofgc 34:348991c54ff3 135 memBufConfigBootLoader[4]=executaBootLoader;
brunofgc 34:348991c54ff3 136
brunofgc 34:348991c54ff3 137 //escrevo nos setores
brunofgc 34:348991c54ff3 138 commandBytes[0]=51;
brunofgc 34:348991c54ff3 139 commandBytes[1]=((unsigned long) sector_start_adress[29]);
brunofgc 34:348991c54ff3 140 commandBytes[2]=(unsigned long) memBufConfigBootLoader;
brunofgc 34:348991c54ff3 141 commandBytes[3]=256;
brunofgc 34:348991c54ff3 142 commandBytes[4]=96000;
brunofgc 34:348991c54ff3 143
brunofgc 34:348991c54ff3 144 IAP_call(commandBytes,outputBytes);
brunofgc 34:348991c54ff3 145
brunofgc 34:348991c54ff3 146 if(outputBytes[0]!=0x0){
brunofgc 34:348991c54ff3 147 printf("Falha na escrita em flash parte 8 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 34:348991c54ff3 148 return;
brunofgc 34:348991c54ff3 149 }
brunofgc 34:348991c54ff3 150 }
brunofgc 34:348991c54ff3 151
brunofgc 13:b9183b4bc049 152 void bootLoader(void)
brunofgc 13:b9183b4bc049 153 {
brunofgc 13:b9183b4bc049 154 /* Change the Vector Table to the USER_FLASH_START
brunofgc 13:b9183b4bc049 155 in case the user application uses interrupts */
brunofgc 30:8a06a85d8807 156 diversos::wdt.kick(90.0);
brunofgc 13:b9183b4bc049 157 SysTick->CTRL &= ~0x00000002; // disable SysTick interrupt
brunofgc 13:b9183b4bc049 158 //NVIC_DeInit();
brunofgc 13:b9183b4bc049 159 //__disable_irq();
brunofgc 13:b9183b4bc049 160 LPC_SC->PCONP = 0x001817BE;
brunofgc 13:b9183b4bc049 161 SCB->VTOR = APPL_RUN_ADDR & 0x1FFFF80;
brunofgc 13:b9183b4bc049 162 boot_jump(APPL_RUN_ADDR);
brunofgc 13:b9183b4bc049 163 }
brunofgc 13:b9183b4bc049 164
brunofgc 13:b9183b4bc049 165 uint8_t bootloader_fillUpFlash(arquivoSD *arquivo){
brunofgc 13:b9183b4bc049 166 #define flashSectorFirmwareCopyOffset 20
brunofgc 13:b9183b4bc049 167
brunofgc 34:348991c54ff3 168 /*IAP IAP_call;
brunofgc 34:348991c54ff3 169 IAP_call=(IAP) IAP_LOCATION;*/
brunofgc 13:b9183b4bc049 170
brunofgc 34:348991c54ff3 171 //firmwareDescriptor firmDesc;
brunofgc 13:b9183b4bc049 172 unsigned int commandBytes[5];
brunofgc 13:b9183b4bc049 173 unsigned int outputBytes[5];
brunofgc 34:348991c54ff3 174 uint32_t i;
brunofgc 13:b9183b4bc049 175 uint32_t chunkIndex=0;
brunofgc 34:348991c54ff3 176 uint32_t nChunks,nEndChunk;
brunofgc 34:348991c54ff3 177 unsigned char memBuf[memBufTam];
brunofgc 13:b9183b4bc049 178 sdCard::getFileTam(arquivo);
brunofgc 34:348991c54ff3 179 tamFirmware = 0;
brunofgc 13:b9183b4bc049 180 if(!sdCard::abreArquivo(arquivo,"r")){
brunofgc 13:b9183b4bc049 181 printf("Arquivo nao encontrado.\r\n");
brunofgc 13:b9183b4bc049 182 while(1);
brunofgc 13:b9183b4bc049 183 }
brunofgc 13:b9183b4bc049 184
brunofgc 13:b9183b4bc049 185 //Excluindo o start no inicio
brunofgc 34:348991c54ff3 186 tamFirmware=arquivo->bytes-5;
brunofgc 13:b9183b4bc049 187 for(i=0;i<5;i++){
brunofgc 13:b9183b4bc049 188 memBuf[i] = fgetc(arquivo->fp);
brunofgc 13:b9183b4bc049 189 //printf("%c",memBuf[i]);
brunofgc 13:b9183b4bc049 190 }
brunofgc 13:b9183b4bc049 191 nChunks = tamFirmware/memBufTam;
brunofgc 13:b9183b4bc049 192 nEndChunk = tamFirmware%memBufTam;
brunofgc 13:b9183b4bc049 193
brunofgc 30:8a06a85d8807 194 printf("Tamanho do arquivo %s = %lu bytes.\r\n",arquivo->nome,tamFirmware);
brunofgc 13:b9183b4bc049 195 printf("nChunks = %lu, nEndChunk = %lu.\r\n",nChunks,nEndChunk);
brunofgc 13:b9183b4bc049 196 printf("Iniciando processo de escrita em flash.\r\nDesligando interrupcoes.\r\n");
brunofgc 13:b9183b4bc049 197
brunofgc 13:b9183b4bc049 198
brunofgc 13:b9183b4bc049 199 //Preparing flash sectors to write
brunofgc 13:b9183b4bc049 200 commandBytes[0]=50;
brunofgc 13:b9183b4bc049 201 commandBytes[1]=20;
brunofgc 13:b9183b4bc049 202 commandBytes[2]=26;
brunofgc 13:b9183b4bc049 203 commandBytes[3]=96000;
brunofgc 13:b9183b4bc049 204 commandBytes[4]=0x0;
brunofgc 13:b9183b4bc049 205 IAP_call(commandBytes,outputBytes);
brunofgc 13:b9183b4bc049 206 if(outputBytes[0]!=0x0){
brunofgc 13:b9183b4bc049 207 printf("Falha na escrita em flash parte 1 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 13:b9183b4bc049 208 return 0;
brunofgc 13:b9183b4bc049 209 }
brunofgc 13:b9183b4bc049 210
brunofgc 13:b9183b4bc049 211 //Erasing flash sectors
brunofgc 13:b9183b4bc049 212 commandBytes[0]=52;
brunofgc 13:b9183b4bc049 213 commandBytes[1]=20;
brunofgc 13:b9183b4bc049 214 commandBytes[2]=26;
brunofgc 13:b9183b4bc049 215 commandBytes[3]=96000;
brunofgc 13:b9183b4bc049 216 commandBytes[4]=0x0;
brunofgc 13:b9183b4bc049 217 IAP_call(commandBytes,outputBytes);
brunofgc 13:b9183b4bc049 218 if(outputBytes[0]!=0x0){
brunofgc 13:b9183b4bc049 219 printf("Falha na escrita em flash parte 2 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 13:b9183b4bc049 220 return 0;
brunofgc 13:b9183b4bc049 221 }
brunofgc 13:b9183b4bc049 222
brunofgc 13:b9183b4bc049 223 //Flashing entire chunks
brunofgc 13:b9183b4bc049 224 for(chunkIndex=0;chunkIndex<nChunks;chunkIndex++){
brunofgc 13:b9183b4bc049 225 //Load from file to ram
brunofgc 13:b9183b4bc049 226 printf("Escrevendo o chunk %lu.\r\n",chunkIndex);
brunofgc 13:b9183b4bc049 227 //printf("Conteudo do chunk <");
brunofgc 13:b9183b4bc049 228 for(i=0;i<memBufTam;i++){
brunofgc 13:b9183b4bc049 229 memBuf[i] = fgetc(arquivo->fp);
brunofgc 13:b9183b4bc049 230 //printf("%c",memBuf[i]);
brunofgc 13:b9183b4bc049 231 }
brunofgc 13:b9183b4bc049 232 //printf(">.\r\n");
brunofgc 13:b9183b4bc049 233
brunofgc 13:b9183b4bc049 234 //Copy from ram to flash
brunofgc 13:b9183b4bc049 235 //Preparing flash sectors to write
brunofgc 13:b9183b4bc049 236 commandBytes[0]=50;
brunofgc 13:b9183b4bc049 237 commandBytes[1]=20;
brunofgc 13:b9183b4bc049 238 commandBytes[2]=26;
brunofgc 13:b9183b4bc049 239 commandBytes[3]=96000;
brunofgc 13:b9183b4bc049 240 commandBytes[4]=0x0;
brunofgc 13:b9183b4bc049 241 IAP_call(commandBytes,outputBytes);
brunofgc 13:b9183b4bc049 242 if(outputBytes[0]!=0x0){
brunofgc 13:b9183b4bc049 243 printf("Falha na escrita em flash parte 3 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 13:b9183b4bc049 244 return 0;
brunofgc 13:b9183b4bc049 245 }
brunofgc 13:b9183b4bc049 246
brunofgc 13:b9183b4bc049 247 //Flashing this part
brunofgc 13:b9183b4bc049 248 commandBytes[0]=51;
brunofgc 13:b9183b4bc049 249 commandBytes[1]=((unsigned long) sector_start_adress[flashSectorFirmwareCopyOffset])+(chunkIndex*memBufTam);
brunofgc 13:b9183b4bc049 250 commandBytes[2]=(unsigned long)memBuf;
brunofgc 13:b9183b4bc049 251 commandBytes[3]=memBufTam;
brunofgc 13:b9183b4bc049 252 commandBytes[4]=96000;
brunofgc 13:b9183b4bc049 253 IAP_call(commandBytes,outputBytes);
brunofgc 13:b9183b4bc049 254 if(outputBytes[0]!=0x0){
brunofgc 13:b9183b4bc049 255 printf("Falha na escrita em flash parte 4 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 13:b9183b4bc049 256 return 0;
brunofgc 13:b9183b4bc049 257 }
brunofgc 13:b9183b4bc049 258 }
brunofgc 13:b9183b4bc049 259
brunofgc 13:b9183b4bc049 260
brunofgc 13:b9183b4bc049 261 //Flashing the last part
brunofgc 13:b9183b4bc049 262 //Preparing flash sectors to write
brunofgc 13:b9183b4bc049 263 commandBytes[0]=50;
brunofgc 13:b9183b4bc049 264 commandBytes[1]=20;
brunofgc 13:b9183b4bc049 265 commandBytes[2]=26;
brunofgc 13:b9183b4bc049 266 commandBytes[3]=96000;
brunofgc 13:b9183b4bc049 267 commandBytes[4]=0x0;
brunofgc 13:b9183b4bc049 268 IAP_call(commandBytes,outputBytes);
brunofgc 13:b9183b4bc049 269 if(outputBytes[0]!=0x0){
brunofgc 13:b9183b4bc049 270 printf("Falha na escrita em flash parte 5 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 13:b9183b4bc049 271 return 0;
brunofgc 13:b9183b4bc049 272 }
brunofgc 13:b9183b4bc049 273
brunofgc 13:b9183b4bc049 274 if(nEndChunk<256){nEndChunk = 256;}
brunofgc 13:b9183b4bc049 275 else if(nEndChunk<512){nEndChunk = 512;}
brunofgc 13:b9183b4bc049 276 else if(nEndChunk<1024){nEndChunk = 1024;}
brunofgc 13:b9183b4bc049 277 else {nEndChunk = 4096;}
brunofgc 13:b9183b4bc049 278
brunofgc 13:b9183b4bc049 279 for(i=0;i<nEndChunk;i++){
brunofgc 13:b9183b4bc049 280 memBuf[i] = fgetc(arquivo->fp);
brunofgc 13:b9183b4bc049 281 }
brunofgc 13:b9183b4bc049 282
brunofgc 13:b9183b4bc049 283 //Preenchendo o resto com 0xFF
brunofgc 13:b9183b4bc049 284 for(i=i;i<memBufTam;i++){
brunofgc 13:b9183b4bc049 285 memBuf[i] = 0xFF;
brunofgc 13:b9183b4bc049 286 }
brunofgc 13:b9183b4bc049 287
brunofgc 13:b9183b4bc049 288
brunofgc 13:b9183b4bc049 289
brunofgc 13:b9183b4bc049 290 commandBytes[0]=51;
brunofgc 13:b9183b4bc049 291 commandBytes[1]=((unsigned long) sector_start_adress[flashSectorFirmwareCopyOffset])+(nChunks*memBufTam);
brunofgc 13:b9183b4bc049 292 commandBytes[2]=(unsigned long)memBuf;
brunofgc 13:b9183b4bc049 293 commandBytes[3]=nEndChunk;
brunofgc 13:b9183b4bc049 294 commandBytes[4]=96000;
brunofgc 13:b9183b4bc049 295 IAP_call(commandBytes,outputBytes);
brunofgc 13:b9183b4bc049 296 if(outputBytes[0]!=0x0){
brunofgc 13:b9183b4bc049 297 printf("Falha na escrita em flash parte 6 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 13:b9183b4bc049 298 return 0;
brunofgc 13:b9183b4bc049 299 }
brunofgc 13:b9183b4bc049 300
brunofgc 34:348991c54ff3 301 printf("Escrevendo tamanho de arquivo em firmDescToFlash = %lu.\r\n",tamFirmware);
brunofgc 34:348991c54ff3 302
brunofgc 13:b9183b4bc049 303
brunofgc 34:348991c54ff3 304 strcat((char*)&memBufConfigBootLoader[5],"executaBootLoader");
brunofgc 34:348991c54ff3 305 executaBootLoader = 1;
brunofgc 34:348991c54ff3 306 firmDescToFlash();
brunofgc 13:b9183b4bc049 307
brunofgc 13:b9183b4bc049 308 sdCard::fechaArquivo(arquivo);
brunofgc 33:a60abda630f7 309 printf("Escrita em swapfile concluido.\r\n");
brunofgc 33:a60abda630f7 310 wait(0.2);
brunofgc 13:b9183b4bc049 311 return 0;
brunofgc 13:b9183b4bc049 312 }
brunofgc 13:b9183b4bc049 313
brunofgc 34:348991c54ff3 314 void firmDescToRam(){
brunofgc 34:348991c54ff3 315 #define flashSectorFirmwareCopyOffset 20
brunofgc 13:b9183b4bc049 316
brunofgc 34:348991c54ff3 317 uint32_t i;
brunofgc 34:348991c54ff3 318 //Recuperando a struct firmwareDescriptor
brunofgc 34:348991c54ff3 319 for(i=0;i<40;i++){
brunofgc 34:348991c54ff3 320 memBufConfigBootLoader[i] = sector_start_adress[29][i];
brunofgc 34:348991c54ff3 321 }
brunofgc 34:348991c54ff3 322
brunofgc 34:348991c54ff3 323 tamFirmware = memBufConfigBootLoader[0]<<24;
brunofgc 34:348991c54ff3 324 tamFirmware += memBufConfigBootLoader[1]<<16;
brunofgc 34:348991c54ff3 325 tamFirmware += memBufConfigBootLoader[2]<<8;
brunofgc 34:348991c54ff3 326 tamFirmware += memBufConfigBootLoader[3]<<0;
brunofgc 34:348991c54ff3 327 executaBootLoader = memBufConfigBootLoader[4];
brunofgc 34:348991c54ff3 328
brunofgc 34:348991c54ff3 329 return;
brunofgc 34:348991c54ff3 330 }
brunofgc 13:b9183b4bc049 331
brunofgc 13:b9183b4bc049 332 /*
brunofgc 13:b9183b4bc049 333 ========================================================================================
brunofgc 13:b9183b4bc049 334 ========================================================================================
brunofgc 13:b9183b4bc049 335 ========================================================================================
brunofgc 13:b9183b4bc049 336 ========================================================================================
brunofgc 13:b9183b4bc049 337 ========================================================================================
brunofgc 13:b9183b4bc049 338 ========================================================================================
brunofgc 13:b9183b4bc049 339 ========================================================================================
brunofgc 13:b9183b4bc049 340 ========================================================================================
brunofgc 13:b9183b4bc049 341 ========================================================================================
brunofgc 13:b9183b4bc049 342 ========================================================================================
brunofgc 13:b9183b4bc049 343 ========================================================================================
brunofgc 13:b9183b4bc049 344 ========================================================================================
brunofgc 13:b9183b4bc049 345 ========================================================================================
brunofgc 13:b9183b4bc049 346 ========================================================================================
brunofgc 13:b9183b4bc049 347 ========================================================================================
brunofgc 13:b9183b4bc049 348 ========================================================================================
brunofgc 13:b9183b4bc049 349 ========================================================================================
brunofgc 13:b9183b4bc049 350 ========================================================================================
brunofgc 13:b9183b4bc049 351 ========================================================================================
brunofgc 13:b9183b4bc049 352 ========================================================================================
brunofgc 13:b9183b4bc049 353 ========================================================================================
brunofgc 13:b9183b4bc049 354 ========================================================================================
brunofgc 13:b9183b4bc049 355 */
brunofgc 13:b9183b4bc049 356
brunofgc 13:b9183b4bc049 357 /*void bootloader_fillBootLoader(void){
brunofgc 13:b9183b4bc049 358 #define flashSectorFirmwareCopyOffset 20
brunofgc 13:b9183b4bc049 359 IAP IAP_call;
brunofgc 13:b9183b4bc049 360 IAP_call=(IAP) IAP_LOCATION;
brunofgc 13:b9183b4bc049 361 firmwareDescriptor firmDesc;
brunofgc 13:b9183b4bc049 362 unsigned int commandBytes[5];
brunofgc 13:b9183b4bc049 363 unsigned int outputBytes[5];
brunofgc 13:b9183b4bc049 364 char memBuf[memBufTam];
brunofgc 13:b9183b4bc049 365 uint32_t i;
brunofgc 13:b9183b4bc049 366 uint32_t chunkIndex=0;
brunofgc 13:b9183b4bc049 367 uint32_t nChunks,nEndChunk;
brunofgc 13:b9183b4bc049 368 uint32_t firmwareIndexBytes=0;
brunofgc 13:b9183b4bc049 369 char *memRam = firmDesc.nome;
brunofgc 13:b9183b4bc049 370
brunofgc 13:b9183b4bc049 371 //Recuperando a struct firmwareDescriptor
brunofgc 13:b9183b4bc049 372 for(i=0;i<sizeof(firmwareDescriptor);i++){
brunofgc 13:b9183b4bc049 373 memRam[i] = sector_start_adress[29][i];
brunofgc 13:b9183b4bc049 374 }
brunofgc 13:b9183b4bc049 375
brunofgc 13:b9183b4bc049 376
brunofgc 13:b9183b4bc049 377 printf("Iniciando processo de escrita em flash.\r\nDesligando interrupcoes.\r\n");
brunofgc 13:b9183b4bc049 378 NVIC_DeInit();
brunofgc 13:b9183b4bc049 379 printf("O firmware em area de swap file tem nome de [%s] e tamanho de %lu bytes.\r\n",firmDesc.nome,firmDesc.tam);
brunofgc 13:b9183b4bc049 380 for(i=0;i<memBufTam;i++){
brunofgc 13:b9183b4bc049 381 memBuf[i] = sector_start_adress[flashSectorFirmwareCopyOffset][firmwareIndexBytes+i];
brunofgc 13:b9183b4bc049 382 }
brunofgc 13:b9183b4bc049 383 //printf("Lendo conteudo da swapfile [%s].\r\n",memBuf);
brunofgc 13:b9183b4bc049 384
brunofgc 13:b9183b4bc049 385 wait(1);
brunofgc 13:b9183b4bc049 386
brunofgc 13:b9183b4bc049 387
brunofgc 13:b9183b4bc049 388
brunofgc 13:b9183b4bc049 389 //Preparing flash sectors to write
brunofgc 13:b9183b4bc049 390 commandBytes[0]=50;
brunofgc 13:b9183b4bc049 391 commandBytes[1]=0;
brunofgc 13:b9183b4bc049 392 commandBytes[2]=19;
brunofgc 13:b9183b4bc049 393 commandBytes[3]=96000;
brunofgc 13:b9183b4bc049 394 commandBytes[4]=0x0;
brunofgc 13:b9183b4bc049 395 IAP_call(commandBytes,outputBytes);
brunofgc 13:b9183b4bc049 396 if(outputBytes[0]!=0x0){
brunofgc 13:b9183b4bc049 397 //printf("Falha na escrita em flash parte 1 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 13:b9183b4bc049 398 //return;
brunofgc 13:b9183b4bc049 399 }
brunofgc 13:b9183b4bc049 400
brunofgc 13:b9183b4bc049 401
brunofgc 13:b9183b4bc049 402 //Erasing flash sectors
brunofgc 13:b9183b4bc049 403 commandBytes[0]=52;
brunofgc 13:b9183b4bc049 404 commandBytes[1]=0;
brunofgc 13:b9183b4bc049 405 commandBytes[2]=19;
brunofgc 13:b9183b4bc049 406 commandBytes[3]=96000;
brunofgc 13:b9183b4bc049 407 commandBytes[4]=0x0;
brunofgc 13:b9183b4bc049 408 IAP_call(commandBytes,outputBytes);
brunofgc 13:b9183b4bc049 409 if(outputBytes[0]!=0x0){
brunofgc 13:b9183b4bc049 410 //printf("Falha na escrita em flash parte 2 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 13:b9183b4bc049 411 //return;
brunofgc 13:b9183b4bc049 412 }
brunofgc 13:b9183b4bc049 413
brunofgc 13:b9183b4bc049 414
brunofgc 13:b9183b4bc049 415
brunofgc 13:b9183b4bc049 416 nChunks = firmDesc.tam/memBufTam;
brunofgc 13:b9183b4bc049 417 nEndChunk = firmDesc.tam%memBufTam;
brunofgc 13:b9183b4bc049 418
brunofgc 13:b9183b4bc049 419 //Flashing entire chunks
brunofgc 13:b9183b4bc049 420 for(chunkIndex=0;chunkIndex<nChunks;chunkIndex++){
brunofgc 13:b9183b4bc049 421 //Load from file to ram
brunofgc 13:b9183b4bc049 422 for(i=0;i<memBufTam;i++){
brunofgc 13:b9183b4bc049 423 memBuf[i] = sector_start_adress[flashSectorFirmwareCopyOffset][firmwareIndexBytes+i];
brunofgc 13:b9183b4bc049 424 }
brunofgc 13:b9183b4bc049 425
brunofgc 13:b9183b4bc049 426 //Copy from ram to flash
brunofgc 13:b9183b4bc049 427 //Preparing flash sectors to write
brunofgc 13:b9183b4bc049 428 commandBytes[0]=50;
brunofgc 13:b9183b4bc049 429 commandBytes[1]=0;
brunofgc 13:b9183b4bc049 430 commandBytes[2]=19;
brunofgc 13:b9183b4bc049 431 commandBytes[3]=96000;
brunofgc 13:b9183b4bc049 432 commandBytes[4]=0x0;
brunofgc 13:b9183b4bc049 433 IAP_call(commandBytes,outputBytes);
brunofgc 13:b9183b4bc049 434 if(outputBytes[0]!=0x0){
brunofgc 13:b9183b4bc049 435 //printf("Falha na escrita em flash parte 3 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 13:b9183b4bc049 436 //return;
brunofgc 13:b9183b4bc049 437 }
brunofgc 13:b9183b4bc049 438
brunofgc 13:b9183b4bc049 439 //Flashing this part
brunofgc 13:b9183b4bc049 440 commandBytes[0]=51;
brunofgc 13:b9183b4bc049 441 commandBytes[1]=firmwareIndexBytes;
brunofgc 13:b9183b4bc049 442 commandBytes[2]=(unsigned long)memBuf;
brunofgc 13:b9183b4bc049 443 commandBytes[3]=memBufTam;
brunofgc 13:b9183b4bc049 444 commandBytes[4]=96000;
brunofgc 13:b9183b4bc049 445 IAP_call(commandBytes,outputBytes);
brunofgc 13:b9183b4bc049 446 if(outputBytes[0]!=0x0){
brunofgc 13:b9183b4bc049 447 //printf("Falha na escrita em flash parte 4 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 13:b9183b4bc049 448 //return;
brunofgc 13:b9183b4bc049 449 }
brunofgc 13:b9183b4bc049 450 firmwareIndexBytes+=memBufTam;
brunofgc 13:b9183b4bc049 451 }
brunofgc 13:b9183b4bc049 452
brunofgc 13:b9183b4bc049 453
brunofgc 13:b9183b4bc049 454 //Flashing the last part
brunofgc 13:b9183b4bc049 455 //Preparing flash sectors to write
brunofgc 13:b9183b4bc049 456 commandBytes[0]=50;
brunofgc 13:b9183b4bc049 457 commandBytes[1]=0;
brunofgc 13:b9183b4bc049 458 commandBytes[2]=19;
brunofgc 13:b9183b4bc049 459 commandBytes[3]=96000;
brunofgc 13:b9183b4bc049 460 commandBytes[4]=0x0;
brunofgc 13:b9183b4bc049 461 IAP_call(commandBytes,outputBytes);
brunofgc 13:b9183b4bc049 462 if(outputBytes[0]!=0x0){
brunofgc 13:b9183b4bc049 463 //printf("Falha na escrita em flash parte 5 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 13:b9183b4bc049 464 //return;
brunofgc 13:b9183b4bc049 465 }
brunofgc 13:b9183b4bc049 466
brunofgc 13:b9183b4bc049 467 for(i=0;i<nEndChunk;i++){
brunofgc 13:b9183b4bc049 468 memBuf[i] = sector_start_adress[flashSectorFirmwareCopyOffset][firmwareIndexBytes+i];
brunofgc 13:b9183b4bc049 469 }
brunofgc 13:b9183b4bc049 470
brunofgc 13:b9183b4bc049 471 if(nEndChunk<256){nEndChunk = 256;}
brunofgc 13:b9183b4bc049 472 else if(nEndChunk<512){nEndChunk = 512;}
brunofgc 13:b9183b4bc049 473 else if(nEndChunk<1024){nEndChunk = 1024;}
brunofgc 13:b9183b4bc049 474 else if(nEndChunk<4096){nEndChunk = 4096;}
brunofgc 13:b9183b4bc049 475
brunofgc 13:b9183b4bc049 476 //Preenchendo o resto com 0xFF
brunofgc 13:b9183b4bc049 477 for(i=i;i<memBufTam;i++){
brunofgc 13:b9183b4bc049 478 memBuf[i] = 0xFF;
brunofgc 13:b9183b4bc049 479 }
brunofgc 13:b9183b4bc049 480
brunofgc 13:b9183b4bc049 481 commandBytes[0]=51;
brunofgc 13:b9183b4bc049 482 commandBytes[1]=firmwareIndexBytes;
brunofgc 13:b9183b4bc049 483 commandBytes[2]=(unsigned long)memBuf;
brunofgc 13:b9183b4bc049 484 commandBytes[3]=nEndChunk;
brunofgc 13:b9183b4bc049 485 commandBytes[4]=96000;
brunofgc 13:b9183b4bc049 486 IAP_call(commandBytes,outputBytes);
brunofgc 13:b9183b4bc049 487 if(outputBytes[0]!=0x0){
brunofgc 13:b9183b4bc049 488 //printf("Falha na escrita em flash parte 6 -> codigo [%lu].\r\n",outputBytes[0]);
brunofgc 13:b9183b4bc049 489 //return;
brunofgc 13:b9183b4bc049 490 }
brunofgc 13:b9183b4bc049 491 //printf("Dando boot.\r\n");
brunofgc 13:b9183b4bc049 492 NVIC_SystemReset();
brunofgc 13:b9183b4bc049 493
brunofgc 13:b9183b4bc049 494 //Nunca alcançará este ponto.
brunofgc 13:b9183b4bc049 495 return;
brunofgc 13:b9183b4bc049 496 }*/