你好,
谁能帮我如何编程DA1458x质量设备?我的少数设备处于生产状态。
对于给设备分配质量BDA,我有一个疑问,
在我的项目中,我使用BDA作为参数之一,使用它我正在执行一些控制操作。所以在量产的时候会影响到我的项目。
表示,例如param_data[23] == nvds_data_ptr->NVDS_TAG_BD_ADDRESS[2]在这里,我使用了BDA的一个字节进行操作。所以在量产的时候,DA14580和DA14583对于BDA都需要考虑什么。
感谢致敬
Rohit R.
设备:
嗨罗希特,
如果是大批量生产,请检查生产线工具(PLT)。最多可以连接16个设备。
//www.wsdof.com/雷电竞官网登录products/production-line-tool
你在生产中使用这个工具吗?
谢谢,PM_Dialog
嗨PM_Dialog,
好的,谢谢你的回复。
是的,我要把这个工具用于生产。
那我对BDA的怀疑呢。对代码有影响吗?如果不修改代码,它能工作吗?
感谢致敬
Rohit R.
嗨罗希特,
请查看以下文件中的7.2.4 BD地址。
//www.wsdof.com/sites/default/files/um-b-041_da1458x_da1468x_production_line_tool_4v2.pdf
你能解释一下你想用BD地址做什么吗?你们对生产有什么要求?
谢谢,PM_Dialog
嗨PM_Dialog,
谢谢你的反馈,
好的,我设计了2个产品。产品A和B,使用产品B,我们正在控制产品A。因此,为了控制和识别我使用的设备的BDA,使用nvds_data_ptr->NVDS_TAG_BD_ADDRESS[2]结构的设备。我使用了6个字节的BDA,我保持前3个字节是通用的,其他3个字节随着设备的数量不断变化。
所以我的问题是,如果在生产过程中分配BDA给设备后,它会影响我的代码吗?如果是,那么在分配BDA期间要处理的所有事情是什么,以便以最小的更改我的代码应该正常工作。
我也想知道使用OTP方法以及flash编程设备的效果如何?
感谢致敬
Rohit R.
嗨罗希特,
当PLT被使用时,BD地址将被编程到OTP报头。之后,设备将获得OTP头的BD地址,因此NVDS或应用程序代码中的任何其他BD地址将被忽略。在生产过程中,代码不会受到影响,但正如前面提到的,PLT将用适当的BD地址写入OTP头。关于你的最后一个问题,你能解释一下吗?请注意,OTP代表One-Time-Programmable(一次性可编程),不能多次写入。
谢谢,PM_Dialog
嗨PM_Dialog,
当PLT被使用时,BD地址将被编程到OTP报头中。在那之后,
设备将获得的BD地址的OTP头,所以任何其他BD地址在NVDS
或者在应用程序代码中将被忽略" -因此,如果我在生产中使用OTP,那么BDA的NVDS结构将被忽略
如果我想使用BDA,因为我的操作需要,那么我必须映射OTP BDA到我的逻辑,对吗?
如果是,请分享如何映射OTP BDA?意思是如果有一个例子有人使用了这个方法。
如果我使用Flash制作,会有什么效果?请解释一下你是如何澄清关于OTP的问题的。
因为在一些生产中,我可能会使用DA14580 MCU,所以根据我的了解,需要有OTP
,对于一些产品,我使用DA14583,所以这里我将使用flash。所以请让我知道什么是使用flash的BDA效果。
“在生产过程中,代码不会受到影响,
但如前所述,PLT将使用适当的BD地址写入OTP标题“
-好的,但是如果OTP头是用于BDA,那么我的NVDS结构将不会影响,我需要改变我的代码,以防BDA访问和操作。
感谢致敬
Rohit R.
嗨罗希特,
如果您计划将PLT用于生产,并且希望通过PLT刻录BD地址,则BD地址将存储在OTP头的适当字段中。如果没有PLT,这个领域也可以燃烧,所以如果你有足够的板,你可以做一些测试。您可以使用使用SmartSnippets工具箱来读取和写入OTP头。
>>>如果我使用Flash制作,会有什么效果?
如果BD地址被编程到OTP报头?所以,如果我理解正确,你在你的设计中使用DA14580和DA14583,你想通过PLT编程(假设使用不同的fw)吗?BD地址呢?
谢谢,PM_Dialog
嗨PM_Dialog,
谢谢你的反馈,
>>>如果我使用Flash制作,会有什么效果?-意味着,对于某些产品,我使用DA14583 MCU,我有闪存选项,所以使用PLT并通过它写BDA,然后将BDA写入OTP标题或它将在NVDS结构中写入NVDS结构(NVDS_TAG_BD_ADDRESS)。
因为,在开发阶段,我们使用了DA14583,这里我通过NVDS访问了BDA,并使用SmartSnippet,我刚刚将.hex文件刻录到设备中并测试。
所以当我使用PLT对DA1583有什么影响?
>>>如果BD地址被编程到OTP报头?所以,如果我理解正确,你在你的设计中使用DA14580和DA14583,你想通过PLT编程(假设使用不同的fw)吗?BD地址呢?-是的,我同时使用DA14580和DA14583,因为很少有产品是为DA14580设计的,也很少有产品是为DA14583单片机设计的。是的,不同的固件。
因此,我想知道如何从OTP头访问BDA,以及我需要在代码中更改什么来访问NVDS_TAG_BD_ADDRESS?(例如- param_data[23] == nvds_data_ptr->NVDS_TAG_BD_ADDRESS[2])
而且,如果我使用DA14583和燃烧代码使用PLT和写BDA,将BDA更新到NVDS_TAG_BD_ADDRESS或OTP头?
感谢致敬
Rohit R.
嗨罗希特,
在所有情况下,如果您使用PLT烧BDA,那么它将存储在OTP头。然后DA1458x将从OTH报头开始发布BDA。请检查nvds_read_bdaddr_from_otp()。你的意思是烧毁OTP Hader中的BDA,然后从你的FW上读它?
谢谢,PM_Dialog
嗨PM_Dialog,
好的,谢谢你的反馈。
检查nvds_read_bdaddr_from_otp() -好的,我来检查一下函数。
你的意思是烧毁OTP Hader中的BDA,然后从你的FW上读它?-是的,我想访问固件和编写相同的逻辑,因为我已经使用NVDS结构。
请通过步骤过程或任何示例,让我知道相同的例子。
感谢致敬
Rohit R.
嗨罗希特,
如果设备BD地址在OTP标题中写入,则忽略CFG_NVDS_TAG_BD_ADDRESS值。如果检查system_init()函数,则会看到SDK检查并读取BD地址 - NVDS_READ_BDADDR()。如果检查上述功能,您将看到:
如果DA14583, SDK首先检查并从DA14583的内部SPI flash中读取BD地址- nvds_read_bdaddr_from_da14583_flash()..如果在flash中没有找到BD地址,则尝试从OTP - nvds_read_bdaddr_from_otp()中读取BD地址。
在DA14580的情况下,因为它不包含嵌入式SPI Flash, SDK只检查OTP头- nvds_read_bdaddr_from_otp()。
如果您阅读nvds_read_bdaddr_from_otp()的源代码,您将看到如何从从0x7fd4地址(BDADDR_OFFSET)开始的OTP头读取BD地址。
谢谢,PM_Dialog
嗨PM_Dialog,
非常感谢你的回复,
好的,我刚刚通过nvds_read_bdaddr_from_otp()的源代码,如果我没有错,我只需要在我的自定义代码中需要调用这个函数,并映射这个“otp_bdaddr”结构而不是“NVDS”结构。
如果我说错了请指正,我们使用PLT生产的所有DA1458x MCU(无论是DA14580还是DA14583)的流程都是一样的。
感谢致敬
Rohit R.
嗨罗希特,
otp_bdaddr在dev_bdaddr中被mems复制。
memcpy (&dev_bdaddr otp_bdaddr, sizeof (dev_bdaddr));
如果在SDK中搜索一点点,您将找到以下内容:
///设备BD地址
Struct bd_addr dev_bdaddr __attribute__(((section(“retention_mem_area0”),zero_init));
SDK已检索OTP_BDADDR。因此,这取决于您 - 您可以使用此功能或实现基于NVDS_READ_BDADDR_FROM_OTP()的功能,您需要做的就是从OTP读取正确的地址。
谢谢,PM_Dialog
嗨PM_Dialog,
好的,非常感谢你的回应。
我会把所有要点都讲一遍,然后再给你答复。
感谢致敬
Rohit R.
嗨PM_DIALOG.
我按照以下步骤构建了OTP固件
1)在da1458x_config_advanced.h文件中定义- #define CFG_BOOT_FROM_OTP
2)在User_Peripheral文件中,extern struct bd_addr * dev_bdaddr;(///从nvds.c文件struct bd_addr dev_bdaddr __attribute __((部分(“retent_mem_area0”),zero_init)))))
3)在user_peripheral文件-使用dev_bdaddr->addr[5];访问地址并分配给广告变量
4)构建的代码没有错误
通过上面的4个步骤,我试图从OTP访问BDA,但我不确定是否正确,我根据我的理解尝试了。
你能告诉我这是对的吗?因为我确实想在定制板上尝试这个,除非我是100%正确的。
如果有任何其他步骤或任何其他东西需要在固件的生产角度启用,那么请让我知道有关DA14580和DA14583 MCU。
感谢致敬
Rohit R.
嗨罗希特,
不好意思,我有点糊涂了,请问您想要完成的是什么?你是用固件烧掉了OTP,还是用特定的BDA烧掉了OTP头?只需尝试连接到从SmartSnippets工具箱的OTP头,并烧毁您的BDA。
我还不能完全确定我是否理解了你的要求。如果我没理解错的话你有两种不同的产品。雷电竞官网登录第一个基于DA14580,第二个基于DA14583。
你想使用PLT和燃烧OTP头与特定的BDA。出于测试目的,您可以使用SST来刻录BD地址。你烧了OTP头了吗?
谢谢,PM_Dialog
嗨PM_Dialog,
没有,我还没试过。我现在有有限的设备,所以我没有烧毁任何设备的固件。我正在准备最终的固件。
意思是,我的问题是那些从OTP访问BDA的步骤是正确的吗?如果步骤是正确的,那么我需要在DA14583固件中也更改吗,还是只针对DA14580?
“不过,我还不能完全确定我是否理解了你的要求。如果我没理解错的话你有两种不同的产品。雷电竞官网登录第一种基于DA14580,第二种基于DA14583”。-是的,我有2个具有不同MCU雷电竞官网登录的产品,一个是使用DA14580,另一个是DA14583。我将使用PLT进行大规模生产。所以我询问了我需要在固件中的生产中启用或禁用的所有内容?这意味着DA14580需要什么以及生产过程中DA14583所需的内容。
感谢致敬
Rohit R.
嗨罗希特,
很抱歉耽搁了。外部化dev_bdaddr可能是一种可能的方法。设备在启动过程中获得bd地址,在nvds_read_bdaddr()函数中(设备从可以获得bd地址的NVDS结构或OTP的地方检查),并将获得的值放在保存设备地址的dev_bdaddr变量中。
你能解释一下第三步吗?
>>>in user_peripheral file - using dev_bdaddr-> [5];访问地址并分配给广告变量
你的意思是要在广告字符串中添加bd地址吗?
正如我已经提到的,您应该烧毁OTP头中的BD地址。请使用智能代码片段工具箱来读取和烧毁OTP报头。您不需要将整个应用程序映像刻入OTP并从那里启动
谢谢,PM_Dialog
嗨PM_Dialog,
好的,谢谢你的反馈。
">>>in user_peripheral file - using dev_bdaddr->addr[5];访问地址并分配给广告变量
你的意思是要在广告字符串中添加bd地址吗?”-是的,正确。我在广告字符串中使用了一个bd地址。
正如我已经提到的,你应该烧掉OTP头中的BD地址。请使用智能代码片段工具箱来读取和烧毁OTP报头。你将不需要烧整个应用程序映像到OTP和从那里引导好,意思是如果我只烧了OTP报头检查设备广告然后我就可以读取地址仪式了?你能不能告诉我做的步骤,这样我就不会犯任何错误,因为我现在有很少的设备,其他的都在生产过程中。
感谢和问候
Rohit R.
嗨PM_Dialog,
关于之前的帖子有什么更新吗?
感谢致敬
Rohit R.
嗨罗希特,
抱歉,我可能错过了你最后的评论。你的意思是为了通过智能片段工具箱烧掉OTP头中的BDA你应该遵循的步骤吗?
如果是,您可以使用CLI来刻录OTP头中的BD地址。命令行可以在\5.0.4\ binary \host\windows\prod_test_cmds SDK路径下找到。下面的命令将BD地址写入OTP:
protest -p otp wr_bdaddr
例如:prodtest -p 14 otp wr_bdaddr 44:49:41:4c:4f:47
另一个选项可能是使用SmartSnippets工具箱来刻录OTP头中的BD地址。一般来说,通过SST烧掉OTP应该是OTP程序员。请记住,建议使用该工具的最新版本。
OTP包含3个用户可以燃烧数据的区域:
烧OTP时,应确保编程电压干净,不得超过6.8V。请参考数据表找到更多的编程电压细节。记住,OTP代表一次性可编程,因此你不能擦除和重写OTP多次,但你只能翻转位仍然设置为0,并把他们变成1。
在您的情况下,打开SST并连接到OTP头。一旦你连接,你会看到所有可用的字段在OTP头。PLT将存储BD地址在以下地址“设备唯一ID”字段。
因此,如果您想测试它,您应该刻录“设备唯一ID”字段中的BD地址。请注意,一个字的最高位(最左)字节存储在最小地址(大端)中。例如,如果用户在“设备唯一标识”字段中输入0A0B0C0D,则0x0A写入0x47FD4, 0x0D写入0x47FD7。
谢谢,PM_Dialog