原文:https://blog.csdn.net/zhouxinlin2009/article/details/45390065

UBOOT的PHYCHIP配置

PHYCHIP的配置位于 include/configs/XXX_config.h中

#define CONFIG_YYY_ETH

#define CONFIG_YYY_ETH_SPI_BUS 0

#define CONFIG_YYY_ETH_SPI_CS 0

代码流程

Uboot下PHYCHIP的驱动代码由一些函数构成,这些函数包含在文件PHYCHIP.c中,位于drivers/net/目录下,具体包含的函数以及含义如下:

eth_init()

eth_send()    //链路层数据包发送

eth_rx()         //链路层数据包接收

eth_halt()

encReceiverReset()

encReceiverResetCallbask()

encPoll()

encRx()

encInit()

encPhyRead()

encPhyWrite()

PHYCHIP编程

要对PHYCHIP进行编程,首先要熟悉PHYCHIP内部寄存器的功能及配置。

PHYCHIP内部寄存器

PHYCHIP有三种类别的静态RAM,控制寄存器(Control Register)、网络缓存(Ethernet Buffer)、PHY寄存器(PHY Register)。

Ethernet Buffer共8K字节,分为独立的发送缓存和接收缓存,发送和接收缓存的位置和大小可以完全由host通过spi接口控制。DMA通道课直接读写Ethernet Buffer。

PHY Register提供PHY模块的控制和配置以及PHY模块的操作状态,PHY Register共有32个寄存器,只有9个是可操作的。不像ETH、MAC、MII控制寄存器或者Buffer缓存,PHY Register不是通过SPI接口直接访问的,而是通过MII寄存器MIREGADR访问。

读取PHY寄存器的步骤:

1、写想读取的PHY寄存器地址到MIREGADR寄存器

2、设置MICMD.MIIRD bit

3、等待10.24uS,轮训poll MISTAT.BUSY bit来确认操作已经完成,若busy不能启动任何MIISCAN操作或写MIWRH寄存器。当MAC获取到了寄存器内容,BUSY bit自动清空

4、清空MICMD.MIIRD bit

5、从MIRDL和MIRDH寄存器读取想要读取的数据。

写PHY寄存器的步骤:

1、写想修改的PHY寄存器地址到MIREGADR寄存器

2、写低8位数据到MIWRL

3、写高8位数据到MIWRH,MISTAT.BUSY bit被置位,需等待10.24uS。

scan PHY寄存器的步骤:

1、写想修改的PHY寄存器地址到MIREGADR寄存器

2、设置MICMD.MIISCAN bit,scan操作开始了,MISTAT.BUSY bit被置位,第一个读取操作在10.24uS之后完成,然后会以相同的间隔执行连续的操作,直到操作被取消,MISTAT.NVALID bit会被轮训poll来决定何时第一个操作完成。

3、设置了MIISCAN之后,MIRDL和MIRDH会每10.24uS自动更新。

MII控制寄存器有:MICON、MICMD、MISTAT。

PHYCHIP的命令格式

PHYCHIP的工作方式完全依赖于host通过spi接口送过来的命令。通过这些命令进入PHYCHIP的控制内存(control memory)和(ethernet buffer空间)。

命令格式如下:

3bit操作码+5bit参数(指定寄存器地址或数据常量)[+数据]

本PHYCHIP共使用7个命令:

RCR(读取PHY的控制寄存器)、RBM(读取PHY的缓存空间)、WCR(写PHY的控制寄存器)、WBM(写PHY的缓存空间)、BFS(Bit域设置)、BFC(Bit域清空)、SC(软件复位)

1、RCR命令

RCR命令允许host以任意顺序读取ETH、MAC和MII寄存器,其中PHY寄存器的读取通过一个特殊的MII寄存器接口。

2、RBM命令

RBM命令允许host从8K字节的接收缓存读取字节。

3、WCR命令

RCR命令允许host以任意顺序修改ETH、MAC和MII寄存器

4、WBM命令

WBM命令允许host向8K字节的发送缓存写入数据。

5、BFS命令

6、BFC命令

7、SC系统命令

以太网概观

Ethernet Packet Format:目的MAC、源MAC、类型/长度域、数据负载、可选的PAD域、CRC。

