【芯海传感器信号调理CDS8712开发板】之四 分享代码启动区域和映射的方法
[复制链接]
1、代码启动区域
根据手册的说明CDS871x 内嵌片上 FLASH,包括 60KB 应用程序内存(APROM)和 4KB 在系统编程 (ISP) 空间 (LDROM)。芯片上电以后,CPU 从 APROM 还是 LDROM 取代码运行,取决于用户配置 区 Config0 中启动选项(CBS)的设置。 FLASH 存储器控制器由从机接口,ISP 控制逻辑,烧写器接口和 FLASH 宏接口时序控制逻辑组成。 FLASH 存储器控制器框图如下所示。
这个显示了代码启动的位置,而编译后写入的的位置,通常是在编译器的参数设置选择的,
2、启动的方法
按照网友 pengyi2010的建议,采取如下代码,就可以选择不同的启动模式。
可以把上述代码放到工程里面,通过选择不同的宏定义来选择芯片启动模式
例如:#define FW_BOOT_MODE JLINK_DEBUG_ENABLE
就是定义芯片直接从AP区启动
例如:#define FW_BOOT_MODE FIRMWARE_UPDATE_OK_FLAG
就是定义芯片从bootloader区启动,并写入AP区固件OK标记,这样芯片就可以正常从boot跳转到ap了
因为芯片从boot启动后会去判断EE00的绝对地址是否有代表固件OK标记的序列号,如果没有,则会一直等待升级命令。如果有就会自动跳转
#define FIRMWARE_BOOT_ENABLE 0
#define JLINK_DEBUG_ENABLE 1
#define FIRMWARE_UPDATE_ENABLE 2
#define FIRMWARE_UPDATE_OK_FLAG 3
#define FW_BOOT_MODE JLINK_DEBUG_ENABLE
#if FW_BOOT_MODE==FIRMWARE_BOOT_ENABLE
#elif FW_BOOT_MODE==JLINK_DEBUG_ENABLE
const unsigned int CONFIG0 __at(0x00300000) = 0x0001FFFE; //WDT(disabled),Delay(500us),APROM,IAP(disabled)
const unsigned int CONFIG1 __at(0x00300004) = 0x1FFFE000; //data flash 4k
#elif FW_BOOT_MODE==FIRMWARE_UPDATE_ENABLE
const unsigned int CONFIG0 __at(0x00300000) = 0x0009FFF6; //WDT(disabled),Delay(500us),LDROM,IAP(disabled)
const unsigned int CONFIG1 __at(0x00300004) = 0x1FFFE000; //data flash 4k
#elif FW_BOOT_MODE==FIRMWARE_UPDATE_OK_FLAG
const unsigned int UPDATE_OK_FLAG __at(0x0000EE00) = 0x6E727562;
#endif
然后通过选择这个程序中对参数的设置,就可以完成上述的设置。
因为中间还有不少问题需要解决,这个方法就先分享一下,具体解决的方法,在后面跟更详细介绍。
|