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.

[参考译文] CC1352R:SPIFFSNVS_CONFIG ()是否唤醒 SPI 外部闪存?

Guru**** 2484615 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1184619/cc1352r-does-spiffsnvs_config-wakes-up-the-spi-external-flash

器件型号:CC1352R

您好!

我使用的是 SDKv4.10。 通过调用 Board_initHook(),板级初始化 SPI 外部闪存被置于关断模式。 我想知道调用 SPIFFSNVS_CONFIG ()是否会唤醒 SPI 外部闪存。

/*
 *  ======== SPIFFSNVS_config ========
 */
s32_t SPIFFSNVS_config(SPIFFSNVS_Data *spiffsnvsData,
    u32_t nvsIndex, spiffs *fs, spiffs_config *fsConfig,
    u32_t logicalBlockSize, u32_t logicalPageSize)
{
    NVS_Attrs nvsAttrs;

    NVS_init();

    /* Open the NVS region to be used for the file system */
    spiffsnvsData->nvsHandle = NVS_open(nvsIndex, NULL);
    if (spiffsnvsData->nvsHandle == NULL) {
        return (SPIFFSNVS_STATUS_INV_NVS_IDX);
    }

    NVS_getAttrs(spiffsnvsData->nvsHandle, &nvsAttrs);

    /*
     * Logical block size must be an integer multiple of the erase sector size;
     * fail if an invalid logical block size is attempted.
     */
    if ((logicalBlockSize == 0) ||
        (logicalBlockSize < nvsAttrs.sectorSize) ||
        (logicalBlockSize % nvsAttrs.sectorSize)) {
        NVS_close(spiffsnvsData->nvsHandle);

        return (SPIFFSNVS_STATUS_INV_BLOCK_SIZE);
    }

    /*
     * Logical block size must be an integer multiple of the logical page size
     */
    if ((logicalPageSize == 0) ||
        (logicalBlockSize < logicalPageSize) ||
        (logicalBlockSize % logicalPageSize)) {
        NVS_close(spiffsnvsData->nvsHandle);

        return (SPIFFSNVS_STATUS_INV_PAGE_SIZE);
    }

#if CC13XX_CC26XX_WRITE_LIMIT
    /*
     * For CC13XX and CC26XX ensure there are no more than 32 logical pages in
     * a logical block.  Allowing more than 32 pages per block would allow
     * situations where the 83 write limit could be violated on the index page.
     */
    if (logicalBlockSize / logicalPageSize > 32) {
        NVS_close(spiffsnvsData->nvsHandle);

        return (SPIFFSNVS_STATUS_INV_PAGE_SIZE);
    }
#endif

    spiffsnvsData->lock.mutex = MutexP_create(NULL);
    if (spiffsnvsData->lock.mutex == NULL) {
        NVS_close(spiffsnvsData->nvsHandle);

        return (SPIFFSNVS_STATUS_ERROR);
    }
    spiffsnvsData->lock.count = 0;

    /* Initialize SPIFFS configuration structure using the following: */
    fsConfig->phys_size = nvsAttrs.regionSize;
    fsConfig->phys_addr = 0;    /* Beginning of NVS region */
    fsConfig->phys_erase_block = nvsAttrs.sectorSize;
    fsConfig->log_block_size = logicalBlockSize;
    fsConfig->log_page_size = logicalPageSize;

    /* Set hardware abstraction functions to communicate with FLASH memory */
    fsConfig->hal_erase_f = &spiffs_hal_erase;
    fsConfig->hal_read_f = &spiffs_hal_read;
    fsConfig->hal_write_f = &spiffs_hal_write;

    /*
     * Store SPIFFSNVS object in the file system object; it is required by hardware
     * abstraction and lock/unlock functions.
     */
    fs->user_data = spiffsnvsData;

    return (SPIFFSNVS_STATUS_SUCCESS);
}

-kel

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

    您好、kel、

    在检查了 SPIFFSNVS_CONFIG、NVS.h 和 NVSSPI25X.h 方法以及 MX25R8035F 数据表后、似乎调用 SPIFFSNVS_CONFIG ()不会唤醒外部 SPI 闪存。

    实际上、根据 MX25R8035F 数据表的第8章、仅当 CS 线路被置为有效时、闪存才处于激活模式、而在运行 SPIFFSNVS_CONFIG 时不会发生这种情况。

    我希望这对您有所帮助。

    此致、

    Arthur

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

    尊敬的 Arthur R:

    我同意你的意见。 我正在处理一个我没有生成的代码。 通过调用 Board_initHook(),在板初始化 SPI 外部闪存上发生的情况将被置于关断模式。 之后我们调用 SPIFFSNVS_CONFIG(),没有错误返回。 我们似乎在毫无问题地使用 SPIFFS。 如果我们没有唤醒 SPI 外部闪存、那么我们可能只是在 RAM 中创建和使用文件系统、而不是将其保存在 SPI 外部闪存中。

    -kel