PHYCHIP初始化步骤

1、初始化接收缓存

2、初始化发送缓存

3、收包滤波器

4、等待复位完成

5、MAC初始化配置(MACON2.MARST清空使MAC脱离复位状态,MACON1.MARXEN置1使能MAC接收frame,配置MACON3.PADCFG/TXCRCEN/FRMLNEN/FULDPX、MACON4使用默认、MAMXFL限制最大fram长度、MABBIPG背to背、MAIPGL非背to背、MAADR0:MAADR5配置本地MAC地址)

6、PHY初始化配置(根据应用必须配置三个PHY寄存器,PHCON1.PDPXMD控制设备的半双工/全双工,PHCON1.PDPXMD与MACON3.FULDPX必须匹配,PHCON2.HDLDIS用来阻止半双工时原子的自环,PHLCON用于配置输出的LEDA和LEDB)

发送和接收数据包

发送数据包:

PHYCHIP的MAC会自动产生帧头,另外若配置了MAC可以产生PAD和CRC。

host必须产生和写入其他的frame域到buffer。

PHYCHIP需要一个单独的每个数据包的控制byte,防止packet之前。

发送packet步骤:

1、适当编程ETXST指针指向内存中一个不用的区域;

2、使用WBM命令写每个packet的控制byte、目的MAC、源MAC、Type/Len、数据负载;

3、适当编程EXTND指针;

4、清除EIR.TXIF、EIE.TXIE,设置EIE.INTIE来使能一个中断;

5、设置ECON1.TXRTS开始传输。

若DMA正在执行,则等待DMA完成之后再开启发送;

发送完成之后,ECON1.TXRTS清空,7个字节的发送状态矢量被填写到相应位置,ETXST、ETXND被修改。

要检查发送是否正常完成,ESTAT.TXABRT能显示。

接收数据包:

使能收包

假定接收缓冲已经初始化、MAC被正确配置、接收滤波器已经配置,要接收网络数据包,host需要:

1、如果接收到数据包时需要产生一个中断,设置EIE.PKTIE和EIE.INTIE;

2、如果在接收缓冲满时丢弃数据包时需要产生一个中断,清除EIR.RXERIF,设置EIE.RXERIE、EIE.INTIE。

3、设置ECON1.RXEN来使能接收。

为了阻止不需要的数据包,建议在修改接收滤波器配置ERXFCON和MAC地址之前,将RXEN清空。

接收使能之后,未被滤掉的数据包会被写入到唤醒接收缓冲区,EPKTCNT会增加,EIR.PKTIF被设置,产生一个中断,硬件写指针ERXWRPT会自动增加。

读取接收的数据包

利用RBM命令

释放接收缓存

当出现异常时,采用Next Packet Pointer

获取接收缓存的剩余空间

下表列出了PHYCHIP内部重要寄存器的功能及偏移地址。

ECON 网络控制寄存器

ESTAT 网络状态寄存器

发送控制寄存器

发送状态寄存器

MAC地址寄存器(共6个)

制造商ID号

产品ID号

内部SRAM数据读指令,内部地址不增加

内部SRAM数据读指令,内部地址增加

发送数据包长度低字节寄存器

发送数据包长度高字节寄存器

转载于:https://www.cnblogs.com/Ph-one/p/9083444.html

