搜索
bottom↓
回复: 4

关于以太网芯片的问题

[复制链接]

出0入0汤圆

发表于 2011-10-15 19:14:12 | 显示全部楼层 |阅读模式
最近到手一块板子,上面有ADM6993 加华邦的W78LE58(51),没事干就写了下SMI管理口的程序,发现读地址1的数不对,只有1,3地址是不为0的,其他读出来的都是0,6993是3口以太网芯片,愿意帮我的话网上可以下一下资料看,在帮我看看程序谢谢。如果那位写过这个程序那就奉献一下参考一下也非常感谢。
它这个接口类似于I2C,只是帧结构不一样而已。

=>regad=0x01:rdata=0x3C4D1954:
=>[H:00111100:01001101:00011001:01010100:L]..地址1打出来得值

=>regad=0x03:rdata=0x00011F00:
=>[H:00000000:00000001:00011111:00000000:L]..地址3打出来得值

=>regad=0x04:rdata=0x00000000:
=>[H:00000000:00000000:00000000:00000000:L]..从地址4以后打出来的值都是0

=>regad=0x0D:rdata=0x00000000:
=>[H:00000000:00000000:00000000:00000000:L]

而且也写不进去,下面上一下我的读写程序。那位用过这个芯片的大哥指教指教看看。万分感谢。

//****************************************
EX. <35”1”s><01><01><00000><00100><10><001 0000000 000001 0001000001000000>帧结构
long unsigned int SMI_read(uint ad)//ADM6993 SMI read
{       
        uchar a,d;long unsigned int recdata;

        SDC=1;
        SDIO=1;
        delay(50);

        for(a=0;a<35;a++){
               
                        SDC=0;
                        delay(20);
                        SDIO=1;
                        SDC=1;
                        delay(20);                       
                                }
        SDC=0;
        delay(20);

        //start.2
        SDIO=0;//.0
        SDC=1;
        delay(20);
        SDC=0;
        delay(20);
       
        SDIO=1;//.1
        SDC=1;
        delay(20);
        SDC=0;
        delay(20);
        //Opcode(read[10]).2
        SDIO=1;//.1
        SDC=1;
        delay(20);
        SDC=0;
        delay(20);

        SDIO=0;//.0
        SDC=1;
        delay(20);
        SDC=0;
        delay(20);
        /*
        //unused.3
        SDIO=0;//.0
        delay(20);
        SDC=1;
        delay(20);
        SDC=0;

        SDIO=0;//.0
        SDC=1;
        SDC=0;

        SDIO=0;//.0
        SDC=1;
        SDC=0;*/
        //eeprom ad.6
        ad=ad<<6;
        for(a=0;a<10;a++)
                {
                        if(ad&0x8000)SDIO=1;
                        else SDIO=0;
                        delay(20);
                        SDC=1;
                        ad=(ad<<1);
                        delay(20);
                        SDC=0;
                }
        //EX. <35”1”s><01><01><00000><00100><10><001 0000000 000001 0001000001000000>
        //TA.2
        delay(50);
        SDIO=0;//.0
        delay(20);
        SDC=1;
        delay(20);
        SDC=0;
        //delay(20);
       
        SDIO=0;//.1
        delay(20);
        SDC=1;
        delay(20);
        SDC=0;
        delay(20);
        //Register Data .32(16bit CMD&resdata)
        for(a=0;a<32;a++)
                {
                SDC=1;
                delay(20);
                d=SDIO;
                recdata=(recdata<<1)|d;               
                SDC=0;
                delay(20);
                }
        /*for(a=0;a<16;a++)
                {
                SDC=1;
                delay(20);
                d=SDIO;
                recdata=(recdata<<1)|d;       
               
                SDC=0;
                delay(20);
                }*/
        return recdata;
        SDC=0;//释放总线
        SDIO=1;
}


//****************************************
EX. <35”1”s><01><01><00000><00100><10><001 0000000 000001 0001000001000000>帧结构
void SMI_write(uint ad,long unsigned int wridata)//ADM6993 SMI write
{       
        uchar a;

        SDC=1;
        SDIO=1;
        delay(50);

        for(a=0;a<35;a++){
               
                        SDC=0;
                        delay(20);
                        SDIO=1;
                        SDC=1;
                        delay(20);                       
                                }
        SDC=0;
       

        //start.2
        SDIO=0;//.0
        delay(20);
        SDC=1;
        delay(20);
        SDC=0;
       
       
        SDIO=1;//.1
        delay(20);
        SDC=1;
        delay(20);
        SDC=0;
       
        //Opcode(write[01]).2
        SDIO=0;//.1
        delay(20);
        SDC=1;
        delay(20);
        SDC=0;
       

        SDIO=1;//.0
        delay(20);
        SDC=1;
        delay(20);
        SDC=0;
        delay(20);
        /*
        //unused.3
        SDIO=0;//.0
        delay(20);
        SDC=1;
        delay(20);
        SDC=0;

        SDIO=0;//.0
        SDC=1;
        SDC=0;

        SDIO=0;//.0
        SDC=1;
        SDC=0;*/
        //eeprom ad.6
        ad=ad<<6;
        for(a=0;a<10;a++)
                {
                        if(ad&0x8000)SDIO=1;
                        else SDIO=0;
                        delay(20);
                        SDC=1;
                        ad=(ad<<1);
                        delay(20);
                        SDC=0;
                }
        //EX. <35”1”s><01><01><00000><00100><10><001 0000000 000001 0001000001000000>
        //TA.2
        delay(50);
        SDIO=1;//.1
        delay(20);
        SDC=1;
        delay(20);
        SDC=0;
        //delay(20);
       
        SDIO=0;//.0
        delay(20);
        SDC=1;
        delay(20);
        SDC=0;
        delay(20);
        //Register Data .32(16bit CMD&resdata)
        for(a=0;a<32;a++)
                {
                if(wridata&0x80000000)SDIO=1;
                else SDIO=0;
               
                wridata=(wridata<<1);
                delay(20);
                SDC=1;               
                delay(20);
                SDC=0;
               
                }
        /*for(a=0;a<16;a++)
                {
               
                if(wridata&0x80000000)SDIO=1;
                else SDIO=0;       
                wridata=(wridata<<1);
                delay(20);
                SDC=1;               
                delay(20);
                SDC=0;
                }*/
        //return recdata;
        SDC=0;//释放总线
        SDIO=1;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2011-10-15 20:30:12 | 显示全部楼层
没人回啊、

出0入0汤圆

 楼主| 发表于 2011-10-26 21:09:35 | 显示全部楼层
看来这里用这个IC的人少啊。

出0入0汤圆

发表于 2012-2-26 00:50:43 | 显示全部楼层
最好仔细看看你模拟MDIO接口的时序是否正确,然后仔细看看芯片的datasheet,各个寄存器的地址

出0入0汤圆

 楼主| 发表于 2012-9-22 22:51:47 | 显示全部楼层
RLCIC 发表于 2012-2-26 00:50
最好仔细看看你模拟MDIO接口的时序是否正确,然后仔细看看芯片的datasheet,各个寄存器的地址 ...

这个代码,以前是有人用过的的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 10:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表