OTP编程后有问题

19个帖子/ 0新
最后一篇
丹尼尔59.
离线
最后一次露面:1年8个月前
加入:2016-01-08 04:34
OTP编程后有问题

我使用JTAG与DA14580连接,然后使用SmartSnippet OTP图像刻录自定义图像。然后刻录OTP标题,将2个标志设置为“是”,并将DMA长度编辑为我的代码长度。

我使用从内存中的读取来检查,操作是正确完成的。

但是现在我用手机找不到我的芯片。我用启动器下载固件,还是找不到。

有什么问题吗?

设备:
mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨,丹尼尔,

嗨,丹尼尔,

如果你使用的是专业开发工具包,你可以通过功率分析器检查设备是否真的通过指示的功率消耗进行宣传。如果您在OTP中烧毁了应用程序标志,您将无法通过UART或任何其他外围设备而不是JTAG下载代码(因为引导加载程序已停用)。因此,您可以尝试通过JTAG下载代码(希望您没有在OTP头中禁用JTAG),并检查应用程序是否响应。

谢谢mt_dialog.

丹尼尔59.
离线
最后一次露面:1年8个月前
加入:2016-01-08 04:34
是的,我通过JTAG下载代码

是的,我通过JTAG下载代码,没有响应。

代码可以在还没烧坏的芯片上运行,所以代码是正确的。

丹尼尔59.
离线
最后一次露面:1年8个月前
加入:2016-01-08 04:34
还有什么需要我做的吗

我需要在da1458x_config_basic和da1458x_config_advanced中更改什么?我只将cfg_development_debug更改为undef。

mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨Daniel59,

嗨Daniel59,

在OTP头中有一个名为JTAG ENABLE的标志,如果你将其设置为disabled,你将无法附加调试器和下载代码到它,所以如果你没有设置这个,你应该能够附加调试器和下载代码。如果你有JTAG ENABLE标志启用,你不能运行或下载代码,甚至与调试器,我认为有什么是错误的580烧毁。对于映像没有任何特殊设置,即使使用CFG_DEVELOPMENT_DEBUG,映像也应该能够工作(特定的标志只是添加了一些断点,以便开发人员识别任何问题,如果您按原样下载了映像,则不应该出现这种情况)。还试图重新OTP头和检查如果你能复燃DMA长度的大小,以使其更大的(这个字段的最大值可以是1 fc0朝32512字节的字),也许你错误你的图像的大小,和DMA长度应大于,或等于,你的图像的大小。另外,确保Remapping标记被设置为SRAM为0。

谢谢mt_dialog.

丹尼尔59.
离线
最后一次露面:1年8个月前
加入:2016-01-08 04:34
是,标志是启用,并且

是的,标志是Enable,并且我设置的DMA长度是0x1406,因为当我烧制DA14580时,它说DMA长度(0个单词)不应该小于图像文件代码长度(5126个单词)。

在输入1FC0并刻录后,它会更改为1FE6。

附件是OTP报头图片,并通过Booter下载成功图片。但仍然无法通过手机找到。

附件:
mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨Daniel59,

嗨Daniel59,

如果你烧相同的芯片,你不能再烧OTP到你想要的值,你只能从0转换到1,这就是为什么你得到那个值。既然你启用了JTAG你应该能够下载代码直接烧毁芯片,如果不是因为聪明片段至少用凯尔,你能尝试通过凯尔(下载),以确保设备仍正常工作,与燃烧过程出了问题。我在一个DMA长度超过1FC0的已经烧坏的板上进行了测试,并放置了你提到的值(1FE6),似乎镜像发生得很好,程序运行,所以,这不是你的问题。我认为目前的580芯片有问题,尽管我坚持让你的设备上的功率分析器,并检查它是什么。

谢谢mt_dialog.

丹尼尔59.
离线
最后一次露面:1年8个月前
加入:2016-01-08 04:34
我无法通过keil找到芯片

在将SW到JTAG更改后,我无法通过Keil找到芯片。我认为芯片很好,因为我仍然可以连接它。

如何使用Power Profiler检查芯片?

mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨Daniel59,

嗨Daniel59,

从SWD到JTAG的keil不改变,只需通过SWD将代码下载到芯片中,并检查您是否可以使用手机找到它。您将不得不使用Pro套件(仅限专家和Pro套件具有电源测量电路),您可以将Pro子板与Pro套件上的刻录OTP连接,并在Power Profiler选项卡中使用智能片段检查实际上,芯片没有宣传(检查系统广告时的三个电流峰值)。此外,您还可以检查重置后的当前消耗并检查是否有任何奇怪的行为。

