vxworks phy调试

1.  在BDdrv/*.c文件中编译target/config/mpc8377/vxbEtsecEnd.c
#include "vxbEtsecEnd.c"
STATUS myPhyRead ( VXB_DEVICE_ID pDev, char phyAddr,char regAddr )
    {
        UINT16 dataVal;
    ETSEC_DRV_CTRL * pDrvCtrl;
    STATUS rval = ERROR;
    FUNCPTR miiRead;
    int i;

    pDrvCtrl = pDev->pDrvCtrl;

    if (CSR_READ_4(pDev, ETSEC_ECNTRL) & ETSEC_ECNTRL_TBIM)
        {
        if (regAddr == MII_PHY_ID1_REG)
            {
            dataVal = TBI_ID1;
   printf("dataVal is %#x\n", dataVal);
            return (OK);
            }
        if (regAddr == MII_PHY_ID2_REG)
            {
            dataVal = TBI_ID2;
   printf("dataVal is %#x\n", dataVal);
            return (OK);
            }
        }
    else
        {
        /* Avoid tripping over the TBI management port */

        if (phyAddr == pDrvCtrl->etsecTbiAddr)
            {
            dataVal = 0xFFFF;
   printf("dataVal is %#x\n", dataVal);
            return (ERROR);
            }
        }

    if (phyAddr != pDrvCtrl->etsecMiiPhyAddr && phyAddr < 0x20)
        {
        dataVal = 0xFFFF;
  printf("dataVal is %#x\n", dataVal);
        return (ERROR);
        }

    if (phyAddr > 0x1F)
        phyAddr -= 32;

    /*
     * If we're not the management device (ETSEC0), then
     * forward the read request.
     */

    if (pDrvCtrl->etsecMiiDev != pDev && pDrvCtrl->etsecMiiPhyRead != NULL)
        {
        miiRead = pDrvCtrl->etsecMiiPhyRead;
        phyAddr += 32;
         miiRead (pDrvCtrl->etsecMiiDev, phyAddr, regAddr, &dataVal);
  printf("dataVal is %#x\n", dataVal);
  printf("hi\n");
  return OK;
        }

    semTake (pDrvCtrl->etsecDevSem, WAIT_FOREVER);

    CSR_WRITE_4(pDev, ETSEC_MIIMADD, regAddr | (phyAddr << 8));
    CSR_WRITE_4(pDev, ETSEC_MIIMCOM, 0);
    CSR_WRITE_4(pDev, ETSEC_MIIMCOM, ETSEC_MIIMCOM_READ);

    for (i = 0; i < ETSEC_TIMEOUT; i++)
        {
        if ((CSR_READ_4(pDev, ETSEC_MIIMIND) &
            (ETSEC_MIIMIND_BUSY|ETSEC_MIIMIND_NOT_VALID)) == 0)
            break;
        }

    if (i == ETSEC_TIMEOUT)
        dataVal = 0xFFFF;
    else
        {
        dataVal = CSR_READ_4(pDev, ETSEC_MIIMSTAT) & 0xFFFF;
        rval = OK;
        }

    semGive (pDrvCtrl->etsecDevSem);
 printf("dataVal is %#x\n", dataVal);
    return (rval);
    } 


 

 

2.如何调用

先通过vxBusShow,查看pDev的值

myPhyRead pDev,1,0

 

3.mac和phy的绑定

const struct hcfResource motEtsecHEnd0Resources[] = {
    { "regBase", HCF_RES_INT, { (void *)(CCSBAR + 0x24000) } },
    { "intr0", HCF_RES_INT, { (void *)INUM_TSEC1_TX} },
    { "intr0Level", HCF_RES_INT, { (void *)INUM_TSEC1_TX } },
    { "intr1", HCF_RES_INT, { (void *)INUM_TSEC1_RX } },
    { "intr1Level", HCF_RES_INT, { (void *)INUM_TSEC1_RX } },
    { "intr2", HCF_RES_INT, { (void *)INUM_TSEC1_ERR } },
    { "intr2Level", HCF_RES_INT, { (void *)INUM_TSEC1_ERR } },
    { "phyAddr", HCF_RES_INT, {(void *)0x7 }},   
    { "miiIfName",      HCF_RES_STRING, { (void *)"motetsec" } },
    { "miiIfUnit",      HCF_RES_INT,    { (void *)0 } }
};
#define etsecHEnd0Num NELEMENTS(motEtsecHEnd0Resources)


 

phyaddr的绑定到对应的phy器件上去

4.fiber和copper的区别

VXB_INST_PARAM_OVERRIDE sysInstParamTable[] =
    {
      { "mv88E1x11Phy",1,"mode", VXB_PARAM_INT32, {(void*)MV_HWCFG_RGMII_TO_COPPER}}  
    }


mv88e1x11phy使用参数

r = vxbInstParamByNameGet (pDev, "mode", VXB_PARAM_INT32, &val);

5.phy调用mac的读写

miiBusRead ->miiRead

即通过子类的pDev转成父类的读写

6.当motetsec通过gpio接一个交换机芯片时,即 

此时在vxworks下,我们就不能采用mdio管理交换机芯片了。

只需要通知cpu,交给cpu一个交换机芯片的phy id就可以了

 

 

 

 

 

 

 

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VxWorks调试步骤如下: 1. 确定调试目标(target)和调试主机(host)。目标是运行VxWorks的嵌入式设备,主机是运行调试器的计算机。 2. 连接目标和主机。可以使用串口、以太网、USB等方式连接目标和主机。 3. 配置目标和主机的网络设置。确保主机和目标在同一个网络中,并且可以相互通信。 4. 在主机上启动调试器。常用的VxWorks调试器有Wind River Workbench和Tornado。 5. 在调试器中配置连接目标的参数。包括目标的IP地址、端口号、连接方式等。 6. 连接目标。调试器会尝试连接目标,并且在目标上启动VxWorks调试代理。 7. 在调试器中选择需要调试的程序。可以选择已有的程序,也可以创建新的程序。 8. 在调试器中设置断点和监视点。断点可以在程序执行到指定位置时停止,监视点可以在变量或内存地址发生变化时停止。 9. 启动调试调试器会将程序下载到目标并启动执行。当程序执行到断点或监视点时,会自动停止。 10. 在调试器中查看程序状态和变量值。可以查看程序当前的调用栈、变量值、寄存器值等信息,以便分析程序问题。 11. 修正程序问题。可以在调试器中修改变量值、单步执行、调用函数等方式修正程序问题。 12. 退出调试。当程序调试结束时,可以在调试器中退出调试,并且关闭与目标的连接。 以上是VxWorks调试的基本步骤,具体操作步骤可能会因为调试器版本、目标硬件、连接方式等不同而有所区别。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值