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.

[参考译文] 编译器/TM4C1294NCPDT:读取 SPI 闪存 mem、读取其 id>

Guru**** 2562120 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/867980/compiler-tm4c1294ncpdt-read-spi-flash-mmem-reading-its-id

器件型号:TM4C1294NCPDT

工具/软件:TI C/C++编译器

你(们)好

根据 SPI 闪存制造商的说法

读取制造商/器件 ID (90h)
 该指令通过将/CS 引脚驱动为低电平并将指令代码“90h”转换为24位地址(A23-A0) 000000h 来启动。 之后、Winbond (EFH)的制造商 ID 和器件 ID 在 CLK 的下降沿移出、最高有效位(MSB)在前、如图39所示。 制造商和器件标识表中列出了 W25Q64JV 的器件 ID 值。 通过将/CS 驱动为高电平来完成该指令。

基本而言,我如何 使用 SPI_TRANSFERT(*spiHandle,&masterTransaction)执行此序列

我的交易计数= 4

 WRITE_BUFFER[0]的第一个字节= 0x90;

我的 read_buffer 和 write buffer 为64字节、全部初始化为0。

根据闪存制造商、我应该得到2个字节。

如何写入4个字节、但只读2个字节?

根据制造商规范,我应该得到第一个字节0xEF,

如果 I d 仅为4字节 计数和{0x90、0、0、0}的 SPI_TRANSFD;

返回的全部为0。

如果我要 针对预期的2个字节执行第二个 SPI_trancefer 、我的系统会在第二个 SPI 传输中崩溃

如何使用 SPI 传输 API 调用在 SPI 总线上执行此命令。
谢谢。

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

    简而言之、您执行的是6字节的 SPI 传输。 您传输的内容是0x90、0x00、0x00、0x00虚拟、虚拟。 (虚拟是任何东西、您不在乎。) 传输后接收缓冲区中的内容是虚拟、虚拟、虚拟、虚拟、0xEF、 0x16。 您的软件需要知道实际数据将是接收缓冲区中的第5个字节和第6个字节。 我建议您使用逻辑分析仪或数字示波器查看 SSI 引脚、以验证您是否具有正确的格式和芯片选择时序。

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

    您好!

    强烈建议使用示波器或逻辑分析仪。    也就是说、"24个地址位为0"的要求会使您的"Scope/L.a."读操作复杂化。   (即没有可观察的数据位!)

    为了增强示波器捕获的"易识别性和易用性"、建议您[最初仅用于 SPI 数据测试目的](暂时)将"0x00替换为(可立即识别)"0xAA 或0x55"、后者会随 SPI 时钟切换每个数据位。   确实-这不会恢复您的设备 ID -但  "重要的是确保您的数据(两者)存在且正确呈现!"    

    一旦您确信 SPI 格式"正确"-然后您可以显示指定的'0x90、0x00、0x00、0x00、0x00、 虚拟,虚拟。”   (6个字节)  确保那些被选为"虚拟"的字节不会与"任何/所有"SPI 闪存命令或关键值重叠-同样、我们公司的首选是"不采用0x00"、因为它证明了(经常)"不可识别!"   (因为这种情况太常见了!)   

    使用'0x00'播种您的 MCU 缓冲器也可能需要考虑。'    替换为"激发灵感/可识别的独特价值"(或值)-通常"更好地证明/确认成功(MCU 初始化然后闪存器件写入)-两者都非常"充分利用您的优势..."

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

    尊敬的 Bob:

    感谢您的回复、

    我所做的是:

    我用0xff 填充接收到的缓冲区;

    我确实写入了6个字节 、我的第一个字节是0x90、其余为0;

    执行 SPI_TRANSFER 后、接收缓冲区的前6个字节为0、其余为0xff。

    除了连接示波器以查看正在发生的情况外,我还有其他选项吗?

    现在、我没有在 PCB 上放置引脚来连接示波器。

    谢谢

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

    [引用 user="Sergey uskach"]除了连接范围以查看正在发生的情况外,我还有其他任何选项?

    存储器芯片'CS'和 MCU 'Fss'信号的管理(对齐)可能被证明不正确。    MCU 的'Fss'输出可通过(不同的) GPIO 引脚控制进行替换-使 MCU 能够"完美"匹配存储器芯片的'CS'要求...   (如果存储器器件"请求"、则必须小心注意、在整个6字节 SPI 事务中、其"CS"引脚应保持恒定电平。)

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

    尊敬的 Bob:

    我能够使用示波器验证它是否正确。

    如果没有示波器、我还可以尝试其他什么?

    Sergey

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

    如果没有示波器、您可以查看所编程的数据格式是否适用于您选择的 EEPROM。 除此之外、您还需要查看所有四个信号、即 SSICLK、SSITX、SSIRX 和 SSIFss。 如果 SSICLK、SSITX 和 SSIFss 正确、但 SSIRX 上没有显示任何内容、则问题出在 EEPROM 侧、而不是 TM4C。  

    如果您无法从定制板轻松获取示波器图片、则可以尝试在 EK-TM4C129XL launchpad 上运行代码(如果有)。 当然、当未连接到 EEPROM 时、您将无法获得正确的响应、但您应该能够获得与 EEPROM 规范进行比较的示波器或逻辑分析仪图片。