谢谢mt_dialog.

丹尼尔59.
离线
最后一次露面:1年8个月前
加入:2016-01-08 04:34
我在keil使用调试,以及

我在keil中使用调试,并且可以将代码下载到芯片中。我可以看到Do ++操作的数据正常工作,但我的手机仍然无法找到。OTP NVDS是否需要燃烧?

我使用DA14580和我自己的电路,所以我不能使用功率分析器。

mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨Daniel59,

嗨Daniel59,

否,如果使用cfg_initialize_nvds_struct刻录图像,则NVDS结构将从SDK中填充数据,并且设备将使用这些数据作为BD地址等。如果您不使用此标志,则OTP的NVDS为空,然后是的,你会有一个问题。检查上面的标志并确保它定义了,如果从Keil您可以下载代码,您可以看到代码运行,但您无法通过手机看到您的设备广告,那么它不是OTP刻录其当前的580芯片或您的定制设计上的天线。

谢谢mt_dialog.

丹尼尔59.
离线
最后一次露面:1年8个月前
加入:2016-01-08 04:34
我检查了这个标志,它是

我检查了标志,定义了。

但OTP烧前电路可以工作,烧后电路不能工作。

mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨Daniel59,

嗨Daniel59,

我很抱歉,但我不能针对任何损坏的580来确定问题,请尝试刻录另一个芯片。

谢谢mt_dialog.

丹尼尔59.
离线
最后一次露面:1年8个月前
加入:2016-01-08 04:34
我思考了......但是

我思考了......但是if it is damaged why Smartsnippet can connect to it? I'm afraid of damage another one...

mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨Daniel59,

嗨Daniel59,

试着测量580的电压供应(如果你试图通过一个硬币电池供电),如果功率小于2.35V 580不会从OTP启动。也有关,580可以连接到智能片段和不能传输,也许收音机模块已经损坏,甚至也许芯片传输但结果本周的天线被损坏的信号,你的设备不能被传送你的电话设备。

谢谢mt_dialog.

丹尼尔59.
离线
最后一次露面:1年8个月前
加入:2016-01-08 04:34
我发现这个问题是

我发现问题在于代码。我下载一个未改变的模板十六进制文件到我的手机可以找到它,但下载我自己的代码我的手机不能。我会看我的代码并找出发生了什么。

丹尼尔59.
离线
最后一次露面:1年8个月前
加入:2016-01-08 04:34
我更改app_on_set_dev

我使用用户更改App_On_set_dev_config_complete回调,在其中添加2个简单的计时器。

void user_app_on_set_dev_config_complete(void)
{
data_used = app_easy_timer(8,app_data_timer_cb_handler);
timer_used = app_easy_timer(100,app_adcval1_timer_cb_handler);
default_app_on_set_dev_config_complete();
}

那么芯片无法找到。为什么会发生?OTP在运行app_on_set_dev_config_complete回调后有没有不同?

我想知道如果我想让代码在芯片通电时运行,并且只运行一次,我应该把代码放在哪里?Easy timer在app_on_init回调中似乎不起作用。如果我用if语句将它们放在app_on_sytem_powered中,我认为它会浪费一些处理时间。

丹尼尔59.
离线
最后一次露面:1年8个月前
加入:2016-01-08 04:34
我只是评论和取消注释

我只是注释和取消注释2个计时器回调,它可以在OTPed芯片上工作…

mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨Daniel59,

嗨Daniel59,

在OTP上运行的fw和在sysram上运行的fw没有区别,执行的回调函数和函数都是你在构建代码时定义的。

“芯片通电时运行代码,且只运行一次,代码应该放在哪里”,恐怕我不明白你想做什么,请澄清。

易于计时器在App_On_Init()中不起作用,因为在调用app_on_init回调之后,也调用了堆栈的重置,并取消了在app_on_init()期间设置的任何定时器。关于在app_on_system_powered()中的定时器设置()如果您不想在app_on_system_powered中放置if语句,则可以放置在_on_set_dev_config_complete()中的定时器设置(如您所做的),或者在开始通告时大多数SDK示例都执行,或者在完成在_app_on_db_init_complete()上设置数据库时。

谢谢mt_dialog.