推广 热搜: 行业  机械  设备    教师  经纪  系统  参数    蒸汽 

DM9000调试过程总结(mac地址过滤)

   日期:2024-11-10     移动:http://fhzcwj.xhstdz.com/mobile/quote/67486.html

DM9000调试过程总结(mac地址过滤)

目的 :完成网口收发调试
过程 : 
    
1、网口初始化,根据芯片数据手册配置
2、网口发数,先向DM9000中的TX FIFO存入数据,然后出发发送寄存器完成发送
3、网口接收 。
1) 中断方式 0的中断可以通过主动查询0中断寄存器的方式,以及通过T引脚来中断P系统,在去查询中断类型的方式。
                                   
                        使用0 T方式出发P中断的好处有:可以避免u不断的查询0中断寄存器;优化收数掉帧的情况
C地址过滤      配合0中(接受控制寄存器)寄存器以及0物理地址和
广播地址寄存器共同实现对非匹配C地址包的过滤功能
         
                                       
    配置说明 
              假设配置的本地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 关键字也不是全部都有效;所以将代码做了如下修改
                                  
本文地址:http://fhzcwj.xhstdz.com/quote/67486.html    物流园资讯网 http://fhzcwj.xhstdz.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号