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.

[参考译文] CC2642R:SPI 闪存文件系统

Guru**** 2595805 points
Other Parts Discussed in Thread: SYSCONFIG, CC2642R, LAUNCHXL-CC26X2R1

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1061726/cc2642r-spi-flash-memory-file-system

器件型号:CC2642R
主题中讨论的其他器件:SysConfigLAUNCHXL-CC26X2R1

你(们)好

对于 SPI 闪存、我需要知道文件访问的最大数量、例如1)可以打开文件的次数2)最大大小3)并行打开

您能帮我检查一下吗

相关信息

Divya

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

    您好、Divya、

    您是指 TI 驱动程序的 SPIFFSNVS 模块 、是否已评估 了 spiffsexternal 示例?  另一个很好的资源是 尖塔夫 吉特卜。  关于您的问题:

    1. 这可能取决于所使用的外部闪存器件允许的最大读取次数、数据表中应注明此值。
    2. Github 提到、超过128 MB 可能是一个坏主意。  NVS 外部 SPI 闪存模块的整数值不能超过53位。
    3. 默认情况下不支持此功能、需要 修改示例以在 SPI 上启用不同的从器件选择以及单独的 NVS 区域、但这应该是可行的。

    此致、
    Ryan

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

    你(们)好  

    感谢您的回复

    我们正在使用的闪存是"

    "MX25L6433FM2I-08G"

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

    是的、这个模块只支持 SPIFFSNVS

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

    该器   件与 MX25R8035F 非常相似、包括串行通信和 JEDEC 标准、该标准演示了 TI LaunchPad 上的 SPIFFSNVS 操作/示例。  主要区别在于闪存存储能力的提高、考虑到已提供的信息、这种提高应该是可以接受的。

    此致、
    Ryan

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

    你(们)好

    我们使用 spiexternal 代码和 nvsexternal 代码测试了 MX25L6433FM2I 该 SPI 闪存、并使用相同的配置数据集检查了读取、写入拓扑。

    同样、我们尝试使用具有 相同配置数据集但具有 SPI 外部代码的4mn Winbond 外部 SPI 闪存进行测试、它显示以下提到的错误日志、而对于 NVS 代码、它似乎可以正常工作

    请提供有关此方面的帮助

    错误日志  
    "正在安装文件系统...
    正在创建 spiffsFile...
    创建文件系统时出错"

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

    您好、Divya、

    打印日志指示 SPIFFS_OPEN 存在问题、因此您应进一步参考 SimpleLink MCU SDK 用户指南的 FatFS/SPIFFS 部分 和 FatFs 产品网页/SPIFFSGitHub 项目。 您可以尝试添加 \source\third_parti\spiff 文件直接插入您的项目中、以覆盖预构建库并进一步调试问题。  SPIFFSNVS.h TI 驱动程序 API 还会针对逻辑/物理块/页面大小发出警告、这些逻辑/物理块/页面大小应专门与 Winbond 器件匹配(由 spiffsexternal.c 文件进一步配置)。

    此致、
    Ryan

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

    您好、Ryan

    我理解  逻辑/物理块/页。谢谢

    是否有任何方法可以获取 nvsexternal 驱动程序部件中文件系统的当前偏移量
    在 SPIFFS 中、我看到有一个名为 TELL 的 API。您能不能在 NVS 中有什么可用的东西吗?

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

    您好、Divya、

    我不知道用于实现此目的的 SPI 闪存命令。  应通过 MCU 应用监控和控制电流偏移。

    此致、
    Ryan

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

    你(们)好  

    我们是否可以将数据附加到 NVS 外部驱动程序 I 中的文件中、e NVS_WRITE 是否会将写入到文件句柄中的数据附加到发生上一次写入的文件句柄中

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

    NVS 驱动程序可以覆盖外部闪存 器件上的同一位置、并且有可用的标志(NVS_WRITE_PRE_VERIFY 和  NVS_WRITE_POST_VERIFY)、以确保此过程正确完成。

    此致、
    Ryan

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

    是的、我也提到了这个标志
    但我需要将数据附加到文件系统中
    我需要将20小时的数据存储在闪存中

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

    您需要查阅第三方 FFS 资源以进一步了解这些功能。  NVS 驱动程序最初设计用于存储已为 OAD 无线传输的图像。  您可以实现的目标将取决于数据密度和最大设备存储规格。

    此致、
    Ryan

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

    Oo 好的、谢谢
    我将进一步检查该 FFS  

    您能确认外部尖顶是否会正确附加?

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

     如果在 SPIFFS_open 期间包含 SPIFFS_append 标志、则 SPIFFS_write 应能够向现有文件添加数据。

    此致、
    Ryan

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

    非常感谢

    您能解释一下如何为4MB 闪存的 spiff 选择逻辑页面大小和块大小、这是一种非常舒适的方法

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

    确保我们使用正确的逻辑块和页面大小。 因为我不是 spiffs_conifg 中的 gettig 错误。 那么、spiffs_open 不起作用的问题可能是什么

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

    以 LaunchPad 的 MX25R8035F 为例、  数据表中定义了256字节的 SPIFFS_logical_page_size 和4096字节的 SPIFFS_logical_block_size 和0x1000字节的 NVS sectorSize。  这使逻辑块大小成为逻辑页大小(4096/256 = 16)的整数倍、而 sectorSize (4096/4069 = 1)的整数倍。  这也涵盖 了 MX25R8035F 上可用的1MB 全部闪存数据 、因为  sectorSize*SPIFFS_logical_page_size = 4096*256 = 1、048、576字节。  唯一的限制是 SysConfig 在 NVS 驱动程序中设置的区域大小、默认为0x3000、因为该示例不需要所有可用的外部存储器来完成任务。

    此致、
    Ryan

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

    因此、逻辑上来说、这也适用于4MB 闪存
    bcz Launch Pad SPI 为8MB 闪存 rit?

    或  

    此配置正确
     SPIFFS_logical_block_size (2048)
    SPIFFS_logical_page_size (128)

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

    你(们)好

    我们尝试调试了探测 CS 引脚的问题。 在这种情况下,默认配置的 CS 为高电平。 读取时、根据协议、它应该是低电平、但当我们检查时、它不是低电平  

    请就此提供帮助

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

     MX25R8035F 为8 MB (兆位)或1 MB (兆字节)。  能否提供您所指 Winbond 设备的确切器件型号? CS 引脚由从器件选择 GPIO 实例下的 NVS SysConfig 设置初始化、除非  进行修改、否则其工作方式与 MX25R8035F 完全相同。  您可以比较每个器件的逻辑指令集、并观察是否有任何差异可以解释您遇到的问题。

    此致、
    Ryan

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

    我们指的是4MB Winbond 器件型号 W25Q32JV

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

    根据其数据表的比较、器件引脚分配、SPI 控制和页面/块/扇区大小看起来非常相似。  您是否根据 SysConfig (nvsexternal 工程也使用)连接了正确的从器件选择引脚?您观察 到的 CS 行为是否与 MX25R8035F 类似?  目的是找出操作差异。

    此致、
    Ryan

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

    是的,即使我们今天深入检查了,它似乎与  MX25R8035F 完全相同。
    我们仅建立了正确的连接,而且还使用代码中的 spio 引脚手动将 CS 引脚设置为低电平,在这种情况下,我们也无法找到 CS 变为低电平。

    只有不同的行为是仅 CS,其他行为则是相同的
    您能帮您解决这个问题吗?

    此外,当我们检查文件句柄的返回错误编号,它的-10001,在头文件中,它提到=>文件是完全错误
    您也可以确认这一点吗?

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

    您可能需要测试多 个 W25Q32JV 器件、并确保它们是新器件或闪存内容已完全擦除。  您还可以尝试联系 Winbond  或 spiff 开发人员。

    此致、
    Ryan

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

    好的

    与 Winbond 器件不同、我们现在还使用外部   MX25R8035F 1MB SPI 闪存进行了检查
    因此、它也无法正常工作  

    当 我们比较内部 SPI 闪存和外部 SPI 闪存配置时、可以看到以下差异
    区域大小在外部增加
    SPI 闪存配置中、我们可以看到选择了 launchpad SPI

    下面是我们的问题
    为什么区域大小会增加?
    2.为什么使用 Launchpad SPI 且有两个 SPI 配置可用?
    此外、我们还通过作为外部接口进行连接尝试了相同的 MX25R8035FZUIL0 SPI 闪存、但仍然无法读取/写入。 是否需要其他硬件要求?
    我们还尝试了 NVSexternal 而不是 spiffsexternal、我们可以在其中读取/写入 NVS external 和 spiffsexternal 之间的主要区别是什么?

    下面是 default_external_confile.c 文件

    /*
     *  ======== ti_drivers_config.c ========
     *  Configured TI-Drivers module definitions
     *
     *  DO NOT EDIT - This file is generated for the CC26X2R1_LAUNCHXL
     *  by the SysConfig tool.
     */
    
    #include <stddef.h>
    #include <stdint.h>
    
    #ifndef DeviceFamily_CC26X2
    #define DeviceFamily_CC26X2
    #endif
    
    #include <ti/devices/DeviceFamily.h>
    
    #include "ti_drivers_config.h"
    
    /*
     *  ============================= Display =============================
     */
    
    #include <ti/display/Display.h>
    #include <ti/display/DisplayUart.h>
    
    #define CONFIG_Display_COUNT 1
    
    #define Display_UARTBUFFERSIZE 1024
    static char displayUARTBuffer[Display_UARTBUFFERSIZE];
    
    DisplayUart_Object displayUartObject;
    
    const DisplayUart_HWAttrs displayUartHWAttrs = {
        .uartIdx      = CONFIG_UART_0,
        .baudRate     = 115200,
        .mutexTimeout = (unsigned int)(-1),
        .strBuf       = displayUARTBuffer,
        .strBufLen    = Display_UARTBUFFERSIZE
    };
    
    const Display_Config Display_config[CONFIG_Display_COUNT] = {
        /* CONFIG_Display_0 */
        /* XDS110 UART */
        {
            .fxnTablePtr = &DisplayUartMin_fxnTable,
            .object      = &displayUartObject,
            .hwAttrs     = &displayUartHWAttrs
        },
    };
    
    const uint_least8_t Display_count = CONFIG_Display_COUNT;
    
    /*
     *  =============================== DMA ===============================
     */
    
    #include <ti/drivers/dma/UDMACC26XX.h>
    #include <ti/devices/cc13x2_cc26x2/driverlib/udma.h>
    #include <ti/devices/cc13x2_cc26x2/inc/hw_memmap.h>
    
    UDMACC26XX_Object udmaCC26XXObject;
    
    const UDMACC26XX_HWAttrs udmaCC26XXHWAttrs = {
        .baseAddr        = UDMA0_BASE,
        .powerMngrId     = PowerCC26XX_PERIPH_UDMA,
        .intNum          = INT_DMA_ERR,
        .intPriority     = (~0)
    };
    
    const UDMACC26XX_Config UDMACC26XX_config[1] = {
        {
            .object         = &udmaCC26XXObject,
            .hwAttrs        = &udmaCC26XXHWAttrs,
        },
    };
    
    /*
     *  =============================== GPIO ===============================
     */
    
    #include <ti/drivers/GPIO.h>
    #include <ti/drivers/gpio/GPIOCC26XX.h>
    
    #define CONFIG_GPIO_COUNT 1
    
    /*
     *  ======== gpioPinConfigs ========
     *  Array of Pin configurations
     */
    GPIO_PinConfig gpioPinConfigs[] = {
        /* SPI Flash Slave Select GPIO Instance */
        GPIOCC26XX_DIO_04 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_MED | GPIO_CFG_OUT_HIGH,
    };
    
    /*
     *  ======== gpioCallbackFunctions ========
     *  Array of callback function pointers
     *
     *  NOTE: Unused callback entries can be omitted from the callbacks array to
     *  reduce memory usage by enabling callback table optimization
     *  (GPIO.optimizeCallbackTableSize = true)
     */
    GPIO_CallbackFxn gpioCallbackFunctions[] = {
        /* SPI Flash Slave Select GPIO Instance */
        NULL,
    };
    
    const uint_least8_t CONFIG_GPIO_0_CONST = CONFIG_GPIO_0;
    
    /*
     *  ======== GPIOCC26XX_config ========
     */
    const GPIOCC26XX_Config GPIOCC26XX_config = {
        .pinConfigs = (GPIO_PinConfig *)gpioPinConfigs,
        .callbacks = (GPIO_CallbackFxn *)gpioCallbackFunctions,
        .numberOfPinConfigs = 1,
        .numberOfCallbacks = 1,
        .intPriority = (~0)
    };
    
    /*
     *  =============================== NVS ===============================
     */
    
    #include <ti/drivers/NVS.h>
    #include <ti/drivers/nvs/NVSSPI25X.h>
    
    /*
     *  NVSSPI25X External NVS flash region definitions
     */
    
    NVSSPI25X_Object nvsSPI25XObjects[1];
    
    static const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = {
        /* CONFIG_NVSEXTERNAL */
        {
            .regionBaseOffset = 0x0,
            .regionSize = 0x1000,
            .sectorSize = 0x1000,
            .verifyBuf = NULL,
            .verifyBufSize = 0,
            /* NVS opens SPI */
            .spiHandle = NULL,
            /* SPI driver index */
            .spiIndex = CONFIG_SPI_0,
            .spiBitRate = 4000000,
            /* GPIO driver pin index */
            .spiCsnGpioIndex = CONFIG_GPIO_0,
            .statusPollDelayUs = 100
        },
    };
    
    #define CONFIG_NVS_COUNT 1
    
    const NVS_Config NVS_config[CONFIG_NVS_COUNT] = {
        /* CONFIG_NVSEXTERNAL */
        {
            .fxnTablePtr = &NVSSPI25X_fxnTable,
            .object = &nvsSPI25XObjects[0],
            .hwAttrs = &nvsSPI25XHWAttrs[0],
        },
    };
    
    const uint_least8_t CONFIG_NVSEXTERNAL_CONST = CONFIG_NVSEXTERNAL;
    const uint_least8_t NVS_count = CONFIG_NVS_COUNT;
    
    /*
     *  =============================== PIN ===============================
     */
    #include <ti/drivers/PIN.h>
    #include <ti/drivers/pin/PINCC26XX.h>
    
    #define CONFIG_PIN_COUNT 6
    
    const PIN_Config BoardGpioInitTable[CONFIG_PIN_COUNT + 1] = {
        /* Parent Signal: CONFIG_SPI_0 SCLK, (DIO11) */
        CONFIG_PIN_3 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
        /* Parent Signal: CONFIG_SPI_0 MISO, (DIO1) */
        CONFIG_PIN_4 | PIN_INPUT_EN | PIN_NOPULL | PIN_IRQ_DIS,
        /* Parent Signal: CONFIG_SPI_0 MOSI, (DIO0) */
        CONFIG_PIN_5 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
        /* XDS110 UART, Parent Signal: CONFIG_UART_0 TX, (DIO3) */
        CONFIG_PIN_0 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
        /* XDS110 UART, Parent Signal: CONFIG_UART_0 RX, (DIO2) */
        CONFIG_PIN_1 | PIN_INPUT_EN | PIN_PULLDOWN | PIN_IRQ_DIS,
        /* Parent Signal: CONFIG_GPIO_0 GPIO Pin, (DIO4) */
        CONFIG_PIN_2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MED,
    
        PIN_TERMINATE
    };
    
    const PINCC26XX_HWAttrs PINCC26XX_hwAttrs = {
        .intPriority = (~0),
        .swiPriority = 0
    };
    
    /*
     *  =============================== Power ===============================
     */
    #include <ti/drivers/Power.h>
    #include <ti/drivers/power/PowerCC26X2.h>
    #include "ti_drivers_config.h"
    
    extern void PowerCC26XX_standbyPolicy(void);
    extern bool PowerCC26XX_calibrate(unsigned int);
    
    const PowerCC26X2_Config PowerCC26X2_config = {
        .enablePolicy             = true,
        .policyInitFxn            = NULL,
        .policyFxn                = PowerCC26XX_standbyPolicy,
        .calibrateFxn             = PowerCC26XX_calibrate,
        .calibrateRCOSC_LF        = true,
        .calibrateRCOSC_HF        = true,
        .enableTCXOFxn            = NULL
    };
    
    /*
     *  =============================== SPI DMA ===============================
     */
    #include <ti/drivers/SPI.h>
    #include <ti/drivers/spi/SPICC26X2DMA.h>
    
    #define CONFIG_SPI_COUNT 1
    
    /*
     *  ======== spiCC26X2DMAObjects ========
     */
    SPICC26X2DMA_Object spiCC26X2DMAObjects[CONFIG_SPI_COUNT];
    
    /*
     *  ======== spiCC26X2DMAHWAttrs ========
     */
    const SPICC26X2DMA_HWAttrs spiCC26X2DMAHWAttrs[CONFIG_SPI_COUNT] = {
        /* CONFIG_SPI_0 */
        {
            .baseAddr = SSI0_BASE,
            .intNum = INT_SSI0_COMB,
            .intPriority = (~0),
            .swiPriority = 0,
            .powerMngrId = PowerCC26XX_PERIPH_SSI0,
            .defaultTxBufValue = ~0,
            .rxChannelBitMask = 1<<UDMA_CHAN_SSI0_RX,
            .txChannelBitMask = 1<<UDMA_CHAN_SSI0_TX,
            .minDmaTransferSize = 10,
            .mosiPin = IOID_0,
            .misoPin = IOID_1,
            .clkPin  = IOID_11,
            .csnPin  = PIN_UNASSIGNED
        },
    };
    
    /*
     *  ======== SPI_config ========
     */
    const SPI_Config SPI_config[CONFIG_SPI_COUNT] = {
        /* CONFIG_SPI_0 */
        {
            .fxnTablePtr = &SPICC26X2DMA_fxnTable,
            .object = &spiCC26X2DMAObjects[CONFIG_SPI_0],
            .hwAttrs = &spiCC26X2DMAHWAttrs[CONFIG_SPI_0]
        },
    };
    
    const uint_least8_t CONFIG_SPI_0_CONST = CONFIG_SPI_0;
    const uint_least8_t SPI_count = CONFIG_SPI_COUNT;
    
    /*
     *  =============================== UART ===============================
     */
    
    #include <ti/drivers/UART.h>
    #include <ti/drivers/uart/UARTCC26XX.h>
    #include <ti/drivers/Power.h>
    #include <ti/drivers/power/PowerCC26X2.h>
    #include <ti/devices/cc13x2_cc26x2/inc/hw_memmap.h>
    #include <ti/devices/cc13x2_cc26x2/inc/hw_ints.h>
    
    #define CONFIG_UART_COUNT 1
    
    UARTCC26XX_Object uartCC26XXObjects[CONFIG_UART_COUNT];
    
    static unsigned char uartCC26XXRingBuffer0[32];
    
    static const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CONFIG_UART_COUNT] = {
      {
        .baseAddr           = UART1_BASE,
        .intNum             = INT_UART1_COMB,
        .intPriority        = (~0),
        .swiPriority        = 0,
        .powerMngrId        = PowerCC26X2_PERIPH_UART1,
        .ringBufPtr         = uartCC26XXRingBuffer0,
        .ringBufSize        = sizeof(uartCC26XXRingBuffer0),
        .rxPin              = IOID_2,
        .txPin              = IOID_3,
        .ctsPin             = PIN_UNASSIGNED,
        .rtsPin             = PIN_UNASSIGNED,
        .txIntFifoThr       = UARTCC26XX_FIFO_THRESHOLD_1_8,
        .rxIntFifoThr       = UARTCC26XX_FIFO_THRESHOLD_4_8,
        .errorFxn           = NULL
      },
    };
    
    const UART_Config UART_config[CONFIG_UART_COUNT] = {
        {   /* CONFIG_UART_0 */
            .fxnTablePtr = &UARTCC26XX_fxnTable,
            .object      = &uartCC26XXObjects[CONFIG_UART_0],
            .hwAttrs     = &uartCC26XXHWAttrs[CONFIG_UART_0]
        },
    };
    
    const uint_least8_t CONFIG_UART_0_CONST = CONFIG_UART_0;
    const uint_least8_t UART_count = CONFIG_UART_COUNT;
    
    #include <stdbool.h>
    
    #include <ti/devices/cc13x2_cc26x2/driverlib/ioc.h>
    #include <ti/devices/cc13x2_cc26x2/driverlib/cpu.h>
    
    #include <ti/drivers/pin/PINCC26XX.h>
    
    /*
     *  ======== Board_sendExtFlashByte ========
     */
    void Board_sendExtFlashByte(PIN_Handle pinHandle, uint8_t byte)
    {
        uint8_t i;
    
        /* SPI Flash CS */
        PIN_setOutputValue(pinHandle, IOID_20, 0);
    
        for (i = 0; i < 8; i++) {
            PIN_setOutputValue(pinHandle, IOID_10, 0);  /* SPI Flash CLK */
    
            /* SPI Flash MOSI */
            PIN_setOutputValue(pinHandle, IOID_9, (byte >> (7 - i)) & 0x01);
            PIN_setOutputValue(pinHandle, IOID_10, 1);  /* SPI Flash CLK */
    
            /*
             * Waste a few cycles to keep the CLK high for at
             * least 45% of the period.
             * 3 cycles per loop: 8 loops @ 48 Mhz = 0.5 us.
             */
            CPUdelay(8);
        }
    
        PIN_setOutputValue(pinHandle, IOID_10, 0);  /* CLK */
        PIN_setOutputValue(pinHandle, IOID_20, 1);  /* CS */
    
        /*
         * Keep CS high at least 40 us
         * 3 cycles per loop: 700 loops @ 48 Mhz ~= 44 us
         */
        CPUdelay(700);
    }
    
    /*
     *  ======== Board_wakeUpExtFlash ========
     */
    void Board_wakeUpExtFlash(void)
    {
        PIN_Config extFlashPinTable[] = {
            /* SPI Flash CS */
            IOID_20 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL |
                    PIN_INPUT_DIS | PIN_DRVSTR_MED,
            PIN_TERMINATE
        };
        PIN_State extFlashPinState;
        PIN_Handle extFlashPinHandle = PIN_open(&extFlashPinState, extFlashPinTable);
    
        /*
         *  To wake up we need to toggle the chip select at
         *  least 20 ns and ten wait at least 35 us.
         */
    
        /* Toggle chip select for ~20ns to wake ext. flash */
        PIN_setOutputValue(extFlashPinHandle, IOID_20, 0);
        /* 3 cycles per loop: 1 loop @ 48 Mhz ~= 62 ns */
        CPUdelay(1);
        PIN_setOutputValue(extFlashPinHandle, IOID_20, 1);
        /* 3 cycles per loop: 560 loops @ 48 Mhz ~= 35 us */
        CPUdelay(560);
    
        PIN_close(extFlashPinHandle);
    }
    
    /*
     *  ======== Board_shutDownExtFlash ========
     */
    void Board_shutDownExtFlash(void)
    {
        /*
         *  To be sure we are putting the flash into sleep and not waking it,
         *  we first have to make a wake up call
         */
        Board_wakeUpExtFlash();
    
        PIN_Config extFlashPinTable[] = {
            /* SPI Flash CS*/
            IOID_20 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL |
                    PIN_INPUT_DIS | PIN_DRVSTR_MED,
            /* SPI Flash CLK */
            IOID_10 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL |
                    PIN_INPUT_DIS | PIN_DRVSTR_MED,
            /* SPI Flash MOSI */
            IOID_9 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL |
                    PIN_INPUT_DIS | PIN_DRVSTR_MED,
            /* SPI Flash MISO */
            IOID_8 | PIN_INPUT_EN | PIN_PULLDOWN,
            PIN_TERMINATE
        };
        PIN_State extFlashPinState;
        PIN_Handle extFlashPinHandle = PIN_open(&extFlashPinState, extFlashPinTable);
    
        uint8_t extFlashShutdown = 0xB9;
    
        Board_sendExtFlashByte(extFlashPinHandle, extFlashShutdown);
    
        PIN_close(extFlashPinHandle);
    }
    
    
    #include <ti/drivers/Board.h>
    
    /*
     *  ======== Board_initHook ========
     *  Perform any board-specific initialization needed at startup.  This
     *  function is declared weak to allow applications to override it if needed.
     */
    void __attribute__((weak)) Board_initHook(void)
    {
    }
    
    /*
     *  ======== Board_init ========
     *  Perform any initialization needed before using any board APIs
     */
    void Board_init(void)
    {
        /* ==== /ti/drivers/Power initialization ==== */
        Power_init();
    
        /* ==== /ti/devices/CCFGTemplate initialization ==== */
    
        /* ==== /ti/drivers/PIN initialization ==== */
        if (PIN_init(BoardGpioInitTable) != PIN_SUCCESS) {
            /* Error with PIN_init */
            while (1);
        }
    
        Board_shutDownExtFlash();
    
        Board_initHook();
    }
    
    


    下面是 default_internal_config.c 文件

    /*
     *  ======== ti_drivers_config.c ========
     *  Configured TI-Drivers module definitions
     *
     *  DO NOT EDIT - This file is generated for the CC26X2R1_LAUNCHXL
     *  by the SysConfig tool.
     */
    
    #include <stddef.h>
    #include <stdint.h>
    
    #ifndef DeviceFamily_CC26X2
    #define DeviceFamily_CC26X2
    #endif
    
    #include <ti/devices/DeviceFamily.h>
    
    #include "ti_drivers_config.h"
    
    /*
     *  ============================= Display =============================
     */
    
    #include <ti/display/Display.h>
    #include <ti/display/DisplayUart.h>
    
    #define CONFIG_Display_COUNT 1
    
    #define Display_UARTBUFFERSIZE 1024
    static char displayUARTBuffer[Display_UARTBUFFERSIZE];
    
    DisplayUart_Object displayUartObject;
    
    const DisplayUart_HWAttrs displayUartHWAttrs = {
        .uartIdx      = CONFIG_UART_0,
        .baudRate     = 115200,
        .mutexTimeout = (unsigned int)(-1),
        .strBuf       = displayUARTBuffer,
        .strBufLen    = Display_UARTBUFFERSIZE
    };
    
    const Display_Config Display_config[CONFIG_Display_COUNT] = {
        /* CONFIG_Display_0 */
        /* XDS110 UART */
        {
            .fxnTablePtr = &DisplayUartMin_fxnTable,
            .object      = &displayUartObject,
            .hwAttrs     = &displayUartHWAttrs
        },
    };
    
    const uint_least8_t Display_count = CONFIG_Display_COUNT;
    
    /*
     *  =============================== DMA ===============================
     */
    
    #include <ti/drivers/dma/UDMACC26XX.h>
    #include <ti/devices/cc13x2_cc26x2/driverlib/udma.h>
    #include <ti/devices/cc13x2_cc26x2/inc/hw_memmap.h>
    
    UDMACC26XX_Object udmaCC26XXObject;
    
    const UDMACC26XX_HWAttrs udmaCC26XXHWAttrs = {
        .baseAddr        = UDMA0_BASE,
        .powerMngrId     = PowerCC26XX_PERIPH_UDMA,
        .intNum          = INT_DMA_ERR,
        .intPriority     = (~0)
    };
    
    const UDMACC26XX_Config UDMACC26XX_config[1] = {
        {
            .object         = &udmaCC26XXObject,
            .hwAttrs        = &udmaCC26XXHWAttrs,
        },
    };
    
    /*
     *  =============================== GPIO ===============================
     */
    
    #include <ti/drivers/GPIO.h>
    #include <ti/drivers/gpio/GPIOCC26XX.h>
    
    #define CONFIG_GPIO_COUNT 1
    
    /*
     *  ======== gpioPinConfigs ========
     *  Array of Pin configurations
     */
    GPIO_PinConfig gpioPinConfigs[] = {
        /* SPI Flash Slave Select GPIO Instance */
        GPIOCC26XX_DIO_20 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_MED | GPIO_CFG_OUT_HIGH,
    };
    
    /*
     *  ======== gpioCallbackFunctions ========
     *  Array of callback function pointers
     *
     *  NOTE: Unused callback entries can be omitted from the callbacks array to
     *  reduce memory usage by enabling callback table optimization
     *  (GPIO.optimizeCallbackTableSize = true)
     */
    GPIO_CallbackFxn gpioCallbackFunctions[] = {
        /* SPI Flash Slave Select GPIO Instance */
        NULL,
    };
    
    const uint_least8_t CONFIG_GPIO_0_CONST = CONFIG_GPIO_0;
    
    /*
     *  ======== GPIOCC26XX_config ========
     */
    const GPIOCC26XX_Config GPIOCC26XX_config = {
        .pinConfigs = (GPIO_PinConfig *)gpioPinConfigs,
        .callbacks = (GPIO_CallbackFxn *)gpioCallbackFunctions,
        .numberOfPinConfigs = 1,
        .numberOfCallbacks = 1,
        .intPriority = (~0)
    };
    
    /*
     *  =============================== NVS ===============================
     */
    
    #include <ti/drivers/NVS.h>
    #include <ti/drivers/nvs/NVSSPI25X.h>
    
    /*
     *  NVSSPI25X External NVS flash region definitions
     */
    
    NVSSPI25X_Object nvsSPI25XObjects[1];
    
    static const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = {
        /* CONFIG_NVSEXTERNAL */
        {
            .regionBaseOffset = 0x0,
            .regionSize = 0x100000,
            .sectorSize = 0x1000,
            .verifyBuf = NULL,
            .verifyBufSize = 0,
            /* NVS opens SPI */
            .spiHandle = NULL,
            /* SPI driver index */
            .spiIndex = CONFIG_SPI_1,
            .spiBitRate = 4000000,
            /* GPIO driver pin index */
            .spiCsnGpioIndex = CONFIG_GPIO_0,
            .statusPollDelayUs = 100
        },
    };
    
    #define CONFIG_NVS_COUNT 1
    
    const NVS_Config NVS_config[CONFIG_NVS_COUNT] = {
        /* CONFIG_NVSEXTERNAL */
        {
            .fxnTablePtr = &NVSSPI25X_fxnTable,
            .object = &nvsSPI25XObjects[0],
            .hwAttrs = &nvsSPI25XHWAttrs[0],
        },
    };
    
    const uint_least8_t CONFIG_NVSEXTERNAL_CONST = CONFIG_NVSEXTERNAL;
    const uint_least8_t NVS_count = CONFIG_NVS_COUNT;
    
    /*
     *  =============================== PIN ===============================
     */
    #include <ti/drivers/PIN.h>
    #include <ti/drivers/pin/PINCC26XX.h>
    
    #define CONFIG_PIN_COUNT 9
    
    const PIN_Config BoardGpioInitTable[CONFIG_PIN_COUNT + 1] = {
        /* Parent Signal: CONFIG_SPI_0 SCLK, (DIO5) */
        CONFIG_PIN_3 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
        /* Parent Signal: CONFIG_SPI_0 MISO, (DIO27) */
        CONFIG_PIN_4 | PIN_INPUT_EN | PIN_NOPULL | PIN_IRQ_DIS,
        /* Parent Signal: CONFIG_SPI_0 MOSI, (DIO4) */
        CONFIG_PIN_5 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
        /* XDS110 UART, Parent Signal: CONFIG_UART_0 TX, (DIO3) */
        CONFIG_PIN_0 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
        /* XDS110 UART, Parent Signal: CONFIG_UART_0 RX, (DIO2) */
        CONFIG_PIN_1 | PIN_INPUT_EN | PIN_PULLDOWN | PIN_IRQ_DIS,
        /* MX25R8035F SPI Flash Slave Select, Parent Signal: CONFIG_GPIO_0 GPIO Pin, (DIO20) */
        CONFIG_PIN_2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MED,
        /* LaunchPad SPI Bus, Parent Signal: CONFIG_SPI_1 SCLK, (DIO10) */
        CONFIG_PIN_6 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
        /* LaunchPad SPI Bus, Parent Signal: CONFIG_SPI_1 MISO, (DIO8) */
        CONFIG_PIN_7 | PIN_INPUT_EN | PIN_NOPULL | PIN_IRQ_DIS,
        /* LaunchPad SPI Bus, Parent Signal: CONFIG_SPI_1 MOSI, (DIO9) */
        CONFIG_PIN_8 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
    
        PIN_TERMINATE
    };
    
    const PINCC26XX_HWAttrs PINCC26XX_hwAttrs = {
        .intPriority = (~0),
        .swiPriority = 0
    };
    
    /*
     *  =============================== Power ===============================
     */
    #include <ti/drivers/Power.h>
    #include <ti/drivers/power/PowerCC26X2.h>
    #include "ti_drivers_config.h"
    
    extern void PowerCC26XX_standbyPolicy(void);
    extern bool PowerCC26XX_calibrate(unsigned int);
    
    const PowerCC26X2_Config PowerCC26X2_config = {
        .enablePolicy             = true,
        .policyInitFxn            = NULL,
        .policyFxn                = PowerCC26XX_standbyPolicy,
        .calibrateFxn             = PowerCC26XX_calibrate,
        .calibrateRCOSC_LF        = true,
        .calibrateRCOSC_HF        = true,
        .enableTCXOFxn            = NULL
    };
    
    /*
     *  =============================== SPI DMA ===============================
     */
    #include <ti/drivers/SPI.h>
    #include <ti/drivers/spi/SPICC26X2DMA.h>
    
    #define CONFIG_SPI_COUNT 2
    
    /*
     *  ======== spiCC26X2DMAObjects ========
     */
    SPICC26X2DMA_Object spiCC26X2DMAObjects[CONFIG_SPI_COUNT];
    
    /*
     *  ======== spiCC26X2DMAHWAttrs ========
     */
    const SPICC26X2DMA_HWAttrs spiCC26X2DMAHWAttrs[CONFIG_SPI_COUNT] = {
        /* CONFIG_SPI_0 */
        {
            .baseAddr = SSI0_BASE,
            .intNum = INT_SSI0_COMB,
            .intPriority = (~0),
            .swiPriority = 0,
            .powerMngrId = PowerCC26XX_PERIPH_SSI0,
            .defaultTxBufValue = ~0,
            .rxChannelBitMask = 1<<UDMA_CHAN_SSI0_RX,
            .txChannelBitMask = 1<<UDMA_CHAN_SSI0_TX,
            .minDmaTransferSize = 10,
            .mosiPin = IOID_4,
            .misoPin = IOID_27,
            .clkPin  = IOID_5,
            .csnPin  = PIN_UNASSIGNED
        },
        /* CONFIG_SPI_1 */
        /* LaunchPad SPI Bus */
        {
            .baseAddr = SSI1_BASE,
            .intNum = INT_SSI1_COMB,
            .intPriority = (~0),
            .swiPriority = 0,
            .powerMngrId = PowerCC26XX_PERIPH_SSI1,
            .defaultTxBufValue = ~0,
            .rxChannelBitMask = 1<<UDMA_CHAN_SSI1_RX,
            .txChannelBitMask = 1<<UDMA_CHAN_SSI1_TX,
            .minDmaTransferSize = 10,
            .mosiPin = IOID_9,
            .misoPin = IOID_8,
            .clkPin  = IOID_10,
            .csnPin  = PIN_UNASSIGNED
        },
    };
    
    /*
     *  ======== SPI_config ========
     */
    const SPI_Config SPI_config[CONFIG_SPI_COUNT] = {
        /* CONFIG_SPI_0 */
        {
            .fxnTablePtr = &SPICC26X2DMA_fxnTable,
            .object = &spiCC26X2DMAObjects[CONFIG_SPI_0],
            .hwAttrs = &spiCC26X2DMAHWAttrs[CONFIG_SPI_0]
        },
        /* CONFIG_SPI_1 */
        /* LaunchPad SPI Bus */
        {
            .fxnTablePtr = &SPICC26X2DMA_fxnTable,
            .object = &spiCC26X2DMAObjects[CONFIG_SPI_1],
            .hwAttrs = &spiCC26X2DMAHWAttrs[CONFIG_SPI_1]
        },
    };
    
    const uint_least8_t CONFIG_SPI_0_CONST = CONFIG_SPI_0;
    const uint_least8_t CONFIG_SPI_1_CONST = CONFIG_SPI_1;
    const uint_least8_t SPI_count = CONFIG_SPI_COUNT;
    
    /*
     *  =============================== UART ===============================
     */
    
    #include <ti/drivers/UART.h>
    #include <ti/drivers/uart/UARTCC26XX.h>
    #include <ti/drivers/Power.h>
    #include <ti/drivers/power/PowerCC26X2.h>
    #include <ti/devices/cc13x2_cc26x2/inc/hw_memmap.h>
    #include <ti/devices/cc13x2_cc26x2/inc/hw_ints.h>
    
    #define CONFIG_UART_COUNT 1
    
    UARTCC26XX_Object uartCC26XXObjects[CONFIG_UART_COUNT];
    
    static unsigned char uartCC26XXRingBuffer0[32];
    
    static const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CONFIG_UART_COUNT] = {
      {
        .baseAddr           = UART1_BASE,
        .intNum             = INT_UART1_COMB,
        .intPriority        = (~0),
        .swiPriority        = 0,
        .powerMngrId        = PowerCC26X2_PERIPH_UART1,
        .ringBufPtr         = uartCC26XXRingBuffer0,
        .ringBufSize        = sizeof(uartCC26XXRingBuffer0),
        .rxPin              = IOID_2,
        .txPin              = IOID_3,
        .ctsPin             = PIN_UNASSIGNED,
        .rtsPin             = PIN_UNASSIGNED,
        .txIntFifoThr       = UARTCC26XX_FIFO_THRESHOLD_1_8,
        .rxIntFifoThr       = UARTCC26XX_FIFO_THRESHOLD_4_8,
        .errorFxn           = NULL
      },
    };
    
    const UART_Config UART_config[CONFIG_UART_COUNT] = {
        {   /* CONFIG_UART_0 */
            .fxnTablePtr = &UARTCC26XX_fxnTable,
            .object      = &uartCC26XXObjects[CONFIG_UART_0],
            .hwAttrs     = &uartCC26XXHWAttrs[CONFIG_UART_0]
        },
    };
    
    const uint_least8_t CONFIG_UART_0_CONST = CONFIG_UART_0;
    const uint_least8_t UART_count = CONFIG_UART_COUNT;
    
    #include <stdbool.h>
    
    #include <ti/devices/cc13x2_cc26x2/driverlib/ioc.h>
    #include <ti/devices/cc13x2_cc26x2/driverlib/cpu.h>
    
    #include <ti/drivers/pin/PINCC26XX.h>
    
    /*
     *  ======== Board_sendExtFlashByte ========
     */
    void Board_sendExtFlashByte(PIN_Handle pinHandle, uint8_t byte)
    {
        uint8_t i;
    
        /* SPI Flash CS */
        PIN_setOutputValue(pinHandle, IOID_20, 0);
    
        for (i = 0; i < 8; i++) {
            PIN_setOutputValue(pinHandle, IOID_10, 0);  /* SPI Flash CLK */
    
            /* SPI Flash MOSI */
            PIN_setOutputValue(pinHandle, IOID_9, (byte >> (7 - i)) & 0x01);
            PIN_setOutputValue(pinHandle, IOID_10, 1);  /* SPI Flash CLK */
    
            /*
             * Waste a few cycles to keep the CLK high for at
             * least 45% of the period.
             * 3 cycles per loop: 8 loops @ 48 Mhz = 0.5 us.
             */
            CPUdelay(8);
        }
    
        PIN_setOutputValue(pinHandle, IOID_10, 0);  /* CLK */
        PIN_setOutputValue(pinHandle, IOID_20, 1);  /* CS */
    
        /*
         * Keep CS high at least 40 us
         * 3 cycles per loop: 700 loops @ 48 Mhz ~= 44 us
         */
        CPUdelay(700);
    }
    
    /*
     *  ======== Board_wakeUpExtFlash ========
     */
    void Board_wakeUpExtFlash(void)
    {
        PIN_Config extFlashPinTable[] = {
            /* SPI Flash CS */
            IOID_20 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL |
                    PIN_INPUT_DIS | PIN_DRVSTR_MED,
            PIN_TERMINATE
        };
        PIN_State extFlashPinState;
        PIN_Handle extFlashPinHandle = PIN_open(&extFlashPinState, extFlashPinTable);
    
        /*
         *  To wake up we need to toggle the chip select at
         *  least 20 ns and ten wait at least 35 us.
         */
    
        /* Toggle chip select for ~20ns to wake ext. flash */
        PIN_setOutputValue(extFlashPinHandle, IOID_20, 0);
        /* 3 cycles per loop: 1 loop @ 48 Mhz ~= 62 ns */
        CPUdelay(1);
        PIN_setOutputValue(extFlashPinHandle, IOID_20, 1);
        /* 3 cycles per loop: 560 loops @ 48 Mhz ~= 35 us */
        CPUdelay(560);
    
        PIN_close(extFlashPinHandle);
    }
    
    /*
     *  ======== Board_shutDownExtFlash ========
     */
    void Board_shutDownExtFlash(void)
    {
        /*
         *  To be sure we are putting the flash into sleep and not waking it,
         *  we first have to make a wake up call
         */
        Board_wakeUpExtFlash();
    
        PIN_Config extFlashPinTable[] = {
            /* SPI Flash CS*/
            IOID_20 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL |
                    PIN_INPUT_DIS | PIN_DRVSTR_MED,
            /* SPI Flash CLK */
            IOID_10 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL |
                    PIN_INPUT_DIS | PIN_DRVSTR_MED,
            /* SPI Flash MOSI */
            IOID_9 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL |
                    PIN_INPUT_DIS | PIN_DRVSTR_MED,
            /* SPI Flash MISO */
            IOID_8 | PIN_INPUT_EN | PIN_PULLDOWN,
            PIN_TERMINATE
        };
        PIN_State extFlashPinState;
        PIN_Handle extFlashPinHandle = PIN_open(&extFlashPinState, extFlashPinTable);
    
        uint8_t extFlashShutdown = 0xB9;
    
        Board_sendExtFlashByte(extFlashPinHandle, extFlashShutdown);
    
        PIN_close(extFlashPinHandle);
    }
    
    
    #include <ti/drivers/Board.h>
    
    /*
     *  ======== Board_initHook ========
     *  Perform any board-specific initialization needed at startup.  This
     *  function is declared weak to allow applications to override it if needed.
     */
    void __attribute__((weak)) Board_initHook(void)
    {
    }
    
    /*
     *  ======== Board_init ========
     *  Perform any initialization needed before using any board APIs
     */
    void Board_init(void)
    {
        /* ==== /ti/drivers/Power initialization ==== */
        Power_init();
    
        /* ==== /ti/devices/CCFGTemplate initialization ==== */
    
        /* ==== /ti/drivers/PIN initialization ==== */
        if (PIN_init(BoardGpioInitTable) != PIN_SUCCESS) {
            /* Error with PIN_init */
            while (1);
        }
    
        Board_shutDownExtFlash();
    
        Board_initHook();
    }
    
    

    另请查看下图



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

    外部区域大小占用所有1MB 的 MX25R8035F SPI 闪存、CC2642R 内部不可用(共352KB)
    2.内部 NVS 配置不使用 SPI 配置,外部选项可以从器件上可用的两个 SPI 外设中选择一个。  默认外部示例使用可用的 LaunchPad SPI 配置来连接板载外部闪存器件。
    3.您使用的连接是否与 LAUNCHXL-CC26X2R1 设计文件相同?   对默认示例的 SysConfig 文件应用了哪些更改?
    FFS 使用非易失性存储(NVS)驱动程序作为接口来实现闪存文件系统。  任一默认示例的 NVS 实现似乎是相同的。

    请确保参考每个示例的自述文件、以了解有关其预期操作的更多信息。  您参考的是哪个 SimpleLink SDK 版本?  如果您能够使用   LAUNCHXL-CC26X2R1观察到问题、请分享可用于重新创建行为的步骤。

    此致、
    Ryan

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

    你(们)好

    我们已经从侧面检查了所有可能的方法。 板载闪存为 MX25L6433F 1MB、对我们来说工作正常、我们需要使用的 SPI 闪存为 Windond W25Q324MB JV 闪存、在安装时显示错误。  
    通过我们的集体讨论、我们确认 Winbond 设备没有问题
    我们需要您确认,当我们开始安装外部 SPI 闪存时,是否需要进行任何配置,或者在安装之前如何将新 SPI 闪存配置为文件系统?
    请就此提供帮助
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    只需确认一下  、MX25R8035F 和 MX25L6433F 的 nvsexternal 和 spiffsexternal 工作、以及 W25Q32JV 的 nvsexternal 工作吗?  因此、W25Q32JV 上只有外部尖峰发生故障?  请尝试将 Winbond 设备 ID 和大小添加到 source/ti/common/extflash/ExtFlash.c 文件中的 flashInfo 表中。  在该注释中、您是否有任何可以测试的 W25X40CL/W25X20CL 器件?  此时、您是否仍然注意到 CS 引脚不规则?  请提供您正在使用的 SDK 版本。

    此致、
    Ryan

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

    你(们)好

    是的、只有在尖顶时、它才会失败。 我们还看到了您所说的 extflash.c 文件、我们如何编译该 bcz、我们找不到任何方法来执行该操作。

    www.ti.com/.../SIMPLELINK-CC13X2-26X2-SDK

    我们仅使用此 SDK

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

    我错了,extflash.c 不参与非 OAD 项目,其中包括 spiffsexternal 项目。  SPIFFS 驱动程序应该已经检测到内存中不存在现有文件系统并返回 SPIFFS_ERR_NOT_A_FS、从而导致 spiffsexternal.c 使用 SPIFFS_format 格式化新文件系统。  您可以尝试调用 SPIFFS_UNmount、后跟 SPIFFS_format 和 SPIFFS_mount、以查看这是否会导致对现有行为进行任何更改。

    此致、
    Ryan

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

    是的、我们只是这样尝试。 BU 调用 unmount、后跟 format 和 Mount

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

    您能否确认您 已测试多  个 W25Q32JV 器件?  请 将所有源文件(即所有.c 和.h 文件)从 source\third_party\spiffs 直接复制到您的项目工作区(spiffsexternal.c 所在的位置)、以绕过预构建的 spiffs 库。  然后、您可以在 CCS 中单步调试 SPIFFS_mount 函数、以进一步确定失败的确切原因。  我还建议您在 CCS 工程属性中禁用 Arm 编译器优化。  我还在 SDK 用户指南中找到了更多 SPIFFS 信息

    此致、
    Ryan

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

    您好、Ryan  

    我们还将确认我们 还使用多个 W25Q32JV 器件进行了测试

    我们能够在 Winbond SPI 闪存  W25Q32JV 中找到问题的原因

    我们附加了代码段、失败的地方(仅限 spifs_check_res 函数)

    但是我们对它失败的原因以及代码部分的坏处没有任何了解

    这也是板载 SPI 闪存中不会发生故障的原因。

    请在此处提供帮助

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

    您好、Divya、

    很高兴您能找到错误的原因、很遗憾我没有第三方 SPIFFS 材料的相关经验。   spiffs_phys_rd 的结果似乎 不符合预期。  您可以将  W25Q32JV 的此函数结果 与内部 SPIFFS 和外部  MX25选项进行比较。  您可以从 spiffs_cache.c 调试 spiffs_phys_rd、以进一步确定可能出现的问题。

    此致、
    Ryan