嗨对话框,
我们跑进了一个奇怪的问题。在SDK中尝试在Prox-Repoter示例中使用Suota。Suota已启用的固件运行正常,甚至从Suota应用程序上传新图像;但是,当设备重新启动固件时未更新,即它仍然从旧版本启动。Dev-Kit Pro的相同步骤和相同的FW工作正常,FW正在更新。
这里的问题是什么?
嗨瓦拉希尔,
由于这是一个发生的问题,我想,在自定义板上而不是开发套件上,我只能猜测可能出错的是什么可能出错,因为图像正在更新,就你而言,应该引起问题由ble_suota_loader。当设备重新启动并具有当前下载的图像的任何问题时,它将只使用BLE Suota Loader启动,而不是使用上一张图像,因为这应该在设备启动引导过程后立即被新的图像覆盖(这很奇怪)。
为了调试它,您可以做些什么,以#define dg_configdebug_trace才能在其执行时打印引导加载程序打印的消息。我可以假设的是,当新图像下载时,引导加载程序在相应的偏移量下没有看到有效标题(0x70 0x61),因此它不会通过图像的更新(如果图像有效)或者擦除图像(如果图像无效),并且他用当前图像靴子。所以一个开始调试的好地方是ble_suota_loader。如果在Suota更新后,您还可以使用Smart Spippet验证。
谢谢mt_dialog.
感谢回复,在这种情况下,如果启动后,设备不应该卡住?但是,我们的设备重新启动后不会被卡住并继续使用以前的FW。
不,如果新更新的图像出现问题,BLE_SUOTA_LOADER将检查当前图像,如果当前映像是确定的,那么这就是将要执行的内容。如果装载机发现当前图像的错误也是错误的,则BLE Suota Loader将仅用Suota Service释放基本BLE应用程序。在任何情况下,设备都将与其中一个图像(新或当前图像)或使用简单的Suota项目进行宣传,它不会被卡住。
所以我们已经通过工具箱检查了nvms_fw_update_part,并且没有写入它(仅在自定义dut的情况下)这可能是什么原因?
仍然是在自定义DUT上使用Suota(Dev-kit仍然运行罚款)
我们进一步调查了这一点,当我们使用调试并遵循写入闪存的闪存部分时,它顺利地告诉我们,我们写了我们需要编写的字节数(前512),但是当我们打开智能片段时工具箱nvms_fw_update_part为空。
我们尝试使用程序中的自定义代码写入nvms_fw_update_part,并可以通过nvms_fw_update_part的Smart Scippets工具箱验证,即NVMS_FW_UPDATE_PART具有我们编写TROUGH自定义BLE服务的确切值。我们正在使用ad_nvms_write()函数
我们错过了什么?我们需要做一些初始化吗?
没有明显的原因,这种行为,没有标志,以便拟议应用程序正确地写入正确的nvms_fw_update_part,因为这是用仅在自定义板上运行而不是在dev套件上运行的upota(i假设您使用的是测试的确切代码?)显然这是与您使用的H / W相关的东西,而不是S / W.
由于Suota应用程序更新,我发现写入过程中有点难以存在,我的意思是在写作中有问题,应用程序将提及写入外部内存的问题,所以为了测试它有点开始更新过程,在更新的中间点击从智能片段工具点击连接(以确保闪存上有写入执行,并且首先验证更新图像分区是否为空)尝试从该分区读取信息并检查它们是否包含任何内容,或者它们确实包含图像的一部分(不要让BLE_SUOTA_LOADER以来,因为这可能会删除数据)。
如果他们不包含任何东西,那么闪光灯肯定会出现问题。如果它们确实包含部分图像,那么标题文件有问题,并且当加载程序运行时,它会删除整个更新的图像。您还可以通过定义DGConfigdebug_trace来检查引导加载程序的擦除,并检查引导加载程序的代码的哪些部分。
另外,BLE_SUOTA_LOADER所知的分区表也可能是不同的,并且应用程序使用是不同的,例如,如果您使用的情况使用不同的大小闪存,并且您有一个自定义分区表,则为此自定义分区,BLE_SUOTA_LOADER也应该请注意,由于加载程序默认使用USE_PARTITION_TABLE_1MB_WITH_SUOTA,因此其要获取的图像和数据基于该分区。
闪光灯尺寸为1m与DEV-套件相同。我们正在为DUT和Dev-kit运行相同的代码。
我们所做的就是在Suota代码中使用ad_nvms_write()之后使用ad_nvms_read()。并打印了很少的字节。FW正正确地写入512的第一个块,但之后没有写。有时它会进一步,但然后开始写入任何东西。因此,当引导加载程序启动它时,它不会获取有效的新映像标题,因为没有什么是在0时编写的
下面给出了一些UART打印:(如您所能在0x824开始出错
擦除标题擦除0 36.在24 512上写图像数据在24:[0] 0 [1] 80 [2] FD [3] 7 [4] 35 [5] 1 [5] 1 [4] 2 [4] 2 [4]读取图像数据updt_part在24:[0] 0 [1] 80 [2] FD [3] 7 [4] 35 [5] 1 [6] 2 [7] 8在224 512上写图像数据在224上写图像数据:[0] 0 [1] 0 [2] FC [3] 7 [4] C0 [5] 0 [6] FC [7] 7读取图像数据updt_part在224:[0] 0 [1] 0 [2] FC [3] 7 [4] C0 [5] 0 [6] FC [7] 7在424 512上写图像数据在424上写图像数据:[0] 27 [1] E0 [2] 0 [3] 2b [4] 14 [5] DA [6] 3 [7] 25读取图像数据updt_part在424:[0] 27 [1] E0 [2] 0 [3] 2b [4] 14 [5] DA [6] 3 [7] 25在624 512上写图像数据在624上写图像数据:[0] DD [1] 43 [2] 0 [3] 9b [4] Ab [5] 42 [6] C5 [7] D1读取图像数据updt_part在624:[0] DD [1] 43 [2] 0 [3] 9b [4] Ab [5] 42 [6] C5 [7] D1在824 512上写图像数据在824上写图像数据:[0] 0 [1] 2A [2] FB [3] DA [4] 10 [5] BD [6] 0 [7] 0读取图像数据updt_part在824:[0] FF [2] FF [3] FF [4] FF [5] FF [6] FF [7] FF在A24 512上写图像数据在A24:[0] 7 [1] 39 [2] [3] 43 [4] DA [5] 86 [6] 70 [7] 47读取图像数据updt_part在A24:[0] FF [2] FF [3] FF [4] FF [5] FF [6] FF [7] FF在C24 512上写图像数据在C24上写图像数据:[0] 30 [1] B5 [2] 40 [3] 1 [4] 0 [5] 23 [6] 8C [7] 7在C24上读取图像数据updt_part:[0] ff [2] ff [3] ff [4] ff [5] ff [6] ff [7] ff擦除1000 36.在E24 512上写图像数据在e24上写图像数据:[0] 62 [1] 88 [2] 13 [3] 40 [4] 6 [5] 22 [6] 5b [7] 9读取图像数据updt_part上的e24:[0] FF [1] FF [2] FF [3] FF [4] FF [5] FF [6] FF [7] FF
您在定制板上使用的闪存是什么?与Dev套件上的那样是一样的吗?
我们正在使用GD25LQ80。http://www.xinyahong.com/upload/product/month_1411/20141118163626171181636261776.pdf.它具有与在Dev-kit上使用的规格相似
是否有一个样本的MEM-TEST程序,我们可以用来检查闪存的完整性吗?我们目前的所有DUT都持久化了拟议问题
我们弄清楚了这个问题。问题是我们的Flash未正确配置,并且主应用程序中的Custom_Config_Qspi_Suota和引导加载程序中的Custom_Config_QSPI没有正确的定义,因此正在加载BSP_Defaults中的默认配置,这与我们的设备的闪存不同的闪存。包括在主应用程序中的custom_config_qspi_suota中的以下行和引导加载程序中的custom_config_qspi,解决了问题:// Flah配置#define dg_configflash_header_file“qspi_gd25lq80b.h”#define dg_configflash_manufacturer_id gigadevice_id.#define dg_configflash_device_type gd25lq_series.#define dg_configflash_denty gd25lq80b_size.
我认为对话框应该包括UM-B-056软件开发人员指南中的正确设置指南。
这些设置适用于GD25LQ80B闪存芯片;请参阅UM-B-044软件平台参考的第10.2.1.4节,了解不同的闪光灯的正确设置
嗨瓦拉希尔,
由于这是一个发生的问题,我想,在自定义板上而不是开发套件上,我只能猜测可能出错的是什么可能出错,因为图像正在更新,就你而言,应该引起问题由ble_suota_loader。当设备重新启动并具有当前下载的图像的任何问题时,它将只使用BLE Suota Loader启动,而不是使用上一张图像,因为这应该在设备启动引导过程后立即被新的图像覆盖(这很奇怪)。
为了调试它,您可以做些什么,以#define dg_configdebug_trace才能在其执行时打印引导加载程序打印的消息。我可以假设的是,当新图像下载时,引导加载程序在相应的偏移量下没有看到有效标题(0x70 0x61),因此它不会通过图像的更新(如果图像有效)或者擦除图像(如果图像无效),并且他用当前图像靴子。所以一个开始调试的好地方是ble_suota_loader。如果在Suota更新后,您还可以使用Smart Spippet验证。
谢谢mt_dialog.
感谢回复,在这种情况下,如果启动后,设备不应该卡住?但是,我们的设备重新启动后不会被卡住并继续使用以前的FW。
嗨瓦拉希尔,
不,如果新更新的图像出现问题,BLE_SUOTA_LOADER将检查当前图像,如果当前映像是确定的,那么这就是将要执行的内容。如果装载机发现当前图像的错误也是错误的,则BLE Suota Loader将仅用Suota Service释放基本BLE应用程序。在任何情况下,设备都将与其中一个图像(新或当前图像)或使用简单的Suota项目进行宣传,它不会被卡住。
谢谢mt_dialog.
嗨对话框,
所以我们已经通过工具箱检查了nvms_fw_update_part,并且没有写入它(仅在自定义dut的情况下)
这可能是什么原因?
嗨对话框,
仍然是在自定义DUT上使用Suota(Dev-kit仍然运行罚款)
我们进一步调查了这一点,当我们使用调试并遵循写入闪存的闪存部分时,它顺利地告诉我们,我们写了我们需要编写的字节数(前512),但是当我们打开智能片段时工具箱nvms_fw_update_part为空。
我们尝试使用程序中的自定义代码写入nvms_fw_update_part,并可以通过nvms_fw_update_part的Smart Scippets工具箱验证,即NVMS_FW_UPDATE_PART具有我们编写TROUGH自定义BLE服务的确切值。我们正在使用ad_nvms_write()函数
我们错过了什么?我们需要做一些初始化吗?
嗨瓦拉希尔,
没有明显的原因,这种行为,没有标志,以便拟议应用程序正确地写入正确的nvms_fw_update_part,因为这是用仅在自定义板上运行而不是在dev套件上运行的upota(i假设您使用的是测试的确切代码?)显然这是与您使用的H / W相关的东西,而不是S / W.
由于Suota应用程序更新,我发现写入过程中有点难以存在,我的意思是在写作中有问题,应用程序将提及写入外部内存的问题,所以为了测试它有点开始更新过程,在更新的中间点击从智能片段工具点击连接(以确保闪存上有写入执行,并且首先验证更新图像分区是否为空)尝试从该分区读取信息并检查它们是否包含任何内容,或者它们确实包含图像的一部分(不要让BLE_SUOTA_LOADER以来,因为这可能会删除数据)。
如果他们不包含任何东西,那么闪光灯肯定会出现问题。如果它们确实包含部分图像,那么标题文件有问题,并且当加载程序运行时,它会删除整个更新的图像。您还可以通过定义DGConfigdebug_trace来检查引导加载程序的擦除,并检查引导加载程序的代码的哪些部分。
另外,BLE_SUOTA_LOADER所知的分区表也可能是不同的,并且应用程序使用是不同的,例如,如果您使用的情况使用不同的大小闪存,并且您有一个自定义分区表,则为此自定义分区,BLE_SUOTA_LOADER也应该请注意,由于加载程序默认使用USE_PARTITION_TABLE_1MB_WITH_SUOTA,因此其要获取的图像和数据基于该分区。
谢谢mt_dialog.
闪光灯尺寸为1m与DEV-套件相同。
我们正在为DUT和Dev-kit运行相同的代码。
我们所做的就是在Suota代码中使用ad_nvms_write()之后使用ad_nvms_read()。并打印了很少的字节。
FW正正确地写入512的第一个块,但之后没有写。有时它会进一步,但然后开始写入任何东西。因此,当引导加载程序启动它时,它不会获取有效的新映像标题,因为没有什么是在0时编写的
这里的问题是什么?
下面给出了一些UART打印:(如您所能在0x824开始出错
擦除标题
擦除0 36.
在24 512上写图像数据
在24:[0] 0 [1] 80 [2] FD [3] 7 [4] 35 [5] 1 [5] 1 [4] 2 [4] 2 [4]
读取图像数据updt_part在24:[0] 0 [1] 80 [2] FD [3] 7 [4] 35 [5] 1 [6] 2 [7] 8
在224 512上写图像数据
在224上写图像数据:[0] 0 [1] 0 [2] FC [3] 7 [4] C0 [5] 0 [6] FC [7] 7
读取图像数据updt_part在224:[0] 0 [1] 0 [2] FC [3] 7 [4] C0 [5] 0 [6] FC [7] 7
在424 512上写图像数据
在424上写图像数据:[0] 27 [1] E0 [2] 0 [3] 2b [4] 14 [5] DA [6] 3 [7] 25
读取图像数据updt_part在424:[0] 27 [1] E0 [2] 0 [3] 2b [4] 14 [5] DA [6] 3 [7] 25
在624 512上写图像数据
在624上写图像数据:[0] DD [1] 43 [2] 0 [3] 9b [4] Ab [5] 42 [6] C5 [7] D1
读取图像数据updt_part在624:[0] DD [1] 43 [2] 0 [3] 9b [4] Ab [5] 42 [6] C5 [7] D1
在824 512上写图像数据
在824上写图像数据:[0] 0 [1] 2A [2] FB [3] DA [4] 10 [5] BD [6] 0 [7] 0
读取图像数据updt_part在824:[0] FF [2] FF [3] FF [4] FF [5] FF [6] FF [7] FF
在A24 512上写图像数据
在A24:[0] 7 [1] 39 [2] [3] 43 [4] DA [5] 86 [6] 70 [7] 47
读取图像数据updt_part在A24:[0] FF [2] FF [3] FF [4] FF [5] FF [6] FF [7] FF
在C24 512上写图像数据
在C24上写图像数据:[0] 30 [1] B5 [2] 40 [3] 1 [4] 0 [5] 23 [6] 8C [7] 7
在C24上读取图像数据updt_part:[0] ff [2] ff [3] ff [4] ff [5] ff [6] ff [7] ff
擦除1000 36.
在E24 512上写图像数据
在e24上写图像数据:[0] 62 [1] 88 [2] 13 [3] 40 [4] 6 [5] 22 [6] 5b [7] 9
读取图像数据updt_part上的e24:[0] FF [1] FF [2] FF [3] FF [4] FF [5] FF [6] FF [7] FF
嗨瓦拉希尔,
您在定制板上使用的闪存是什么?与Dev套件上的那样是一样的吗?
谢谢mt_dialog.
我们正在使用GD25LQ80。http://www.xinyahong.com/upload/product/month_1411/20141118163626171181636261776.pdf.
它具有与在Dev-kit上使用的规格相似
是否有一个样本的MEM-TEST程序,我们可以用来检查闪存的完整性吗?我们目前的所有DUT都持久化了拟议问题
嗨对话框,
我们弄清楚了这个问题。问题是我们的Flash未正确配置,并且主应用程序中的Custom_Config_Qspi_Suota和引导加载程序中的Custom_Config_QSPI没有正确的定义,因此正在加载BSP_Defaults中的默认配置,这与我们的设备的闪存不同的闪存。包括在主应用程序中的custom_config_qspi_suota中的以下行和引导加载程序中的custom_config_qspi,解决了问题:
// Flah配置
#define dg_configflash_header_file“qspi_gd25lq80b.h”
#define dg_configflash_manufacturer_id gigadevice_id.
#define dg_configflash_device_type gd25lq_series.
#define dg_configflash_denty gd25lq80b_size.
我认为对话框应该包括UM-B-056软件开发人员指南中的正确设置指南。
这些设置适用于GD25LQ80B闪存芯片;请参阅UM-B-044软件平台参考的第10.2.1.4节,了解不同的闪光灯的正确设置