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.

[参考译文] CCS/CC2650:cc2650 Launchpad

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

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/578853/ccs-cc2650-cc2650-launchpad

器件型号:CC2650

工具/软件:Code Composer Studio

您好!

我要扩展 Zero 项目并希望它使用板上的闪存。

我使用的是 ExtFlash.h API。

我的代码如下所示:

静态 bool ExtFlash_init (void)
{
if (!ExtFlash_open()){
返回 false;
}
ExtFlashInfo_t* extFalshInfo = ExtFlash_info();
log_info3 ("打开的 extflash 设备(大小:%d、dev id:%d、manf id:%d)"、extFalshInfo->devicesize、extFalshInfo->DevID、 extFalshInfo->manfId);
返回 true;
}

静态空 ExtFlash_testForRead (void)
{
uint8_t buffer[11]={0};
if (!ExtFlash_read (0、sizeof (buffer)- 1、buffer)){
log_error0 ("读取失败!");
返回;
}
}

静态空 ProjectZero_init (void)
{
if (!ExtFlash_init()){
LOG_ERR0 ("初始化 ExtFlash 时出错");
Task_exit();
}
Log_info0 ("Extflash initialized");

ExtFlash_testForRead ();

/*所有其他项目零初始化代码*/
} 

问题是、一旦我运行 ExtFlash_Read 函数、我就会卡住、应用程序不会继续...

此外、我在 ExtFlash_Read 函数前后不会获取任何 UART 日志(我想这是因为刷写内容、如何手动刷写?)

