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.

[参考译文] TMS320F28377D:如何映射和使用外部 SRAM 存储器地址?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/565720/tms320f28377d-how-to-map-external-sram-memory-address-and-use-it

器件型号:TMS320F28377D

您好!

我使用的是28377D,并想与外部 SRAM ( ISSI IS61WV25616Axx/Bxx、256k*16)进行 简单测试。 我读取了示例项目(emif1_16bit_asram_cpu01)并了解相关寄存器设置。 但是我没有看到地址的任何解释、在本示例中、地址从0x100000开始、大小为0x8000。 由于外部器件上没有具体的信息、我想知道这些数字是由构成的、也不是什么意思。 如何根据具体情况确定自己项目的地址和大小? 我已经完成了相关寄存器的设置、我还需要做什么、如 cmd 文件?

谢谢!

Yi

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

    您好、Zhang、

    地址0x100000是 CS2地址空间。 对该地址进行的任何访问都将发送到通过 CS2连接的外部器件。 每个器件都连接到特定的芯片选择信号(在本例中为 CS2)、这就是它的寻址方式。

    您的用例是什么? 您是否计划在运行时期间将数据存储在外部器件和访问或其他用例中?

    此致、

    Vivek Singh

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

    感谢您的及时答复。 我现在正在使用 CS4、并且希望对外部 SRAM 执行简单的写入和读取测试、以确保其正常工作、就像在示例项目中所做的那样。 将来、SRAM 将用作我们项目的额外存储器空间、但现在我只是为板做测试计划。 那么、在我的例子中、我可以使用什么地址、还有其他什么需要更改的 cmd 文件吗?

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

    另一个问题是读/写使能。 以举例说明:此处是参考手册所说的"设置周期开始时、EM1CS[4:2]会下降以启用外部器件"。 由于它是作为 EM1CS4的 GPIO 引脚功能、因此我们更改其值以启用外部器件的频率是多少、每次与器件通信时启用然后禁用还是仅更改一次? 读取启用和写入启用是定期和手动启用还是仅启用一次? 我对此感到困惑、因为在我的项目中、CPU 似乎没有很好地与 SRAM 通信、我不知道如何观察这些地址中的值。

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

    您好、Zhang、

    CS4的地址为0x380000。 器件 数据表中的"6.3.3 EMIF 芯片选择存储器映射"一节对此进行了介绍。 示例您正在引用与 CS2相关的程序寄存器、但您正在使用 CS4、因此您需要对与 CS4相关的 EMIF 寄存器进行编程。

    读/写使能也是 EMIF 引脚、由 EMIF IP 驱动(需要配置多路复用器以选择它们作为 EMIF)。 用户无需担心切换这些引脚。

    此致、

    Vivek Singh

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

    Vivek、

    我为 EMIF 功能编程了 CS4相关寄存器和配置了相关 GPIO 引脚。 因此、我们不需要更改芯片使能和读取/写入使能引脚的值、对吧? 但是、现在我使用了类似的读/写程序作为示例、除了对 CS4进行一些小改动之外、它不能很好地工作。 我是否可以通过任何方式访问写入这些地址的值或调试错误的内容?

    我还对该函数有疑问。 由于 SRAM 设置为16位、写入32位值是否正常、例如:0x01234567?

    附件是供您参考的程序。

    谢谢、

    Yi

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

    您好!

    [引述]我也对这个函数有疑问。 由于 SRAM 设置为16位、写入32位值是否正常、例如:0x01234567? [/报价]

    是的、没关系。

    代码中 start_addr 的值是什么?

    Vivek Singh

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

    您好!

    我调用了如下函数

    MemErr = SRAM_Test (start、size);

    uint32 start = 0x00380000; // SRAM 的起始地址、CS4 space

    uint32 size = 0x80; // SRAM 大小、0x10000=64k

    但写入似乎不成功、因为返回值始终为1、这意味着写入值不等于读取值。 但我没有弄清楚什么是错误的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否在 CCS 中打开存储器浏览器窗口、并尝试直接从0x380000地址写入、而不是代码、然后查看会发生什么情况?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我检查了内存浏览器、在这些地址写入了值、但仍然返回错误。 我想知道你直接在这些地址写什么意思。

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

    很抱歉、所附图片是错误的、这是我提到的真实图片、与示例类似、但仍然不起作用。

    谢谢。

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

    您好!

    此外、我只是尝试在地址上写入单个32/16位值并进行读取以检查。 这一次返回0意味着没有错误。 我想知道循环的写/读操作是否有问题。 您能给出一些提示吗? 我真的很感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请在 return (1)代码上设置断点、并检查 XMEM_ps (地址)和 mem_rds 和 mem_wds 的值。 这将告诉您发生故障的地址以及读取和写入数据的差异。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我可以设置断点、但无法添加显示为未知的表达式。 我应该"运行"还是使用"步越"? 我在调试方面不太好、很抱歉这些愚蠢的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这些必须是局部变量、因此除非 CPU 在函数内停止、否则您将无法看到它们。 设置断点后、运行代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我设置断点并运行、然后它显示如下。 "MemErr"更改为1、指示错误、但我无法观察这些地址中的变量值或数据。 是否有方法可以查看发生了什么情况?

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

    您好!

    我将这些变量更改为全局变量以观察值、并且程序在每次增加0x11111111时在0x00380002处失败。 但奇怪的是、每次增加0x1时、程序结果是正常的。  增加0x11111111似乎会导致超限或其他情况、但它仅发生在读取值循环而不是写入值循环、因为它可以正确写入所有地址。 您能不能就发生的情况给出任何提示? 我真的很困惑。 以下两种捕获是两种情况、第一种是良好的、第二种是失败的。

    谢谢、

    Yi

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

    我尝试了几个不同的增加数、第8位和第4位似乎有问题。 由于错误总是在这些位需要增加1时发生、有时是因为低位已满。 我尝试增大0x01110111、下面的捕捉显示了发生的情况。 我想知道存储逻辑是否不是那么简单、我需要更加注意一些设置、或者 SRAM 芯片有问题... 我对此感到困惑。 希望您能给出一些提示。 非常感谢。

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

    我想您是指第13位(D12)。 对吧?

    请检查引脚多路复用设置以确保此引脚配置为 EMIF 引脚。 这应该还可以,但只需再次检查。

    我怀疑在连接 SRAM 时电路板上存在一些问题。 对电路板上的这个特定引脚进行连接检查。

    此致、

    Vivek Singh

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

    非常感谢您的建议。 这是我提到的 D12。 我尝试通过每次增加0x20002000来避免使用该数据引脚、现在可以了。 至少这可以证明 SRAM 正在与 DSP 通信、对吧? 我仍然需要检查引脚 D12、该引脚似乎也连接到了另一个器件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Zhang、

    [引用] 我尝试通过每次增加0x20002000来避免使用该数据引脚、现在可以了。 至少这可以证明 SRAM 正在与 DSP 通信、对吧? [/报价]

    没错。 与板载 D12类似的问题、并解决应该解决该问题的问题。

    此致、

    Vivek Singh

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

    您好、Singh、

    我发现了 D12的问题、但不知道这是如何影响 EMIF 函数的。 D12 (GPIO72)也用作引导模式的引脚、连接如下所示。 目前,我恐怕我们不能改变这种联系。 但是、我想知道这种冲突是如何发生的、因为除了在引导模式下的硬件连接之外、我们没有为 GPIO72设置执行任何操作。 您能给出一些提示吗?

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

    在这里进一步讨论并 解决了这一问题。