sgg19964

sgg19964

0个粉丝

8

问答

0

专栏

0

资料

sgg19964  发布于  2018-04-10 18:33:21
采纳率 0%
8个问答
2918

Hi3531 phy移植

 
自己设计了个板子,用的TI的工业PHY,但是是MII接口。海思uboot用的默认RGMII接口,请问如果要移植此PHY芯片的话应该怎么改?我打开了uboot/include/configs/godnet.h。是吧#define STMMAC_RGMII改为#define STMMAC_MII吗?代码如下:谢谢....
#define CONFIG_NET_STMMAC
#define CONFIG_TNK
#ifdef CONFIG_NET_STMMAC
        #define STMMAC_GMACADDR                (0x101c0000)
        #define STMMAC_DMAADDR                (0x101c1000)
        #define STMMAC_IOSIZE                (0x10000)
        #define STMMAC_FRQDIV                (0)
        #define STMMAC_PHYADDR0                (1)
        #define STMMAC_PHYADDR1                (2)
        #define STMMAC_PHYNAME                "0:01"
        #define STMMAC_RGMII
        #define CONFIG_PHY_GIGE
#endif /* CONFIG_NET_STMMAC */
我来回答
回答5个
时间排序
认可量排序

sgg19964

0个粉丝

8

问答

0

专栏

0

资料

sgg19964 2018-04-10 18:52:15
认可0
找着在哪里了

sgg19964

0个粉丝

8

问答

0

专栏

0

资料

sgg19964 2018-04-11 22:49:55
认可0
还是不行。在原来的板上也不行。将#define STMMAC_RGMII这一行注释点重新编译uboot后。将PHY芯片改成MII模式。采用mii read和mii write命令可以读到和写入数据。但是网络就是不通,ping不通。但是改回RGMII模式就可以。是不是uboot还有其他地方要改。有没有大神做过类似的移植?十分感谢

sgg19964

0个粉丝

8

问答

0

专栏

0

资料

sgg19964 2018-04-16 18:11:43
认可0
有没有大神帮忙提下意见?现在执行ping指令时用wireshark能抓到收到的广播包。但是就是收不到计算机返回的数据

sgg19964

0个粉丝

8

问答

0

专栏

0

资料

sgg19964 2018-04-16 18:17:20
认可0
int eth_rx(void)
{
        struct stmmac_netdev_local *ld = stmmac_curr;
        int timeout_us = 100000;
        int lenth = 0;
        unsigned int rx_status = 0;
        printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@start eth_rx\n");
        rd.length |= 0x7d0;
        rd.buffer1 = (unsigned int)NetRxPackets[0];
        rd.status = DESCOWNBYDMA;

        /* Start RCV */
#ifdef CONFIG_TNK
        writel(DMA_CONTROL_SR | 0x3200000, ld->iobase_dma + DMA_CONTROL);
#else
        writel(DMA_CONTROL_SR, ld->iobase_dma + DMA_CONTROL);
#endif

        while ((--timeout_us) && ((rd.status & DESCOWNBYDMA) == DESCOWNBYDMA)) {
                /*Enable DMA receive poll demand */
                writel(0x1, ld->iobase_dma + DMA_RCV_POLL_DEMAND);
                if((timeout_us % 1000) == 0)
                {
                        printf("%s MAC_CTRL_REG:=%x\n", __func__, readl(ld->iobase_gmac + MAC_CTRL_REG));
                        printf("%s GMAC_MMC_RXFRAMECOUNT_GB:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXFRAMECOUNT_GB));
                        printf("%s GMAC_MMC_RXOCTETCOUNT_GB:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXOCTETCOUNT_GB));
                        printf("%s GMAC_MMC_RXOCTETCOUNT_G:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXOCTETCOUNT_G));
                        printf("%s GMAC_MMC_RXBROADCASTFRAMES_G:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXBROADCASTFRAMES_G));
                        printf("%s GMAC_MMC_RXCRCERROR:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXCRCERROR));
                        printf("%s GMAC_MMC_RXALIGNMENTERROR:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXALIGNMENTERROR));
                        printf("%s GMAC_MMC_RXRUNTERROR:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXRUNTERROR));
                        printf("%s GMAC_MMC_RXJABBERERROR:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXJABBERERROR));
                        printf("%s GMAC_MMC_RXUNDERSIZE_G:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXUNDERSIZE_G));
                        printf("%s GMAC_MMC_RXOVERSIZE_G:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXOVERSIZE_G));
                        printf("%s GMAC_MMC_RXUNICASTFRAMES_G:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXUNICASTFRAMES_G));
                        printf("%s GMAC_MMC_RXLENGTHERROR:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXLENGTHERROR));
                        printf("%s GMAC_MMC_RXOUTOFRANGETYPE:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXOUTOFRANGETYPE));
                        printf("%s GMAC_MMC_RXPAUSEFRAMES:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXPAUSEFRAMES));
                        printf("%s GMAC_MMC_RXFIFOOVERFLOW:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXFIFOOVERFLOW));
                        printf("%s GMAC_MMC_RXVLANFRAMES_GB:=%x\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXVLANFRAMES_GB));
                        printf("%s GMAC_MMC_RXWATCHDOGERROR:=%x\n\n", __func__, readl(ld->iobase_gmac + GMACN_MMC_RXWATCHDOGERROR));
                }
        }

        if (!timeout_us) {
                memset((void *)&rd, 0, sizeof(struct dma_desc));
                rd.length = RXDESCENDOFRING;

                printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ recieve time out\n");

                return -1;
        }

        rx_status = rd.status;
        lenth = ((rx_status & DESCRXLENTHMASK) >> DESCRXLENTHSHIFT) - 4;
        printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@receive lenth = %d\n",lenth);
        NetReceive((uchar *)NetRxPackets[0], lenth);

        /* Reset desc */
        memset((void *)(&rd), 0, sizeof(struct dma_desc));
        rd.length = RXDESCENDOFRING;

        return 0;
}
进去看了一下,这个函数下面也没有收到数据

sgg19964

0个粉丝

8

问答

0

专栏

0

资料

sgg19964 2018-04-17 10:45:41
认可0
顶一下。。。
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区