智能片段下载到Flash失败

⚠️
您好,谢谢您来到论坛。令人兴奋的消息!我们正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量-请在//www.wsdof.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
16个员额/ 0个新员额
最后发表
凯西
离线
最后看到:2年5个月前
加入:2016-07-29 10:01
智能片段下载到Flash失败

嗨,Dialog

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

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

关键词:
设备:
MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 11:34
嗨,凯西,

嗨,凯西,

你能告诉我更多信息吗,你想做什么?刻录flash, OTP,通过UART下载?当您试图做什么时,会出现此消息?浏览到“选择文件下载”字段,烧坏内存?您使用的是什么接口(UART, JTAG) ?你正在使用的。hex文件,它是如何生成的,它有多大?您使用的是哪个版本的Smart Snippets工作室?

由于MT_dialog

凯西
离线
最后看到:2年5个月前
加入:2016-07-29 10:01
对不起,是我的错,我应该

抱歉,是我的错,我应该提供更多的信息。

我使用Jtag接口刻录内部1MB的flash。当我眉毛到下载文件,它不能打开,然后我得到这个错误消息。hex文件是由Keil 5构建的。我们将自己的应用程序添加到ble_example项目中。十六进制文件大小为103KB。我使用的是Smart Snippets 3.9。
生成的映射文件如下所示:
==============================================================================

代码(包括数据)RO数据RW数据ZI数据调试

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

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

总RO大小(代码+ RO数据)36592 (35.73kB)
总RW大小(RW数据+ZI数据)11736(11.46kB)
ROM总大小(代码+RO数据+RW数据)37176(36.30kB)

MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 11:34
嗨caizee,

嗨caizee,

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

由于MT_dialog

凯西
离线
最后看到:2年5个月前
加入:2016-07-29 10:01
谢谢你的回复。

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

我不知道如何将这些bin文件刻录到闪存中的确切地址?

MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 11:34
嗨,凯西,

嗨,凯西,

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

由于MT_dialog

凯西
离线
最后看到:2年5个月前
加入:2016-07-29 10:01
嗨,Dialog

嗨,Dialog
谢谢你的快速回复。
我试过这个,但失败了。
因为在我们的应用程序中,有许多部分是在散点配置文件中定义的。地址不是连续的。当我使用hex2bin.exe时,我得到如下输出:
最低地址= 00000000
最高地址= 00080857
Pad字节=FF
8位校验和=9C
当我用Smart Snippets闪烁它时,我得到了一个错误“选定文件的数据大小加上偏移超过SPI FLASH内存大小(131072字节)”。

你能给我更多的提示吗?提前谢谢你。

MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 11:34
嗨,凯西,

嗨,凯西,

很明显,它与智能片段无关,我假设。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

凯西
离线
最后看到:2年5个月前
加入:2016-07-29 10:01
谢谢,Dialog。

谢谢,Dialog。
散布配置文件定义了几个空格,我在sdk 5.0.5 ble_示例项目的基础上做了一些更改。为了为代码RO和数据RO获得更多的ram空间,我重新安排了ram设置。您能帮我检查一下吗?在我在项目中添加一些新功能之前,使用.hex flash可以很好地工作。但是在大小变为l之后阿杰,我被这个问题困住了。
对于一些大型数组初始化,我将它们声明为“uuu attribute_uuuuuuuuuuuuu((section(“retention_mem_area0”)、zero_init”)”,以将它们放在保留ram中。

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

#! armcc-E-I.\,.\..,.\..\src\config,.\..\sdk\common\u project\u files\--cpu Cortex-M0

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

;*************************************************************
;***分散加载由uVision生成的描述文件***
;*************************************************************

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

LR_IROM1 0x20000000x160{;加载区域大小_区域
ER_IROM1 0x20000000 0x160 {;加载地址=执行地址
*.o(重置,+第一)

LR_IROM2 0x20000160 0x160{
er_iro2 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\数据\存储\区域)

LR_IROM5 0x20000440 0x93c0 {
ER_IROM5 0x20000440 0x8dc0 {
*(InRoot$$Sections);必须位于
根区域,例如,u main.o,
;__scatter *。o, __dc *。和* Region$$Table . o
boot_vectors.o(+RO)
system_ARMCM0。o (+ RO)
*armlib*(+RO)
.ANY (+ RO)
.任何(+RW)

RW_IRAM54 0x20000200未指定0x600{;堆栈
.任何(堆栈)

LR_保留_RAM2 0x00080768 0x2898{
;延长睡眠模式
;扩展的RetRAM: 0x80000 - 0x83000
ZI_RET20 0x00080768 UNINIT 0x22b8{;0x80768是ROM代码使用的最后一个地址
#if (BLE_CONNECTION_MAX_USER > 4)
arch_system。o (cs_area)
#恩迪夫
跳转表o(堆环境区域)
跳转\u table.o(堆\u数据库\u区域)
跳转\u table.o(堆\u消息\u区域)
.任何(保留\u mem\u区域0);应用程序数据
.任何(+ZI)
#if define (SPOTAR_PATCH_AREA) && (SPOTAR_PATCH_AREA == 1)
app_spotar.o(spotar_patch_区域);当spotar_patch_SysRAM为1时放置在系统内存中
#恩迪夫

Zi_ret21 exchange_memory_base exchange_memory_size {
arch_main.o(可交换内存)


#恩迪夫

;LR_防护_RAM 0x50000000 0x0{
;RW_GRAM0 0x50000000 0x0{;确保此处未放置任何内容!
*。o (exchange_mem_case1)
;}
;}

MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 11:34
嗨caizee,

嗨caizee,

我从你提供的散点图中可以看到,你已经从原始散点文件中删除了一些区域,如本文所示(https://support.dialog-semiconductor.com/how-build-program-code-larger-32kb),但你也省略了RW_IRAM52和RW_IRAM53,这是不建议的,而且通过省略RW_IRAM51区域,你也没有指出如前一篇文章所指出的替换区域。我不能告诉keil将如何反应在分散文件,你已附上。如果通过使用这个分散文件,fw曾经运行,但添加了一些额外的代码后,产生的二进制文件太大,那么也许你初始化了一些变量,你已经放置在保留ram,这导致。bin文件是如此大。如果您能提供项目的map文件和.hex文件,将会很有帮助。

由于MT_dialog

凯西
离线
最后看到:2年5个月前
加入:2016-07-29 10:01
嗨,Dialog

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

凯西
离线
最后看到:2年5个月前
加入:2016-07-29 10:01
嗨,Dialog

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

MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 11:34
嗨,凯西,

嗨,凯西,

是的,这可能会导致您面临的问题,并且链接器会生成一个大的.hex文件,关于您在UM-B-011中所做的引用,是的,它提到了指定区域保持未选中状态,因为指定区域在启动时由SDK自身初始化为零。

关于OTP和镜像内容,整个映像从系统内存中的OTP镜像,在fw运行时,映像部分和OTP之间没有交互。

由于MT_dialog

凯西
离线
最后看到:2年5个月前
加入:2016-07-29 10:01
谢谢,我很快就做完了

谢谢,我已经做了一个快速的实验来验证这一点。是的,当我将所有常量值从保留ram中取出时,二进制文件变小了。
那么,当我使用案例23时,代码RO+数据RO+RW RO的限制是什么?
非常感谢您的回复。

MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 11:34
嗨,凯西,

嗨,凯西,

使用case 23映射时的系统内存为38KB。

由于MT_dialog

凯西
离线
最后看到:2年5个月前
加入:2016-07-29 10:01
非常感谢,Dialog。

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

主题锁定