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.

AM3352+AR8035,ping不通!

Other Parts Discussed in Thread: AM3352, TPS65217

AM3352+AR8035,ping不通,用示波器测试RGMII的TX_CLK是50MHZ,RX_CLK是125MHZ,板子是自己设计的,请教有哪些原因会造成TX_CLK是50MHZ?

  • 您本来期望配置的频率是多少?检查一下CORE_PLL的配置。
  • 期望频率是125MHZ,使用米尔SDK,ping不通,就检查了GTX_CLK、RX_CLK。正常情况下,GTX_CLK不应该是2.5MHZ、25MHZ或者125MHZ么?您说的“检查一下CORE_PLL的配置”,能详细说明一下不?没明白什么意思。

  • 是的,应该是2.5MHZ、25MHZ或者125MHZ。
    建议检查你的PLL的配置,从主OSC开始向下到以太网部分,确保频率和分配器是正确的。可以参考TRM里面提供的时钟树来理解。
  • 有没有使用米尔的板子看看是啥频率?

  • 我阅读了TRM里面提供的时钟树,并且参阅了论坛的《Sitara AM335x Bootload的流程分析》文档,对基本框架有所了解。
    我再详细描述一下目前碰到的问题:
    1.我们自制的板子使用的芯片是AM3352BZCZA60,米尔使用的AM3352BZCZD80,二者频率上的差别就是最大运行频率一个800MHZ一个600MHZ。
    2.米尔的板子的I2C总线上设计有一个EEPROM,我们在未研究时钟配置的情况下怀疑是EEPROM当中有配置参数,于是我把米尔的EEPROM挂载在我们的I2C总线上,发现问题未得到解决,而且米尔的板子缺少EEPROM的情况下,一切依旧OK。
    3.使用mii命令对比开发板与自制板,寄存器值全部一样。
    4.自制板系统启动正常,# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 300000,与米尔开发板相同。
    请教:
    1.是否可以说明硬件设计不是造成GTX_CLK出现50MHZ 的原因?
    2.《Sitara AM335x Bootload的流程分析》文档中提到“通过函数 am335x_get_efuse_mpu_max_freq(cdev)来读取 efuse_sma 寄存器的低 13 位来判别芯片 MPU 的最大频率 Fmax(如左图所示),这点很重要。”这个efuse_sma 寄存器需要配置?
    3.还有其它相关点是我们没有关注到的吗?

    4.USB供电对此有无影响?

  • 米尔的板子是125MHZ,我们怀疑我们的板子不知是什么原因,变为了OPP50,所有GTX_CLK输出50MHZ。
    请教一般什么原因会造成这样的结果?
  • 看一下手册5.4章节,电压和频率之间的关系。OPP配置部分检查过吗?是否配置成了opp100。
    www.ti.com/.../am3358.pdf  

    另外建议您联系米尔公司能更快给您提供帮助。

  • 时钟配置代码:
    void am33xx_spl_board_init(void)
    {
    struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
    uchar pmic_status_reg;
    int usb_cur_lim;
    int mpu_vdd;

    /* Get the frequency */
    dpll_mpu_opp100.m = am335x_get_efuse_mpu_max_freq(cdev);
    i2c_set_bus_num(0);
    if (i2c_probe(TPS65217_CHIP_PM))
    {
    puts("PMIC NOT DETECTED!\n");
    return;
    }

    puts("PMIC DETECTED: TPS65217 \n");

    if (tps65217_reg_read(TPS65217_STATUS,
    &pmic_status_reg))

    {
    return;
    }

    if (!(pmic_status_reg & TPS65217_PWR_SRC_AC_BITMASK)) {
    puts("No AC power, disabling frequency switch\n");
    return;
    }
    /*
    * Increase USB current limit to 1300mA or 1800mA and set
    * the MPU voltage controller as needed.
    */
    if (dpll_mpu_opp100.m == MPUPLL_M_1000) {
    usb_cur_lim = TPS65217_USB_INPUT_CUR_LIMIT_1800MA;
    mpu_vdd = TPS65217_DCDC_VOLT_SEL_1325MV;
    } else {
    usb_cur_lim = TPS65217_USB_INPUT_CUR_LIMIT_1300MA;
    mpu_vdd = TPS65217_DCDC_VOLT_SEL_1275MV;
    }

    if (tps65217_reg_write(TPS65217_PROT_LEVEL_NONE,
    TPS65217_POWER_PATH,
    usb_cur_lim,
    TPS65217_USB_INPUT_CUR_LIMIT_MASK))
    puts("tps65217_reg_write failure\n");

    /* Set DCDC3 (CORE) voltage to 1.125V */
    if (tps65217_voltage_update(TPS65217_DEFDCDC3,
    TPS65217_DCDC_VOLT_SEL_1125MV)) {
    puts("tps65217_voltage_update failure\n");
    return;
    }

    /* Set CORE Frequencies to OPP100 */
    do_setup_dpll(&dpll_core_regs, &dpll_core_opp100);

    /* Set DCDC2 (MPU) voltage */
    if (tps65217_voltage_update(TPS65217_DEFDCDC2, mpu_vdd)) {
    puts("tps65217_voltage_update failure\n");
    return;
    }
    /*
    * Set LDO3 to 1.8V and LDO4 to 3.3V for MYD_J335X board.
    */
    if (tps65217_reg_write(TPS65217_PROT_LEVEL_2,
    TPS65217_DEFLS1,
    TPS65217_LDO_VOLTAGE_OUT_1_8,
    TPS65217_LDO_MASK))
    {
    puts("tps65217_reg_write failure\n");
    }

    if (tps65217_reg_write(TPS65217_PROT_LEVEL_2,
    TPS65217_DEFLS2,
    TPS65217_LDO_VOLTAGE_OUT_3_3,
    TPS65217_LDO_MASK))
    {
    puts("tps65217_reg_write failure\n");
    }

    /* Set MPU Frequency to what we detected now that voltages are set */
    do_setup_dpll(&dpll_mpu_regs, &dpll_mpu_opp100);
    }

    电压与频率有关,这个知道,不明白的是:
    1.电压不是AM335X根据配置通过I2C去调节TPS65217决定的吗?
    2.是电压决定的频率还是频率决定的电压?
    3.电压可以硬件干预?
  • OPP is a pair of voltage frequency value. When scaling from High OPP to Low OPP Frequency is reduced first and then the voltage. When scaling from a lower OPP to Higher OPP we scale the voltage first and then the frequency.

    看一下这个连接。

    http://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/Foundational_Components_Kernel_Drivers.html#id42

  • 请教设置好的PLL和时钟频率是映射到AM335X片内RAM中,还是DDR3中?
    比如这些寄存器地址:
    0x44E00490
    0x44E00468
    0x44E00480
    0x44E00484
  • 你原有的工程里应该有类似于CMD文件的分配内存空间的文件,可以查看该文件。