智能片段下载到Flash失败

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
16个职位/ 0个新职位
最后发表
caiziee
离线
最后看到:2年6个月前
加入:2016-07-29远
智能片段下载到Flash失败

嗨,对话框

我使用DA14583,当我使用智能片段下载我的十六进制文件时,它显示从文件XX读取0字节。十六进制,XXX字节被忽略'因为它们的记录地址大于或等于0x8000'。

这阻碍了我的发展,你能帮我吗?非常感谢。

关键词:
设备:
MT_dialog
离线
最后看到:三个月四个星期前
工作人员
加入:2015-06-08 34
嗨caiziee,

嗨caiziee,

你能给我一些信息,你想要做什么?烧掉闪光灯,OTP,通过UART下载?当您尝试做什么究竟是什么时候出现此消息?浏览到“选择文件以下载”字段,刻录内存?您使用的是哪个接口(UART,JTAG)?您正在使用的.hex文件,如何生成它以及它有多大?您使用的是哪个版本的智能赛段工作室?

由于MT_dialog

caiziee
离线
最后看到:2年6个月前
加入:2016-07-29远
对不起,是我的错,我应该

对不起,是我的错,我应该提供更多的信息。

我正在使用Jtag接口烧内部1MB闪存。当我浏览到下载文件,它不能打开,然后我得到这个错误消息。十六进制文件是由Keil 5构建的。我们将自己的应用程序添加到ble_example项目中。十六进制文件大小为103KB。我使用智能片段3.9。
生成的地图文件如下:
==============================================================================

Code (inc. data) RO data RW data ZI data Debug

31936 3532 4656 584 11152 972004总计
31936 3532 4656 584 11152 972004 ELF图像总数
31936 3532 4656 5840 0 ROM总数

==============================================================================

总RO大小(Code + RO Data)
总RW大小(RW Data + ZI Data)
ROM总大小(Code + RO Data + RW Data)

MT_dialog
离线
最后看到:三个月四个星期前
工作人员
加入:2015-06-08 34
嗨caizee,

嗨caizee,

因为你想烧一个相当大的文件在583年,似乎有一种检查当你浏览一个智能片段.hex文件大于某个默认值,试着.hex文件转换成一个。bin文件,之后,聪明的片段会接受它,然后试着燃烧的flash 583。

由于MT_dialog

caiziee
离线
最后看到:2年6个月前
加入:2016-07-29远
谢谢你的回复。

谢谢你的回复。
但是我已经尝试过使用frommelf .exe获取bin文件。但我得到的不是一个bin文件,而是几个bin文件。他们是
ER_IROM1 1 kb
ER_IROM2 1 kb
ER_IROM3 1 kb
ER_IROM4 1 kb
ER_IROM5 36 kb
ZI_RET20 1 kb

我不知道怎么把这些文件刻录到flash里?

MT_dialog
离线
最后看到:三个月四个星期前
工作人员
加入:2015-06-08 34
嗨caiziee,

嗨caiziee,

前一个SDK版本中,您应该能够找到在线(在前面的软件版本的软件和工具选项卡)我们包括hex2bin实用程序,它应该能够.hex文件转换成一个适当的。bin文件为了你把它聪明的片段。例如在SDK5.0.3中,你可以在utilities/flash_programmer文件夹中找到hex2bin。您也可以在教程6:SUOTA TOOL ZIP FILE的教程部分找到它。

由于MT_dialog

caiziee
离线
最后看到:2年6个月前
加入:2016-07-29远
嗨,对话框

嗨,对话框
感谢您的快速回复。
我试过了,但失败了。
因为在我们的应用程序中,存在许多分布配置文件中定义的部分。地址不连续。当我使用hex2bin.exe时,我得到了这个输出:
最低地址= 00000000
最高地址= 00080857
Pad Byte = FF
8位校验和= 9C
当我闪烁它与智能片段,我得到一个错误“所选文件的数据大小加上偏移量超过SPI FLASH内存大小(131072字节)”。

关于这个你能给我更多的提示吗?先谢谢你。

MT_dialog
离线
最后看到:三个月四个星期前
工作人员
加入:2015-06-08 34
嗨caiziee,

嗨caiziee,

显然它不是什么与智能片段相关的东西,我认为。hex产生的。bin是非常大的flash,如果你.hex适用于填充和。斌到达一个非常大的大小有问题scatterfile或者你申请一个固定的值初始化在弗兰克-威廉姆斯,链接器无法正确处理(添加一些代码来初始化),因此它的结果在很大。bin文件以来,为了应用价值writes it in the corresponding address in the binary instead of applying it by using extra code.

由于MT_dialog

caiziee
离线
最后看到:2年6个月前
加入:2016-07-29远
谢谢,对话框。

