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.

[参考译文] TMS320C6678:使用 SPI 访问 NVSRAM 时出现问题

Guru**** 2609285 points
Other Parts Discussed in Thread: TMS320C6678

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/583615/tms320c6678-issue-with-accessing-nvsram-using-spi

器件型号:TMS320C6678

尊敬的先生/女士:

我们有 TMS320c6678定制板、在该定制板上、我们通过 SPI 接口使用具有相同 DSP 的 NVSRAM (CY14V101Q3)。 我们能够通过 SI 线路正确发送数据(通过探测同一条线路进行确认)。 但无法读取。我们尝试了 SCK 的所有值(尝试350K、1MHz 至20MHz)。 是否可以尽快为上述问题建议任何解决方案?

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

    我已将此内容转发给硬件专家。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Noufal、您好!
    您能否提供一些有关您观察到的行为的附加信息? 您说您可以发送数据、但不能读取数据。 当您尝试读取存储器时、数据是否出现在 SO 行上? 如果存在数据、您是否在 c6678的 SPI 部分的内部缓冲器中看到任何数据?
    此致、
    Bill
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、先生、  

    我们没有在这条线上观察到任何数据。

    我们尝试读取状态寄存器。 我们将按如下方式发送命令、

    发送 WR_EN 命令--我们可以看到该数据通过 SI 线路。

    2.发送用于读取状态寄存器的命令--  我们可以看到这些数据通过 SI 线路。

    然后读回 RX 缓冲区、但我们没有得到任何值。 预期值为0x02、但我们始终得到0x00。

    我们还观察到、在发送前两条命令时、我们在 SCK 线路上看到每个命令有8个时钟脉冲。 之后没有看到时钟。 但是、为了接收、我们还需要8个时钟脉冲(总共24个脉冲)。

    我们尝试使用霍尔东 CS 线进行24个脉冲。 但我们仅观察到16个脉冲。

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

    Noufal、您好!

    这听起来不像是硬件问题、而是 C6678中 SPI 的配置问题。 我将联系软件支持团队并向他们提出您的问题、但让我提出几个建议。

    1) 1)您使用的存储器的工作方式与 C6678 EVM 上的 SPI 存储器的工作方式相同。 您是否将代码与 EVM 提供的代码进行了比较?

    2) 2)我认为您缺少上述序列中的一个步骤。  

    • 在 CSHOLD 位=0时发出 WR_EN 命令。 这应将 CS 设置为低电平、输出命令时钟并将 CS 设置为高电平。
    • 使用 CSHOLD 位=1发出读取状态命令。 这应将 CS 设置为低电平、时钟输出命令的8个位。 之后 CS 应保持低电平。
    • 在 CSHOLD 位=0时发出一个假8位写入。 这应该为存储器将忽略的数据输出线上的八个位计时。 如果存储器正确接收到读取状态命令、它将使用每个时钟脉冲驱动状态位。 CS 将在访问结束时变为高电平。
    • 读取接收缓冲区以获取状态。  

    请告诉我这是否会改变行为。  

    此致、

    Bill

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

    "使用 CSHOLD 位=1发出读取状态命令。 这应将 CS 设置为低电平、时钟输出命令的8个位。 之后 CS 应保持低电平。"
    为了使 CS 变为低电平、我们应该将 CSHOLD 位设置为0、对吧? 正如您在第1点中所说的。

    请再次澄清这一点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、先生、

    还有一个疑问、

    "1.您使用的存储器的运行方式与 C6678 EVM 上的 SPI 存储器的运行方式相同。 您是否将代码与 EVM 提供的代码进行了比较?"

    您能告诉我提供示例代码的路径吗???
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、先生、

    我们需要对以下几点进行澄清。
    NVSRAM 芯片要求在 c6678的单个 SPI 事务中发送40位数据以进行读取/写入。 根据"SPRUGP2A"、最大字符长度为16位。 那么,这个 c6678的 SPI 控制器如何与 NVSRAM 通信?
    2、如何通过 DSP 控制 SCLK?
    a:为了在设置 WR_EN 位的情况下读取 NVSRAM 的状态寄存器、我们必须先传递 WR_EN 操作码、然后再传递读取状态寄存器操作码。 因此、我们总共需要24个时钟脉冲(WR_EN 操作码为8个、读取状态寄存器为16个)。 但是、当观察到时、我们只能看到16个 SCLK 脉冲。 因此、对于接收状态寄存器内容、我们不再观察任何8个 SCLK 脉冲。

    请帮助我们解决上述问题。

    PS:请查找 NVSRAM 数据表@ www.cypress.com/.../download
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、先生、

    我们有以下问题
    1. CAN c6678与 nvsram 通信以进行读/写、 由于 c6678 SPI 的最大字符长度为16,我们需要将48位数据发送到 nvsram 进行单次写入操作[ 8->WE_EN 操作码+8->WRITE 操作码+24->地址+8->Data ]。
    2.如何在 c6678的 SPI 控制器中控制 SCLK。
    a:为了读取状态寄存器、我们必须发送 WE_EN 操作码+读取状态寄存器操作码+虚拟写入数据、因此我们需要连续24个 SCLK 脉冲。 但在探测时、我们只看到16个 SCLK 脉冲。 那么如何从 c6678获取24个连续时钟脉冲。
    我们正在引用文档"sprugp2a"。

    PS:请找到 nvsram 数据表 www.cypress.com/.../download 的链接
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Noufal、您好!
    我已联系软件支持团队获取有关这方面的其他帮助、但我想补充一些有关 SPI 操作的要点。
    1) 1)传输的长度可高达16位、CSHOLD 允许传输在 CS 保持低电平的情况下结束。 要支持长于16位的传输、您必须将传输分成16位或更少的组、并在组之间设置 CSHOLD、以便 CS 在访问之间不会变为高电平。
    2) 2)每当 SCLK 切换时、读取移位寄存器始终计时。 要创建捕获读取值的时钟、必须执行写入操作。 将读取操作码写入存储器将指示它将一个值驱动到数据输入行中、并写入8位虚拟值以创建存储器驱动到数据输入行中读取值所需的时钟。
    此致、
    Bill