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.

[参考译文] DS280DF810:在连接到通道2和6的端口上未接收数据包。

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1504009/ds280df810-not-receiving-packets-on-ports-connected-to-channel-2-and-6

器件型号:DS280DF810

工具/软件:

在连接到通道2和6的端口上未接收数据包。

传输重定时器通道0,2,4,6输入来自 Broadcom 开关。 输出通道0、2、4、6连接到 SFP+连接器。 在连接器侧、输出侧通道2、6个端口_P 和_N 在连接器侧交换(仅在端口内)。  

我们使用以下代码反转极性

代码根据反转极性  表7-15. 反转输出数据的极性

Uint32 val3 = 0、val1 = 0、val2 = 0;
ReTimerDev[3]->set32 (0xFC、0x20);
uleep(1000);
ReTimerDev[3]->set32 (0x3D、0x80);
uleep(1000000);
ReTimerDev[3]->get32 (0x3D、val1);
uleep(1000);
ReTimerDev[3]->get32 (0x3E、val2);
uleep(1000);
ReTimerDev[3]->get32 (0x3F、val3);
日志(this_block< <"Prashant K Before inverting val1 "<<"="" val2="" val3="" val3); usleep(1000000);
val1 ^= (1 << 6);
val2 ^= (1 << 6);
val3 ^= (1 << 6);
LOG(THIS_BLOCK<<"Prashant K after inverting val1 "<<"="" val2="" val3="" val3); ReTimerDev[3]->set32(0x3D, val1);
usleep(1000000);
ReTimerDev[3]->set32(0x3E, val2);
usleep(1000000);
ReTimerDev[3]->set32(0x3F, val3);
usleep(1000000);
LOG(THIS_BLOCK<<" val1 "<<"="" val2="" val3="" val3);

val1 = 0;
val2 = 0;
val3 = 0;

ReTimerDev[3]->set32(0xFC, 0x80);
usleep(1000);
ReTimerDev[3]->set32(0x3D, 0x80);
usleep(1000000);
ReTimerDev[3]->get32(0x3D, val1);
usleep(1000);
ReTimerDev[3]->get32(0x3E, val2);
usleep(1000);
ReTimerDev[3]->get32(0x3F, val3);
usleep(1000);
LOG(THIS_BLOCK<<"Prashant K Before inverting val1 "<<"="" val2="" val3="" val3); val1 ^= (1 << 6);
val2 ^= (1 << 6);
val3 ^= (1 << 6);
LOG(THIS_BLOCK<<"Prashant K After inverting val1 "<<"="" val2="" val3="" val3); ReTimerDev[3]->set32(0x3D, val1);
usleep(1000000);
ReTimerDev[3]->set32(0x3E, val2);
usleep(1000000);
ReTimerDev[3]->set32(0x3F, val3);
usleep(1000000);
LOG(THIS_BLOCK<<" val1 "<<"="" val2="" val3="" val3);
Is there any issue with the code, with this code ports connected to channel 2 and 6 started working but ports  5 and 6 stopped working.

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

    您好 Sridhar、

    感谢您在 DS280DF810上发布您的疑问。

    已指派一名工程师参与此项咨询、旨在在明天美国太平洋时间的一天结束前为您提供反馈。

    在此期间、请您澄清以下陈述:

    [quote userid="633852" url="~/support/interface-group/interface/f/interface-forum/1504009/ds280df810-not-receiving-packets-on-ports-connected-to-channel-2-and-6通过此代码端口连接到通道2和通道6开始工作、但端口 5和端口6停止工作。
    • 在您的设计中、哪些重定时器通道与端口5和6相关联? 根据所使用的命名规则、该术语并不明确。

    此致、
    David

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

    您好、David:

    对上述内容进行澄清  

    在反转之前、端口7和8中没有发生极性 TX。

    这是 PORT_TO_TX_RETIMER_MAP {/*通道编号*/、/TX 重定时器编号*/}

    端口5、6、7、8分别为{0、0}、{4、0}、{2、0}、{6、0}。

    通道0和2与端口5和6相关联。

    由于端口7和8实际出问题、

    我们尝试使用以下代码修复相同的问题


    //ReTimerDev[0]->get32 (0xFC、val);
    //val |=(1<<2);
    ReTimerDev[0]->set32 (0xFC、0x4);
    uleep(1000);
    ReTimerDev[0]->set32 (0x3D、0x80);
    uleep(1000000);
    ReTimerDev[0]->get32 (0x3D、val1);
    uleep(1000);
    ReTimerDev[0]->get32 (0x3E、val2);
    uleep(1000);
    ReTimerDev[0]->get32 (0x3F、val3);
    日志(this_block< <"Prashant K Before inverting val1 "<<"="" val2="" val3="" val3); usleep(1000000);
    val1 ^= (1 << 6);
    val2 ^= (1 << 6);
    val3 ^= (1 << 6);
    LOG(THIS_BLOCK<<"Prashant K after inverting val1 "<<"="" val2="" val3="" val3); ReTimerDev[0]->set32(0x3D, val1);
    usleep(1000000);
    ReTimerDev[0]->set32(0x3E, val2);
    usleep(1000000);
    ReTimerDev[0]->set32(0x3F, val3);
    usleep(1000000);
    ReTimerDev[0]->set32(0xFC, 0x00);
    usleep(1000);
    LOG(THIS_BLOCK<<" val1 "<<"="" val2="" val3="" val3); }

    val = 0;
    val1 = 0;
    val2 = 0;
    val3 = 0;

    if(port == 8){

    //ReTimerDev[0]->get32(0xFC, val);
    //val |=(1<<2);
    ReTimerDev[0]->set32(0xFC, 0x40);
    usleep(1000);
    ReTimerDev[0]->set32(0x3D, 0x80);
    usleep(1000000);
    ReTimerDev[0]->get32(0x3D, val1);
    usleep(1000);
    ReTimerDev[0]->get32(0x3E, val2);
    usleep(1000);
    ReTimerDev[0]->get32(0x3F, val3);
    usleep(1000);

    val1 ^= (1 << 6);
    val2 ^= (1 << 6);
    val3 ^= (1 << 6);

    ReTimerDev[0]->set32(0x3D, val1);
    usleep(1000000);
    ReTimerDev[0]->set32(0x3E, val2);
    usleep(1000000);
    ReTimerDev[0]->set32(0x3F, val3);
    usleep(1000000);
    ReTimerDev[0]->set32(0xFC, 0x00);
    usleep(1000);
    LOG(THIS_BLOCK<<" val1 "<<"="" val2="" val3="" val3); }

    we have a code which reads all the 4 channels on retimer0, 

    Before inverting polarity port 7
    Retimer[0] Channel 0 Reg 3D 4294967066 Reg 3E 4294967104 Reg 3F 4294967104
    Retimer[0] Channel 2 Reg 3D 4294967066 Reg 3E 4294967104 Reg 3F 4294967104
    Retimer[0] Channel 4 Reg 3D 4294967066 Reg 3E 4294967104 Reg 3F 4294967104
    Retimer[0] Channel 6 Reg 3D 4294967066 Reg 3E 4294967104 Reg 3F 4294967104

    After inverting polar =ity port 7
    Retimer[0] Channel 0 Reg 3D 4294967232 Reg 3E 4294967040 Reg 3F 4294967040
    Retimer[0] Channel 2 Reg 3D 4294967232 Reg 3E 4294967040 Reg 3F 4294967040
    Retimer[0] Channel 4 Reg 3D 4294967232 Reg 3E 4294967040 Reg 3F 4294967040
    Retimer[0] Channel 6 Reg 3D 4294967232 Reg 3E 4294967040 Reg 3F 4294967040



    Before inverting polarity port 8
    Retimer[0] Channel 0 Reg 3D 4294967232 Reg 3E 4294967040 Reg 3F 4294967040
    Retimer[0] Channel 2 Reg 3D 4294967232 Reg 3E 4294967040 Reg 3F 4294967040
    Retimer[0] Channel 4 Reg 3D 4294967232 Reg 3E 4294967040 Reg 3F 4294967040
    Retimer[0] Channel 6 Reg 3D 4294967232 Reg 3E 4294967040 Reg 3F 4294967040

    After inverting polarity port 8
    Retimer[0] Channel 0 Reg 3D 4294967232 Reg 3E 4294967104 Reg 3F 4294967104
    Retimer[0] Channel 2 Reg 3D 4294967232 Reg 3E 4294967104 Reg 3F 4294967104
    Retimer[0] Channel 4 Reg 3D 4294967232 Reg 3E 4294967104 Reg 3F 4294967104
    Retimer[0] Channel 6 Reg 3D 4294967232 Reg 3E 4294967104 Reg 3F 4294967104


    With this all the 4 channels associated with retimer0 is getting overwritten. Is there an issue with channel selection?

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

    尊敬的  Sridhar:

    我正在研究这一点、很快会回来联系您。

    谢谢、
    Drew

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

    尊敬的  Sridhar:

    对延迟深表歉意。

    根据您的描述、我注意到了几件事。   我的理解是、您尝试在重定时器通道2和6上反转极性。

    • 是否在设置0xFC 之前设置0xFF = 0x01?  这将确保您不会广播写入并且选择了通道寄存器。
    • 在端口8极性反转之前/之后、寄存器0x3D 没有改变。  这是奇怪的,你明白吗?
    • 我注意到您设置的是0x3D = 0x80。  这是一个很好的设置、可启用 FIR 前游标/后游标、但也可将主游标值(0x3D[4:0])置为零。  您是否将主光标设置在其他位置?
    • 使用 set32函数时、您能否确认仅将1字节的数据写入重定时器寄存器?  要确保这实际上不执行4次寄存器写入。

    谢谢、

    Drew

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

    很抱歉延迟回复。  通过设置0xFF =0x01寄存器、这解决了问题。

    非常感谢您的评分