0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于ARM9和DM9000芯片解决UDP协议的通信问题

电子设计 来源:郭婷 作者:电子设计 2018-12-04 08:25 次阅读

引 言

随着嵌入式技术和网络技术的迅速发展,以太网接口嵌入式系统中的应用越来越广泛。以太网通信速度快。通用,可直接与Internet 相连接,提供更大范围的远程访问。目前在工控嵌入式领域,网络通信通常采用UDP 和TCP 协议.UDP 与TCP 相比,UDP 使用非连接的。不可靠的通信方式,因此网络传输速度快,实时性相对较好。文中设计实用S3C2440.以太网控制器DM9000 和经过自行裁剪的TCP / IP 协议栈,构成嵌入式系统的以太网接口,实现UDP 通信。

1 系统的硬件介绍

该系统采用优龙科技公司YLP2440 作为开发的硬件系统,YLP2440 采用三星S3C2440A 作为CPU,最高主频400MHz,带有64MB SDRAM 和64MB NANDFlash 的外部存储器,有两个五线异步串行口,波特率高达115200bps,一个10M / 100M DM900AEP 网络接口卡,带有连接和传输指示灯.DM9000A 是一个全集成。功能强大。性价比高的快速以太网MAC 控制器,它带有一个通用处理接口.EEPROM 接口.10/ 100MPHY 和SRAM,采用单电源供电,可兼容3. 3V.5V 的IO 接口电平.DM9000A 同样支持MII (Media IndependentInterface,介质无关接口),它包含一系列可被访问控制的状态寄存器,这些寄存器是字节对齐的,在硬件或者软件复位时被设置成初始化。

硬件框图如图1 所示。

基于ARM9和DM9000芯片解决UDP协议的通信问题

2 以太网软件的设计

2. 1 以太网卡控制器的初始化

首先DM9000A 自检,读取DM9000 的生产厂家ID和设备ID 与已经设定好的ID 进行比对,判断DM9000网卡是否存在,初始化DM9000A,它的过程就是适当配置DM9000A 寄存器的过程,具体过程分为以下几个步骤:

(1)启动DM9000A,设置CPCR[REG_1E] = 0×1,使DM9000 的GPIO3 为输出,GPR[REG_1F] =0×0,使DM9000 的GPIO3 输出为低以激活内部PHY.延时2ms 以上以等待PHY 上电。

(2)进行两次软复位,设置DM9000 为正常工作模式,根据芯片设计要求,要想使芯片在上电之后工作正常就要进行两次软复位,设置为NCR[REG_00] =0×01,NCR[REG_00] =0×00,这两步操作进行两次。

(3) 清除各种状态标志位和中断标志位,NSR[REG_01] =0x2c,ISR[REG_FE] =0x3f.

(4)设置接收和发送控制寄存器,并且设置FIFO的大小,RCR[REG_05] =0×39.TCR[REG_02] =0×00.FCTR[REG_09] =0×38.

(5)设置板子自身的MAC 地址。

(6)再一次清除各种状态标志位和中断标志位,NSR[REG_01] =0x2c,ISR[REG_FE] =0x3f.

(7)设置中断屏蔽寄存器,打开接收中断,IMR[REG_FF] =0×81.

当进行了以上步骤的设置之后,DM9000A 芯片就处于正常工作状态了。在以后进行通信的过程中,如果发生异常引起芯片重启,则再一次进行同样的设置。

2. 2 以太网卡数据的发送和接收

DM9000A 发送数据采用的是循环查询模式,接收数据采用的是中断模式,DM9000 内部有0x3FF 大小的SRAM 用于接收和发送数据缓存。在发送或接收数据包之前,数据是暂存在这个SRAM 中的。当需要连续发送或接收数据时,需要分别把DM9000 寄存器MWCMD 或MRCMD 赋予数据端口,这样就指定了SRAM 中的某个地址,并且在传输完一个数据后,指针会指向SRAM 中的下一个地址,从而完成了连续访问数据的目的。但当发送或接收一个数据后, 指向SRAM 的数据指针不需要变化时,则要把MWCMDX 或MRCMDX 赋予数据端口 。

