尊敬的支持人员:
我的项目使用 CC2538SF23而不是CC2538SF53,您是否为我更新了CC2538-OTA-Image-A.ICF。
顺便说一句,如果我想执行OTA过程,256K闪存对我来说是否足够? 还是应该使用CC2538SF53的512K闪存,如ZStack演示软件?
巴西,
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的Jason,附件中的ICF已更新,hal_board_cfg.h也已更新。
请帮我检查是否正常。
我的项目使用OTA.bin的组合示例w(enddevice-OTAC1-ImageA-withBootloader)和CC2538-OTA-Image-A。ICF的修改如下:
//*************************************************************************************************
//
// CC2538的链接器配置文件,配置为构建映像A
//
//版权所有(c) 2012-2013 Texas2013 Texas Instruments Incorporated。 保留所有权利。
//
//*************************************************************************************************
//
//定义包含的整个4 GB 寻址空间的内存区域
//处理器。
//
使用大小= 4G定义内存内存;
//
//定义片上程序代码空间的区域- OTA后处理工具将填充
//前492个字节,带OTA报头和虚拟字节。 CRC计算从前导码开始。
define region flash = mem:[从0x0.2001万EC到0x0021DFFF];
//
//为OTA CRC结构定义一个区域。
//
定义区域CRC = mem:[从0x0.2001万EC到0x0.2001万F3];
//
//为OTA前导码结构定义一个区域。
//
定义区域前导码= mem:[从0x0.2001万F4到0x0.2001万FF];
//
//为NVIC表定义一个512字节对齐的区域。
//
定义区域INTVEC = MEM:[从0x20.02万到0x0.2003万FF];
//
//定义片上非易失性(NV )存储器的区域。
// “HAL_NV_PAGE_CNT”页的片上闪存(最初为6页)
// 指定用于将Z-Stack NV项目存储在程序代码空间之外。
// 此区域的大小必须与"HAL_NV_PAGE_CNT"定义的大小匹配
// 文件:hal_board_cfg.h
//
定义区域NV_MEM = MEM:[从0x0023C800到0x0023F7FF];
//
//定义片上工厂调试参数的区域。
// 指定了一页片上闪存(原第255页)
// 用于在程序代码空间外“委托”各种参数。
//
//密钥建立“隐式证书283”
定义区域CP_IMPC_283 = mem:[从0x0023FED4到0x0023FF1F];
//
//密钥建立“证书颁发机构公共密钥283”
定义区域CP_CAPK_283 = mem:[从0x0023FF20到0x0023FF47];
//
//密钥建立"设备私钥283"
定义区域CP_DEPK_283 = mem:[从0x0023FF48到0x0023FF6B];
//
//密钥建立"隐式证书"
定义区域CP_IMPC = mem:[从0x0023FF6C到0x0023FF9B];
//
//密钥建立"证书颁发机构公共密钥"
定义区域CP_CAPK = mem:[从0x0023FF9C到0x0023FFB3];
//
//密钥建立"设备私钥"
定义区域CP_DEPK = MEM:[从0x0023FFB4到0x0023FFCB];
//
//设备的唯一64位IEEE地址
定义区域CP_IEEE = mem:[从0x0023FFCC到0x0023FFD3];
//
//在闪存中为客户配置区域定义一个区域。
定义区域FLASH_CCA = MEM:[从0x0023FFD4到0x0023FFDFDFD];
//
//定义闪存中锁定位的区域。
定义区域FLASH_LCK = MEM:[从0x0023FFE0到0x0023FFFFF];
//
//定义映像引导管理器(IBM) Ledger页面的区域。
define region ledger_page = mem:[从0x0023C000到0x0023C7FF];
//
//定义映像引导管理器(Image Boot Manager, IBM)的区域
define region bootloader_page = mem:[从0x0023F800到0x0023FD00];
//
//定义片上SRAM的区域。
//
定义区域SRAM = mem:[从0x2000.4万到0x2.0007万FFF];
//
//为堆定义块。 大小应设置为其它值
//如果使用C库中需要堆的内容,则为零。
//
定义块堆,使对齐=8,大小= 0x0.01万{};
//
//表示读/写值应通过从复制进行初始化
//闪烁。
//
通过copy { readwrite };进行初始化
//
//表示noinit值应保留为单独值。 这包括
//堆栈,如果初始化,将销毁中的返回地址
//初始化代码,导致处理器分支为零并出现故障。
//
不初始化{ section .noinit };
//
//放置OTA CRC结构。
//
置于CRC起始处{只读部分.crc };
//
//放置OTA前导码结构。
//
放在前导码开头{只读部分.前导 码};
//
//放置中断向量。
//
放在INTVEC的开头{只读部分.intvec };
//
//将CCA区域置于闪光灯的末端。
//
放在FLASH_CCA {只读部分.CCA }的开头;
//
//放置调试参数项目。
//
放置在CP_IEEE的开头{只读部分IEEE-address_space };
放置在CP_DEPK的开头{只读部分dev_private_key_address_space };
置于CP_CAPK的开头{只读部分CA_PUOR_KEY_ADDRESS_SPACE };
放置在CP_IMPC的开头{只读部分implicate_certificate_address_space };
放置在CP_DEPK_283的开头{只读章节PRIV_KEY_283_ADDRESS_SPACE };
放置在CP_CAPK_283的开头{只读部分CA_PUB_KEY_283_ADDRESS_SPACE };
放置在CP_IMPC_283的开头{只读部分impl_CERT_283_address_space };
//
//将只读项目的其余部分放入闪存中。
//
放入闪存{只读};
//
//将RAM矢量表放在SRAM的开头。
//
放置在SRAM的起始位置{ section vtable };
//
//将所有读/写项目放入SRAM中。
//
放置在SRAM中{ readwrite, block heap };
//
//放置分类帐页(如果已定义)
//
放置在ledger_page { section .dedger };
请勿初始化{ section .ledger };
//
//如果已定义startup ewarm,请放置bootloader页面
//
放置在bootloader_page { section .bootloader }的开头;
但IT固件无法进入主功能,您能否帮助我检查问题是什么?
谢谢你。
hal_board_cfg.h的修改如下:
/*----------------------------------
* 多映像管理
*----------------------------------
*/
/*下载到和就地运行区域必须从偶数页边界开始。
* NVIC矢量表必须放置在512字节边界上。
*目前OTA标题已预先安装到映像并下载到就地闪存,但是
*将来更改此策略不会影响映像引导管理器的功能。
*图像区域的大小不必相同,但必须始终能够找到其中一个图像
*另一个。 对这些常量的更改需要在链接程序配置文件中进行相应的更改。
*/
#define HAL_IMG_a_beg FLASH_BASE
#ifdef CC2538SF53
#define HAL_IMG_B_BEGB (FLASH_BASE + 0x0003E000)
#否则
#define HAL_IMG_B_BEGB (FLASH_BASE + 0x0001E000)
#endif
#IF已定义HAL_IMG_AREA
#define HAL_NVIC_OSET 512
#IF (HAL_IMG_Area == 0)
#define HAL_NVIC_ADDR (HAL_IMG_A_beg + HAL_NVIC_OSET)
#Elif (HAL_IMG_Area == 1)
#define HAL_NVIC_ADDR (HAL_IMG_B_BEP + HAL_NVIC_OSET)
#否则
#ERROR HAL_IMG_AREA无效。
#endif
#否则
#define HAL_NVIC_ADDR FLASH_BASE
#endif
#ifdef CC2538SF53
#define HAL_NV_PAGE_END 254
#否则
#define HAL_NV_PAGE_END 126
#endif
#ifdef CC2538SF53
#define HAL_OTA_LICK_PAGE 248
#否则
#define HAL_OTA_LICK_PAGE 120
#endif
#define HAL_OTA_LADER_PAGE_ADDR (FLASH_BASE +(HAL_OTA_LADER_PAGE * HAL_FLASH_PAGE_SIZE))
/*----------------------------------
* 内部闪存页实施OSAL NV。
*----------------------------------
*/
//闪存包含256页2 KB。
#define HAL_FLASH_PAGE_SIZE 2048
#define HAL_FLASH_WORD_SIZE 4.
// Z-Stack使用NV的闪存页面
#define HAL_NV_PAGE_CNT 6.
#define HAL_NV_PAGE_beg (HAL_NV_PAGE_END_HAL_NV_PAGE_CNT+1)
#define HAL_NV_START_ADDR (((FLASH_BASE)+(HAL_NV_PAGE_Beg * HAL_FLASH_PAGE_SIZE))
//工厂调试位置现在位于“锁定位”页面中。 。
//证书存储在下面定义的位置。
//注意:这些地址必须与关联链接程序中定义的地址匹配
//控制文件(.icf)
//注释:调试项目与HAL_FLASH_WORD_SIZE对齐并填充
// 74字节隐式证书(用于二进制283密钥建立)
#ifdef CC2538SF53
#define HAL_FLASH_IMPLICT_CERT_283_ADDR (0x0027FED4)
#否则
#define HAL_FLASH_IMPLICT_CERT_283_ADDR (0x0023FED4)
#endif
#define HAL_FLASH_IMPLICT_CERT_283_SIZE (74+2 )/2字节PAD
// 37字节CA公钥(用于二进制283密钥建立)
#ifdef CC2538SF53
#define HAL_FLASH_CA_PUNAL_KEY_283_ADDR (0x0027FF20)
#否则
#define HAL_FLASH_CA_PUNAL_KEY_283_ADDR (0x0023FF20)
#endif
#define HAL_FLASH_CA_PUNT_KEY_283_SIZE (37+3) // 3字节的PAD
// 36字节设备私钥(用于二进制283密钥建立)
#ifdef CC2538SF53
#define HAL_FLASH_DEP_PRIVE_KEY_283_ADDR (0x0027FF48)
#否则
#define HAL_FLASH_DEP_PRIVE_KEY_283_ADDR (0x0023FF48)
#endif
#define HAL_FLASH_DEP_PRIVATE_KEY_283_SIZE (36)
// 48字节隐式证书(用于密钥建立)
#ifdef CC2538SF53
#define HAL_FLASH_IMPLICAT_CERT_ADDR (0x0027FF6C)
#否则
#define HAL_FLASH_IMPLICAT_CERT_ADDR (0x0023FF6C)
#endif
#define HAL_FLASH_INIMPLICAT_CERT_SIZE (48)
// 22字节CA公钥(用于密钥建立)
#ifdef CC2538SF53
#define HAL_FLASH_CA_PUNAL_KEY_ADDR (0x0027FF9C )
#否则
#define HAL_FLASH_CA_PUNAL_KEY_ADDR (0x0023FF9C )
#endif
#define HAL_FLASH_CA_PUNT_KEY_SIZE (22+2 )// 2字节PAD
// 21字节设备私钥(用于密钥建立)
#ifdef CC2538SF53
#define HAL_FLASH_DEP_PRIVE_KEY_ADDR (0x0027FFB4)
#否则
#define HAL_FLASH_DEP_PRIVE_KEY_ADDR (0x0023FFB4)
#endif
#define HAL_FLASH_DEP_PRIVATE_KEY_SIZE (21+3) // 3字节PAD
// 8字节IEEE地址(每个设备唯一)
#define HAL_FLASH_IEEE-ADDR ( 0x0023FFCC )
#define HAL_FLASH_IEEE_SIZE (8 )// 在此处重新定义Z_EXTADDR_LEN
// SoC工厂IEEE地址的位置(信息页)
#define HAL_INFO_ADDR 0x28万
#define HAL_INFO_IEEE_Ofst 0x028
#define HAL_INFO_IEEE_ADDR (HAL_INFO_ADDR + HAL_INFO_IEEE_Ofst)