uboot 网络驱动模型相关推荐

  1. uboot usb驱动模型

    关于uboot驱动模型,这篇文章讲得很好,不再描述: [uboot] (番外篇)uboot 驱动模型_ooonebook的博客-CSDN博客 U-Boot Driver Model领域模型设计 lin ...

  2. u-boot器件驱动模型(DeviceDrivers)之链接器的秘密

    写在前面 哈哈,写东西前总喜欢先扯蛋,赶时间的直接无视这段吧.前段时间照着x_project成功的将手上的一块基于nuc972的板子成功移植上了最新的u-boot,相关细节可以参考我的这篇博客. 那篇 ...

  3. Linux内核移植 part2:uboot 设备驱动模型

    最近在移植uboot-2015.04的时候发现,uboot的设备驱动也带驱动模型了,第一次见到的时候还真是愣了一下,特别是调试的时候没有以前那么方便直接了.而且设备模型和设备树捆绑在一起,又得花费一番 ...

  4. Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platfrom))

    catalog 0.引言 1.Windows 2000网络结构和OSI模型 2.NDIS驱动 3.NDIS微端口驱动编程实例 4.NDIS中间层驱动编程实例 5.TDI驱动 6.TDI驱动 7.TDI ...

  5. 嵌入式linux下网卡设备驱动与网络协议栈的设计实现.pdf,嵌入式系统的通用网络驱动模型设计与实现.pdf...

    维普资讯 第3O卷第4期 长春理工大学学报 (自然科学版 ) VO1.3O N0.4 2007年 12月 JournalofChangchunUniversityofScienceandTechnol ...

  6. WinCE的网络驱动实现原理

    1.WinCE的网络通信架构 WinCE的网络通信架构如图1所示,WinCE的网络通信架构中一个重要的角色是网络结构规范(NetworkDriver Interface Specification,N ...

  7. u-boot下的DM驱动模型

    U-boot 下DM驱动模型的相关笔记 要注意的关键两点: DM驱动模型的一般流程bind->ofdata_to_platdata(可选)->probe 启动,bind操作时单独完成的,主 ...

  8. [I.MX6UL] U-Boot移植(六) 网络驱动修改 LAN8720A(对比原子和NXP官方测试板的网络芯片LAN8720A , KSZ8081 (也是飞凌)唯独复位引脚不同595芯片也涉及改动)

    I.MX6UL/ULL 内部有个以太网 MAC 外设,也就是 ENET,需要外接一个 PHY 芯片来实现网络通信功能,也就是内部MAC+外部 PHY 芯片的方案. I.MX6UL/ULL 有两个网络接 ...

  9. Uboot中的DM驱动模型

    这一篇我们学习uboot中的驱动模型的初始化,在uboot中,驱动模型被称为Driver Model,简称DM.这种驱动模型为uboot中的各类驱动提供了统一的接口. 1. 数据结构及概念 DM模型主 ...

最新文章

  1. 趣图:老手调试多线程,666
  2. 各类Transformer都得稍逊一筹,LV-ViT:探索多个用于提升ViT性能的高效Trick
  3. sftp 中文乱码 连接后_sftp服务器中文乱码
  4. Intel Realsense D435 hardware_reset()后循环打印测试len(ctx.query_device())结果
  5. apollo学习之:如何测试canbus模块
  6. ERP管理软件哪家好?比较好的ERP管理系统软件推荐
  7. 联通鸿蒙卡充值,中国联通“一卡充”实现全业务充值
  8. 【Linux】将终端的命令输出保存为txt文本文件
  9. 科学计算机怎么表示大括号,电脑上大括号怎么拉长
  10. 用友u8安装应用服务器输什么,用友u8服务器安装教程
  11. 电源防反接电路 供电自动切换电路 - MOS管体二极管的应用
  12. keyword html seo优化,Meta标签关于TDK(title、description、keyword)的优化
  13. 跨时钟域问题(二)(单bit信号跨时钟域 1. 电平同步器 2. 边沿同步器 3. 脉冲检测器)
  14. html表格突出显示,java-如何突出显示jtable单元格的文本?
  15. python字符串输出和输入
  16. 《牛津字典精华总结》- 初阶系列 - 字母 - A
  17. /etc/sysconfig/network: 没有那个文件或目录
  18. fs.default.name和fs.defaultFS
  19. 计算机操作系统保研面试题整理(自用)
  20. xbox虚拟服务器,《微软模拟飞行》体积减半,主机版也快到来了

热门文章

  1. 拿不到十五万年薪offer全额退款,这个数据分析课程就是这么自信
  2. 疫情下的酒店更干净吗?测试结果一言难尽
  3. 怎样使用macOS Big Sur还原iPhone或iPad?
  4. 圆的面积(保留小数点后七位)
  5. 微软CEO鲍尔默的一天(组图)
  6. 为什么企业要慎重选择高防服务器租用托管?
  7. 奥术神座和计算机科学?
  8. Unity的陀螺仪实现
  9. 完整优雅的卸载腾讯云云服务器安全监控组件
  10. 20220625阶段总结