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.

[参考译文] CC1352P:NVS 驱动程序会在振铃到闪存之前检查待写入的新数据是否与旧数据相同

Guru**** 2478765 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1334635/cc1352p-does-nvs-driver-check-if-new-data-to-write-is-the-same-as-old-one-before-wring-into-flash

器件型号:CC1352P

您好!

为了避免磨损闪存、我假设在实际写入闪存之前最好检查 NVS 项目的内容是否与其现有内容相同。 我的问题是、我们需要在应用程序中执行此类检查、还是由驱动程序自行执行?

谢谢。

ZL

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

    您好、Zhiyong、

    NVS 写入在写入之前不会读取闪存内容。 驱动程序源代码可在以下位置找到:[SDK path]\source\ti\drivers\NVS\NVSCC26XX.c

    有一个预验证标志、用于确保数据真正可写、而不需要擦除。 但这仍然不是你所要求的。  

    如果需要在写入字符串之前进行读取、则需要在应用程序中对其进行处理。

    此致

    SID

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

    尊敬的 Sid:

    示例项目在 NVS 中写入的函数似乎会检查项目的内容是否与现有内容相同。

    /*********************************************************************
     * @fn      NV_writeItem
     *
     * @brief   Write a data item to NV.
     *
     * @param   nv_id - Valid NV item Id.
     * @param   len   - Length of data to write.
     * @param   *pBuf - Data to write.
     *
     * @return  NVINTF_SUCCESS if successful, failure code otherwise.
     */
    uint8 NVOCOP_writeItem( NVINTF_itemID_t nv_id, uint16 len, void *pBuf )
    //...
          for (i = 0; i < len; i++)
          {
            HalFlashRead(NV_PAGE, offset, &tmp, 1);
            if (tmp != ((uint8 *)pBuf)[i])
            {
              break;
            }
            offset++;
          }
    
          if (i == len)
          {
            // Changed value is the same value as before.
            // Return here instead of re-writing the same value to NV.
            return NVINTF_SUCCESS;
          }
    //...

    我想只要我们调用此函数而不是直接调用 NVS 驱动程序,我们就不需要在自定义的应用程序中自行执行此类检查。

    此致!

    ZL

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

    您好、Zhiyong、

    是的、您是对的。 在使用写入 API 之前、该示例会检查应用层中的字符串。 您可以将示例函数用作您的编写函数。

    此致、

    SID

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

    尊敬的 Sid:

     NVOCoP_writeItem 中的代码似乎不起作用。 在我们的应用程序中,我们有一个定制的 NVS 项目来存储 PAN ID、加密密钥和通道掩码等。 如果我们调用函数3次保存该项目而不更改其内容、则可以在闪存中看到该项目的3个副本。

    下面的屏幕截图是通过 Flash-Programmer-2回读的。 突出显示具有重复(0x55)的通道掩码。

    我想我们还需要在应用中进行这样的检查。

    此致!

    ZL

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

    您好、Zhiyong、

    如果您调试代码、能否明白逻辑失败的原因? 是因为驱动器对"偏移"的管理错误吗?

    此致、
    SID