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.

[参考译文] CCS/TMS320F2.8377万S:EMIF数据未正确复制到本地缓冲区

Guru**** 2489685 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/583632/ccs-tms320f28377s-emif-data-not-copied-correctly-to-a-local-buffer

部件号:TMS320F2.8377万S

工具/软件:Code Composer Studio

您好,

我们有一个带外部芯片的EMIF接口。 我目前正在用CCS调试它,但我看到以下行为:内存有正确的值,但一旦我得到了(使用简单的for,没有任何复杂的),我就会得到随机零。 例如,在内存窗口中,地址0x102A00,我看到以下序列(这是我所期望的)

0005 1F410080 0151 0501

但是,一旦我将这些值复制到应用程序层使用的缓冲区中,就会看到随机零。 例如,我可以阅读

0005 1F410000 0151 0501

0005 1F410000 0151 0000

我只是猜测,但是否存在并发问题? 如果是,如何确保在复制缓冲区时具有独占读取权限? 或者这是否与其他事情有关?

(编辑):

总结:

在CCS内存浏览器中,来自FPGA的数据看起来是正确的。
用于访问信息的函数使用for循环将数据从指定的RAM复制到另一个缓冲区(APP层)。
缓冲区最后有一个或两个单词被零损坏。 有时是一个,有时是两个。
逐步正确复制数据。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    将CCS存储器视图从16位更改为32位是否会更改正在读取的数据?

    您的代码读取的数据是16位值还是32位值(即指针类型是什么)?

    您是否尝试过逐步执行复制代码? 当您一步一步完成时,读数是否正确?

    什么是外部芯片? 是SRAM吗? FPGA? 它是否对芯片选择在连续访问之间取消断言有任何要求?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    指针为16位
    逐步执行代码会给我提供正确的值(但我看到,在一小部分时间内,内存浏览器中的所有零都发生了变化)
    外部芯片是FPGA。

    我将进行一些挖掘,以回答您的其余问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    听起来像是内存接口的计时问题... 如果可能,您应该尝试连接逻辑分析器,以便我们能够更好地了解问题并验证您的时间安排。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我会检查是否可以完成此操作并发布结果。

    除了去那里:是否有寄存器或某种东西可用于暂停DSP和外部芯片之间的通信? 或者在读取之前冻结内存? 或者,这可能是我与团队其他成员沟通的设计问题(例如:等待X寄存器有一些价值,停止通信,在此窗口中只读,重新启用通信)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Javier Alvarez 说:
    除了要去那里:是否有寄存器或某些东西可用于暂停DSP和外部芯片之间的通信?

    这或多或少是您单步执行代码时发生的情况。  如果外部设备需要暂停/延迟通信,则会有一个用于此目的的等待PIN。

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

    您是否尝试在异步配置寄存器中更改读取计时(特别是频闪灯计时)以查看是否有帮助?

    此致,

    Vivek Singh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉,我花了很长时间才看到这个线程,但我不是代码的所有者(只是一个用户)。

    最后,这个问题在于FPGA的配置方式:它处理通信,它是在接收开始时发出信号,而不是在接收完成时发出信号。 所以这种随机性是因为有时候我的节目会检查标志是否离接收开始太近。

    感谢您的支持。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的更新。 我很高兴这个问题得到解决。