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.

[参考译文] CCS/TMS570LS3137:TMS570LS3137

Guru**** 2481465 points
Other Parts Discussed in Thread: TMS570LS3137, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/692914/ccs-tms570ls3137-tms570ls3137

器件型号:TMS570LS3137
主题中讨论的其他器件: HALCOGEN

工具/软件:Code Composer Studio

我尝试了 tms570ls3137 HDK 的 EMAC 示例代码 lwip_v002, 调试时发现的问题是,它似乎进入函数 MDIOPhyRegRad()并被吸入无限循环。请帮助我解决此问题。

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

    要在 HDK 上使用以太网、应将 ETHERNET_ON 推到右侧位置(DIP 开关 S2的通道4)。

    MDIO_CLK 和 MDIO_D 与其他信号进行多路复用。 设置 S2是将 MDIO 信号路由到以太网 PHY。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答、

    我有以太网 DIP 开关、但仍在环路内舍入  

    问题的根本原因可能是什么、我可以从驱动程序配置或其他方面开始对其进行故障排除。

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

    影响 PHY 寄存器读数的唯一因素是 MDCLK 和 MDIO 的引脚多路复用。 MDCLK 与 MIPI3nCS[1]和 NeHET1[25]进行多路复用。 MDIO 与 MibSPI1nCS[2]和 NHET1[19]复用。

    MDCLK:pinmux7[10:8]应该为 B100。 地址为0xFFFFFFEB2C。
    MDIO:pinmux9[10]应为 B100。 地址为0xFFFFFFEB30。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的支持 QJ Wang、我向您确认了这件事。

    谢谢、此致、

    Aravind.M

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

    我编写了一个简单的代码、将数据写入 PHY 寄存器、并从多个寄存器中读取该值。 这可用于检查 MDIO 是否正常工作。 只需复制到您的 HALCOGen 生成的项目即可。

    /*用户代码开始(0)*/
    /*用户代码结束*/

    /*包含文件*/


    /*用户代码开始(1)*/
    /*用户代码结束*/


    *@应用程序主函数简介
    *@请注意、默认情况下、此函数为空。
    *
    *此函数在启动后调用。
    *用户可以使用此函数来实现应用程序。
    *

    /*用户代码开始(2)*/

    uint16_t phy_getReg (uint16_t phynum、uint16_t RegNum)

    uint16_t 值;

    MDIO_USERACCESS0 = 0 //读取 PHY ID 1
    |(1 <<31) //[31]开始
    |(0 << 30) //[30]读取
    |(0 << 29) //[29]采集
    |((RegNum & 0x1F)<<21) //[25-21] PHY 寄存器地址
    |((phynum & 0x1F)<<16) //[20-16] PHY 地址
    |(0 << 0); //[15-0]数据

    while (MDIO_USERACCESS0 & 0x8000000);//等待结果

    值= MDIO_USERACCESS0;
    返回值;


    void phy_setreg (uint16_t phynum、uint16_t Regnum、uint16_t data)

    MDIO_USERACCESS0 = 0 //读取 PHY ID 1
    |(1 <<31) //[31]开始
    |(1 <<30) //[30]写入
    |(0 << 29) //[29]采集
    |((RegNum & 0x1F)<<21) //[25-21] PHY 寄存器地址
    |((phynum & 0x1F)<<16) //[20-16] PHY 地址
    |((数据和0xFFFF)<<0); //[15-0]数据

    while (MDIO_USERACCESS0 & 0x8000000);//等待结果


    void delay (void){
    静态易失性 unsigned int delayval;
    delayval = 10000;// 100000大约为10ms
    while (delayval -);


    /*用户代码结束*/
    int main (空)

    /*用户代码开始(3)*/
    uint16_t i;
    uint16_t phy_Ctrl_reg;

    /*------------------------------------ *
    * Init PHY/MDIO *
    ********************************************************************************************** *
    MDIO_CONTROL = 0x41000020; //启用 MII 接口0x40000001

    delay();

    MDIO_USERACCESS0 = 0 //读取 PHY ID 1
    |(1 <<31) //[31]开始
    |(0 << 30) //[30]读取
    |(0 << 29) //[29]采集
    |(2 <<21) //[25-21] PHY 寄存器地址
    |(1 <<16) //[20-16] PHY 地址
    |(0 << 0); //[15-0]数据

    while (MDIO_USERACCESS0 & 0x8000000);//等待结果

    PHY_CTRL_reg = 0
    |(0 <<15) //重置
    |(0 <<14) //环回
    |(1 <<13) //速度选择
    |(1 <<12) //自协商启用
    |(0 <<11) //断电
    |(0 <<10) //隔离
    |(0 <<9) //重新启动自动协商
    |(1 <<8) //双工模式
    |(0 <<7) //冲突测试
    |(0 <<6); //速度选择

    MDIO_USERACCESS0 = 0 //设置控制寄存器
    |(1 <<31) //[31]开始
    |(1 <<30) //[30]写入
    |(0 << 29) //[29]采集
    |(0 << 21) //[25-21] PHY 寄存器地址
    |(1 <<16) //[20-16] PHY 地址
    |(phy_ctrl_reg << 0); //[15-0]数据

    while (MDIO_USERACCESS0 & 0x8000000);//等待结果

    //回读 PHY 寄存器
    PCSR = phy_getReg (1、0x16);
    PCSR = phy_getReg (1、0x19);
    PCSR = phy_getReg (1、0x18);
    PCSR = phy_getReg (1、0x1B);



    /*等待链接*/
    //正在等待链接...
    while ((phy_getReg (1、1)& 0x4)==0);

    /*用户代码结束*/

    返回0;



    /*用户代码开始(4)*/
    /*用户代码结束*/