发送数据比较简单,接收数据就略显复杂,因为它是有一定格式要求的。在接收到的一包数据中的首字节如果为0×01,则表示这是一个可以接收的数据包;如果为0×0,则表示没有可接收的数据包。因此在读取其他字节时,一定要先判断首字节是否为0×01.数据包的第二个字节为数据包的一些信息,它的高字节的格式与DM9000 的寄存器RSR 完全一致。第三个和第四个字节为数据包的长度。后面的数据就是真正要接收的数据了。

2. 2. 1 UDP 协议栈的裁剪实现

在系统中主要使用UDP 通信,只需要实现ARP协议.IP 协议,对TCP/ IP 协议进行部分的实现.UDP协议通信(即用户数据报协议)与TCP 一样都是属于传输层协议,位于IP(网际协议)协议的顶层.UDP 相对于TCP 是一种简单协议,提供的是最少的服务,编写的代码量也小,所需的程序和内存空间少,运行速度快.ARP 为IP 地址对应的硬件地址之间提供动态映射,发送终端把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit 的以太网地址来确定目的接口的。设备驱动程序从不检查IP 数据报中的目的IP 地址.IP 协议是TCP/ IP 协议中最为核心的协议,它提供不可靠。无连接的数据报传送服务 。

2. 2. 2 数据的发送过程

数据发送过程如图2 所示。发送终端在第一次发送数据的时候,要知道接收端的IP 地址和端口号,还要得到对方的物理MAC 地址,因为两个终端最后通信是通过寻找对方的MAC 地址来进行的,因此首先得通过ARP 协议,把对方的IP 地址转换为MAC 地址,得到了物理地址之后才能通信。如果长时间不能得到这个物理地址,则只能说明请求失败,需要重新发送ARP 请求,ARP 的封装过程如图3(b)所示。

基于ARM9和DM9000芯片解决UDP协议的通信问题

基于ARM9和DM9000芯片解决UDP协议的通信问题

2. 2. 3 数据包的封装过程

UDP 协议数据包的封装在运输层进行,打好包的UDP 数据将送往网络层进行IP 协议的打包,UDP 要完成进程到进程的通信,把报文交付给正确的进程。当进程有报文要通过UDP 发送时,它就把这个报文连同一对套接字地址以及数据长度传递给UDP.UDP 收到数据后就加上UDP 首部,也就是UDP 数据包的封装如图3(c)所示。然后UDP 就把该用户数据包连同IP 加上自己首部,在协议字段使用值17,指出该数据是从UDP 协议来的,这个过程就是IP 数据包的封装过程如图3(a)所示。这个IP 数据包再传递给数据链路层。数据链路层收到IP 数据包之后,加上自己的首部(可能还有尾部),再传递给物理层。物理层把这些位编码为电信号或者光信号,然后把它发送到远程的机器。

2. 2. 4 数据的接收

系统接收数据采用的是中断模式。当网卡接收到数据时,就触发一个中断,启动中断服务程序。在中断服务程序中首先清除中断标志位,以防在接收数据的时候再次引发中断,然后判断寄存器MRMDX 的值,确定网卡是否接收到了数据,如果接收到了数据就要进行数据处理,也就是对数据包的解封,得到应用程序发送来的数据,如果没有得到数据则说明网卡初始化失败,重新初始化网卡。中断接收程序的流程图如图4所示。

基于ARM9和DM9000芯片解决UDP协议的通信问题

在接收到以太网数据帧中,首先判断数据类型字段,如果是ARP 协议,则进入ARP 处理流程,如果是IP 协议,则进入IP 协议流程.ARP 协议处理过程:

