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.

[参考译文] AM5726:使用27MHz 晶体引导

Guru**** 2559110 points
Other Parts Discussed in Thread: AM5726, AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/597350/am5726-boot-with-27-mhz-crystal

器件型号:AM5726
主题中讨论的其他器件: AM5728

在我们的设计中、我们使用的是 AM5726 Sitara 处理器、SYSCLK1上采用了27MHz 晶体。 我们使用的是最新 的 Processor-SDK-Linux-AM57x_03_03_00_04。  SYSBOOT[9:8]引脚被正确配置以反映27MHz 输入。 我们在启动 SPL U-boot 时遇到问题。  

我们目前正在使用 CCSv7对 spl 引导加载 程序进行故障排除。我手动修改了 CCSv7 AM572x_prcm_config.gel 以支持27MHz 晶体、并能够从 SRAM 或 DDRAM 加载/执行 spl 和测试程序。 AM5728 DPLL 配置具有许多参数并生成大量子时钟。

我的问题是- TI 是否有一个 AM5728 GEL 参考文件、该文件具有27MHz 的 dls 时钟设置(CCS 随附的 AM572x_prcm_config.gel 仅支持20MHz 晶体时钟、请参阅下文):

#define SYS_CLK1 (20)

/*********
* DPLL_a15_opp_config():Cortex A15 DPLL OPP 配置
秘书长的报告 /
DPLL_a15_opp_config (uint32_t opp、uint32_t device_type)

uint32_t DPLL_m、DPLL_n、divm2、DCC_en;
DCC_EN = 0;

GEL_TextOut ("\tCortex A15 DPLL OPP %d 时钟配置正在进行中...\n"、、、、 OPP);

IF (OPP_HIGH =OPP)

//1500MHz、20MHz SYS_clk
DPLL_m = 600;
DPLL_n = 7;
DIM2 = 1;
DCC_EN = 1;

否则、如果(OPP_OD = OPP)

在20MHz SYS_clk 时为//1176MHz
DPLL_m = 294;
DPLL_n = 4;
DIM2 = 1;

else //默认为 OPP_NOM

//1000MHz、20MHz SYS_clk
DPLL_m = 500;
// DPLL_m = 370;
DPLL_n = 9;
DIM2 = 1;

IF (CM_IDLEST_DPLL (CM_CLKMODE_DPLL_MPU)&0x1)

GEL_TextOut ("\tCortex A15 DPLL 已锁定、现在正在解锁... \n");
DPLL_UNLOCK_SEQUENCE (CM_CLKMODE_DPLL_MPU);

CM_CLKSEL_DPLL (CM_CLKMODE_DPLL_MPU)=((DPLL_m << 8)| DPLL_n |(DCC_EN << 22));

//对 DPLL_CLKOUT 分频器进行编程(M2 = 1)
CM_DIV_M2_DPLL (CM_CLKMODE_DPLL_MPU)= DIMM2;

DPLL_LOCK_SEQUENCE (CM_CLKMODE_DPLL_MPU);

GEL_TextOut ("\tCortex A15 DPLL OPP %d 已完成!\n"、、、、、 OPP);

/*********
* DPLL_PER_OPP_CONFIG():按 DPLL OPP 配置
(小部分 /
DPLL_PER_OP_CONFIG (uint32_t OPP、uint32_t DEVICE_TYPE)

GEL_TextOut ("\tPER DPLL OPP %d clock config in progress...\n"、、、、 OPP);

IF (CM_IDLEST_DPLL (CM_CLKMODE_DPLL_PER)&0x1)

GEL_TextOut ("\tPER DPLL 已锁定、现在解锁\n");
DPLL_UNLOCK_SEQUENCE (CM_CLKMODE_DPLL_PER);

/* CM_CLKSEL_DPLL_PER DPLL 乘法器*/
CM_CLKSEL_DPLL (CM_CLKMODE_DPLL_PER)= 0x6004;

/* CM_DIV_M2_DPLL_PER.DPLL_CLKOUT_DIV = 4*/
CM_DIV_M2_DPLL (CM_CLKMODE_DPLL_PER)= 0x4;

/* CM_DIV_M3_DPLL_PER.DPLL_CLKOUT_DIV = 3 */
CM_DIV_M3_DPLL (CM_CLKMODE_DPLL_PER)= 0x1;

/* CM_DIV_H11_DPLL_PER.HSDIVIDER_CLKOUT1_DIV = 3 */
CM_DIV_H11_DPLL (CM_CLKMODE_DPLL_PER)= 0x3;

/* CM_DIV_H12_DPLL_PER.HSDIVIDER_CLKOUT2_DIV = 4 *
CM_DIV_H12_DPLL (CM_CLKMODE_DPLL_PER)= 0x4;

/* CM_DIV_H13_DPLL_PER.HSDIVIDER_CLKOUT2_DIV = 4:获得192M 输出*/
CM_DIV_H13_DPLL (CM_CLKMODE_DPLL_PER)= 0x04;

/* CM_DIV_H14_DPLL_PER.HSDIVIDER_CLKOUT3_DIV = 2 */
CM_DIV_H14_DPLL (CM_CLKMODE_DPLL_PER)= 0x2;

DPLL_LOCK_SEQUENCE (CM_CLKMODE_DPLL_PER);

