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.

[参考译文] LAUNCHXL-CC2650:如何在以下条件下使用外部闪存("简单 BLE 外设"示例)

Guru**** 2560390 points
Other Parts Discussed in Thread: LAUNCHXL-CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1123093/launchxl-cc2650-how-to-use-external-flash-memory-in-simple-ble-peripheral-example

器件型号:LAUNCHXL-CC2650

您好!

我使用 的是 LAUNCHXL-CC2650版本1.3.0

BLE SDK 2_02_07_06

CCS7.4

编译器 TI v5.2.6

我想将大数据存储在外部闪存中。(数据大约为150KB)。

我的主要目标是将外部闪存函数添加到简单的外设项目中 、因为在本示例中、我已根据项目要求进行了更改。

我指    的是简单外设项目示例中间件文件夹中的 ExtFlash.c 和 ExtFlash.h 文件。

bool ExtFlash_open(void)
{

    bool f;

    hFlashPin = PIN_open(&pinState, BoardFlashPinTable);

    if (hFlashPin == NULL)
    {
        return false;
    }


返回 false。

请告诉我为什么返回 False?

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

    您好!

    我建议参考 SDK 中提供的 BIM 项目、了解如何与外部闪存进行交互。 此示例能够通过 SPI 对外部闪存进行写入/读取、因此我认为通过此示例的源代码查找对于实现所需的闪存读取/写入功能非常有帮助。

    此致、

    1月

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

    你(们)好、Jan  

    我正在尝试来自 extFlash.c 文件的函数。

    我  

    CONST PIN_Config BoardGpioInitTable[]提到了 SPI 引脚。

    当我对这些行进行评论时、

    hFlashpin 现在返回 true。

    但控制不会产生  

    extFlashPowerStandby(),

    它会在其中存根  

    静态 int spi_write (const uint8_t * buf、size_t len)

    功能。

    这是我谦逊的要求。请帮我解决这个问题

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

    您好!

    我希望 extFlashOpen()看起来像下面的函数:

    bool extFlashOpen(void)
    {
        bool f;
    
        bspSpiOpen(SPI_BIT_RATE, BSP_SPI_CLK_FLASH);
    
        /* GPIO pin configuration */
        IOCPinTypeGpioOutput(BSP_IOID_FLASH_CS);
    
        /* Default output to clear chip select */
        extFlashDeselect();
    
        /* Put the part is standby mode */
        f = extFlashPowerStandby();
    
        if (f)
        {
            f = extFlashVerifyPart();
        }
    
        if (!f)
        {
            extFlashClose();
        }
    
        return f;
    }

    我在 SDK 中的 bim_extflash 项目中找到了该函数。 您能否验证使用该函数是否会使该函数返回成功?

    此致、

    1月

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

    你(们)好、Jan

    感谢你的答复。

    我看到了 bim_extflash 代码。

    对代码进行了一些更改

    我看到我可以在"bim_extflash"工程中读取、擦除和写入外部闪存。(附加的图像作为参考)

    但问题是、我希望此函数在"简单 BLE 外设"代码中工作。

    您能不能指导我如何添加所有这些文件并在 "Simple BLE Peripheral" 代码中运行?

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

    您好!

    如果您将修改后的 bim 示例中存在的确切逻辑添加到 simple_peripheral 示例中、您是否仍然会遇到错误或意外行为? 如果是、您能否共享相关函数的错误或返回代码?

    此致、

    1月

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

    您好、Jan、

    我在 include 选项和 #include "ext_flash.h"中包含了"C:\xxxx\xxxxx\workspace_v7\Simple BLE 外设 modified_app\ExternalFlash"路径

    在 main.c 中

    我的所有错误都消失了。但它仍然不起作用

    请提供指导

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

    您好、Jan、

    当我使用单步执行进行调试时、我知道了这一点

    控制在以下代码片段中显示的函数中停止

      /* SPI power */
      ROM_PRCMPeripheralRunEnable(PRCM_PERIPH_SSI0);
     

     

    /* See bsp_spi.h file for description */
    void bspSpiOpen(uint32_t bitRate, uint32_t clkPin)
    {
    //#define BOOT_LOADER
    #ifdef BOOT_LOADER
      /* GPIO power && SPI power domain */
      PRCMPowerDomainOn(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL);
      while (PRCMPowerDomainStatus(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL)
             != PRCM_DOMAIN_POWER_ON);
    
      /* GPIO power */
      PRCMPeripheralRunEnable(PRCM_PERIPH_GPIO);
      PRCMLoadSet();
      while (!PRCMLoadGet());
    #endif
    
      /* SPI power */
      ROM_PRCMPeripheralRunEnable(PRCM_PERIPH_SSI0);
      PRCMLoadSet();
      while (!PRCMLoadGet());
    
      /* SPI configuration */
      SSIIntDisable(BLS_SPI_BASE, SSI_RXOR | SSI_RXFF | SSI_RXTO | SSI_TXFF);
      SSIIntClear(BLS_SPI_BASE, SSI_RXOR | SSI_RXTO);
      ROM_SSIConfigSetExpClk(BLS_SPI_BASE,
                             BLS_CPU_FREQ, /* CPU rate */
                             SSI_FRF_MOTO_MODE_0, /* frame format */
                             SSI_MODE_MASTER, /* mode */
                             bitRate, /* bit rate */
                             8); /* data size */
      ROM_IOCPinTypeSsiMaster(BLS_SPI_BASE, BSP_SPI_MISO, BSP_SPI_MOSI,
                              IOID_UNUSED /* csn */, clkPin);
      SSIEnable(BLS_SPI_BASE);
    
      {
        /* Get read of residual data from SSI port */
        uint32_t buf;
    
        while (SSIDataGetNonBlocking(BLS_SPI_BASE, &buf));
      }
    
    }

    我遇到"Cortex_M3_0 :断点管理器:启用此函数时出错:没有用于支持此作业的 AET 资源"。

     然后、我看到了一些位于灰色区域的代码部分。

    #ifdef BOOT_LOADER
      /* GPIO power && SPI power domain */
      PRCMPowerDomainOn(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL);
      while (PRCMPowerDomainStatus(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL)
             != PRCM_DOMAIN_POWER_ON);
    
      /* GPIO power */
      PRCMPeripheralRunEnable(PRCM_PERIPH_GPIO);
      PRCMLoadSet();
      while (!PRCMLoadGet());
    #endif

    然后、我定义了宏"#define BOOT_LOADer"

    之后、我的问题得到了解决。

    我使用10个字节进行了擦除、写入和读取操作测试。

    它现在正在工作。

    但我有疑问、我这么做是不是正确的?

    我应该  定义宏"#define boot_loader"、还是有其他更好的方法?

    请提供指导

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

    您好、Jan、

    非常感谢您为解决此问题提供的支持