首先判断ARP 包目的IP 地址是否与本地IP 地址一致,如果不一致,丢弃不处理;如果一致,再判断ARP类型,操作类型字段为1 时表示ARP 请求,调用ARP发送函数发送ARP 响应包。操作类型字段为2 时,记录下对方的MAC 地址,以后通信就是根据这个MAC传送数据的。

IP 协议处理过程如下所述:首先判断IP 包目的IP地址是否与本地IP 一致,如果不一致,丢弃不处理,如果一致,则再判断协议类型,是否为UDP 数据包,是就进入UDP 处理过程,不是就进入其他协议处理过程。

3 实验结果和分析

3. 1 ARP 通信测试

实验中测试了ARP 请求和UDP 通信,设置ARM开发板的IP 地址为219. 243. 50. 187,MAC 地址为0×52,0×54,0x4c,0×38,0xf7,0×42,PC 机的IP 地址为219. 243. 50. 188,MAC 地址为0×00,0×23,0x5A,0×15,0×73,0xF4.经过测试当开板向PC 发送ARP 请求时,PC 能够正确应答响应包,并且多次请求都能够得到正确的响应,证明ARP 协议能够稳定运行,实验结果如图5 所示。

当开发板得到了PC 机的MAC 地址之后,就可以与它进行正常的UDP 通信了。在中断程序之中判定协议类型,接收到的数据包是ARP 协议还是UDP 协议,当接收的是ARP 协议,则进行ARP 协议处理,得出图5 的实验结果,当得到的是UDP 协议,则进行UDP 协议处理,得出的实验结果如图6 所示。经过长时间的通信可以发现,传输的数据没有出现误码,可以说明这种通信方式比较稳定可行。

基于ARM9和DM9000芯片解决UDP协议的通信问题

3. 2 UDP 通信测试

在UDP 通信实验中,设置两个数据终端的IP 地址和通信端口分别为219.243.50.187:6000,219.243.50.186:10005,然后发送数据,用抓包工具sniffer 抓包的结果如图6 所示。通过图中结果可以看出,SrcIP 为219. 243. 50. 87,Src Port 为6000,DestIP 为219. 243.50. 186,Dst Port 为10005,这都与设置的相同.Protocol为0×800 表示为UDP 协议类型,而且能够正确地接收到发送的数据,并且经过多次的实验,结果都是正确的,这证明系统通信稳定可靠,通过移植的协议栈能够正常的工作,达到了预期的目标。

4 结束语

文中实现了基于ARM9 和DM9000 芯片的UDP通信,成功地对TCP/ IP 协议栈裁剪移植实现UDP.ARP 等协议通信。详细介绍了DM9000 网卡驱动程序过程,并且实现了网口接收发送数据的功能,通过对大量数据的传输实验,证明了ARM9 和DM9000 构成的通信系统性能的稳定性。能够较好地解决大量数据通过UDP 协议通信的问题.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4975

    文章

    18228

    浏览量

    287651
  • 以太网
    +关注

    关注

    40

    文章

    5052

    浏览量

    166124
  • 三星电子
    +关注

    关注

    34

    文章

    15596

    浏览量

    180082
