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.

[参考译文] F28M36P63C2:无法在 EPI SDRAM 存储器中写入奇数存储器

Guru**** 2539330 points
Other Parts Discussed in Thread: TMDSHSECDOCK

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/727050/f28m36p63c2-cannot-write-odd-memory-in-epi-sdram-memory

器件型号:F28M36P63C2
主题中讨论的其他器件:TMDSHSECDOCK

尊敬的 Sirs:

根据 SPRUHE8D.pdf 数据表的表18-1、我们已将 SDRAM 添加到 EPI 中。 我们使用的 SDRAM 芯片是 IS42S16800F 128Mbit (8M x 16)。 我们将其放置在0x60000000的基地址。 我们在控制套件中使用了 SDRAM 软件示例。 当访问16位和32位数据大小时、它适用于偶数地址。 但是、我们无法在奇数地址写入8位数据。 下面是我们问题的调试输出示例:

将0写入地址60002000
将1写入地址60002001
将2写入地址60002002 
将3写入地址60002003
从地址60002000中读取0
从地址60002001中读取0
从地址60002002中读取2 
从地址60002003中读取2

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

    Drew、

    您是否更新了 EPISDRAMCFG 寄存器以匹配 SDRAM 配置?

    Tommy

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

    下面是我们的设置、它基于您在 EPI_SDRAM.C 中的示例 唯一的变化是 SDRAM 的大小、如下所示:

       //将时钟分频器设置为1 (2分频)
       EPIDividerSet (EPI0_BASE、1);

       //启用 SDRAM 模式
       EPIModeSet (EPI0_BASE、EPI_MODE_SDRAM);

       //系统时钟频率介于50-100MHz 之间
       禁用//睡眠模式。
       //刷新计数= 0x2EE (默认值)

       EPIConfigSDRAMSet (EPI0_BASE、(EPI_SDRAM_CORE_FREQ_50_100 | EPI_SDRAM_FULL_POWER | EPI_SDRAM_SIZE 128MBIT)、750); //之前为512 Mb、现在为128MBIT

       //外部 RAM 大小(用于设置正确的地址范围) 256MB
       //外部 RAM 地址= 0x60000000
       EPIAddressMapSet (EPI0_BASE、(EP_ADDR_RAM_SIZE = 16MB | EP_ADDR_RAM_BASE_6); //为256MB、我们的为16MB

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

    Drew、

    对我来说是可以的。

    您能否打开内存浏览器并手动插入 SDRAM 内容、以查看是否能够更新字节?

    另外、尝试使用解引用的指针地址*(char *) 0x600001通过"Expressions"窗口修改存储器内容

    如果上述两种访问方法起作用、则可能与代码/编译器有关。

    Tommy

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

    嗨、Tommy、

    我们运行了您建议的测试、测试工作正常。 也就是说、我们可以使用表达式窗口写入一个字节、并使用存储器浏览器读回存储器区域。 没有覆盖字节。 实际上、当我们使用 C 函数从 SDRAM 中读取数据时、数据将被正确回读。

    因此、问题似乎是使用编译的代码将字节写入 SDRAM。 这只是 SDRAM 区域的问题。 当我们使用芯片的板载 RAM 时、我们可以正确地写入和读取字节。

    我们现在该怎么办?

    再次感谢。

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

    在表达式窗口中工作的任何指针访问也应在代码中工作、以便您可以在程序中尝试。

    如果您必须使用数据结构、请分享用于写入数据的代码片段。 包含用于引用存储器的变量声明(例如、如果已在 SDRAM 空间中声明数组)。

    如果代码片段没有明显的结果、我们可能需要查看编译器生成的汇编代码、以查看是否创建了错误的指令。

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

    嗨、Tommy、

    我们一直在使用指针访问来测试 SDRAM。 下面是我们的代码片段:

    unsigned long ldr;

    char *地址 C;
    长值;

           addressc =(char *) ldr;
           *地址 C =(char)值;

    我们可以通过串行接口设置 lAddr 的值和值。 这对于处理器板载 RAM 来说是完美的。 我已隔离编译器为上述代码生成的相关汇编语言指令:

       .dwpsn   文件"../CmdMgr.c"、第729行、第9列、IS_stmt、ISA 1.
           LDR      A2、[SP、#16]        ;[DPU_V7M3_PIPE]|729|
           LDRB     A1、[SP、#28]        ;[DPU_V7M3_PIPE]|729|
           STRB     A1、[A2、#0]         ;[DPU_V7M3_PIPE]|729|

    我在执行这些指令时使用了调试器来查看寄存器、它们符合预期。 使用表达式和存储器浏览器可以正确访问字节。

    EPI 或处理器中是否有任何处理字节顺序的设置、或可能以任何方式影响这种情况? 我们的目标是从 SDRAM 中运行代码、因此我想这需要能够正常工作。

    我们被骗了。

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

    嗨、Tommy、

    我们有两个原型板、它们表现出相同的问题。 我们可以向您发送一个、以便测试这是否有助于解决此问题。 请告诉我们可以做些什么。

    谢谢

    Drew

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

    很抱歉、您在周四未收到回复。

    我的理解是否正确、即您在单步执行汇编代码时能够看到正确的字节访问?

    如果是这种情况、可能值得尝试降低系统速度、以查看是否存在破坏 SDRAM 指令的时序问题。 例如、将 PLL 输出设置为正常工作速度的一半。

    Tommy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可能还需要调整 EPISDRAMCFG[RFSH]值、以便根据较低的频率进行缩放。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Tommy、

    我们将 SDRAM 时钟减慢至12.5 MHz、问题仍然存在。 详情如下:

    原始配置为37.5MHz。

     原始设置…

     400D0008 = 0

    400D0004 = 1

     我们将其减慢至12.5MHz。 (已通过 Oscope 验证)

     新建设置…

     400D0008 = 0

    400D0004 = 4

     刷新重新计算…

     (64000/8192) 0.08 = 97.6

     使用的十进制90 = 5A

     400D0010更改为5A0001

    行为无变化。

     我们接下来可以做些什么?

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

    您是否建议使用已经过测试的特定 SDRAM 芯片? 如果需要、我们可以更改芯片。

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

    Drew、

    根据您的观察结果、我倾向于认为 SDRAM 和 EPI 接口工作正常。  当您通过调试连接交互执行代码时、听起来好像存储器访问是有效的、但当您让应用程序自由运行时、却不是有效的。  是这样吗?

    您对执行顺序的问题促使我在 TRM 中查看 M3集成详细信息、我在其中找到了:

    0x60000000处的 EPI 存储器空间看起来是正常的存储器、可以重新排序事务。

    这可能会解释您的观察结果、其中交互式(缓慢)代码执行可能会阻止重新排序、因为流水线可以在指令之间清空、但自由运行(快速)执行允许重新排序。  (我不确定管道是否在断点处清空)

    您可能会尝试将指针从 char 更改为 volatile char、以查看编译器是否会自动生成屏障指令以保留事务顺序。

    Tommy

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

    嗨、Tommy、

    我们将(指向 char 的指针)更改为(指向 volatile char 的指针)、它没有产生任何影响。 我检查了编译器创建的汇编代码、它与 char 的指针完全相同。 我们在不同的条件下进行了更多的测试、这不仅仅是我们无法写入字节的奇数位置。 还有其他情况会导致问题。 对偶数地址进行单字节写入会导致下一个较高的奇数地址获得偶数地址值的副本。

    下面是我们看到的六种写 SDRAM 的情况的图示。 这些结果是非常可重复的。 运行应用程序时、只有两种情况是正确的。 使用"Memory Browser"和"Expression"窗口、一切都如我们所期望的那样正常工作。

    情况1:单字节写入偶数地址。

    命令:WR 1 60002000 11.

    结果:数据写入正确的字节、但写入下一个更高的字节。

     情况2:单字节写入奇数地址。

    命令:WR 1 60002011 22.

    结果:不写入数据。

     情况3:向偶数地址写入两个字节。

    命令:WR 2 60002022 3344

    结果:工作正常。

     情况4:向奇数地址写入两个字节。

    命令:WR 2 60002033 5566

    结果:第二个字节是正确的、但第一个字节的地址高于第二个字节、而不是位置低于第二个字节。

     情况5:向偶数地址写入四个字节。

    命令:WR 4 60002044 778899AA

    结果:工作正常。

     情况6:向奇数地址写入四个字节。

    命令:WR 4 60002055 BBCCDDEE

    结果:与两个字节写入一样、最低字节被放置在错误的端、一个地址高于最高正确字节。

     下面是执行上述操作后的存储器窗口。 在开始之前、所有位置都初始化为0。

     

     

    我们还测试了存储器位置2002f664。 这在处理器 RAM 中、字节写入工作正常。

    >RD 长6e616353,地址为2002f664

    >WR 字节 aa 至地址2002f664

    >RD 长6e6163aa 从地址2002f664开始 (仅 AA 已更改)

    下一步是什么?

    Drew

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

    感谢您取得的额外成果。 这似乎现在正指向另一个方向。

    您能否共享 EPI -> SDRAM 原理图和 EPI 寄存器设置?

    我通常会在我没有想法时对信号映射和寄存器值进行彻底验证。

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

    嗨、Tommy、

    我们没有原理图、但我们有导线列表/分配、请参阅以下内容:

    IS42S16800底视图
    引脚           引脚
    GND ---- 54 VSS   VDD 1 ---- 3V3
    123. ---- 53. DQ15. DQ0 2. ---- 105.
    GND ---- 52. VSSQ VDDQ 3. ---- 3V3
    91. ---- 51. DQ14. DQ1 4. ---- 103.
    89 ---- 50 DQ13. DQ2 5. ---- 133.
    3V3 ---- 49 VDDQ VSSQ 6. ---- GND
    122. ---- 48 DQ12. DQ3 7. ---- 134.
    109. ---- 47. DQ11. 问题4 8. ---- 137.
    GND ---- 46. VSSQ VDDQ 9. ---- 3V3
    107. ---- 45. DQ10 DQ5. 10. ---- 138.
    77 ---- 44. DQ9. DQ6 11. ---- 99
    3V3 ---- 43. VDDQ VSSQ 12. ---- GND
    75 ---- 42. DQ8. DQ7 13. ---- 101.
    GND ---- 41. VSS VDD 14. ---- 3V3
      ---- 40 常闭 DQML 15. ---- 104.
    106. ---- 39. DQMH 我们 16. ---- 125.
    96 ---- 38. CLK 化学文摘社 17. ---- 108.
    127. ---- 37. CKE RAS 18 ---- 110
    122. ---- 36. 常闭 CS 19. ---- 126.
    109. ---- 35. 解答11. BA0 20. ---- 89
    77 ---- 34 A9 Ba1. 21. ---- 91.
    75 ---- 33. A8 回答10 22. ---- 107.
    101. ---- 32 A7 A0 23 ---- 105.
    99 ---- 31. A6 A1 24 ---- 103.
    138. ---- 30 问题5. 答2. 25 ---- 133.
    137. ---- 29. A4 答3. 26 ---- 134.
    GND ---- 28. VSS   VDD 27. ---- 3V3
             

    寄存器设置与 SDRAM 示例的设置差不多。 下面是文件 EP_SDRAM.c 中 init_SDRAM()和 SetPortControl()的代码:

    //
    //
    //这是引脚复用配置功能,用于打开所需的 EPI 信号
    //设备的端口。
    //
    //

    void SetPortControl (void) {
       //
       // GPIO 端口 C 引脚
       //

       HWREG (GPIO_PORTC_BASE + GPIO_O_PCTL)= GPIO_PCTL_PC4_EPI0S2 |
                                              GPIO_PCTL_PC5_EPI0S3 |
                                              GPIO_PCTL_PC6_EPI0S4 |
                                              GPIO_PCTL_PC7_EPI0S5;

       //
       // GPIO 端口 E 引脚
       //
       HWREG (GPIO_Porte _BASE + GPIO_PCTL)= GPIO_PCTL_PE0_EPI0S8 |
                                              GPIO_PCTL_PE1_EPI0S9;

       //
       // GPIO 端口 F 引脚
       //

       HWREG (GPIO_PORTF_BASE + GPIO_O_PCTL)= GPIO_PCTL_PF4_EPI0S12 |
                                              GPIO_PCTL_PF5_EPI0S15;
       //
       // GPIO 端口 G 引脚
       //
       HWREG (GPIO_PORTG_base + GPIO_PCTL)= GPIO_PCTL_PG0_EPI0S13 |
                                              GPIO_PCTL_PG1_EPI0S14 |
                                              GPIO_PCTL_PG7_EPI0S31;
       //
       // GPIO 端口 H 引脚
       //
       HWREG (GPIO_Porth_BASE + GPIO_O_PCTL)= GPIO_PCTL_PH0_EPI0S6 |
                                              GPIO_PCTL_PH1_EPI0S7 |
                                              GPIO_PCTL_PH2_EPI0S1 |
                                              GPIO_PCTL_PH3_EPI0S0 |
                                              GPIO_PCTL_PH4_EPI0S10 |
                                              GPIO_PCTL_PH5_EPI0S11;
       //
       // GPIO 端口 J 引脚
       //
       HWREG (GPIO_PORTJ_BASE + GPIO_O_PCTL)= GPIO_PCTL_PJ0_EPI0S16 |
                                              GPIO_PCTL_PJ1_EPI0S17 |
                                              GPIO_PCTL_PJ2_EPI0S18 |
                                              GPIO_PCTL_PJ3_EPI0S19 |
                                              GPIO_PCTL_PJ4_EPI0S28 |
                                              GPIO_PCTL_PJ5_EPI0S29 |
                                              GPIO_PCTL_PJ6_EPI0S30;

    //
    //
    // init_SDRAM
    //
    //
    void init_SDRAM (IO *IO){

       //禁用保护
       HWREG (SYSCTL_MWRALLOW)= 0xA5A5A5;

       //为75MHz - M3和150MHz - C28x 设置主时钟树
       SysCtlClockConfigSet (SYSCTL_SYSDIV_1 | SYSCTL_M3SSDIV_2 | SYSCTL_USE_PLL |
                            (SYSCTL_SPLLIMULT_M & 0x0F);

       //启用 EPI 和 GPIO 端口的时钟
       SysCtlPeripheralEnable (SYSCTL_Periph_EPI0);

       SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
       SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
       SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
       SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
       SysCtlPeripheralEnable (SYSCTL_Periph_GPIOH);
       SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);

       //为 EPI 管脚配置 GPIO 设置。
       SetPortControl();

       GPIODirModeSet (GPIO_PORTC_BASE、
                      (GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7)、
                      GPIO_DIR_MODE_HW);

       GPIOPadConfigSet (GPIO_PORTC_BASE、
                        (GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7)、
                        GPIO_PIN_TYPE_STD_WPU);

       GPIODirModeSet (GPIO_Porte _BASE、
                      (GPIO_PIN_0 | GPIO_PIN_1)、
                      GPIO_DIR_MODE_HW);

       GPIOPadConfigSet (GPIO_Porte _BASE、
                        (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3)、
                        GPIO_PIN_TYPE_STD_WPU);

       GPIODirModeSet (GPIO_PORTF_BASE、
                      (GPIO_PIN_4 | GPIO_PIN_5)、
                      GPIO_DIR_MODE_HW);

       GPIOPadConfigSet (GPIO_PORTF_BASE、
                        (GPIO_PIN_4 | GPIO_PIN_5)、
                        GPIO_PIN_TYPE_STD_WPU);

       GPIODirModeSet (GPIO_PORTG_base、
                      (GPIO_PIN_0 | GPIO_PIN_1)、
                      GPIO_DIR_MODE_HW);

       GPIOPadConfigSet (GPIO_PORTG_base、
                        (GPIO_PIN_0 | GPIO_PIN_1)、
                        GPIO_PIN_TYPE_STD_WPU);

       GPIODirModeSet (GPIO_PORTG_base、
                      GPIO_PIN_7、
                      GPIO_DIR_MODE_HW);

       GPIOPadConfigSet (GPIO_PORTG_base、
                        GPIO_PIN_7、
                        GPIO_PIN_TYPE_STD_WPU);

       GPIODirModeSet (GPIO_Porth_BASE、
                      (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
                      GPIO_PIN_4 | GPIO_PIN_5)、
                      GPIO_DIR_MODE_HW);

       GPIOPadConfigSet (GPIO_Porth_BASE、
                        (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
                        GPIO_PIN_4 | GPIO_PIN_5)、
                        GPIO_PIN_TYPE_STD_WPU);

       GPIODirModeSet (GPIO_PORTJ_BASE、
                      (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
                      GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6)、
                      GPIO_DIR_MODE_HW);

       GPIOPadConfigSet (GPIO_PORTJ_BASE、
                        (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
                        GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6)、
                        GPIO_PIN_TYPE_STD_WPU);

       //将时钟分频器设置为1 (2分频)
       EPIDividerSet (EPI0_BASE、1);

       //启用 SDRAM 模式
       EPIModeSet (EPI0_BASE、EPI_MODE_SDRAM);

       //系统时钟频率介于50-100MHz 之间
       禁用//睡眠模式。
       //刷新计数= 0x2EE (默认值)

    //请注意,我们尝试了以下两行,都不起作用
    //   EPIConfigSDRAMSet (EPI0_BASE、(EPI_SDRAM_CORE_FREQ_50_100 | EPI_SDRAM_FUL_POWER | EPI_SDRAM_SIZE _512Mbit)、750);
       EPIConfigSDRAMSet (EPI0_BASE、(EPI_SDRAM_CORE_FREQ_50_100 | EPI_SDRAM_FULL_POWER | EPI_SDRAM_SIZE _128MBIT)、750);

       //外部 RAM 大小(用于设置正确的地址范围) 256MB
       //外部 RAM 地址= 0x60000000

    //请注意,我们尝试了以下两行,都不起作用
       EPIAddressMapSet (EPI0_BASE、(EPI_ADDR_RAM_SIZE = 256MB | EPI_ADDR_RAM_BASE_6));
    //   EPIAddressMapSet (EPI0_BASE、(EPI_ADDR_RAM_SIZE _16MB | EPI_ADDR_RAM_BASE_6);

       //等待 EPI SDRAM 初始化序列完成
       while (HWREG (EPI0_BASE + EPI_O_STAT)和 EPI_STAT_INITSEQ)
       {
       }

    谢谢、

    Drew

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

    它显示内存浏览器无法正确开机自检的图像。 这是几天前帖子的屏幕截图。

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

    Drew、

    您好像正在将 SDRAM 连接到 controlCARD。  是这样吗?  SDRAM 是否安装在带有底座接头的定制板上?

    当您向 SDRAM 写入2字节和4字节时,您是否使用连续的*char 指针写入,或者是否使用*short 和*int 指针?

    Tommy

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

    嗨、Tommy、

    是的、我们使用 TMDSHSECDOCK 卡将 SDRAM 连接到 F28M36控制卡。 SDRAM 安装在适配器板上、适配器板安装在底座接头上。 下面是适配器板的链接:  

    我们将使用指向 short 的指针和指向 long (* short)和(* long)的指针。 我们只使用指向 char 的指针来写入一个字节(* byte)。 这就是我们在表达式窗口中进行测试的方式。

    谢谢、

    Drew

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

    在给定设置说明的情况下、我怀疑不良信号完整性和/或传播延迟可能会导致错误行为。 SDRAM 信号必须在端点之间进行多次转换。 此外、从 HSEC 接头到原型通孔以及通过芯片快速适配器的路径可能不匹配长度。

    我建议运行一个故障存储器写入循环、并在 SDRAM 存储器的物理引脚上查看与 SDRAM CLK 相关的命令信号。 这样就可以识别出问题的原因。

    另一种选择是将 EPI 与异步 SRAM 存储器结合使用、而时序关系更容易被忘记。

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

    嗨、Tommy、

    我们对时间感到担忧、这就是为什么我们保持时钟较慢的原因。 我们根据您的请求以12.5MHz 的频率进行了测试、结果相同。

    我们在只使用字节和非字对齐的字写入和读取字或半字时从未失败。 这个误差条件是非常、非常可重复的。 如果是时钟计时、我也会在写入字时遇到问题和错误、并且会产生不可预测的结果。 该误差非常非常可重复且可预测。 例如、在将字节写入偶数位置时、将在下一个更高字节位置复制准确的字节。 行为不是很严重、它是非常可预测的。  

    我们的产品中的空间受到很大的限制。 这就是我们喜欢 EPI SDRAM 控制器和 SDRAM 芯片的原因之一。

    您使用什么 SDRAM 芯片或芯片组来测试 EPI SDRAM 接口? 我们没有连接到 SDRAM 芯片、我们很乐意尝试其他芯片。

    谢谢、

    Drew

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

    我相信、这款或任何其他标准 SDRAM 都可以在定制电路板上工作、其中存储器放置在靠近 MCU 且布线良好的位置。 我会询问使用了哪种 SDRAM、但答案可能会很慢、因为这是几年前完成的。

    我知道故障行为是可重复的、但这本身并不排除信号完整性问题。 使用示波器确认信号质量和时序可能是最具结论性的方法。 另一个实验是查看使用另一个 SDRAM 器件时行为是否发生变化、甚至行为是否随温度变化而变化。 任何行为变化都会导致设置问题。

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

    嗨、Tommy、

    我们有两个完整的电路板组件、它们的运行方式完全相同。 设计使用此 SDRAM 但无法在原型中正常工作的电路板是一种令人生畏的飞跃。 然而、您有信心、我们目前没有其他答案。 我们有一个逻辑分析仪、Chris 和我讨论了如何在必要时对该板进行检测。 我们还可以订购不同的 SDRAM 芯片。

    Chris 今天就走了。 他是我们团队的硬件方面。 今晚我将与他交谈、并与您一起回到我们的下一个步骤。 我们希望您对我们所做的决定表示祝福、这样我们就不会因为这个项目变得越来越关键、我们的日程也即将结束而走在无用的方向。

    再次感谢您。

    Drew

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

    我刚刚收到一个字、表示 EPI SDRAM 模式是使用 MT48LC32M16A2进行验证的。

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

    嗨、Tommy、

    嗯、这似乎是我们发出的一条"吃 crow"消息。 非常重要。 我们发现、我们制作的两个原型板具有相同的接线错误、导致了奇怪的行为。 我们已经对其进行了更正、现在两个板都可以正常工作。

    调试器表达式和存储器浏览器正常工作、代码不工作、这种情况很奇怪。 在我们发现接线错误之前、我们在电路板上放置了一个逻辑分析仪。 使用调试器进行字符写入与使用代码进行字符写入之间存在明显差异。 它实际上连接了逻辑分析仪、使我们能够找到接线错误。

    我们感谢您为帮助我们付出的所有时间和努力、我很抱歉您的时间被占用了。

    过去、TI 一直很好地帮助我们、为此、我们向您表示感谢。

    当然、您可以解决此问题。

    非常感谢!

    Drew

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

    我很高兴您能找到根本原因、并感谢您的后续报告。 最好关闭这个问题。 调试起来绝对是一个棘手的问题!

    在调试外部存储器活动时、我们通常认为 CCS 表达式和存储器浏览器小工具具有侵扰性、因为数据刷新操作可能不稳定。 如果在通过调试器进行 poking 时删除所有无关变量和存储器地址、则可能会有更一致的行为。

    Tommy