Thread 中讨论的其他器件: SysConfig
大家好、
我使用的是具有 BLE SDK 5.40的 CC2651R3 MCU。 使用的外部闪存为 W25Q16JV。
在我们的项目中、我们将外部闪存用于 OTA。
目前我正在尝试验证外部闪存的工作情况、因此使用了可用的驱动程序文件 ExtFlash.c 和 ExtFlash.h 我尝试调用已经可用的函数、如下所示:
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.
大家好、
我使用的是具有 BLE SDK 5.40的 CC2651R3 MCU。 使用的外部闪存为 W25Q16JV。
在我们的项目中、我们将外部闪存用于 OTA。
目前我正在尝试验证外部闪存的工作情况、因此使用了可用的驱动程序文件 ExtFlash.c 和 ExtFlash.h 我尝试调用已经可用的函数、如下所示:
您好!
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所示)? "
根据我的理解并基于窗口闪存数据表、这是不正确的。
您好!
感谢您分享这些结果。
我建议在所有信号连接到您正在驱动的器件的情况下运行测试-否则波形将被改变。 您可以查看 我们的调试指南 以了解更多信息。
同时、我还查看了 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中提到的
此致、
我认为这应该是可以的、因为它被提到的是虚拟字节、而不是专门的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 接口是否正常工作。
您好!
感谢您的分享。
您是否看到在"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 没有响应。 我是否知道我的行为是错误的?
提前感谢。
[报价 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_MISO、BSP_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.感谢您提供的模拟选项,同时我也尝试了。
您好!
[引用 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 线路。 根据您的要求、您可以考虑以下方法之一:
我希望这将有所帮助、
此致、