收藏 人收藏

    评论

    相关推荐

    STM32+LWIP网络协议栈移植(网卡采用DM9000)

    本篇文章主要讲解如何在STM32F103工程里添加移植LWIP协议,最终完成TCP服务器、TCP客户端的通信测试。 网卡采用的是DM9000,工程代码中,采用STM32的FSMC接口来驱动DM
    的头像 发表于 03-11 09:49 7041次阅读
    STM32+LWIP网络<b class='flag-5'>协议</b>栈移植(网卡采用<b class='flag-5'>DM9000</b>)

    DM9000芯片快速以太网控制器简介

    DM9000 是一款完全集成的、性价比高、引脚数少、带有通用处理器接口的单芯片快速以太网控制器。 自 带一个 10/100M PHY 和 4K 双字的 SRAM ,DM9000A 为适应各种处理器提供了 8 位、16 位数据接
    的头像 发表于 06-01 09:08 8885次阅读
    <b class='flag-5'>DM9000</b>单<b class='flag-5'>芯片</b>快速以太网控制器简介

    DM9000系列

    dm9000   1、总体介绍  该DM9000是一款完全集成的和符合成本效益单芯片快速以太网MAC控制器与一般处理接口,一个10/100M自适应的PHY和4K DWORD值的SRAM 。它的目的
    发表于 05-17 10:17

    dm9000读写寄存器的问题

    )方式2的函数名为phy_read,估摸着意思是读网卡芯片的寄存器,但我看DM9000的时候只看到一类寄存器,并没有分成两类,那么这两种读取方式有什么区别?{:36:}
    发表于 10-31 16:13

    【NUCLEO-F412ZG申请】合作式调度器构建以及基于DM9000的LWIP移植及调试

    DM90005、移植LWIP协议栈,实现TCP/UDP通信,并通过上位机软件同Demo板进行数据传输。6、移植FreeRTOS,显现串口守护任务,进行串口数据收发。7、实现NRF24L
    发表于 10-31 15:31

    DM9000网卡没有反映,灯不亮

    昨天还能用,今天DM9000不能用,dm9000 not found at 0x20000000 id: 0x2b2a2928
    发表于 06-03 05:45

    U-Boot移植DM9000网卡分享!

    讲的CS8900网卡了。DM9000网卡与CS8900网卡接口方式不一样,经过几天的折腾,终于移植成功,现将笔记整理如下。一、移植环境1.u-boot版本1.1.62.开发板Jz2440(ARM9
    发表于 07-29 00:06

    如何在uboot使用命令打开DM9000

    在使用开发板ping虚拟机的时候 发现了ERROR: resetting DM9000 -> not responding 这个错误 DM9000没有打开,我使用的是没有默认打开
    发表于 09-25 22:14

    DM9000/DM9010 pdf datasheet (E

    DM9000/DM9000A & 9010 10/100 Mbps Single Chip Ethernet Controller with General Processor
    发表于 12-25 21:57 8次下载

    dm9000/dm9000a linux驱动程序 (Ethe

    dm9000/dm9000a以太网卡芯片linux驱动程序 :dm9000/dm9000a Ethernet chips linux dri
    发表于 12-26 00:13 117次下载

    基于ARMDM9000的网卡接口设计与实现

    针对ARM CPU S3C2410的特点,设计开发了外围网卡接口平台,通过驱动程序对以太网控制芯片DM9000的控制,实现了网络数据传输功能。硬件方面主要涉及以太网网络接口的设计,软件方
    发表于 10-09 16:16 144次下载

    DM9000的以太网藏文信息控制平台

    DM9000的以太网藏文信息控制平台 摘要:基于DM9000的以太网电路,单片机端移植精简TCP/IP协议栈unIP,实现简易的TCP服务器。对该简易的TCP服务器进行改造,把藏文网页存储
    发表于 04-13 12:47 4749次阅读
    <b class='flag-5'>DM9000</b>的以太网藏文信息控制平台

    单片机驱动DM9000网卡芯片详细调试过程

    单片机驱动DM9000网卡芯片详细调试过程
    发表于 11-02 11:03 0次下载

    基于ARM9UDP协议栈的设计与实现

    基于ARM9UDP协议栈的设计与实现
    发表于 01-19 21:22 9次下载

    使用单片机驱动DM9000网卡芯片的详细调试过程资料免费下载

    本文主要介绍单片机驱动DM9000E网卡芯片的详细过程。从网卡电路的连接,到网卡初始化相关程序调试,再到ARP协议的实现,一步一步详细介绍调试过程。如果有时间也会把UDP和TCP通讯实
    发表于 08-27 17:30 13次下载
    使用单片机驱动<b class='flag-5'>DM9000</b>网卡<b class='flag-5'>芯片</b>的详细调试过程资料免费下载