你好,
我正在尝试通过自定义板上通过UART加载辅助引导程序上的报告器应用程序。一切正常工作,我能够通过JTAG加载辅助引导加载程序时看到广告帧(即芯片中没有OTP烧焦)。
然而,在将引导加载程序刻录到OTP时,一切似乎工作正常:引导加载程序启动,Reporter应用程序下载并开始。这是我不再得到任何广告框架了。我很确定报告_FH应用程序开始正常运行,因为我在预期的间隔处获得高电流值(但是我也尝试了更长的间隔,我可以看到更改)。我也可以看到此间隔的16MHz Quartz。这就像我无法再收到任何RF输出或有效的广告框架。
另一件事是报告申请在OTP被烧毁后加载时不再工作了,代码已经加载,但当我停止Debugguer时,应用程序似乎冻结到600μA。
我想报道,记者正在寻找OTP数据,如果没有正确设置它,它会破坏广告(甚至是JTAG加载的应用程序?),但我一直挖掘代码并找不到任何原因,因为看起来一切都是如此在编译时定义。我正在使用报道_FH示例,例如,只需将其从最后的SDK(3.0.6)与development_debug定义为1。
我用OTP完成了什么:
- 刻录二次引导加载程序
- 阅读OTP标题
- 将应用程序标志设置为true
- 将OTP设置为0
- 将DMA大小设置为1FFF
- 烧伤标题
所以Usidid仍然是0并且启用了JTAG。我根本没有烧伤NVDS。
谢谢你的帮助。
lo

