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.

[参考译文] Linux/AM5728:U-boot 和 RTC 暂存寄存器

Guru**** 2603695 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/649736/linux-am5728-u-boot-and-rtc-scratch-registers

器件型号:AM5728

工具/软件:Linux

大家好、

我需要实施 U-boot 解决方案、该解决方案将能够判断器件的引导位置。

我发现 AM335有一个非常类似的情况: 这里

该解决方案使用 RTC 暂存寄存器将引导器件保存在 SPL 中、然后在稍后从全面的 U-Boot 中读回。

但是、该解决方案不适用于 AM57xx。  

我检查了 AM57xx 的技术手册、并在 地址 0x48838060处找到了 RTC_SCRAATCH0_REG。

然后我编写了以下代码:

#define CONFIG_AM57X_RTC_BASE 0x48838000
#define CONFIG_AM57X_RTC_SCRATCCH0 0x60
#define BOOT_DEVICE_SAVE_REGISTER (CONFIG_AM57X_RTC_BASE + CONFIG_AM57X_RTC_SCRATCCH0)

#ifdef CONFIG_SPL_Build
static void save_boot_device (void)
{
*(((u32 *)(boot_device_save_register))= spl_boot_device ();
}
#endif

u32 boot_device (void)
{
返回*((u32 *)(boot_device_save_register));
}

//将引导设备存储在环境变量'boot_device'中*/
static void setenv_boot_device (void)
{

switch (boot_device()){
case boot_device_MMC1:{
setenv ("boot_device"、"sdcard");
中断;
}
case boot_device_MMC2_2:{
setenv ("boot_device"、"eMMC");
中断;
}
默认值:{
setenv ("boot_device"、"unknown");
中断;
}
}

我在 board_late_init()中调用 setenv_boot_device()。  

然而 、boot_device_save_register (RTC_SCRATCH0_REG)的内容始终为0x0。

例如、在 u-boot 中对其进行读取/写入:

=> MD.L 0x48838060 1.
48838060:00000000 …
=> MW.L 0x48838060 DEADBEEF
=> MD.L 0x48838060 1.
48838060:00000000 …
=> 

或 Linux:

root@am57xx-phycore-RDK:~ evmem2 0x48838060 w
/dev/mem opened。
映射到地址 bb6f9c000的内存。
在地址0x48838060 (bb6f9c060)处读取:0x00000000
root@am57xx-phycore-RDK:~ evmem2 0x48838060 w 0xDEADBEF
/dev/mem 已打开。
映射到地址 bb6fd7000的内存。
在地址0x48838060 (bb6fd7060)处读取:0x00000000
在地址0x48838060 (b6fd7060)处写入:0xDEADBEEF、回读0xDEADBEEF
root@am57xx-phycore-RDK:~ü devmem2 0x48838060 w
/dev/mem 已打开。
映射到地址 bb6fe5000的内存。
在地址0x48838060 (bb6fe5060)读取:0x00000000
root@am57xx-phycore-RDK:~ 

AM57x 与 AM335有何不同?

RTC_SCRATCH0_REG 中缺少什么内容?

我出了什么问题?

谢谢

Primoz  

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

    这是定制板还是 AM572x EVM? 在尝试访问其寄存器之前、RTC 必须处于活动状态。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [报价用户="Biser Gatchev-XID"]您好、

    这是定制板还是 AM572x EVM? 在尝试访问其寄存器之前、RTC 必须处于活动状态。

    [/报价]

    这是 Phytec AM57xx RDK 板。  

    AM57x EVM 是否在 SPL 中启用 RTC? 还是 AM335X?

    我只需要为该虚拟寄存器访问启用 RTC。  

    写入 RTC_CTRL_REG 就足够了吗?

    谢谢、

    Primoz

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

    查看 TRM 中的 RTC 章节、可以看到您还必须在控制模块中设置引脚多路复用器。 您能否检查引脚复用是否已完成?

    Steve K.

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

    我要补充的是、此问题可能是由 RTC 电源域进入关断状态引起的。 在 AM572x TRM 中、我们有:

    23.4.4暂存寄存器
    如果 RTC 意外断电、写入 RTC_SCRATCHx_REG 寄存器的值将被清零。


    如何重新启动电路板、POR、热复位?

    AM335x 支持仅 RTC 模式(RTC 电源域在所有其他功能关闭时打开)、而 AM572x 器件不支持仅 RTC 模式。 这是我在 RTC 方面发现的差异。

    另请参阅以下 e2e 线程是否将提供帮助:

    e2e.ti.com/.../565736
    e2e.ti.com/.../542737
    e2e.ti.com/.../940241
    e2e.ti.com/.../405973


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

    大家好、

    首先、感谢您的帮助!

    但我找到了另一种方法来使实际的引导器件进入全面的 u-boot 状态、因此请不要再使用 RTC 寄存器。

    它不需要从 SPL 传递到 U-Boot。  

    您只需要在 U-Boot 中以与 SPL 相同的方式读取它:)

    非常直接和干净的解决方案对吧?

    我发现 SPL 通过调用函数  save_omap_boot_params()来实现此目的

    这将从 OMAP-SRAM_Scratch_boot_Params 的 ROM 代码中读取 SRAM 中剩余的引导参数。

    此致、

    Primoz