目的 :完成网口收发调试
 
过程 : 
    
1、网口初始化,根据芯片数据手册配置
 
2、网口发数,先向DM9000中的TX FIFO存入数据,然后出发发送寄存器完成发送;
 
3、网口接收 。
 
    1) 中断方式 :DM9000的中断可以通过主动查询DM9000中断寄存器的方式,以及通过DM9000INT引脚来中断DSP系统,在去查询中断类型的方式。
                             
                              使用DM9000 INT方式出发DSP中断的好处有:可以避免cpu不断的查询DM9000中断寄存器;优化收数掉帧的情况
 
    2)MAC地址过滤 :    配合DM9000中RCR(接受控制寄存器)寄存器以及DM9000物理地址和广播地址寄存器共同实现对非匹配MAC地址包的过滤功能
        
                             
        
 
                    
       
 
                            配置说明 :
                            假设配置的本地MAC地址为 28 5b 6d 5c 58 73 。注意mac地址的首位需要为偶数
 
                            将RCR寄存器的值配置为0X33 : 即打开DM9000的混杂模式,此时DM9000能够接受到所有的网络包,包括以
                            广播帧    :  FF FF FF FF FF FF XX XX XX XX XX XX..  
                            其他MAC地址包 : 28 5b 6d 5c 58 74 XX XX XX XX XX XX...
                            多播帧  :33 33 01 00 02 00 XX XX XX XX XX XX...
                            当前匹配mac地址包 :28 5b 6d 5c 58 73 XX XX XX XX XX XX...
 
                           将RCR寄存器的值配置为0X31 : 即关闭DM9000的混杂模式,此时DM9000能够接受到广播包、多播包、匹配本地MAC地址包
                            广播帧    :  FF FF FF FF FF FF XX XX XX XX XX XX..  
                            多播帧  :33 33 01 00 02 00 XX XX XX XX XX XX...
                            当前匹配mac地址包 :28 5b 6d 5c 58 73 XX XX XX XX XX XX...
 
                           将RCR寄存器的值配置为0X39 : 即关闭DM9000的多包模式,貌似无效,还是能够接受到广播包、多播包、匹配本地MAC地址包
 
                           如果需要进一步过滤掉广播包和多播包,需要借助广播寄存地址;从网上资料查询得到,此处的广播寄存器地址就等效于一个校验位,能对通过的MAC地址计算并校验,
                           符合校验值得则通过MAC产生中断,不符合的则被过滤掉(自己未验证过);本次设置该广播寄存地址全部为零;经测试发现,能够将其他的多播包和广播包去除,只接收匹配本地MAC地址的
                            数据
 
        3) DSP移植 : 
                            
                            DM9000接受到的数据是进过MAC组帧过后的值,具体格式如下所示 : 
                            
                            
                            第一个byte为接受包有效标志位 ; status为状态位;数据长度;后面其实还有两位校验位
                            
                            假设上位机PC端发送一组数据长度为1040的数据 格式为 :FF FF FF FF FF FF 28 5b 6d 5c 58 73 保留为(4byte)   数据为(1024byte) 总共长度为  1040 byte
 
                            网口接受到的包格式为 : 
                            
                            01  XX 14 04    FF FF FF FF FF FF 28 5b 6d 5c 58 73 保留为(4byte)   数据为(1024byte) CRC(4byte);
 
                            接受包中的数据长度为0X414 即1044个;多出的4byte就是后面跟随的CRC
 
                            在移植过程中出现了一个关于读数的问题 : 
                            1、程序移植到FLASH后发现接受到的数据出现错误。
                            
                            原因 : DM9000内部设置从RX FIFO中将数据读取出来采用的是指针自动递增的模式;如果在有数据到来没有按照接受包的帧长度(1044)全部将数据读取出来,那么RX SRAM的自动指针是不会自动跳转回到初始位置;导致在进入中断时数据将会读取错误;
 
                            
 
                            上图代码段想从接受到的数据中直接将信号提取出来;
                            rx_state = inw();
 
                            phy_addr[0] = inw(); .....
 
                            由于这些定义的变量只是为了将占据数据包中相应部分去除,使得读取RX FIFO 指针依次移动至有效数据位置上。然后获取有效数据位;
                            由于DSP程序代码打开了最高级别的优化,使得这些未使用的代码段直接被优化掉,使得RX FIFO指针在操作时没有移位到数据位上。
                            通过对变量添加volatile 关键字也不是全部都有效;所以将代码做了如下修改
                            
           
 
    如有错误请指正