提前感谢。

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

    确保为外部闪存使用正确的 SPI CS、SCLK、MOSI 和 MISO 引脚定义。

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

    我正在使用 ExtFlash.c 文件中的配置:

    静态 PIN_Config BoardFlashPinTable[]=
    {
    Board_SPI_FLASH_CS | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MIN、/*外部闪存芯片选择*
    
    PIN_TERMINATE
    };
    
    bool ExtFlash_open (void)
    {
    bool f;
    
    hFlashPin = PIN_OPEN (&pinState、BoardFlashPinTable);
    
    if (hFlashPin ==空)
    {
    返回 false;
    }
    
    /*确保 SPI 可用*/
    f = SPI_OPEN (SPI_BIT_RATE);
    
    如果(f)
    {
    /*将部件置于待机模式*/
    f = extFlashPowerStandby ();
    
    如果(f)
    {
    /*验证制造商和设备 ID */
    f = extFlashVerifyPart();
    }
    
    如果(!f)
    {
    ExtFlash_Close();
    }
    }
    
    返回 f;
    }
    

    但实际上、ExtFlash_open 有效、它在 SPICC26XXDMA.c 中的 ExtFlash_Read 时卡住:

    bool SPICC26XXDMA_transfer (SPI_Handle handle、SPI_Transaction *事务)
    {
    //许多代码
    //此处! 停留在信标挂起上。。。
    if (!semaphore_pend (semaphore_handle (&(object->transferComplete))、object->transferTimeout)){
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否要检查闪存 CS、SCLK、MOSI 和 MISO 引脚是否映射到代码中的正确 IDIO?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我真的不知道如何检查这个...

    在项目零代码中:

    /*********
    *** CC2650_LAUNCHXL.h
    //*
    
    离散输入*/
    #define Board_BTN1 ioID_13
    #define Board_BTN2 ioID_14
    
    /* UART 板*/
    #define Board_UART_RX ioID_2 /* RXD */
    #define Board_UART_TX ioID_3. /* TXD */
    #define Board_UART_CTS ioID_19 /* CTS */
    #define Board_UART_RTS ioID_18 /* RTS */
    
    /* SPI 板*/
    #define Board_SPI0_MISO ioID_8. /* RF1.20 */
    #define Board_SPI0_MOSI ioID_9. /* RF1.18 */
    #define Board_SPI0_CLK ioID_10 /* RF1.16 */
    #define Board_SPI0_CSn PIN_Unassigned
    #define Board_SPI1_MISO PIN_Unassigned
    #define Board_SPI1_MOSI PIN_Unassigned
    #define Board_SPI1_CLK PIN_Unassigned
    #define Board_SPI1_CSn PIN_Unassigned
    
    /* I2C */
    #define Board_I2C0_SCL0 ioID_4
    #define Board_I2C0_SDA0 ioID_5
    
    /* SPI */
    #define Board_SPI_FLASH_CS ioID_20
    #define Board_FLASH_CS_ON 0
    #define Board_FLASH_OFF 1
    
    
    /******
    *** ExtFlash.c ****
    /
    
    静态 PIN_Config BoardFlashPinTable[]=
    {
    Board_SPI_FLASH_CS | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MIN、/*外部闪存芯片选择*
    
    PIN_TERMINATE
    };
    
    /*********
    *** CC2650_LAUNCHXL.c *****
    /
    
    const PIN_Config BoardGpioInitTable[]={
    
    Board_RLED | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、 /* LED 最初关闭 *
    Board_GLED | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、 /* LED 最初关闭 *
    Board_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_迟滞、 /*按钮为低电平有效 *
    Board_BTN2 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_迟滞、 /*按钮为低电平有效 *
    BOARD_SPI_FLASH_CS | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MIN、/*外部闪存芯片选择*
    BOART_UART_RX | PIN_INPUT_EN | PIN_PUL拉、 /*通过调试器反向通道的 UART RX */
    Board_UART_TX | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull、 /*通过调试器反向通道的 UART TX */
    BOARD_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLUDOWN、 /* SPI 主器件输出-从器件输入*/
    BOARD_SPI0_MISO | PIN_INPUT_EN | PIN_PUL拉、 /* SPI 主器件输入-从器件输出*/
    BOARD_SPI0_CLK | PIN_INPUT_EN | PIN_PUL拉、 /* SPI 时钟*/
    
    PIN_TERMINATE
    };
    

    我真的无能为力... 这些宏的正确值是什么?

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

    您的 SPI CS、SCLK、MOSI 和 MISO 定义没有问题。 尝试从 BoardGpioInitTable[]中删除以下三行。

    BOARD_SPI0_MOSI | PIN_INPUT_EN | PIN_PUL拉 电阻、/* SPI 主器件输出-从器件输入*

    BOARD_SPI0_MISO | PIN_INPUT_EN | PIN_PULLUP、/* SPI 主器件输入-从器件输出*

    Board_SPI0_CLK | PIN_INPUT_EN | PIN_PULLUP、/* SPI 时钟*

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我尝试删除它们、但它不会改变行为。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否使用 LAUNCHXL-CC2650测试此外部闪存读取/写入?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、正如我说过的、我正在尝试使用 ExtFlash 扩展项目零代码。 因此、在项目零任务中、我首先要做的是测试闪存的读取功能。

    我使用 CC2650 Launchpad 板进行了测试、具有调试模式和不具有调试模式、在这两种情况下、它都会卡在前面提到的线路上。

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

    我在我的 LAUNCHXL-CC2650上测试类似的东西、效果很好。 我附加了我的代码、您可以将其复制到您的\ProjectZeroApp_CC2650LAUNCHXL\Application 中以进行测试。

    e2e.ti.com/.../5074.Application.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的参与。
    请注意、在 ext_flash.c 中、您使用 GPIOPinWrite 函数、该函数未在我的中声明 ,我将其更改为 GPIO_writeDio,希望它可以正常工作:)

    感谢您的帮助我非常感激、如果您发现我的代码有什么问题(可能是因为我使用了 ExtFlash API、而不是 ext_flash...) 如果您能告诉我、我会很高兴。

    P.S. 此 API 是否有 ExtFlash_info 等函数?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我尝试稍微尝试一下、但请注意、当我在读取和写入函数之间切换时、rbuffer 仍然只包含0x00、而不是0x12345678!
    查看 extFlashWrite 函数、它实际上不会失败(返回代码始终为0)、因此我无法判断是否写入了0x12345678。
    我觉得这个代码不起作用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在我的 LAUNCHXL-CC2650上运行代码、我很确定代码运行正常。 您是否使用我附加的 ext_flash.c? 如果您看一下 extFlashWrite 函数、它可能会返回 true 或 false。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    extFlashWrtie 确实返回 true 或 false、但如果我们查看 extFlashWrite、则会看到实际写入由 bspSpiWrite 完成、如果写入失败、则返回非零 值、但 bspSpiWrite 函数始终返回0!

    请在 extFlashRead 和 extFlashWrite 调用之间切换位置、并检查 rbuffer 是否包含 wbuffer 值。 我的 rbuffer 仍然只包含空字节...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果看一下我的示例代码、我会在初始化时将 rbuffer 设置为0x0。

    INT8_t rbuffer[4]={0x0、0x0、0x0、0x0};

    在我调用"if (!extFlashRead (0、4、rbuffer)){...}"之前、我可以看到"rbuffer[4]={0x0、0x0、0x0、0x0、0x0、0x0}" 在我调用"if (!extFlashRead (0、4、rbuffer))}"后、rbuffer 变为"{0x12、0x34、0x56、0x78}"。 我确信代码工作正常。