主题中讨论的其他器件:HALCOGEN
我尝试访问 RM48HDK 上的 SDRAM。 我找不到 HalCoGen 中的任何示例。 我正在使用的 HalCoGen 版本是04.06.00。 我搜索论坛、找到一个构建于 HalCoGen 版本3.02上的示例。 但 HalCoGen 在版本4到版本3之间有很大的变化。 我无法使其正常工作 04.06.00.是否有人可以发布更新 EMIF 示例项目以使用 HalCoGen 04.06.00或 04.07.00读取和写入 SDRAM?
谢谢、
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.
我尝试访问 RM48HDK 上的 SDRAM。 我找不到 HalCoGen 中的任何示例。 我正在使用的 HalCoGen 版本是04.06.00。 我搜索论坛、找到一个构建于 HalCoGen 版本3.02上的示例。 但 HalCoGen 在版本4到版本3之间有很大的变化。 我无法使其正常工作 04.06.00.是否有人可以发布更新 EMIF 示例项目以使用 HalCoGen 04.06.00或 04.07.00读取和写入 SDRAM?
谢谢、
你好、Chuck、
180728中的5164.7215.EMIF.zip 就是我使用的示例。 我可以使用 V3 Halcogen 运行它、SDRAM 运行良好。 之后 、使用 Halcgoen V4打开 REAPLAN_2D_V1b.hcg 并重新生成代码。 我还按照 180728添加:
systemREG1->GPREG1 |= 1U <<31;
根据需要插入 sys_link.cmd SDRAM。
我使用存储器浏览器从0x8000000检查 SDRAM、但无论我在那里写入什么内容、我都会得到全0。 我不知道如何解决这个问题、任何建议都值得欢迎。
您好!
我仍然无法解决此问题。 它们是这两者的项目文件。 V3正常工作、但 V4不工作。
谢谢、
e2e.ti.com/.../6175.EMIF_5F00_HCG_5F00_V4.zipe2e.ti.com/.../0572.EMIF_5F00_good_5F00_HCG_5F00_V3.zip
您好、Yi、
首先、我对延迟返回表示歉意、但我认为我找到了问题的根源。
在您发布的项目中、V4项目将 EMIF_CLK (VCLK3)初始化为40MHz、这会导致写入 SDTIMR 寄存器的计算值出现显著差异。 当我在 Halcogen V4.0.7中打开工作项目时、EMIF_CLK 被设定为80MHz、这将导致同样的值被写入 SDTIMR、除了写入 T_WR 的值太大而不是 T_WR 字段导致它溢出到一个保留位(位19)。 如果将代码(14或0x0E)中定义的 T_WR 的可用位考虑在内、则实际上会向 T_WR 写入值6。
我怀疑您是否在 V4项目(40MHz EMIF_CLK)或使用 V4打开的 Good V3项目(80MHz)中更新了 T_WR =75ns、并重新生成代码、它应该起作用。 另请注意、EMIF 长期可靠性的最大频率为60MHz、因此以80MHz 运行的项目可能在工作台环境中工作、在最高或最低温度规格和/或指定的最大或最小电压下可能会出现问题。
下面的屏幕截图显示了如何更新 EMIF SDRAM 配置以匹配正在工作的项目。
如果 EMIF_CLK = 40MHz、SDTIMR 初始化将如下所示:
emifREG->SDTIMR =(uint32)((uint32) 5U << 27U)| (uint32)((uint32) 1U <<24U)| (uint32)((uint32) 0U <<23U)| (uint32)((uint32) 1U <<20U)| (uint32)((uint32) 0U << 19U)| (uint32)((uint32) 6U << 16U)| (uint32)((uint32) 3U << 12U)| (uint32)((uint32) 5U << 8U)| (uint32)((uint32) 0U << 7U)| (uint32)((uint32) 1U << 4U)| (uint32)((uint32) 0U << 3U);
如果 EMIF_CLK = 40MHz、SDTIMR 寄存器将按如下方式进行初始化:
emifREG->SDTIMR =(uint32)((uint32) 2U << 27U)| (uint32)((uint32) 0U << 24U)| (uint32)((uint32) 0U <<23U)| (uint32)((uint32) 0U << 20U)| (uint32)((uint32) 0U << 19U)| (uint32)((uint32) 3U << 16U)| (uint32)((uint32) 1U <<12U)| (uint32)((uint32) 2U <<8U)| (uint32)((uint32) 0U << 7U)| (uint32)((uint32) 0U << 4U)| (uint32)((uint32) 0U << 3U);