NXP

调试i.MXRT1050的网卡遇到的问题

2019-07-12 11:36发布

1、当编写无uboot的驱动时,一定要注意GPIO的管脚上拉,下拉,管脚复用的上下拉使能问题。尽量参考uboot或者裸机的实现去编写代码。实在调试不出来,可以考虑打印所有的驱动相关的寄存器。
2、问题: 网卡驱动代码写完之后,通过MMFR寄存器,读取PHY的寄存器的值失败(全F情况)解决方法::读取失败一般是硬件的管脚,时钟或者PHY的类型没有配置好(MII、RMII、RGMII)我遇到的问题是: 管脚复用没有配置好,管脚的上拉和下拉电阻配置寄存器没有配置。
3、问题:PHY寄存器的值,可以正常通过MMFR寄存器从PHY寄存器中读取出来,但是自主协商失败解决方法:时钟、管脚和MII设置。我遇到的问题是: 有两个GPIO的管脚的电平状态没有设置()。GPIO管脚复用之后,还需要对GPIO管脚进行操作。GPIO10拉高是设置为芯片的PLL为ref_enetpll分频提供,而不是外部晶振提供给PHY和内部控制器。GPIO09拉低然后拉高是PHY芯片的复位操作。

4、问题:PHY的自主协商成功,但是,中断不产生,用ints查看中断信息,没有网络中断。我的原因: 这是中断没有绑定成功,BASE里面有中断向量号的判断操作,中断号不能大于128,该中断号为130(前16个为异常情况,所以是114 + 16 = 130),所以绑定失败。我的解决: 修改base里面的中断判断宏定义为255
5、问题:网络中断可以产生,但是只有TX中断可以产生,RX中断产生不了。解决: 此时,PHY的灯,不会闪,一直常亮。硬件GPIO没有配置好(功能,上拉,input)
6、问题:网络的RX、TX中断均可以产生,但是ping不通。解决:可能是中断的问题====》或者是描述符分配方式问题解决:我遇到的是描述符分配问题。我使用的是malloc(内核没有打开DMAalloc的宏,DMAalloc无法使用),不是DMAalloc,存在cache没刷新问题。这种情况,应该关闭cache。。或者实现一个DMAalloc。
7、问题:网络无法发送大数据包的问题。(ping 1472字节的数据可以ping通,ping1473以上就不行)解决: 内核base里面的IP分包没有打开。大数据包无法拆分成小报文的数据包发送,所以出问题。
8、问题:网络描述符的字节对齐问题:解决:#define NETDEV_ALIGN (64) /* 64 字节对齐 */#define PTR_ALIGN(P, A) ((__typeof(P))ALIGN((ULONG)(P), (A))) /* 字节对齐设置的宏定义 */
/** 分配物理地址连续的4K内存供DMA使用*/pBufd = (__PBUFD)__SHEAP_ALLOC(LW_CFG_VMM_PAGE_SIZE);pBufd = PTR_ALIGN(pBufd, NETDEV_ALIGN); /* 64 字节对齐操作 */9、问题:ping 直连的PC机,或者都一个路由的PC机,可以ping通,但是ping 网关或者局域网的其他设备ping不成功。解决:MAC地址设置有误。。 {0x1,0x02,0x03,0x04,0x15,0x16}像这样第一个字节为0x1而不写成0x01的MAC地址是不对的,导致了这个问题。
10、问题: GPIO引脚设置时,调用系统提供的API接口出现问题,直接调用GPIO实现的函数则没问题。使用KEIL软件进行检查,是内核的宏的问题,解决。