概述
RTL8201芯片配置_LWIP+FreeRTOS
- RTL8201F芯片配置(LWIP_FreeRTOS)
- 基本情况
- RTL8201F芯片初始化过程
- 芯片手册
- 不正常的初始化结果
- 初始化流程
- PHY芯片寄存器相关介绍
- 初始化流程
RTL8201F芯片配置(LWIP_FreeRTOS)
最近项目上用到了RTL8201F的以太网PHY芯片,遇到了一些问题进行一下记录
基本情况
RTL8201F是瑞昱的一款PHY芯片,支持多种模式进行配置,项目中使用NXPMIMX1064芯片作为主控芯片。在官网下载了LWIP+FreeRtos的驱动SDK代码,按照常规配置方式ping有时会超时丢包严重。尝试过多种方式,最后还是定位是PHY芯片的初始化存在问题。
RTL8201F芯片初始化过程
芯片手册
工欲善其事必先利其器,首先是芯片的参考手册一定要选对,这里吃了大亏。瑞昱8201这款PHY芯片有很多不同的后缀代表不同的版本号,下面是两个datasheet,仅仅是版本号有细微的差别,但还是存在一定的差异,这点一定要注意。这里使用的是RTL8201F-VB-CG版本数据手册。
上图中是这款芯片基本使用框图,MAC在NXP主控芯片ETH外设内,MAC通过MDC及MDIO这一组通信信号对PHY芯片进行配置和PHY内部寄存器读写操作。正常运行过程中,则是通过MII/RMII这组接口进行以太网通信,即一组是配置,一组接口是通信使用。这里使用的是RMII对芯片进行驱动,MII流程相似,但本人没有实践过。
不正常的初始化结果
按照其他芯片移植了PHY芯片的配置,很奇怪,会出现以下的丢包和延迟很大的情况,最终查明是PHY初始化不正常的问题,下面给出面前使用正常的初始化流程,代码因为项目原因,不太能直接公开。
初始化流程
PHY芯片寄存器相关介绍
通过手册可以看到RTL8201F有如下的寄存器,这里挑几个重要的点讲一下:
①Register 0 的地址就是0,以此类推,后面寄存器的地址便可知晓。这里不带Page的寄存器,为默认page,即 0
②该芯片有多个Pages,读取哪个Pages需要在Register 31里面进行写入,即,若想访问Page 7 Register 16;需要先在Register 31中写入0x07,在访问Register 16,访问完毕之后最好将Register 31恢复为0,防止读写错误。
③Page0 Register 13 与Page0 Register 14 是一对间接地址访问寄存器,通过他能够访问 MMD Register 寄存器,这里没有用到该寄存器,需要用到的话,建议看看手册。
初始化流程
①读取Register 2,这个寄存器是PHY芯片的ID寄存器,默认就是0x001C,这一步是为了验证Phyadress、MDIO通信是否正常。读取到正确的ID才进行下一步,否则直接返回错误。
②为Register 0第15位(Reset),写入1。复位整个芯片,这里需要等待芯片复位完成,这一位具有Self-clearing的功能,因此等待第15位为0,即代表复位工作完成。
③对Page 7 Register 16,进行操作,设置相应的控制模式(RMII/MII);这里需要分成两步进行:
I、对Register 31中写入0x07;
II、对Page 7 Register 16,写入0x7FFB;这里要注意7FFB是手册给出,必须要这么写;这里电路采用的PHY外挂50MHz的RMII模式,因此与Note符合。实测不这么写会有BUG。
III、对Register 31中写入0x00;恢复默认Page,这里恢复的原因是防止误操作,调试过程发现有些寄存器虽未在手册定义,但不同page读取值不同。
④Register 4是自动协商告知寄存器,PHY芯片初始化过程中首先需要完成自动协商,即与远端设备协商出速度(10M/100M)、全双工(半双工)状态信息等。主控芯片(MIMX1064)再读取后将ETH配置为相应的速度和状态。
这里主要
I、首先是等待自协商完成,在前面复位后,后自动进行一次自协商,但这次自协商我们没办法保证是我们需要的自协商模型,所以需要等待完成后在进行一次
II、获取自协商状态,通过Register 1的第5位,第5位为1代表自协商完成。
III、自协商完成后,将8~5进行写1,4 ~0写00001;即表明该ETH支持的模型,远端设备可以根据支持情况进行配置协商。
IV、对Register 0 的第9位和第12位写1,启动第二次自协商。
V、等待自协商完成
⑤关闭省电模式,这里的Note说要关闭时钟,关闭了,用着没问题。这里与Page 7 Register 16中设置好像有关系,具体没深入研究。
以上便是初始化过程,初始芯片后,需要完成速度和状态的读取,即读取 Register 0的13和8位,对ETH进行配置。
这样配置之后便不再有ping不同的丢包现象。
最后
以上就是天真小虾米为你收集整理的RTL8201F芯片配置(LWIP_FreeRTOS)RTL8201F芯片配置(LWIP_FreeRTOS)的全部内容,希望文章能够帮你解决RTL8201F芯片配置(LWIP_FreeRTOS)RTL8201F芯片配置(LWIP_FreeRTOS)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复