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.

[参考译文] CC2651R3:无法初始化闪存并验证闪存信息

Guru**** 2387830 points
Other Parts Discussed in Thread: CC2651R3, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1158795/cc2651r3-not-able-to-initialize-the-flash-and-also-verify-the-flash-info

器件型号:CC2651R3
Thread 中讨论的其他器件: SysConfig

大家好、

我使用的是具有 BLE SDK 5.40的 CC2651R3 MCU。 使用的外部闪存为 W25Q16JV。

在我们的项目中、我们将外部闪存用于 OTA。  

目前我正在尝试验证外部闪存的工作情况、因此使用了可用的驱动程序文件 ExtFlash.c 和 ExtFlash.h 我尝试调用已经可用的函数、如下所示:

 flashSuccessess = ExtFlash_open();
 ExtFlashInfo_t * flashInfo = ExtFlash_info();
 
但 ExtFlash 没有初始化,当我调试时,我了解 ExtFlash_readInfo()读取的是0xFF,而不是生产 ID 和设备 ID。
 
我是否可以知道原因是什么?
谢谢。
注意:我还提出了 TI 支持案例、案例编号为 CS1301296
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    ExtFlash.c 和 ExtFlash.h 文件已经使用某些外部闪存器件进行了写入和测试、在这种情况下使用的特定闪存看起来不是列表的一部分(请参阅 ExtFlash.c 中的 flashInfo[])。

    我建议使用逻辑分析仪、并将闪存接收到的信号与其数据表中所述的信号进行比较、以确认这一点。 请使用实际的逻辑分析仪(而不是示波器)、以便您轻松解读 SPI 信号。

    我希望这将有所帮助、

    此致、

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

    感谢 Clement 的即时响应。

    是的、我明白了。 我们使用16Mbit Windbond 闪存。 在这里、当我写入和读取使用 Salae 逻辑分析仪获取的闪存信息(根据 ExtFlash.c)时、我附加读取和写入信号。

    写入-  

    const uint8_t wbuf[]={BLS_CODE_MDID、0xFF、0xFF、0x00};

    extFlashSelect();

    int ret = SPI_WRITE (wbuf、sizeof (wbuf));

    阅读-   

    RET = SPI_READ (infoBuf、sizeof (infoBuf));

    CS 和 CLK 线在 PCB 上分接。 MOSI 和 MISO 线路只是连接到不同的引脚(用于测试)、而不是实际接入 PCB。 因此、请忽略 MISO 线路(不应获取任何数据)。

    请您说明这是否是预期行为,“在完成写操作之前,CS 如何拉高(如图1所示)? "

    根据我的理解并基于窗口闪存数据表、这是不正确的。

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

    写入4字节(0x90、0xFF、0xFF、0x00)-- (采样率增加到8Ms/s)。 MOSI 和 MISO 未连接。

    读取(制造商和器件 ID)- (采样率增加至8MS/s)。 MOSI 和 MISO 未连接。

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

    您好!

    感谢您分享这些结果。

    我建议在所有信号连接到您正在驱动的器件的情况下运行测试-否则波形将被改变。 您可以查看 我们的调试指南 以了解更多信息。

    同时、我还查看了 W25Q16JV 闪存的数据表。

    -"SPI 总线运行模式0 (0、0)和3 (1、1)受支持。" =>看起来正确(SPI_POL0_PHA0)

    -"Instructions are initiated with the Falling EDGE of Chip Select (/CS)(指令由芯片选择(/CS)的下降沿启动)"。 =>在您的图上看起来是正确的

    -查看§9.3.8"Read Manufacturer / Device ID (90h)"部分、我发现与您发送的命令之间存在细微的不一致。 根据文档、命令应为(0x90、0x00、0x00、0x00)-我同意、这不是§9.1.2中提到的

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="370266" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1158795/cc2651r3-not-able-to-initialize-the-flash-and-also-verify-the-flash-info/4358048 #4358048">查看§9.3.8"读取制造商/设备 ID (90h)"部分、我看到与您要发送的命令之间存在细微的不一致。 根据 doc、命令应为(0x90、0x00、0x00、0x00)-我同意、这不是§9.1.2 中提到的内容。

    我认为这应该是可以的、因为它被提到的是虚拟字节、而不是专门的0x90、0x00、0x00、0x00。 对吧?

    但我尝试使用命令 0x90、0x00、0x00、0x00、仍然读取0xFF、0xFF (2字节)作为制造商/器件 ID。

    另一件事是 fyi,我使用\\ti\simplelink_cc13xx_cc26xx_sdk_5_40_00_40\sources\ti\con\extflash 中的 ExtFlash.c 文件。 这是 用于测试接口和芯片是否正常工作的正确起始文件吗?

    注-我们使用外部闪存进行 OAD。 因此、在开始使用 OAD 之前、我们需要验证 SPI 接口是否正常工作。

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

    您好!

    您可以使用 spimaster 示例( \examples\rtos\CC26X2R1_LAUNCHXL\drivers\spimaster)、以降低复杂性(和开销)。 但我不希望有太多差异。

    为了进一步解决这个问题、我建议您收集所有信号正确连接到 W25Q16JV 闪存的波形、并将这些信号发送给支持此部件的团队。  

    感谢您的理解。

    此致、

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

    如有疑问、请查找所有信号(SCLK、CS、MISO、MOSI)的波形:

    请找到为读取制造商/器件 ID 而发送的指令、但在读取 MISO 行提供0xFF 而不是实际数据时。

    闪存写入:

    FFlash 读取:

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

    您好!

    感谢您的分享。

    您是否看到在"MISO "行上发生了任何活动? (此处看起来 MISO 线路始终为"高")。

    目前、我怀疑硬件问题可能会实际发生。 我的意思是、从软件的观点来看、我们无法修复太多- SPI 接收0xFF 并报告0xFF、因此从这个角度来看、一切都是"正常工作"的。

    我建议的后续步骤如下:

    -验证 MISO 线路是否可以由外部闪存正确驱动。 一种方法是尝试向闪存发送其他命令、并查看线路是否切换。

    -如果前面的操作不成功,请考虑执行硬件检查。 对我来说、最高效的方法是获得 W25Q16JV 闪存支持团队的意见。 您还可以请求 TI 进行设计审核(请 参阅 https://www.ti.com/tool/SIMPLELINK-2-4GHZ-DESIGN-REVIEWS)。

    我希望这将有所帮助。

    我现在正在关闭此主题、因为问题可能不在软件级别。 如果需要其他支持、请考虑打开新主题。

    此致、

    Clement

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

    您好 Clement、

    我已经尝试了 SDk5.40中的 bim_oad_offchip no-RTOS 示例。  

    修改了 bsp.h 以根据我们的硬件配置引脚。

    执行了以下操作并正常工作:

    if (extFlashOpen()){

    extFlashErase (0、sizeof (buffer));
    extFlashRead (100、sizeof (buffer)、buffer);
    extFlashWrite (0、sizeof (init_data)、init_data);

    extFlashRead (0、sizeof (buffer)、buffer);

    我们能够擦除、读取和写入。 因此、我现在不怀疑我的硬件设计。  

    我的项目基于 RTOS、当我使用 RTOS 示例时、SPI 没有响应。 我是否知道我的行为是错误的?

    提前感谢。

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

    您好!

    感谢您分享这一附加要素。

    假设外部闪存在特定条件下工作、我们可以找出工作情况与非工作情况之间的差异。

    -您能否验证 CC2651R3发送的信号在这两种情况下是相同还是略有不同?

    -您能否检查两种情况下的 SPI 配置是否相同?

    -您能否检查在北区情况下是否能够读取制造商/设备 ID?

    此致、

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

     

    [报价 userid="370266" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1158795/cc2651r3-not-able-to-initialize-the-flash-and-also-verify-the-flash-info/4370008 #4370008"]您能否检查在北区情况下您是否能够读取制造商/设备 ID?[/quot]

    是的、我能够读取制造商/器件 ID。

    [报价 userid="370266" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1158795/cc2651r3-not-able-to-initialize-the-flash-and-also-verify-the-flash-info/4370008 #4370008"]您能否检查两种情况下的 SPI 配置是否相同?

    //板外部闪存定义
    #define BSP_IOID_FLASH_CS IOID_17       -> IOCPinTypeGpioOutput (BSP_IOID_FLASH_CS);


    #define BSP_SPI_MOSI IOID_8
    #define BSP_SPI_MISO IOID_9
    #define BSP_SPI_CLK_FLASH IOID_16

    MOSI、MISO、CLK                -> ROM_IOCPinTypeSsiMaster (BLS_SPI_base、BSP_SPI_MISOBSP_SPI_MOSI、IOID_Unused // CSn *、clkPin);

    非 RTOS 示例中的配置如上所示。 在 bsp.h 文件中、我只更改了引脚编号。 我不知道如何在内部配置它。

    [引用 userid="370266" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1158795/cc2651r3-not-able-to-initialize-the-flash-and-also-verify-the-flash-info/4370008 #4370008"]您能否验证 CC2651R3发送的信号在这两种情况下是相同还是略有不同?

    请在下面找到 Writea 和 Read Manufacture ID 以及 SlaveSelect/ChipSelect 线路被完全拉至低电平、直到两个操作结束。

    写入90h、后跟 FFh、FFh、00h (虚拟字节)以读取制造商/器件 ID:

    读取制造商/器件 ID:

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

    您好!

    请您具体说明您在前一封邮件中分享的跟踪是从工作中还是从非工作中获取的? 与您之前分享的迹线相比、我在 CS 线路上看到了差异、但同时、我仍然看到制造商/器件 ID 值读取为0xFF。

    同时、我还为您回顾了 SPI 的配置。 为此、我从 ext_flash.c (noRTOS)和 ExtFlash.c (RTOS)开始。

    -两种配置均使用相同的比特率(4000000)

    -两种配置使用相同的 SPI 模式(SPI 模式极性0相位0)

    -两种配置使用相同的数据大小(8)

    -两种配置都使用相同的模式(主器件)

    -唯一的区别是 CS 线路的处理。 对于 noRTOS 代码、CS 线路被驱动为 GPIO、即基本上在第一次传输前降低、之后设置为高电平。 在 RTOS 代码上、CS 线路由 SPI 硬件处理、即有可能在字节之间将其设置为高电平。

    最后、重复一遍、我建议查看 W25Q16JV 闪存数据表和/或联系支持此部件的团队、以查看 CS 线路的行为是否会导致错误的值传输。
    或者、您可能希望尝试模仿通过 noRTOS 代码观察到的 CS 的行为。 一个非常简单的测试可以是、基本上将 CC2651R3提供的 CS 信号路由到一个未使用的引脚、并且基本上将 W25Q16JV 闪存的 CS 引脚接地。

    我希望这将有所帮助、

    此致、

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

    您好 Clement、

    感谢 详细解释。

    1。  

    [引用 userid="370266" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1158795/cc2651r3-not-able-to-initialize-the-flash-and-also-verify-the-flash-info/4371907 #4371907(2009)请您指定您在前一封邮件中共享的跟踪是从工作中还是从非工作中获取?

       由于我能够读取制造商/器件 ID、因此迹线来自工作案例。 我还想知道 MISO 线路为什么仍然显示为0xFF。

    2.你是对的。 区别在于 CS 线路、正如我已经提到过的、"CS 线路在开始运行之前被拉至低电平、并一直保持低电平       字节阵列(全部4个字节- 0x90、0xFF、0xFF、0x00)被写入闪存"、这是预期的值。  

       但是、当使用 RTOS 代码时、在写入每个字节(例如写入0x90)后、CS 线路被拉至高电平、这是不可预料的。

    3.我将联系 Winbond 团队。

    4.感谢您提供的模拟选项,同时我也尝试了。

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

    您好!

    我将等待您的反馈。 请随时向我们发布!

    此致、

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

    我们只需将配置未使用的引脚连接到 CS 线路、然后将闪存 CS 引脚接地。

    当我尝试模仿上述内容时、闪存不会脱离忙状态来执行进一步的操作。

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

    您好 Clement、

    我将 DIO17 (片选引脚)配置为未使用的 GPIO 进行测试、并将 SPI CS 配置为其他 GPIO。 我可以观察到与无 RTOS 示例相同的结果。 能够读取/写入。

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

    您好!

    [引用 userid="318303" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1158795/cc2651r3-not-able-to-initialize-the-flash-and-also-verify-the-flash-info/4372601 #4372601"]I 将 DIO17 (芯片选择引脚)配置为未使用的 GPIO 进行测试、并将 SPI CS 配置为其他 GPIO。 我可以观察到与无 RTOS 示例相同的结果。 能够读取/写入。

    很棒! 您可能已经找到了问题的根本原因(即、 W25Q16JV 闪存未按预期驱动 SPI CS 线路)。

    最简单的前进路径似乎是将 SPI 驱动程序重新配置为使用"三引脚"模式(应可使用 SysConfig 执行)。

    然后、应考虑以下选项之一来驱动 CS 线路。

    -选项1:基本上将线路接地-优点:不使用 CC2651R3的引脚|缺点:只能连接一个 SPI 器件

    -选项2:使用 GPIO 驱动 CS 线路。 根据您的要求、您可以考虑以下方法之一:

    1. 基本上始终将线路驱动为低电平-优点:易于实施和较低的额外闪存消耗
    2. 当 SPI 模块打开时将线路驱动为低电平-优点:仍然很容易实现并且额外的闪存消耗很低
    3. 执行 SPI 操作时将线路驱动为低电平-优点:最佳选择是连接多个 SPI 器件|缺点:比其他建议略复杂+可能会出现一些计时问题

    我希望这将有所帮助、

    此致、