AM3352+AR8035,ping不通,用示波器测试RGMII的TX_CLK是50MHZ,RX_CLK是125MHZ,板子是自己设计的,请教有哪些原因会造成TX_CLK是50MHZ?
Nancy Wang:
您本来期望配置的频率是多少?检查一下CORE_PLL的配置。
user4714789:
回复 Nancy Wang:
期望频率是125MHZ,使用米尔SDK,ping不通,就检查了GTX_CLK、RX_CLK。正常情况下,GTX_CLK不应该是2.5MHZ、25MHZ或者125MHZ么?您说的“检查一下CORE_PLL的配置”,能详细说明一下不?没明白什么意思。
Nancy Wang:
回复 user4714789:
是的,应该是2.5MHZ、25MHZ或者125MHZ。
建议检查你的PLL的配置,从主OSC开始向下到以太网部分,确保频率和分配器是正确的。可以参考TRM里面提供的时钟树来理解。
yongqing wang:
回复 user4714789:
有没有使用米尔的板子看看是啥频率?
user4714789:
回复 Nancy Wang:
我阅读了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供电对此有无影响?
user4714789:
回复 yongqing wang:
米尔的板子是125MHZ,我们怀疑我们的板子不知是什么原因,变为了OPP50,所有GTX_CLK输出50MHZ。
请教一般什么原因会造成这样的结果?
Nancy Wang:
回复 user4714789:
看一下手册5.4章节,电压和频率之间的关系。OPP配置部分检查过吗?是否配置成了opp100。 www.ti.com/…/am3358.pdf
另外建议您联系米尔公司能更快给您提供帮助。
user4714789:
回复 Nancy Wang:
时钟配置代码:
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.电压可以硬件干预?
Nancy Wang:
回复 user4714789:
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
user4714789:
回复 Nancy Wang:
请教设置好的PLL和时钟频率是映射到AM335X片内RAM中,还是DDR3中?
比如这些寄存器地址:
0x44E00490
0x44E00468
0x44E00480
0x44E00484