使用的平台是根据6678的EVM板而构造的,一共制作了三块板子。调用官方的platform_test程序在前两块实验板上都能正常运行,但是在第三块实验板上遇到了问题。程序卡死在读取sgmii初始化的CSL_SGMII_getStatus(0, &sgmii_status);语句上。后续发现该程序读取的寄存器所在的4k内存空间0x2090000至0x2091000,使用ccs的memory browser工具查看时全是问号,且调试工具会立即报错。
Shine:
请看一下GEL文件有没有加载?GEL文件里有没有配置这块地址?GEL_MapAddStr( 0x02090000, 0, 0x00030000, "R|W|AS4", 0 );
另外,测量一下SYSCLKOUT管脚有没有正确的时钟输出?
user5396470:
回复 Shine:
已经尝试过有gel(有上述地址配置)和无gel两种启动形式,结果都是一样的,都是上图所示的情况。另外,sysclkout由于板子设计上的不足,没有引出脚,无法检测其输出情况。
user5396470:
回复 Shine:
还有其他的内存部分都是可读的,只有包含sgmii的4kb区间不可读,而且这个程序在其他板子上也是可读的,不论有没有gel初始化。
Shine:
回复 user5396470:
检查一下电源,复位信号是否稳定?和好的板子对比一下SGMII那块的电路和初始化后的寄存器值是否一样?
user5396470:
回复 Shine:
感谢您的回复,今天重新测了一下,电源和复位信号是好的。
今天重新找了一下导致程序出错的点,发现实际在platform_init函数调用的PowerUpDomains函数中的语句CSL_PSC_startStateTransition (CSL_PSC_PD_PASS);运行后会导致无法读取0x2090000至0x2091000间的数据。
虽然这个程序在这里会导致后续寄存器读取的错误,但是程序却能顺利地通过该句后续的判定语句while (!CSL_PSC_isStateTransitionDone (CSL_PSC_PD_PASS));我看了一下这个寄存器的值,好坏板子都始终是0(在程序中每一步都读了一次该值),不知道是否正常。
注释掉这一句后,0x2090000至0x2091000的数据可读,但是始终为零,理论上应该有值的0x2090114(&sgmii_status)也始终为0,导致程序卡死在sgmii初始化的判定句while (sgmii_status.bIsLocked != 1);
这种情况和PASS的外围电路有关吗?尽管我现在能找到的相关外围电路只有一个PASSCLK。
Shine:
回复 user5396470:
请看下面e2e工程师对您的问题的回复。
e2e.ti.com/…/3464185
user5396470:
回复 Shine:
非常感谢