嗨,嗨,
当你说不再获得广告时,你可以试图测试是否没有射频数据包或者只是发出错误的数据包?
还有一个澄清的是你把记者计划的地方?你说没有点头。
谢谢!
问候!
PY
你好,
感谢您的回答!
我所拥有的是一个辅助引导加载程序,它在UART上查找数据,并在没有收到的情况下稍后深入睡眠。因此,一旦在辅助引导程序示例中完全下载,应用程序将复制到Sysram中。当然,我有一个微型文件,我将二进制文件作为数组,并将应用程序转移到UART上。
总结:
DA14580-01(Bootloader)<----- UART -----> Micro(Reporter App)
- Bootloader从Retention RAM开始并运行
- Bootloader通过UART接收报告器应用程序并将其复制到Sysram
- Bootloader触发软复位
- Reporter App开始
有关调试目的,我完成了以下所有过程:
- 微量等待引导者
- 使用JTAG将引导加载程序复制到DA14580-01中
- 引导加载程序启动,复制报告器应用程序并触发软复位
- 广告框架正常
为此,我必须以这样的方式修改引导加载程序分散文件:
lr_irom1 0x20000000 0x00008000 {;加载区域size_region.
ER_IROM1 0x20000000 0x00002000 {;加载地址=执行地址
*.o(重置,+第一个)
*(Inroot $$部分)
startup_cmsdk_cm0.o.
system_cmsdk.o.
}
ER\u IROM2 0x80000 0x2000{
.任何(+RO)
.any(+ rw + zi)
.any(堆栈)
}
}
然后我回到正常的分散文件:
lr_irom1 0x00000000 0x00008000 {;加载区域size_region.
ER_IROM1 0x00000000 0x00002000 {;加载地址=执行地址
*.o(重置,+第一个)
*(Inroot $$部分)
startup_cmsdk_cm0.o.
system_cmsdk.o.
}
ER\u IROM2 0x80000 0x2000{
.任何(+RO)
.any(+ rw + zi)
.any(堆栈)
}
}
并如前一篇文章中所述刻录OTP中的引导加载程序。
最终我得到了:
- 微量等待引导者
- 引导加载程序启动,复制报告器应用程序并触发软复位
- 广告框架Ko但消费好
我试图看看是否有任何RF输出,但是我需要插入RF分析仪,以便在突发似乎太短而且不够强大以通过天线出现。我会尝试在电路板上添加一个连接器。据说,我确信报告申请正在运行,但它就像射频或广告一样被打破了。
我发现与RF和OTP中的倾向倾向于:
-设备唯一ID(未烧毁,广告地址错误?)
- 石英修剪(从芯片读取并烧伤,错误的频率?)
但是我没有得到为什么会有任何区别,看到我在刻录我认为没有从OTP标题中读取任何信息之前的OTP之前使用相同的报道器应用程序(让我们希望我错了..。)。
希望它澄清整个问题。我会在星期一回答RF产出问题。
再次感谢你的帮助。
我检查了,根本没有RF输出。
评论以下行:
#在da14580\u config.h中定义CFG\u NVDS
在记者申请是答案。我想我确实按时醒来,但是在app_adv_func函数中,没有什么发生的。你能进一步解释一下这与OTP有关吗?我没有烧这个标题,但也许我应该有吗?
谢谢你的帮助。
嗨,嗨,
很高兴知道你找到了答案。这可以解释。
因为报告管理程序将NVDS放在NVDS_DATA_STORAGE_AREA中,所以不会重新保留。因此,当您进入深度睡眠时,所有这些信息都将丢失。然后在app_adv_func时尝试检索这些信息时,您实际上得到所有0.所以BLE Kernal将停止发送非法广告。如果您注释出CFG_NVDS,那么它就没问题了。另一种选择是将NVDS信息放入报告应用程序中的保留内存。
const struct nvds_data_struct nvds_data_storage __attribute __((部分(“retention_mem_area0”)))= {...}
或者您也可以将NVDS表刻录到OTP,并且您需要处理您自己的内存分配。
希望这可以帮助!
问候!
PY
谢谢你的解释,这是有道理的!我不明白的最后一件事就是在使用JTAG时,应用程序正在运行的原因,因为CFG_NVDS仍然在时间定义?
问候
嗨,嗨,
是的,它是掌握的。我没有一个外部MCU以便在您的方式进行测试。我会看看更多的代码,看看我是否能找到你的答案。请先使用您的工作。如果你得到其他问题,请告诉我。
问候
PY
好吧,如果你拍摄默认记者榜样并将其加载到DEV套件子板中,它确实正常工作!定义了CFG_NVDS,OTP不会刻录。
如果你能向我解释为什么这有效,那就足够了:-)。
谢谢
嗨,嗨,
我调查了代码,在这里尝试一些测试。
1.默认Proxr项目以扩展睡眠模式运行,肯定可以使用CFG_NVDS定义,因为根本没有OTP镜像。
2.如果Proxr项目在Deep Sleep模式下运行并启用调试(Development_debug仍为默认为1),则代码也将使用CFG_NVDS定义,因为此设置中的系统RAM也将在睡眠期间保留,OTP镜像将保留不实现,因为OTP是空的..
3.如果proxr项目在深度睡眠模式下运行并禁用debug(DEVELOPMENT\u debug为0),那么代码将必须从OTP运行,而这不是我们要讨论的情况。
所以回到你的问题,我会猜测你使用第二个设置编译你的proxr码(你没有提到这个细节,但你说你使用深睡眠,我认为第3个设置在你的情况下不起作用,既不放置OTP和RAM中的引导程序)。然后,如果将引导加载程序从RAM从RAM加载到加载Proxr,则之后场景将类似于上面的第二个案例:OPT为空,所有代码从RAM运行。如果将Bootloader刻录到OTP并使用引导加载程序将Proxr图像加载到RAM中,则睡眠和唤醒后,OTP控制器将尝试从OPT获取信息,因为OTP不为空(引导程序内),那么将有一些冲突。我唯一不确定的是理论上,在你的情况下,Boot加载程序将在BLE唤醒之后从OTP复制,然后不再运行。但我没有你的整个环境,不能重复你的问题。
我之前没有意识到以前的深度睡眠模式的设置是什么。如果你真的做了我猜到的(这不是深度睡眠模式,也没有延长睡眠模式),那么也许有潜在的风险。我想建议您在使用辅助引导程序时选择扩展睡眠模式。
希望这可以帮助你。
问候!
PY
你好,
我在闪光灯上刻录了OTP上的次级引导加载程序和刻录BLE_APP_PLEWELIAL项目。但我无法从我的手机搜索设备。
在我烧第二个引导程序之前,BLE仍然工作。我按照辅助引导加载程序文档来做这件事。有我忘记的场景吗?谢谢。
嗨梁云浩,
我想你不是在尝试做Suota过程,只需通过闪存中的次级映像启动,所以您在辅助引导加载程序中定义了support_an_b_001?由于您尝试从SPI启动的是启用SPI_FLASH_SUPPORTED?您是否将闪光灯中的图像标记为可引导,以便智能片段附加其他标题?您还可以通过将图像刻录到SPI闪存并通过efferic_bootloader项目下载并检查程序是否正确执行该过程来测试辅助引导加载程序。
Thansk mt_dialog.
嗨,DMA长度的推荐值是什么?谢谢。
嗨梁云浩,
您可以放置图像的长度,或者您可以使用值1fc0刻录字段,含有32512字节的单词。
谢谢mt_dialog.
好的。谢谢。