Bootstrap

杰发科技Bootloader(2)—— 基于7840的Keil配置地址

在7840的sample代码里面有一个简单的Boot跳转APP的示例

PFlash地址从0开始

DFlash的地址从1000000开始

Boot解析

他的boot地址配置为0

Boot的代码主要是这几行,主要作用就是Flash的跳转

int main(void)
{
    SystemClock_Config();

    InitDebug();

    printf("demo start...\r\n");

    printf("BOOT\r\n");

    printf("Jump to APP\r\n");

    Go_To_App();

    printf("demo end...\r\n");
    while (1)
    {
        ;
    }
}

地址的配置

#define     BOOT_START_ADD      0x00000000
#define     BOOT_SIZE           0x00030000

#define     APP_START_ADD       0x00030000

boot跳转APP的代码

static void Go_To_App(void)
{
    if (((*(__IO uint32_t *)APP_START_ADD) >= 0x1FFF0000) && ((*(__IO uint32_t *)APP_START_ADD) <= 0x2000EFFF))
    {
        DisableInterrupts                                               /* 关全局中断 */
        Jump_To_App = (Func)(*(__IO uint32_t *)(APP_START_ADD + 4));    /* 指向APP程序的Reset中断*/
        __set_MSP(*(__IO uint32_t*)APP_START_ADD);
        Jump_To_App();
    }
    printf("Jump to APP Fault\r\n");
}

只烧录Boot的测试

确实从0开始

APP解析

App主要代码

int main(void)
{
    DisableInterrupts;
    SCB->VTOR = APP_START_ADD;
    EnableInterrupts;
    SystemClock_Config();

    InitDebug();

    printf("demo start...\r\n");

    printf("APP\r\n");


    printf("demo end...\r\n");
    while (1)
    {
        ;
    }
}

APP代码烧录之后打印结果,Zdemo start没找到在哪儿写的

可以看到App的代码地址配置从30000开始

修改APP起始地址

改到40000

修改地址之后需要全片擦除,否则之前地址还有APP的内容,看不出来效果。擦除之后重新烧录Boot代码。

Boot烧录完成发现无法跳转到APP

需要修改Boot的跳转地址

修改之后测试OK

查看内存数据

是按照40000之后的地址保存数据

;