This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2640R2F:如何检查 SNV 区域是否损坏?

Guru**** 2381890 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1530795/cc2640r2f-how-to-check-if-the-snv-area-is-broken

器件型号:CC2640R2F

工具/软件:

您好:

我们正在检查我们的产品中不能正常工作的样品。
我们通过转储闪存来进行检查、看看闪存是否损坏、代码区域是正常的。
然而、0x1E000 的前 4 个字节(标头) 为 00 00 00 00、0x1D000 的前 4 个字节为 FF FF FF FF FF FF。
我们能否假定 SNV 面积在此基础上被破坏? (在正常样本中,其中一个是 00 00 01 00)

谢谢、

卡尔文

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    指令 0xcee0 (LDRB) 处的固件发生硬故障的原因可能是寄存器 R6 中的存储器地址无效。 根据上述 C 指令、该寄存器应保存ptr变量的值。 可能该ptr变量保存无效数据并导致硬故障。  

    您能告诉我您使用哪些 API 函数来写入 SNV、或者最终使用的代码片段吗?

    此致、
    Maxence

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、 Maxence、

    以下是 r/w 到 SNV 的代码。

    uint8_t Flash_ReadSNV(osalSnvId_t id, osalSnvLen_t len, void *pBuf)
    {
    	uint8_t errCount = 0;
    	uint8_t status = FAILURE;
    		
    	while(errCount < FLASH_MAX_RETRY_COUNT)
    	{
    		status = osal_snv_read(id, len, pBuf);
    		if(status != SUCCESS)
    		{
    			errCount++;
    			Task_sleep(1000); // 10ms
    		}
    		else
    		{
    			break;
    		}
    	}
    
    	return status;
    }
    
    uint8_t Flash_WriteSNV(osalSnvId_t id, osalSnvLen_t len, void *pBuf)
    {
    	uint8_t errCount = 0;
    	uint8_t status = FAILURE;
    		
    	while(errCount < FLASH_MAX_RETRY_COUNT)
    	{
    		status = osal_snv_write(id, len, pBuf);
    		if(status != SUCCESS)
    		{
    			errCount++;
    			Task_sleep(1000); // 10ms
    		}
    		else
    		{
    			break;
    		}
    	}
    
    	return status;
    
    }

    我想这个问题是因为在写入 tor SNV 时由于 ESD 或其他原因而复位的。

    无论如何、前 4 个字节是 00 00 00 00 是否正常?

    谢谢、

    卡尔文

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我认为闪存页的前 4 个字节没有包含 00 00 00 00。 您能否尝试像我们 SDK 的 basic_ble 示例那样刷写已知可正常工作的固件、看看它是否适用于示例器件? 您还可以尝试在示例设备和已知工作设备上的“芯片擦除“按钮、然后刷新固件、查看闪存是否不同?

    此致、
    Maxence