网络控制芯片AX88796B系列使用简介
目录
AX88796B是一款针对嵌入式及工业以太网应用的低引脚数(LQFP-64) Non-PCI以太网控制芯片。AX88796B采用符合业界标准的8/16位SRAM-like主机接口,可与一般8/16/32位微控制器直接连接,无须任何外部逻辑线路。该组件内建符合IEEE 802.3/ IEEE 802.3u协议的10/100Mbps以太网物理层(PHY)及媒体存取控制器(MAC),整合8K*16位SRAM网络封包缓存器,以高效率的方式进行封包的储存、检索与修改。AX88796广泛支持各项规格包括双绞线正反接线自动校正(HP Auto-MDIX)、网络唤醒、低功耗管理及IEEE 802.3x/ backpressure流量控制。
项目需要用以太网进行数据传输,所以用到FPGA对AX88796B进行驱动。
1. 特性
- Non-PCI
- 8/16位SRAM-like主机接口,完全兼容NE2000
- MAC+PHY
- IEEE 802.3/ IEEE 802.3u,10/100Mbps
- 8k x 16位 SRAM
值得注意的是该芯片“完全兼容NE2000”,NE2000是什么呢,简单的说就是网卡标准。我们电脑网卡里面大多用的是Realtek(瑞昱)公司的芯片,所以在在学习过程中可以参考瑞昱的网络控制器芯片资料,如RTL8019.
2. 结构框图
从框图中可以看到芯片集成了MAC和PHY,其工作方式可以简单的理解为用户通过Non-PCI local bus对芯片进行寄存器配置(主要是NE2000 Register),使芯片按照用户定义的方式进行工作。内部Packet Buffer Management对收发的数据包进行控制和管理(仲裁)。8k x 16bitsSRAM用户数据缓存。
关于芯片的基本配置,这里不再赘述,处理参考芯片的Datasheet外,还可以参考《AX88x96B_Software_Programming_Guide_v251》。下面着重说一下,关于芯片收发过程中对环形缓存的理解。
3. 接收
3.1 缓存空间
网卡含有16K字节的RAM,地址为0x4000-0x7fff,芯片将这些空间按256字节分成一个个buffer(或称一页),所以共有64 页。页的地址就是地址的高8位,页地址为0x40-0x7f。这16K的RAM一部分用来存放接收的数据包,一部分用来存储待发送的数据包。这么分的原因是以太网包大小是64 bytes ~1522 bytes之间,这样可以充分利用空间。
在网络传输中,对以太网包的接收缓存的协调是靠一个叫Buffer Management Logic内部模块控制,主要功能是:
- 按包拼接长的数据;
- 如果一包数据不完整或出问题,AX88x96B将拒绝接收,从而释放相关包占用的空间;
- 不断的计算包空间大小和控制指针,即多少包进来,多少包读走。
其中第三点应该是关注的重点。
3.2 Receiver Buffer Ring
Receiver Buffer Ring是对缓存机制理解的重点部分。16k RAM空间会有一部分用做接收缓存。接收空间大小用寄存器the Page Start Address Register (PSTART) 和 the Page Stop Address Register (PSTOP) 来定义,二者的值是空间也地址,即0x40-0x7f。缓存的时候,当DMA地址等于PSTOP所存的地址时,DMA又会从PSTART开始,如图所示就形成了一种环形结构。
同时,要在缓存中完成正确的包的接收并且被主机读取,还需要两个动态指针,即The Current Page Register和The Boundary Register。简单理解,The Current Page Register是写指针(指包被写入进Receiver Buffer Ring),而 The Boundary Register是读指针。初始化状态下,Page Start Register、The Current Page Register和The Boundary Register均指向同一个地址的buffer。
3.3 接收机制
芯片在接收过程中,收到一包数据,通过DMA转给环形存储器,The Current Page Register存的地址就递增1(完整数据可能是多包)。The Boundary Register存的地址是还未被读走数据的地址,主机从环形存储器中读走一包,则The Boundary Register存的地址递增1.
在接收过程中,the Buffer Management Logic会进行两次比较。第一次比较存有DMA地址的下一个buffer的地址和the Page Stop Register中的值,如果两者相等,说明环形存储器存了”一圈“了,the buffer management logic会将DMA的地址存入Page Start Address Register指向的buffer中。第二次比较存有DMA地址的下一个buffer的地址和the Boundary Pointer Register指向buffer的地址,如果两者相等,则忽略下一包,因为表明之前的包还没读走,防止覆盖数据。
开始接收时,先获取包头4个字节的信息主要是NextPage地址和数据长度,分低、高两个字节。
4. 发送
发送过程相对要简单一些。16k 的RAM空间,前一部分用于发送缓存。其空间大小其实是由接收缓存的启示地址决定的,接收地址定了,剩余的部分就用作发送。
在发送过程中,主要控制的有三个寄存器:a Transmit Page Start Address Register (TPSR) and the Transmit Byte Count Registers (TBCR0, 1),即发送起始地址寄存器以及发送字节计数寄存器(包含两个寄存器来确定字节数的高低8位)。
在发送组帧过程中需要遵守相应的规定,可以参考手册。
5. 编程过程简要说明
5.1 初始化配置
芯片工作前,有上电复位,读取寄存器的软件复位,都操作一遍,注意时序要求。之后对工作类寄存器进行工作模式配置,然后有对上述决定收发缓存大小相关的寄存器进行配置。最后启动芯片开始工作。这部分可以在编程指南中找到。
如果配置正确,芯片就可以建立物理连接了。
5.2 接收
当芯片开始工作之后,根据需要就去读取The Current Page Register和The Boundary Register的值,从而判断有无数据接收。判断依据可以参考下图以及编程手册中的文字说明。
注意:编程过程中,先访问的是内部寄存器中当前的值来判读是否有接收数据,如果有,再往CR寄存器中写入0A,从而启动“读”,此后才可以从Data Port中读取有效数据。
5.3 发送
发送数据前,需要根据发送数据量来判断所需缓存空间。然后需要检查一些状态寄存器,如缓存空间大小、远端发送缓存空间或者发送命令队列是否full。之后才能将数据搬进缓存中。最后配置刚才提到的字节数等寄存器,并启动发送(发送前还有数据的搬移操作,即从缓存RAM中搬移至远端DMA)。
参考文献:
- 《AX88796BLF datasheet》;
- 《AX88x96B_Software_Programming_Guide_v251》;
- 《AX88796总结》(网络文档)
网络控制芯片AX88796B系列使用简介的更多相关文章
- UNIX网络编程——epoll 系列函数简介、与select、poll 的区别
前面博客<<UNIX环境高级编程--epoll函数使用详解>>有关于epoll函数的讲解. 一.epoll 系列函数简介 #include <sys/epoll.h> ...
- RxJava系列1(简介)
RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...
- OpenStack实践系列①openstack简介及基础环境部署
OpenStack实践系列①openstack简介及基础环境部署 一.OpenStack初探1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运 ...
- epoll 系列函数简介、与select、poll 的区别
一.epoll 系列函数简介 #include <sys/epoll.h> int epoll_create(int size); int epoll_create1(int flags) ...
- 【原创】书本翻页效果booklet jquery插件系列之简介
booklet jquery插件系列之简介 本文由五月雨恋提供,转载请注明出处. 一.安装 1.添加CSS和Javascript 添加booklet CSS文件到你的页面. <link rel= ...
- Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介
原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理 ...
- linux 网络虚拟化: network namespace 简介
linux 网络虚拟化: network namespace 简介 network namespace 是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自的网络栈信息.不管是虚拟机还是 ...
- nginx高性能WEB服务器系列之一简介及安装
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
- Linux C++ 网络编程学习系列(1)——端口复用实现
Linux C++ 网络编程学习系列(1)--端口复用实现 源码地址:https://github.com/whuwzp/linuxc/tree/master/portreuse 源码说明: serv ...
随机推荐
- 利用Sphinx编写文档
利用Sphinx编写文档 1.Sphinx简介和使用理由 ================= Sphinx是一个用Python语言编写而成的文档编写工具.用Sphinx编写文档的时候,用户只需要编写符 ...
- 查询sqlserver数据库视图、存储过程等包含特定的字符串
SELECT A.name , B.definition FROM SYS.objects A INNER JOIN sys.sql_modules B ON A.object_id = B.obje ...
- python3.3 MD5
代码如下: # /usr/bin/python # -*- coding:utf-8 -*- import hashlib h=hashlib.md5() data = ' h.update(data ...
- 【总结整理】面试pm常见的问题---摘自《人人都是产品经理》
求职路上,“怼”来“怼”去的面试问题 人人都是产品经理社区 发布于 2018-10-29 19:53:06 举报 阅读数:1418 在求职路上,面对那些被“怼”到过的面试问题,应该如何处理? 一个 ...
- SQL Server CLR全功略之一---CLR介绍和配置
Microsoft SQL Server 现在具备与 Microsoft Windows .NET Framework 的公共语言运行时 (CLR) 组件集成的功能.CLR 为托管代码提供服务,例如跨 ...
- Docker学习笔记_安装和使用Zookeeper
一.准备 1.宿主机OS:Win10 64位 2.虚拟机OS:Ubuntu18.04 3.账号:docker 二.安装 1.搜索镜像 ...
- 项目二:品优购 第二天 AngularJS使用 brand商品页面的增删改查
品优购电商系统开发 第2章 品牌管理 传智播客.黑马程序员 1.前端框架AngularJS入门 1.1 AngularJS简介 AngularJS 诞生于2009年,由Misko Hevery 等人 ...
- 面试题:volatile关键字的作用、原理
在只有双重检查锁,没有volatile的懒加载单例模式中,由于指令重排序的问题,我确实不会拿到两个不同的单例了,但我会拿到“半个”单例. 而发挥神奇作用的volatile,可以当之无愧的被称为Java ...
- jQuery基础教程-第8章-002Adding jQuery object methods
一.Object method context 1.We have seen that adding global functions requires extending the jQuery ob ...
- eclipse——Maven创建JavaWeb工程
打包方式改为war 问题:webapp目录下缺少web.xml文件 先勾选掉Dynamic Web Services 点击Applay 再勾选上Dynamic Web Services ,目的是为了产 ...