Part Number:LP-EM-CC2340R5Other Parts Discussed in Thread:UNIFLASH, SYSCONFIG
1、flash_map_backend.h
#elif defined DeviceFamily_CC23X0R5#define BOOTLOADER_BASE_ADDRESS0x00000000#define BOOT_BOOTLOADER_SIZE0x00006000#define BOOT_PRIMARY_1_BASE_ADDRESS0x00006000#define BOOT_PRIMARY_1_SIZE0x0003d000#define BOOT_SECONDARY_1_BASE_ADDRESS0x00043000#define BOOT_SECONDARY_1_SIZE0x0003d000 #else
2、.syscfg中NVS设置
3、Uniflash分开烧写时设置的地址
Galaxy Yue:
您好,
1.对于 flash_map_backend,用户应将闪存大小定义更改为应用程序映像最终大小。默认常量不会更改,因为应用程序大小很大程度上取决于应用程序本身
2.在sysconfig中对于configNVSinternal这个器件进行参数配置
按照ble5-Stack用户向导中的放置OSAL SNV的说明,这个CONFIG_NVSINTERNAL定义的区域就是NV存储器,就是用于存储数据的,用NVS_read和NVS_write进行读写,它的上层就是osal_snv_read和osal_snv_write函数
3.basic_persistent提供实现OAD配置文件的轻量级应用程序,实现OAD服务的协议栈定义,它永久驻留在设备上
oad_onchip地址
您可以从此图看到各组件之间内存地址的关系
每个组件的地址可能会不同 各不相同。持久应用程序链接器文件中使用的地址 应与 flash_map_backend.h 文件中的设置匹配。
#define MCUBOOT_BASE0x0000000 #define PERSISTENT_BASE 0x0006000 #define APP_BASE0x0030000 #define NVS_BASE(FLASH_SIZE - NVS_SIZE) #define NVS_SIZE0x4000 #define MCU_HDR_SIZE0x100 #define MCUBOOT_SIZE0x6000 #define MCU_OVERHEADS(MCU_HDR_SIZE + MCU_TLV_SIZE)您还可以看下详细描述
https://dev.ti.com/tirex/explore/content/simplelink_lowpower_f3_sdk_7_20_01_10/docs/ble5stack/ble_user_guide/html/oad-mcuboot/flash-layout-on-chip-stack-library.html
,
Xuefeng:
在.cproject里还有一个APP_HDR_ADDR的定义,这个应该和前面提到的哪一个值对应?
对于OAD来说,1.0版本和2.0版本是使用同一个APP_HDR_ADDR吗?
,
Galaxy Yue:
Xuefeng 说:在.cproject
文件名麻烦您说完整一点
,
Xuefeng:
每个工程目录下都有一个,完整名字就是.cproject或者可以去CCS查看,Project->Properties->Predefined Symbols.
,
Galaxy Yue:
我想知道您说的每个工程目录下.cproject 是在example子级中吗?
我不确定您说的 每个工程目录下都有一个,完整名字就是.cproject 的APP_HDR_ADDR的定义 是否一致
,
Xuefeng:
你截图的位置是SDK里,这里是没有的,需要在CCS的workspce目录中找。
另外这个APP_HDR_ADDR定义有很多个,在CCS的GUI界面我没找全,所以都是直接查看.cproject 文件。
,
Galaxy Yue:
第一个截图是在CCS的工作台打开的Project->Properties->Predefined Symbols. 在这个路径下
请稍等一下
,
Xuefeng:
Galaxy Yue 说:
第一个截图是在CCS的工作台打开的Project->Properties->Predefined Symbols. 在这个路径下
Uart2Echo这个工程里确实没有,basic_ble_oad_onchip/basic_dual_image/basic_persistent/data_stream/host_test这些示例中都有
,
Galaxy Yue:
basic_persistent/ basic_ble_oad_onchip 0x32000
basic_dual_image 0x6000
data_stream/host_test 没有找到APP_HDR_ADDR
//APP_HDR_ADDR是APP header在Flash中的位置,从预定义的符号中导入
关于flash中地址相关资料可以看这个链接
https://dev.ti.com/tirex/explore/content/simplelink_lowpower_f3_sdk_7_20_01_10/docs/ble5stack/ble_user_guide/html/ble-stack-common/memory_map-cc23xx.html
,
Xuefeng:
APP_HDR_ADDR作为APP header,那么这个地址应该是可以用来读取app version的吧,那我应该设置为开头问的哪一个的地址?现在我不管怎么设置APP_HDR_ADDR,烧写完获取到的version都是不对的。
,
Galaxy Yue:
Xuefeng 说:是可以用来读取app version的
是的
我在找怎么读取app version
,
Galaxy Yue:
/********************************************************************** @fnSwUpdate_GetSWVersion** @briefThis function extract sw version of MCU header from*given address** @paramhdrAdrr - Header address** @returnImage version struct*/ uint32* SwUpdate_GetSWVersion(uint32 hdrAdrr) {struct image_header * img_hdr = (struct image_header*)hdrAdrr;return ((uint32 *)&(img_hdr->ih_ver)); } /*********************************************************************该函数从 MCU 头文件中提取 SW 版本从给定地址
这个给定地址是APP_HDR_ADDR作为参数传过去的
,
Xuefeng:
谢谢,找到烧写软件获取不到正确版本的原因了。
我的版本信息只加在了.bin文件里,烧写使用的是.out文件。
现在剩下的问题是为什么没有跳转到image2,和地址设置是否有关。
,
Galaxy Yue:
感谢您的分享
Xuefeng 说:现在剩下的问题是为什么没有跳转到image2,和地址设置是否有关。
考虑是在mcuboot双镜像的问题
sdk 示例中使用的默认片外内存映射布局如下:
[On-Chip Flash] 0x00000000 - 0x00006000 : [0x00006000 ( 24k)] mcuboot 0x00006000 - 0x0007c000 : [0x00076000 (472k)] basic_ble_oad_offchip [ primary slot] 0x0007c000 - 0x00004000 : [0x00004000 ( 16k)] NVS Storage Data[Off-Chip Serial Flash] 0x00000000 - 0x00076000 : [0x00076000 (472k)] basic_ble_oad_offchip [ secondary slot ]对于“片上” OAD,mcuboot 配置为片上闪存中有 2 个内部“插槽”。这些插槽之一通常被配置为更大的区域来存储主“应用程序”图像。另一个用于存储较小的“持久”图像。“应用程序”映像 (basic_ble_oad_onchip) 包含主应用程序固件和最小的“OAD 重置服务”,该服务用于在触发 OAD 更新时向系统发出信号,重新启动到“持久”映像 (basic_persistent)。这是通过 OAD 重置服务使应用程序映像无效(将其自己的版本号设置为 0)来完成的,以便 mcuboot 在后续启动时选择持久映像。“持久”映像包含完整的 OAD 更新服务,用于将新的应用程序映像传输到应用程序槽中。