设为首页 收藏本站
查看: 1383|回复: 0

[经验分享] dm9000网口收发控制以及mac地址过滤设置

[复制链接]

尚未签到

发表于 2017-7-7 13:25:25 | 显示全部楼层 |阅读模式
目的 :完成网口收发调试

过程 : 
   
1、网口初始化,根据芯片数据手册配置

2、网口发数,先向DM9000中的TX FIFO存入数据,然后出发发送寄存器完成发送;

3、网口接收 。

    1) 中断方式 :DM9000的中断可以通过主动查询DM9000中断寄存器的方式,以及通过DM9000INT引脚来中断DSP系统,在去查询中断类型的方式。
                             
                              使用DM9000 INT方式出发DSP中断的好处有:可以避免cpu不断的查询DM9000中断寄存器;优化收数掉帧的情况

    2)MAC地址过滤 :    配合DM9000中RCR(接受控制寄存器)寄存器以及DM9000物理地址和广播地址寄存器共同实现对非匹配MAC地址包的过滤功能
        
                             
         DSC0000.png

                      DSC0001.png
       

                            配置说明 :
                            假设配置的本地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组帧过后的值,具体格式如下所示 :
                            DSC0002.png
                           
                            第一个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的自动指针是不会自动跳转回到初始位置;导致在进入中断时数据将会读取错误;

                            DSC0003.png

                            上图代码段想从接受到的数据中直接将信号提取出来;
                            rx_state = inw();

                            phy_addr[0] = inw(); .....

                            由于这些定义的变量只是为了将占据数据包中相应部分去除,使得读取RX FIFO 指针依次移动至有效数据位置上。然后获取有效数据位;
                            由于DSP程序代码打开了最高级别的优化,使得这些未使用的代码段直接被优化掉,使得RX FIFO指针在操作时没有移位到数据位上。
                            通过对变量添加volatile 关键字也不是全部都有效;所以将代码做了如下修改
                           
           DSC0004.png

    如有错误请指正

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-391286-1-1.html 上篇帖子: 重装MAC系统 “安装器有效负载签名检查失败” 解决方法 下篇帖子: 【工匠大道】Mac下Java开发环境配置简述
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表