dm9000网口收发控制以及mac地址过滤设置的更多相关文章

  1. 获取平台所有接口的IP和MAC地址

    我们有时候会有获取网口的IP和MAC地址的需求.可以通过ioctl来获取. #include <sys/ioctl.h>#include <net/if.h>#include ...

  2. 获取与esp8266连接的客户端的Mac地址 IP 端口 控制停止等问题

    两个关键的库 ESP8266WebServer.h WiFiClient.h ESP8266WiFiAP.cpp C:\Users\dongdong\Desktop\Arduino-master\li ...

  3. MAC地址的介绍(单播、广播、组播、数据收发)

    MAC地址组成 网络设备的MAC地址是全球唯一的.MAC地址长度为48比特,通常用十六进制表示.MAC地址包含两部分:前24比特是组织唯一标识符(OUI,OrganizationallyUniqueI ...

  4. 网络基本概念备忘:MAC地址,端口,HTTP状态码

    MAC地址 英文MAC Address 英文全称: Media Access Control Address 别称:硬件位址 用途:定义网络设备位置 表示:十六进制数,6 Byte 特点:产品出产后M ...

  5. linux 2.6.21版本的内核合法的MAC地址

    当执行ifconfig eth0 hw ether 11:22:33:44:55:66时,当前内核显示修改成功,但是ping时只无限发送ARP包,PC机也已经给板子回ARP包,但没有任何ICMP包的信 ...

  6. 使用u32过滤器设置基于mac地址的下载限制

    u32过滤器一般使用ip地址作为匹配规则,但按照其定义,它可以匹配ip包头的任意地址,这里使用mac地址限制局域网的下载速度,避免客户端修改ip后其下载速度得不到控制.tc qdisc del dev ...

  7. Linux下修改网卡的mac地址

    方法1: # ifconfig ethX down # ifconfig ethX hw ether NEW_MAC_ADDR # ifconfig ethX up 但是这样重启后就失效了,需要再敲一 ...

  8. inux网卡与MAC地址绑定方法总结

        使用linux系统时会出现这样的情况,当你安装了某个网卡的驱动程序时,或者安装了与网卡相关的程序后. 网卡会出现所谓的漂移现象.(注意:不是飘逸).可能的表象为: (1):网卡顺序颠倒,比如之 ...

  9. Cisco 绑定mac地址

    在Cisco中有以下三种方案可供选择,方案1和方案2实现的功能是一样的,即在具体的交换机端口上绑定特定的主机的MAC地址(网卡硬件地址),方案3是在具体的交换机端口上同时绑定特定的主机的MAC地址(网 ...

随机推荐

  1. jquery 选择器(name,属性,元素)大全

    jQuery 选择器大体上可分为:基本选择器.层次选择器.过滤选择器.表单选择器. 其中过滤选择器可以分为:简单过滤选择器.内容过滤选择器.可见性过滤选择器.属性过滤选择器.子元素过滤选择器.表单对象 ...

  2. HDU5870 Alice's Adventure in Wonderland

    大概做法是这样的 考虑最朴素的做法,预处理出1到所有点的最短路数组dis1和方案数数组cnt1,和预处理出n到所有点的最短路数组dis2和方案数数组出cnt2,然后暴力枚举点对(A,B),如果A和B之 ...

  3. 怎样设置才能允许外网访问MySQL

    1.将本地数据库的user表的第一条记录的host数据改为%,或者用update user set host='%' where user='root'; 2.用MySQL的命令行客户端操作如下步骤: ...

  4. tomcat 开机后台运行

    引用:http://jingyan.baidu.com/article/a65957f4b12b8724e77f9b5a.html Tomcat是Apache 软件基金会(Apache Softwar ...

  5. iOS传值之block传值(一)

    ios4.0系统已开始支持block,在编程过程中,blocks被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.Blocks可以作为函数参数或者函数的返回值,而其本身又可以带输入 ...

  6. Ubuntu14.04台式机r8169有线网卡驱动问题

    由于台式在安装了Ubuntu14.04后插入网线后灯不亮,不能使用有线网. 查找资料发现原来是网卡驱动问题,解决办法如下: 1.查看网卡驱动名称 lspci -v 找到以太网连接的kernel dri ...

  7. 【转】Delphi+Halcon实战一:两行代码识别QR二维码

    Delphi+Halcon实战一:两行代码识别QR二维码 感谢网友:绝代双椒( QQ号应原作者要求隐藏了:xxxx6348)的支持 本文是绝代双椒的作品,因为最近在忙zw量化培训,和ziwang.co ...

  8. html5与html4的区别,如何一眼区分

    还是在面试过程中遇到的这个问题,但是当时感觉回答的不是很全面,回来以后自己做的总结: 以上这个问题如果教大家看源码,可能一眼很直观的就能认出,那个是html4,那个是html5,但是面试的时候问道这个 ...

  9. .net常见的面试题

    1,asp.net中的页生命周期 答:msdn官网已给出标准答案,这里简述一下:页要经历下表概述的8个阶段.除了页生命周期阶段以外,在请求前后还存在应用程序阶段,但是这些阶段并不特定于页. 而这8个阶 ...

  10. C# 自动Ping 测试服务器运行状况

    通过小程序自动Ping配置文件中的IP地址,间隔时间.IP地址.手机号码通过配置文件获得. 废话不多说,上代码. using Newtonsoft.Json; using Newtonsoft.Jso ...