uint8_t target_flash_program_page(const TARGET_FLASH* flash, uint32_t addr, uint8_t * buf, uint32_t size) { uint32_t bytes_written = 0; // call a target dependent function to check if // we don't want to write specific bits (flash security bits, ...) // if (!check_security_bits(addr, buf)) { // return 0; // } // Program a page in target flash. if(SWJ_WriteMem(flash->program_buffer, buf, size)) { printf("SWJ_WriteMem failed\r\n"); return 1; } while(bytes_written < size) { if (swd_flash_syscall_exec(&flash->sys_call_param, flash->program_page, addr, flash->ram_to_flash_bytes_to_be_written, flash->program_buffer + bytes_written, 0)) { printf("call error\r\n"); return 1; } bytes_written += flash->ram_to_flash_bytes_to_be_written; addr += flash->ram_to_flash_bytes_to_be_written; } return 0; }
uint8_t TFlash_Init(const TARGET_FLASH* flash) { uint8_t err; /* Download flash programming algorithm to target and initialise. */ err = SWJ_WriteMem(flash->algo_start, (uint8_t *)flash->image, flash->algo_size); if(err) { printf("write flash algo to RAM failed\r\n"); } err = swd_flash_syscall_exec(&flash->sys_call_param, flash->init, 0, 0 /* clk value is not used */, 0, 0); return err; }
int main(void) { uint32_t i, err; DelayInit(); GPIO_QuickInit(HW_GPIOC, 10, kGPIO_Mode_OPP); #ifdef MK22F25612 UART_QuickInit(UART0_RX_PB16_TX_PB17, 115200); #elif MK20D5 UART_QuickInit(UART1_RX_PC03_TX_PC04, 115200); #endif printf("program for Manley\r\n"); swd_io_init(); SWJ_InitDebug(); SWJ_SetTargetState(RESET_HOLD); ShowID(); for(i=0;i<sizeof(buf);i++) { buf[i] = i & 0xFF; } SWJ_WriteMem(0x20000000, buf, sizeof(buf)); memset(buf, 0, sizeof(buf)); SWJ_ReadMem(0x20000000, buf, sizeof(buf)); for(i=0;i<sizeof(buf);i++) { if(buf[i] != (i & 0xFF)) { printf("error buf[%d]:%d should be:%d\r\n", i, buf[i], i); } } printf("mem teset complete\r\n"); SWJ_SetTargetState(RESET_PROGRAM); err = TFlash_UnlockSequence(); printf("TFlash_UnlockSequence %d\r\n", err); SWJ_SetTargetState(RESET_PROGRAM); err = TFlash_Init(&flash); printf("TFlash_Init %d\r\n", err); err = target_flash_program_page(&flash, 0x00000200, (uint8_t*)flash.image, 512); printf("target_flash_program_page %d\r\n", err); while(1) { GPIO_ToggleBit(HW_GPIOC, 10); DelayMs(500); } }