Beispiel #1
0
uint8_t TFlash_UnlockSequence(void)
{
    uint32_t val, i;
    
    /* verify the result */
    SWJ_ReadAP(MDM_IDR, &val);
    if ((val != KINETIS_KK_MCU_ID) && (val != KINETIS_KL_MCU_ID))
    {
        printf("MCU_ID does not match!0x%X\r\n", val);
        return 1;
    }

    SWJ_ReadAP(MDM_STATUS, &val);
    
    /* flash in secured mode */
    if (val & (1 << 2))
    {
        printf("system is secured mode\r\n");

        /* hold the device in reset */
        SWJ_SetTargetState(RESET_HOLD);
        
//        SWJ_WriteAP(MDM_CTRL, 0x08);
//        DelayMs(20);
//        SWJ_SetTargetState(RESET_RUN);
 //       SWJ_InitDebug();
//        SWJ_SetTargetState(RESET_HOLD);
        
        /* write the mass-erase enable bit */
        if(SWJ_WriteAP(MDM_CTRL, 1))
        {
            printf("write mass erase enable failed\r\n");
            return 1;
        }
        SWJ_ReadAP(MDM_CTRL, &val);
        printf("MDM_CTRL:0x%X\r\n", MDM_CTRL);
        
        while (1)
        {
            /* wait until mass erase is started */
            if(SWJ_ReadAP(MDM_STATUS, &val))
            {
                printf("read satatus failed\r\n");
                return 2;
            }
            if (val & 1) break;
        }
        /* mass erase in progress */
        while (1)
        {            
            /* keep reading until procedure is complete */
            if(SWJ_ReadAP(MDM_CTRL, &val))
                return 3;

            if (val == 0)
                break;
        }
    }
    return 0;
}
Beispiel #2
0
int ResetTarget(void)
{
    SWJ_WriteAP(MDM_CTRL, 0x08);
    DelayMs(10);
    SWJ_SetTargetState(RESET_RUN);
    DelayMs(10);
}
Beispiel #3
0
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);
    }
}
Beispiel #4
0
uint8_t TFlash_UnlockSequence(void)
{
    uint32_t val;

    /* read the device ID */
    if(SWJ_ReadAP(MDM_IDR, &val))
    {
        printf("readID failed:0x%08X\r\n", val);
        return 1;
    }

    /* verify the result */
    if ((val != KINETIS_KK_MCU_ID) && (val != KINETIS_KL_MCU_ID))
    {
        printf("MCU_ID does not match!0x%X\r\n", val);
        return 1;
    }

    if(SWJ_ReadAP(MDM_STATUS, &val))
    {
        printf("read mem_status error\r\n");
        return 3;
    }

    printf("MEMSTATUS:0x%X\r\n", val);
    
    /* flash in secured mode */
   // if (val & (1 << 2))
    {
        printf("system is secured mode\r\n");
        
        /* hold the device in reset */
        //SWJ_SetTargetState(RESET_PROGRAM);
        SWJ_SetTargetState(RESET_HOLD);
        /* write the mass-erase enable bit */
        if(SWJ_WriteAP(MDM_CTRL, 1))
        {
            printf("write enable failed\r\n");
            return 1;
        }
        
        while (1)
        {
            //SWJ_WriteAP(MDM_CTRL, 1);
            /* wait until mass erase is started */
            if(SWJ_ReadAP(MDM_STATUS, &val))
            {
                printf("read satatus failed\r\n");
                return 2;
            }
            
            if (val & 1) break;
        }
        
        /* mass erase in progress */
        while (1)
        {            
            /* keep reading until procedure is complete */
            if(SWJ_ReadAP(MDM_CTRL, &val))
                return 3;

            if (val == 0)
                break;
        }
    }
    return 0;
}