谢谢,对话框。
scatter配置文件定义了几个空间,我基于sdk 5.0.5 ble_example项目做了一些更改。为了为代码RO和数据RO获得更多的ram空间,我重新安排了ram设置。你能帮我查一下吗?在我在我们的项目中添加一些新功能之前,使用.hex闪烁可以很好地工作。但当尺寸变大后,我被这个问题困住了。
对于一些大数组初始化,我声明它们为__attribute__(((section("retention_mem_area0"),zero_init));,把它们放入留存ram中。

-----------------------------------------------------------------------------------------------------------------------------

# !armcc -E -I .\,. .\..\src\config,. ..\.. \..\ sdk \ common_project_files \——cpu Cortex-M0

# include“da1458x_config_basic.h”
# include“da1458x_config_advanced.h”
# include“da1458x_scatter_config.h”

;*************************************************************
;*** uVision生成的散点加载描述文件
;*************************************************************
;
;这个分散文件设置为EM_MAP == 23!
;如果应用程序使用不同的内存布局,那么它必须使用不同的内存布局
;使用自定义分散文件。
; **************************************************************

lr_irom1 0x20000000 0x160 {;加载区域size_region.
ER_IROM1 0x20000000 0x160 {;加载地址=执行地址
* .o(重置,+第一个)

LR_IROM2 0x20000160 0x160 {
ER_IROM2 0x20000160 0x160 {
* (jump_table_mem_area)

LR_IROM3 0x200002C0 0x80 {
ER_IROM3 0x200002C0 0x80 {
* (timeout_table_area)

LR_IROM4 0x20000340 0x100 {
ER_IROM4 0x20000340 0x100 {
* (nvds_data_storage_area)

LR_IROM5 0x20000440 0x93c0 {
ER_IROM5 0x20000440 0x8dc0 {
* (InRoot $ $部分);类中必须包含的所有库节
;根区域,例如__main.o,
;__scatter *。o, __dc *。* Region$$Table . o和* Region$$Table
boot_vectors。o (+ RO)
system_ARMCM0。o (+ RO)
; * armlib * (+ RO)
.any(+ RO)
.ANY (+ RW)

RW_IRAM54 0x20009200 UNINIT 0x600 {;堆栈
.ANY(栈)

LR_RETENTION_RAM2 0x00080768 0x2898 {
;延长睡眠模式
;扩展的重录:0x80000 - 0x83000
ZI_RET20 0x00080768 UNINIT 0x22b8 {;0x80768是ROM代码使用的最后一个地址
#if (BLE_CONNECTION_MAX_USER > 4)
arch_system。o (cs_area)
# endif
jump_table。o (heap_env_area)
jump_table。o (heap_db_area)
jump_table。o (heap_msg_area)
.ANY (retention_mem_area0);应用程序数据
.ANY(+子)
#如果定义了(SPOTAR_PATCH_AREA) && (SPOTAR_PATCH_AREA == 1)
app_spotar。o (spotar_patch_area);当spotar_patch_syram为1时放置在syram中
# endif

Zi_ret21 exchange e_memory_base exchange e_memory_size {
arch_main。o (BLE_exchange_memory)


# endif

;LR_GUARD_RAM 0x50000000 0x0 {
;RW_GRAM0 0x50000000 0x0 {;确保没有东西放在这里!
*。o (exchange_mem_case1)
;}
;}

MT_dialog
离线
最后看到:三个月四个星期前
工作人员
加入:2015-06-08 34
嗨caizee,

嗨caizee,

我在你提供的散点图中看到的是,你从原始散点文件中删除了一些区域,如本帖所示(https://support.dialog-semicondiondiondum/how-build-program-code-larger-32kb.),但你也提交了RW_IRAM52和RW_IRAM53,这是不建议的,也提交了RW_IRAM51区域,你没有指出替代区域,正如之前的帖子所指出的。我不能告诉keil将如何反应在分散文件,你已经附加。如果fw使用scatterfile运行,但是在添加了一些额外的代码后产生的二进制文件太大,那么你可能会初始化一些已经放在保留ram中的变量,这会导致.bin文件变得那么大。如果您能提供项目的地图文件和.hex文件来查看,这将是很有帮助的。

由于MT_dialog

caiziee
离线
最后看到:2年6个月前
加入:2016-07-29远
嗨,对话框

嗨,对话框
非常感谢您的回复。
正如你提到的,我声明了一个带有初始化数的常量数组,但我把它放在内存保留区0。这会导致问题吗?我还仔细阅读了UM-B-011文件,上面说
' 0x80000到0x82FFF区域应该声明为包含不需要初始化(UNINIT)数据的区域。'

caiziee
离线
最后看到:2年6个月前
加入:2016-07-29远
嗨,对话框

嗨,对话框
还有一个问题,OTP是32KB。在启动之后,OTP将应用程序代码镜像到ram中。但是我想知道OTP会镜像什么样的数据?Code RO或者Code RO+DATA RO,或者其他什么?
非常感谢。

MT_dialog
离线
最后看到:三个月四个星期前
工作人员
加入:2015-06-08 34
嗨caiziee,

嗨caiziee,

是的,这可能会导致您所面临的问题和链接器产生一个大型.hex文件,关于参考,你已经在嗯- b - 011,是的,提到specifiic区域仍然UNINIT自指定的区域由SDK零初始化它的自我开始。

关于OTP和被镜像的内容,在syram中,整个镜像是从OTP镜像出来的,fw运行时,镜像部分和OTP没有交互。

由于MT_dialog

caiziee
离线
最后看到:2年6个月前
加入:2016-07-29远
谢谢,我很快就做完了

谢谢,我做了一个简短的实验来验证这一点。是的,当我把所有的const值从保留ram,二进制变化很小。
那么当我用例23时,Code RO + DATA RO +RW RO的限制是什么?
非常感谢您的回复。

MT_dialog
离线
最后看到:三个月四个星期前
工作人员
加入:2015-06-08 34
嗨caiziee,

嗨caiziee,

使用case 23映射时的syram是38KB。

由于MT_dialog

caiziee
离线
最后看到:2年6个月前
加入:2016-07-29远
非常感谢你,Dialog。

非常感谢你,Dialog。你真的帮了我很大的忙。能得到你这么好的支持真是太好了。;-)

主题锁定