GEL_TextOut ("\tPER DPLL OPP %d 已完成!\n"、、、、、 OPP);

/*********
* DPLL_CORE_OPP_CONFIG():内核 DPLL OPP 配置
(小部分 /
DPLL_CORE_OPP_CONFIG (uint32_t OPP、uint32_t DEVICE_TYPE)

GEL_TextOut ("\tCORE DPLL OPP %d 时钟配置正在进行中...\n"、、、、、 OPP);

IF (CM_IDLEST_DPLL (CM_CLKMODE_DPLL_CORE)&0x1)

GEL_TextOut ("\tCORE DPLL OPP 已锁定、现在正在解锁...。 \n");
DPLL_UNLOCK_SEQUENCE (CM_CLKMODE_DPLL_CORE);

//从内核 DPLL 对 L3和 L4分频器进行编程
/* L3时钟=内核 CLK /2;L4时钟= L3时钟/2;CORE_CLK=CORE_X2_CLK/2 */
WR_MEM_32 (CM_CLKSEL_CORE、0x110);

/*锁定和代码输出被覆盖*/
WR_MEM_32 (CM_DLL_CTRL、0x00000000);

/* CM_CLKSEL_DPLL_CORE.PLL_MULT = 0x200 */
CM_CLKSEL_DPLL (CM_CLKMODE_DPLL_CORE)= 0x10a04;

/* CM_DIV_M2_DPLL_CORE */
CM_DIV_M2_DPLL (CM_CLKMODE_DPLL_CORE)= 0x2;

/* CM_DIV_M3_DPLL_CORE *
CM_DIV_M3_DPLL (CM_CLKMODE_DPLL_CORE)= 0x1;

/* CM_DIV_H12_DPLL_CORE */
CM_DIV_H12_DPLL (CM_CLKMODE_DPLL_CORE)= 0x4;

/* CM_DIV_H13_DPLL_CORE */
CM_DIV_H13_DPLL (CM_CLKMODE_DPLL_CORE)= 0x3E;

/* CM_DIV_H14_DPLL_CORE */
CM_DIV_H14_DPLL (CM_CLKMODE_DPLL_CORE)= 0x5;

/* CM_DIV_H22_DPLL_CORE */
CM_DIV_H22_DPLL (CM_CLKMODE_DPLL_CORE)= 0x5;

/* CM_DIV_H23_DPLL_CORE */
CM_DIV_H23_DPLL (CM_CLKMODE_DPLL_CORE)= 0x4;

/* CM_DIV_H24_DPLL_CORE */
CM_DIV_H24_DPLL (CM_CLKMODE_DPLL_CORE)= 0x6;

DPLL_LOCK_SEQUENCE (CM_CLKMODE_DPLL_CORE);

GEL_TextOut ("\tCORE DPLL OPP %d 已完成!\n"、、、、、 OPP);

我还检查了 U-boot 源代码、 在 arch/arm/cpU/armv7/omap5/hw_data.c 中没有27MHz 晶体的设置(见下文)

OMAP5 ES2.0和 DRA7 ES1.0的/* OPP NOM 频率*/
静态常量结构 DPLL_params MPU_DPLL_params_1GHz[NUM_SYS_CLKS]={
{250、2、1、1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 12 MHz */
{500、9、1、1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 20MHz */
{119、1、1、1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 16.8MHz *
{625、11、1、1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 19.2 MHz */
{500、12、1、1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 26 MHz */
{-1、-1、-1、-1、-1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 27 MHz */
{625、23、1、1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 38.4MHz */
};

要正确设置 dplls、需要以下时钟:

struct dplls dra7xx_dplls ={
MPU = MPU_DPLL_params_1GHz、
.core = core_DPLL_params_2128mhz_dra7xx、
PER = PER_DPLL_params_768mhz_dra7xx、
安倍=安倍_DPLL_params_sysclk2_361267khz、
IVA = IVA_DPLL_params_2330mhz_dra7xx、
USB = USB_DPLL_params_1920mhz、
DDR = DDR_DPLL_params_2128mhz、
GMAC = GMAC_DPLL_params_2000MHz、
};

TI 是否可以在中为 GEL 文件提供所有此时钟的参考设置、或者在 SYSCLK1上为27MHz 晶体时钟提供 HW_DATA.c 的参考设置。

要 支持27MHz 时钟、还需要从 SYSCLK1论坛上具有27MHz 晶体的 AM572x 进行更改。  

请告诉我。

提前感谢您。

此致、

     Andriy Nazar

   

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    什么是引导加载程序- Linux 或 RTOS?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是 U-boot (Linux)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢。 我已要求软件团队检查这一点。 他们将直接在此处发表评论。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    否、TI 不提供此类参考代码。 您可以使用时钟树工具:
    www.ti.com/.../clocktreetool
    以生成 DPLL 设置并获取寄存器转储以查看需要设置的值。

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

    谢谢你。

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

    在这里、我可以找到可以加载到 CTT 工具中的 AM5728 EVM 的时钟源树。 我想将其用作参考。
    请告诉我。

    谢谢你。

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

    没有参考源时钟树。 我引用的工具用于创建定制时钟配置、并查看获取特定时钟所需的 DPLL 设置。

    此致、
    Yordan