查看: 4107|回复: 10

[原创] 自制RT1176三网口开发板,终于调通了

[复制链接]

该用户从未签到

1

主题

8

帖子

0

注册会员

Rank: 2

积分
53
最后登录
2024-5-24
发表于 2024-3-4 14:53:34 | 显示全部楼层 |阅读模式
本帖最后由 eefocus_3952700 于 2024-3-6 12:14 编辑

做了一个最简单的RT1176加两个千兆网(RTL8211FDI)和一个百兆网(KSZ8081RNB)的最小系统。最简化了系统,VDD_SNVS 和VDD_LPSR和DCDC_IN 电源直接连接, 没有SDRAM,外接一个W25Q32。

最开始搞半天程序无法运行,也无法调试。。后来发现BOOT cfg 那一堆电阻,有一个阻值太大了。这个非常难找,因为万用表量是对的,后来按“痞子衡嵌入式:如果i.MXRT1xxx离线无法启动,请先查看SRC_SBMRx寄存器” 说的方法,用JLINK查看SRC_SBMRx寄存器。。果然发现有一个启动配置引脚不对。。

后来在SDK基础上改改。。两个千兆网(RTL8211FDI)都可以正常ping通了。但是现在百兆网居然不通:(
使用SDK例子, 用jlink调试,发现已经调用ENET_SendFrame发送数据了,数据已经发到了ring里 但是查看发送描述符,发现DMA始终没有把数据发出去, TDAR寄存器里TDAR也是1. 也说明DMA没有把数据发出去。。。enet其它寄存器看着都正常,模式是RMII。

示波器看ENET_TX_REF_CLK有50M clk输出, 但是tx_en,  tx_data0, tx_data1上始终没有脉冲波形。PIN_mux应该没问题。。如果有问题,是不是也不应该影响内部DMA发出去吧。。。不知道各位大神有遇到过类似问题么。。



捕获.PNG
回复

使用道具 举报

该用户从未签到

0

主题

2

帖子

0

新手上路

Rank: 1

积分
15
最后登录
2024-3-23
发表于 2024-3-23 09:50:37 | 显示全部楼层
很强啊兄弟,又调板子,又直接调协议栈,没几个人能改的动
回复 支持 1 反对 0

使用道具 举报

该用户从未签到

1

主题

8

帖子

0

注册会员

Rank: 2

积分
53
最后登录
2024-5-24
 楼主| 发表于 2024-3-4 18:14:01 | 显示全部楼层
今天检查时钟,51号时钟配置没有问题,检查分散加载文件,描述符放在noncache区,没问题。。实际上测千兆的时候描述符放哪都没事。。试过放在DTCM里居然也可以
MDIO正常, 可以检测到网线插拔的link状态
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

8

帖子

0

注册会员

Rank: 2

积分
53
最后登录
2024-5-24
 楼主| 发表于 2024-3-5 18:00:17 | 显示全部楼层
今天继续调试, 发送描述符:curBuffDescrip->control, curBuffDescrip->length,curBuffDescrip->buffer都正常,然后调用ENET_ActiveSendRing(base, ringId); curBuffDescrip->control里的R位一直是1,不变0..说明uDMA没有发数据。  而用千兆网enet_1g的时候,调用ENET_ActiveSendRing(base, ringId);之后 curBuffDescrip->control里的R位马上就变0了。。。。可能还是百兆网ENET哪里没设对
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

8

帖子

0

注册会员

Rank: 2

积分
53
最后登录
2024-5-24
 楼主| 发表于 2024-3-6 12:22:39 | 显示全部楼层
本帖最后由 eefocus_3952700 于 2024-3-6 12:29 编辑

今天终于调通了,还真是PIN_MUX的问题, ENET_REF_CLK 要配置为强制输入通道,也就是
IOMUXC_SetPinMux(IOMUXC_GPIO_DISP_B2_05_ENET_REF_CLK,  1U);   之前我这里配置成了0U.
ENET_REF_CLK本身是1176的输出。 但是感觉是MAC模块除了内部时钟外,还需要这个时钟才能工作,要在pin_mux里把这个管脚的强制输入通道再打开,给enet.提供时钟。如果不打开,MAC收发,uDMA都没有工作。。。参考手册也没有说。。枉费我调试检查了每个enet的寄存器都正常
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

8

帖子

0

注册会员

Rank: 2

积分
53
最后登录
2024-5-24
 楼主| 发表于 2024-3-12 10:34:16 | 显示全部楼层
又遇到了软件问题。。SDK的例子只有单网口运行的。。用不同程序单独测试每个网口是可以的。。用同一程序同时打开三个网口用。。SDK没有现成的例子。。好在enet和 enet_1g用的相同的底层enet_ethernetif_kinetis.c,这两个比较容易同时打开用。。enet_qos用的不同的 enet_ethernetif_qos.c. 关键里面函数名还是和enet_ethernetif_kinetis.c相同的。。甚至struct ethernetif这个全局结构体名字都是一样的,但内容不一样。。如果三个网都连lwip 软件得一通改。。现在还没搞定。。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

8

帖子

0

注册会员

Rank: 2

积分
53
最后登录
2024-5-24
 楼主| 发表于 2024-3-19 10:03:06 | 显示全部楼层
本帖最后由 eefocus_3952700 于 2024-3-19 10:05 编辑

一通改, 三个网口都可以用了,主要是 enet_ethernetif_qos.c里所有函数,要增加_qos后缀, 修改lwip/port下的文件, 相应调用的地方进行改动。 比如 :                       if(*(unsigned int*)(netif_->state) == ENET_QOS_BASE)
                     ethernetif_on_link_up_qos(netif_, speed, duplex);                     
                 else                     
                     ethernetif_on_link_up(netif_, speed, duplex);
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

新手上路

Rank: 1

积分
16
最后登录
2024-8-5
发表于 2024-6-6 21:24:05 | 显示全部楼层
我现在也做了一个imxrt1176的三网口,100兆是可以工作的,enet_1G还没调通,enet_qos还没调
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2025-7-4 08:15
  • 签到天数: 336 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3

    主题

    1573

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    5819
    最后登录
    2025-9-5
    发表于 2024-6-7 16:09:59 | 显示全部楼层
    厉害了,三网口板
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    5 小时前
  • 签到天数: 1888 天

    连续签到: 2 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112863
    最后登录
    2025-9-17
    发表于 2024-6-8 00:04:48 | 显示全部楼层
    那三个小的是W5500吗?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-17 06:07 , Processed in 0.115601 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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