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.

[参考译文] TM4C129XNCZAD:SDRAM 兼容性:ESMT 与联盟

Guru**** 2421500 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/616518/tm4c129xnczad-sdram-compatibility-esmt-vs-alliance

器件型号:TM4C129XNCZAD

您好!

我们生产的电路板将近2年:MCU TivaC129 + 外部 EPI SDRAM (用于帧缓冲器)。

我们选择了 SDRAM ESMT M12L64164A (2Y)作为我们的目标、一切都很好。

现在 、我们使用新的 SDRAM 联盟 AS4C4M16SA 生产了6个样片、因为 找到上述器件型号存在一些问题。

我们发现的主要问题是、使用相同固件时、LCD 屏幕显示浅蓝色垂直线。

我们选择了 Alliance 存储器、因为 从数据表中可以看出、它们几乎与 ESMT 具有相同的特性、但现在我们 不确定2个 SDRAM 是否兼容。

随此帖子附的计时表 e 了我们使用新 SDRAM 获得的缺陷的屏幕截图。

发生什么事了?

好的图像是:

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

    尊敬的 Marco:
    与之前相比、您的电路板是否与 Alliance 内存芯片一起以任何方式发生了变化、从而影响了布线上的电容?

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

    请允许我注意、您的"良好图像"显示绿色和橙色的色彩饱和度较低。 (结果1)

    由于新图像字段比旧图像字段"宽"、因此尝试提供图像的"A-B"比较不是最佳选择。   (监视器上的90mm 与84mm 之间-大于6%-使新图像看起来更旧!)  (结果2)   

    注意-轻微、蓝色、垂直条(新图像)显示了明显的"规律性"-这种规律性与发现"噪音"相违背。  (可能会建议出现"地址路由问题"。)  (结果3)

    根据您的要求、您  可以通过(第一)预览来查看两种规格、并"突出显示"差异。    强迫您的远程"帮助者"付出如此巨大的努力似乎超出了您的最大兴趣。    (即、尽管我在显示领域一直都很成功-我不想为您执行"课前作业" - 这是"共同的礼貌"-是不是吗?)

    而且-一如既往-没有提供显示此类揭示此问题的"新电路板"数量的指示。     单板异常毫无影响(焊点不良、组件错误等) -多板问题被证明更有趣、更具吸引力、更具影响力-因此需要(更高)的努力和关注...  (尤其是当"此类问题"远离论坛的 MCU 焦点时-正如(显而易见)!)

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

    你(们)好 CB1。

    我会逐一回答您的问题、这样我就不会犯错。

    1.“请注意,您的...”:您应该考虑使用 摄像机和 不同光源拍摄照片。 因此问题不是饱和问题。  

    2.“您尝试提供……”: 图片的尺寸 不是我想向您展示的主要概念,但我的重点是垂直线条。

    3."注意-有一个明确的...":这条建议很好、但 我已经检查了问题的解决方法、但我没有找到它。

    4."审核两个规格...":奇怪的是、在显示字段工作很多的人在我发送的表中找不到信息。 这不是"通用礼节性"、而只是了解是否在上表中查找信息的问题。

    5."一如既往-没有指示...":我已经过滤过这种信息。 我们已经使用 "n" 个板进行了预编系列、所有这些板都遇到了这种问题。 没有其他问题、例如焊接不良、压实错误等。

    由于这不是你第一次对我的帖子使用如此粗鲁的方法、我请你不要再回答、因为我认为你的考虑不是很感兴趣。

    此致、

    Marco Cristellari

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、
    从上面的表格中可以看出、我已经做了一些考虑、但我想在尝试检查信号上的电容之前与大家分享。

    我的问题是行预充电时间、行周期时间、行活动时间和时钟周期时间。 这些时间差异是否会影响刷新时间并在 LCD 上创建垂直线?

    我假设有与 LCD 控制器像素时钟(设置为30MHz)、EPIDividerSet (设置为60MHz)和刷新时间相关的内容。

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

    尊敬的 Marco:

     我不知道您拥有的每个存储器器件的版本。 我尝试比较两者之间最宽的极限。 联盟-7的速度比 ESMT -5慢得多。 您是否仍可以修改固件? 您能否在 EPI 中使用这些时序参数(即调整时序)来查看其是否起作用?  

        Alliance 版本-7 ESMT 版本-5 和功能
        最小 最大 最小 最大 ns
    行周期时间   63.   53.   ns
    RAS 至 CAS 延迟   21.   15.   ns
    预充电以刷新/低电平激活   21.   15.   ns
    行激活到行激活延迟
    (不同组)
      14.   10.   ns
    行激活以预充电
    (同一组)
      42.   38.   ns
    写入恢复时间   2.       TCK
    CAS 到 CAS 延迟   1       ns
    时钟周期时间 CL = 2 10.   7.5.   ns
    时钟周期时间 CL = 3 7.   5.   ns
    时钟高电平   2.5.       ns
    时钟低电平   2.5.       ns
    从 CLK 的访问时间 CL = 2   6. 6.   ns
    从 CLK 的访问时间 CL = 3   5.4. 5.   ns
    数据输出保持   2.5.       ns
    数据输出低阻抗   0       ns
    数据输出高阻抗     5.4.     ns
    数据/地址/控制建立时间   1.5       ns
    数据/地址/控制保持 时间   0.8.       ns
    模式寄存器设置命令时间   2.       TCK
    平均刷新间隔时间     15.6us    64毫秒
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Marco Cristellari"]"和往常一样-没有任何指示...":我已经过滤过这种信息。

    然而-您未能提供此类信息-您是否未提供?     展示您的"检查和发现"可以节省"帮助者"的时间/精力(可以预见)、当这些努力"未提及和未被告知"时、帮助者可能"重复您的工作"!

    您的 "粗鲁"法官 不是共同的(粗鲁不是简单的"事实陈述"所导致的。)    图像-当呈现给他人进行比较和分析时-应"尽可能一致!"   (因此、摄像机角度、设置、焦距应力求实现一致性-您的吗?)    

    您 的"期望"(其他人)会"梳理您(大量)的非 MCU 器件数据"-建议您对 "基于 MCU 的论坛帮助者"的"关注/关心程度低于"。   您(很可能)"已经这样做了"-因此、您很容易"强调这些差异领域"-从而节省了对您的"将会"提供帮助的不必要的努力(被迫)...

    当然,你必须认识到,"加速和放松他人的努力--完全代表你"--是非常有意义的。   (可能会加强这些努力-当然-这是我的目标...)

    尽管您的态度-我希望您(最终)取得成功。    阅读时 、请更加"开放、接受和减少敌对心态" -这些指南明确地说、"打算并能够提供帮助/协助"。   (这一点不粗鲁……)

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

    我使用的是 Alliance 版本-6。

    我的项目基于具有外设驱动程序库 API 的 TI-RTOS。 在初始化序列下:

    - EPIModeSet (EPI0_BASE、EPI_MODE_SDRAM);
    - EPIDividerSet (EPI0_BASE、1);
    -EPIConfigSDRAMSet (EPI0_BASE,(EPI_SDRAM_CORE_FREQ_50_100 | EPI_SDRAL_POWER | EPI_SDRAM_SIZE 64MBIT),900);
    -EPIAddressMapSet (EPI0_BASE、EPI_ADDR_CODE_SIZE_16MB | EPI_ADDR_CODE_BAS_1);

    除了 EPIDividerSet 和 EPIConfigADRAMSet 之外、我还必须使用哪个 API 来处理时序参数?


    此致、

    Marco
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Marco:
    联盟数据表显示"内部刷新计数器在每个自动刷新周期自动递增、直至所有行。 刷新操作必须在32ms 内执行4096次。 这实际上是 ESMT 要求的一半、即64ms。 我建议您使用- EPIConfigSDRAMSet()来获取刷新率。 目前您有900个。 尝试更改为450、看看它是否有所不同。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    我已经完成了此测试、但我没有看到任何差异。

    此致、
    Marco
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Marco:
    您是否使用过 EPIDividerSet()? 我将提出一些建议、但不确定哪一项在您当前的开发阶段对您来说是可行的:
    1) 1)比较 Alliance 和 ESMT 之间的 PCB 布局
    2) 2)如果您有逻辑分析仪、并且您可以探测 EPI 接口、那么在访问 EPI 时、您可以比较两个电路板。
    3) 3)您能否使用第三个供应商存储器器件(非 ESMT 和非 Alliance)进行实验?
    4) 4)您能否在当前具有联盟的电路板中使用 ESMT 器件替换联盟器件?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好,查尔斯

    PCB 布局相同。

    2.正在进行中的工作...

    3 、一旦样片送达、我将立即用 ISSI 取代联盟

    我将在板上用 ESMT 重新播放联盟器件、但 这需要一些时间

    我会告诉你。

    此致、

    Marco

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

    你(们)好

    只是此帖子的简单更新。

    所有 PCB 连接和信号完整性都正常。

    SDRAM 配置为:
     - EPIModeSet (EPI0_BASE、EPI_MODE_SDRAM);
     - EPIDividerSet (EPI0_BASE、1);
     -EPIConfigSDRAMSet (EPI0_BASE,(EPI_SDRAM_CORE_FREQ_50_100 | EPI_SDRAL_POWER | EPI_SDRAM_SIZE 64MBIT),900);
     -EPIAddressMapSet (EPI0_BASE、EPI_ADDR_CODE_SIZE_16MB | EPI_ADDR_CODE_BAS_1);
    ESMT 和 Alliance 都是正确的、即运行单元测试时两者都没有错误(请参阅底部的单元测试代码):

    为了再次获得良好的图像、我们修改了 LCD 控制器的像素时钟分频值:
    OLD -> LCDModeSet (LCD0_BASE、LCD_MODE_Raster | LCD_MODE_AUTO_UFLOW_RESTART、(120000000/4)、120000000UL);
    NEW --> LCDModeSet (LCD0_BASE、LCD_MODE_RICGRAH | LCD_MODE_AUTO_UFLOW_RESTART、(120000000/6)、120000000UL);

    进行这种调整只会产生一种副作用:SDRAM 上的单元测试比以前慢大约1.3倍。

    此致、
    Marco

    --------------------------------------------------
    SDRAM @ 0x10000000的单元测试
    --------------------------------------------------

           HAL_MEM_DATA_pattern               (0x55AA55AA)
           nlocation = SDRAM_NUM_Bytes / 4;
           除数= 4;
           buffer.word = HAL_MEM_DATA_pattern;        

           timetick = OS_GetTimerTick();


           //--------------------------------------------------------
           //写入...
           
           G_puiEPISdram32 =(uint32_t *) SDRAM_base_address;
           g_puiEPISdram16 =(uint16_t *) SDRAM_base_address;
           g_puiEPISdram8 =(uint8_t *) SDRAM_base_address;

           for (i=0;<nLocation; i++ )
           {
               开关(除数)
               {
               案例1:
                   //写入4字8位
                   EPIWorkaroundByteWrite (g_puiEPISdram8、buffer.byte.b1);g_puiEPISdram8++;
                   EPIWorkaroundByteWrite (g_puiEPISdram8、buffer.byte.B2);g_puiEPISdram8++;
                   EPIWorkaroundByteWrite (g_puiEPISdram8、buffer.byte.B3);g_puiEPISdram8++;
                   EPIWorkaroundByteWrite (g_puiEPISdram8、buffer.byte.b4);g_puiEPISdram8++;
                   中断;

               案例2:
                   //写入2字16位
                   EPIWorkaroundHWordWrite ( g_puiEPISdram16, buffer.halfword.low );g_puiEPISdram16++;
                   EPIWorkaroundHWordWrite ( g_puiEPISdram16, buffer.halfword.high );g_puiEPISdram16++;
                   中断;

               案例4:
                   //写入1个字32位
                   EPIWorkaroundWordWrite (g_puiEPISdram32,buffer.word);g_puiEPISdram32++;
                   中断;

               默认值:
                   中断;
               }
           }

           //--------------------------
           //读取...
           
           G_puiEPISdram32 =(uint32_t *) SDRAM_base_address;
           g_puiEPISdram16 =(uint16_t *) SDRAM_base_address;
           g_puiEPISdram8 =(uint8_t *) SDRAM_base_address;

           for (i=0;<nLocation; i++ )
           {
               buffer.word = 0;

               switch (除数)
               {
               案例1:
                   //读取4字8位
                   buffer.byte.b1 = EPIWorkaroundByteRead (g_puiEPISdram8);g_puiEPISdram8++;
                   buffer.byte.b2 = EPIWorkaroundByteRead (g_puiEPISdram8);g_puiEPISdram8++;
                   buffer.byte.b3 = EPIWorkaroundByteRead (g_puiEPISdram8);g_puiEPISdram8++;
                   buffer.byte.b4 = EPIWorkaroundByteRead (g_puiEPISdram8);g_puiEPISdram8++;
                   中断;
               案例2:
                   //读取2个字16位
                   buffer.halfword.low = EPIWorkaroundHWordRead (g_puiEPISdram16);g_puiEPISdram16++;
                   buffer.halfword.high = EPIWorkaroundHWordRead (g_puiEPISdram16);g_puiEPISdram16++;
                   中断;
               案例4:
                   //读取1个字32位
                   buffer.word = EPIWorkaroundWordRead (g_puiEPISdram32);g_puiEPISdram32++;
                   中断;
               默认值:
                   中断;
               }

               if (buffer.word!= HAL_MEM_DATA_pattern)
               {
                   aCnt++;
                   printf ("0x%08X @ 0x%08X \n"、buffer.word、SDRAM_base_address +(I*divisor));
               }
           }

           timetick = OS_GetTimerTick()- timetick;

          printf (“\n 时间:%d [刻度]\n",时间刻度);

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

    如果可以的话-通过您的软件更改、像素时钟已从30MHz 降低到20MHz。

    • 该像素时钟是否符合显示规格?
    • 是否有任何"闪烁"现象?
    • 任何主要颜色的深度是否受到影响?

    降低像素时钟(如果不会)会影响上述任何一项、通常会产生更可靠的(提供)接口并降低电流消耗。

    经验告诉您、最好在多个显示屏上测试这些更改、尤其是那些具有最新"生产日期代码"的显示屏。

    您对当前结果是否满意?   (我-可能还有其他人-无法从这个帖子中得知)