uip协议栈下载
- 格式:docx
- 大小:39.00 KB
- 文档页数:20
ETH—Lwip以太⽹通信1、TCP/IP 协议栈 标准 TCP/IP 协议是⽤于计算机通信的⼀组协议,通常称为 TCP/IP 协议栈,通俗讲就是符合以太⽹通信要求的代码集合,⼀般要求它可以实现每个层对应的协议,⽐如应⽤层的 HTTP、 FTP、 DNS、 SMTP 协议,传输层的 TCP、 UDP 协议、⽹络层的 IP、ICMP 协议等等。
关于 TCP/IP 协议详细内容推荐阅读《TCP-IP 详解》和《⽤ TCP/IP 进⾏⽹际互连》理解。
Windows 操作系统、 UNIX 类操作系统都有⾃⼰的⼀套⽅法来实现 TCP/IP 通信协议,它们都提供⾮常完整的 TCP/IP 协议。
对于⼀般的嵌⼊式设备,受制于硬件条件没办法⽀持使⽤在 Window 或 UNIX 类操作系统的运⾏的 TCP/IP 协议栈,⼀般只能使⽤简化版本的TCP/IP 协议栈,⽬前开源的适合嵌⼊式的有 uIP、 TinyTCP、 uC/TCP-IP、 LwIP 等等。
其中LwIP 是⽬前在嵌⼊式⽹络领域被讨论和使⽤⼴泛的协议栈。
1.1 、为什么需要协议栈 物理层主要定义物理介质性质, MAC ⼦层负责与物理层进⾏数据交接,这两部分是与硬件紧密联系的,就嵌⼊式控制芯⽚来说,很多都内部集成了 MAC 控制器,完成 MAC ⼦层功能,所以依靠这部分功能是可以实现两个设备数据交换,⽽时间传输的数据就是 MAC数据包,发送端封装好数据包,接收端则解封数据包得到可⽤数据,这样的⼀个模型与使⽤ USART 控制器实现数据传输是⾮常类似的。
但如果将以太⽹运⽤在如此基础的功能上,完全是⼤材⼩⽤,因为以太⽹具有传输速度快、可传输距离远、⽀持星型拓扑设备连接等等强⼤功能。
功能强⼤的东西⼀般都会⽤⾼级的应⽤,这也是设计者的初衷。
使⽤以太⽹接⼝的⽬的就是为了⽅便与其它设备互联,如果所有设备都约定使⽤⼀种互联⽅式,在软件上加⼀些层次来封装,这样不同系统、不同的设备通讯就变得相对容易了。
本笔记适用于uIP1.0。
移植平台介绍:MSP430F149+cs8900a+IAR1、阅读The uIP Embedded TCP/IP Stack The uIP 1.0 Reference Manual.2、建立一个文件夹,起名myport,将uip-1.0下的uIP和lib两个文件夹拷贝过去,然后再在myport下建立app文件夹。
3、将unix子文件夹下的clock-arch.c、clock-arch.h拷贝到myport下,这个文件实现协议栈所用的时钟,由430的定时器完成,有三个函数:clock_time_t clock_time(void){return ticks;}void clock_init(void){定时器的初始化工作}__interrupt void timer_interrupt(void)/*定时器中断函数*/{++ticks;}。
4、将unix子文件夹下的uip-conf.h拷贝到myport下,这个文件实现协议栈所用的配置,按照需要修改之。
5、写cs8900a的驱动函数,这里采用8位、查询模式,替换tapdev.c 或slipdev.c。
6、将unix子文件夹下的main.c函数拷贝到myport下,这个是主调度流程,按照需要修改。
7、建立自己的工程,将以上文件包含。
8、调试,改错。
其中,uip的缓冲区是以字节数组的形式产生,为了保证它的起始地址是偶数,必须指定地址。
UDP的初始化如下void myudp_init(void){uip_ipaddr_t ipaddr;//定义IP类型变量uip_ipaddr(ipaddr, 210,29,104,88); //远程IP为210.29.104.88if(myudp_conn != NULL){uip_udp_remove(myudp_conn);//如果连接已经建立,则删除之}myudp_conn = uip_udp_new(&ipaddr, HTONS(1000));//建立到远程ipaddr,端口为1000的连接if(myudp_conn != NULL){uip_udp_bind(myudp_conn, HTONS(2000));//绑定本地端口为2000,也就是2000-->1000 发数据}}void myudp_send(char *str,short n){char *nptr;nptr = (char *)uip_appdata;memcpy(nptr, str, n);uip_udp_send(n); //发送n个数据}void newdata(){char *nptr;short len;len = uip_datalen();//读取数据长度nptr = (char *)uip_appdata; //取得数据起始指针if(len<4)myudp_send("Please check the command!\n",26);else if(strncmp(nptr,"getname",7)==0)myudp_send("My name is xiaomu.",19);else myudp_send("Unkown command!\n",16);}/*---------------------------------------------------------------------------*//** \internal* The main UDP function.*//*---------------------------------------------------------------------------*/voidmyudp_appcall(void){if(uip_udp_conn->rport == HTONS(1000)){if(uip_poll()) {myudp_send("hello\n",6);//定时时间到,发hello}if(uip_newdata()) //如果指定IP的指定端口发来数据{newdata();}}}TCP的和这个差不多,初始化时就监听端口uip_listen(HTONS(23));myudp_conn = uip_udp_new(&ipaddr, HTONS(0));//如果远程ipaddr为0,端口也为0,则可以接收来自任何ip任何端口的信息,但必须指定本地端口,即要绑定。
S T M32F103Z E-E K开发板用户手册版本:V1.0安富莱电子开发网W W W.A R M F L Y.C O M1.产品规格简介STM32F103ZE-EK开发板以STM32F103ZET6(LQFP144)为核心。
STM32F103ZE 是ST(意法半导体)公司推出的ARM Crotex-M3产品线中功能最强大的一款CPU。
片内集成512kB Flash、64kB RAM、1个USB、1个CAN、 8个定时器、5个USART、3个ADC、2个DAC、3个SPI、2个I2C、2个I2S、1个SDIO、112个GPIO、FSMC总线(支持NOR,NAND,SRAM)。
CPU主频72MHz,广泛适用于各种应用场合。
本开发板具备丰富的硬件资源,配套的试验例程均提供源代码,文档齐备,非常适合于学习和项目评估。
硬件资源■ 8M晶振作为MCU的时钟,32768晶振用于RTC ■ 1M字节SRAM,16M字节NOR Flash,128M字节NADN Flash■ 2M字节串行Flash,256字节串行EEPROM■ 1个SD/MMC卡座■ 1个CAN2.0A/B接口■ 2个RS232串口■ 1个RS485接口■ 1个USB2.0全速DEVICE接口■ 1个USB2.0全速HOST接口■ 1个100M/10M以太网接口■ I2S音频DAC(24bit,96kHz),1个立体声耳机插座,1个扬声器■ 3.0寸TFT真彩触摸LCD(WQVGA,400x240)■ 1个5向摇杆,1个Reset按钮、1个wakeup按钮、1个自定义按钮 ■ 4个自定义LED,1个电源LED,1个音频LED ■ 1个CR1220电池座■ 1个精密可调电阻连接到ADC输入■ 所有的GPIO引到2.54mm间距焊盘■ 1个DAC引出端子,1个PWM引出端子■ 标准2.54mm间距JTAG插座■ 2个BNC输入端子,集成双通道示波器电路,具备AC/DC切换、输入增益切换开关■ 3种供电方式:USB电缆、外接5V电源、JTAG 调试接口(J-LINK仿真器)■ 1个电源开关,上下电时无需拔插电缆■ 3种启动方式:用户Flash、系统存储器、SRAM ■ 用拨码开关取代跳线帽,避免跳线帽丢失■ 板子规格:14cm x 12cm软件资源■ 提供100多个试验例程■ 提供uCOS_II+ucGUI例程和文档■ 即将展开USB虚拟示波器项目源码■ 即将移植ucLinux (硬件资源已满足要求) ■ 更多的软件资源将在发布标配清单■STM32F103ZE-EK开发板1块■ 3.0寸TFT触摸显示模块1块■1根串口线、1根网线、1根USB电缆■资料光盘1张可选的配件:■60M示波器探头1对■USB转串口线1根2.快速入门2.1.注意事项(1)外接电源必须是5.0V 的直流电源,插头有极性,内正外负。
以太网实验1.实验目的(1)熟悉以太网的应用(2)熟悉Stellaris®以太网控制器的功能和特点(3)熟悉TCP/IP协议栈的层次与内容(4)熟悉HTTP应用程序2.实验内容(1)Stellaris®以太网控制器的初始化(2)以太网控制器状态LED灯的配置(3)uIP TCP/IP协议栈的初始化(4)HTTP应用程序的初始化(5)演示web server实验,使用uIP协议栈来实现以太网的访问与控制3.以太网控制器与TCP/IP协议ARM Cortex-M3磁性元件RJ45以太网控制器介质访问控制器MAC(第二层)物理层PHY(第一层)图1 以太网控制器LM3S8962微控制器内部集成的以太网控制器由完全集成的介质访问控制器(MAC)和网络物理层(PHY)接口组成。
若按功能划分以太网控制器的连接如图1所示。
以太网数据由以太网帧来传送,数据链路层的MAC子层提供了以太网帧的发送和接收处理。
以太网帧的格式如图2所示。
前导码SFD目标地址源地址长度/类型数据FCS46~1500字节7字节1字节6字节6字节2字节4字节图2 以太网帧以太网发送器必须通过置位MACTCTL中的TXEN位来使能。
对于发送器的配置:可以通过DUPLEN位来配置全双工/半双工操作模式;为了使以太网控制器在发送帧结束时自动产生和插入FCS,可通过置位CRC位来实现;IEEE802.3规范规定以太网帧的最小净负荷区为46字节,如果装入FIFO净负荷区的数少于这个数,则通过置位PADEN位将以太网控制器配置成自动填充数据区。
以太网接收须通过置位MACRCTL中的RXEN位来使能。
在软件启动时以太网控制器Rx FIFO必须清零。
接收器会自动FCS字段中带无效CRC值的帧,要接收所有的帧,就必须清零BADCRC位。
正常工作模式下,接收器只接收带目标地址的帧,而且该目标地址要与MACIA0和MACIA1中的地址一致。
以太网接收器也可以用PRMS和AMUL域配置成混杂模式和多播模式。
6LOWPAN与ZigBee的区别ZigBee是现今最流行的低成本,低能耗无线Mesh网络标准。
ZigBee被应用在家庭自动化(home automation),智能能源(Smart Energy),商业楼宇自动化(commercial building automation)以及其它低速率无线网络中。
ZigBee是架构在802.15.4标准上的技术。
ZigBee 被设计用来实现物联网(sensor networks)通信标准。
6Lowpan是IPv6 over Low-power wireless Personal Area Networks的首字母缩写。
这个名字起源于IETF的6LoWPAN工作组。
6Lowpan的物理层和MAC层采用802.15.4标准。
与以太网、802.11等传统链路层不同,标准的IPv6协议不能直接构建在IEEE802.15.4MAC层之上。
为此,需要在IPv6网络层和IEEE802.15.4MAC层之间加入一个中间层,即适配层,适配层主要功能是压缩、分片与重组、Mesh路由。
网络层采用IPV6协议,传输层采用TCP或者UDP,应用层Socket接口。
6Lowpan和ZigBee都可以用于802.15.4技术标准,下边我们从几个方面比较一下这两个技术。
1.互操作性Interoperability互操作性是我们在选择无线协议时首先要考虑的。
从技术术语上看,互操作意味着应用无需了解传输数据包的物理链路。
ZigBee定义通行在802.15.4的节点节点进行,对应IP技术是二层。
然后定义上层应用通信技术。
这意味着ZigBee设备可以和其它ZigBee设备互通,假设这些设备应用同样的profile.应用一个简单的Bridge 设备,6Lowpan支持与其它802.15.4设备的互通,同时也支持和其它IP网络的互通,如以太网和WIFI。
ZigBee网络和非ZigBee网络之间的桥接需要非常复杂的应用层网关。
智能变电站辅助系统综合监控平台一、系统概述智能变电站辅助系统综合监控平台以“智能感知和智能控制”为核心,通过各种物联网技术,对全站主要电气设备、关键设备安装地点以及周围环境进行全天候状态监视和智能控制,完成环境、视频、火灾消防、采暖通风、照明、SF6、安全防范、门禁、变压器、配电、UPS等子系统的数据采集和监控,实现集中管理和一体化集成联动,为变电站的安全生产提供可靠的保障,从而解决了变电站安全运营的“在控”、“可控”和“易控”等问题。
二、系统组成(一)、系统架构(二)、系统网络拓扑交换机服务器站端后台机网络视频服务器门禁摄像摄像头户外刀闸温蓄电池在线监测开关柜温度监测电缆沟/接头温度监测SF6监测空调仪表电压UPS温湿度电流烟感电容器打火红外对射门磁非法入侵玻璃破碎电子围栏水浸空调风机灯光警笛警灯联动协议转换器协议转换器协议转换器消防系统安防系统其他子系统TCP/IP 网络上级监控平台采集/控制主机智能变电站辅助系统综合监控平台将各种子系统通过以太网或RS232/485接口进行连接,包括前端的摄像机、各种传感器、中心机房的存储设备、服务器等,并通过软件平台进行集成和集中监视控制,形成一套辅助系统综合监控平台。
(三)、核心硬件设备:智能配电一体化监控装置PDAS-100系列智能配电一体化监控装置,大批量应用在变电站、开闭所和基站,实践证明产品质量的可靠性,能够兼容并利用现有绝大部分设备,有效保护客户的已有投资。
能够实现大部分的传感器解析和设备控制,以及设备内部的联动控制,脱机实现联动、报警以及记录等功能。
工业级设计,通过EMC4级和国网指定结构检测。
智能配电一体化监控装置是针对电力配电房的电缆温度以及母线温度无线检测,变压器运行情况以及油温检测、配电、环境、有害气体以及可燃气体和腐蚀性气体检测、安防、消防、采暖通风除湿机控制、灯光控制以及门禁而设计生产的一款产品。
它通过以太网TCP/IP 或者GPRS/3G/4G 网络,主要解决分布式无人值守配电房的监控和管理问题。
无线传感器网络基本概念整理2015.3.31 by yhp@shenzhen 1.contiki & uIP & Rime首先,contiki是一个事件驱动的操作系统,有一个事件驱动的核心.这么说倒很官话,有什么用?如果是zigbee的话,contiki就相当于ZSTACK的那个OS,这么说,大概可以想象到起到的作用咯,就是管理任务事件,这是群里曾有个人说的,我觉得瞬间懂了,所以就放在这里.uIP是什么?uIP是开放源码的TCP/IP协议栈,定位于能够在8位到16位的微处理器上运行,最早只支持IPV4,后来加入了IPV6的扩展,叫做uIPV6.2.在说Rime前,我们先看看网络上的资料是怎么描述这个东东的.➢Contiki是由两个通信协议栈组成的,一个是uIP,一个是Rime. uIP 是一个小型的符合 RFC 规范的 TCP/IP 协议栈,使得 contiki 可以直接和 Internet 通信。
uIP 包含了 IPv4 和 IPv6 两种协议栈版本,支持TCP、 UDP、 ICMP 等协议,但是编译时只能二选一,不可以同时使用。
Rime 是一个轻量级为低功耗无线传感器网络设计的协议栈,该协议栈提供了大量的通信原语,能够实现从简单的一跳广播通信,到复杂的可靠多跳数据传输等通信功能。
对于 IP 协议栈,支持 IPv4 和 IPv6 两个版本, IPv6 还包括6Lowpan 帧头压缩适配器,ROLL RPL 无线网络组网路由协议、CoRE/CoAP 应用层协议,还包括一些简化的 Web 工具,包括 Telnet、http 和 web 服务等。
Contiki 还实现了无线传感器网络领域知名的MAC 和路由层协议,其中MAC 层包括 X-MAC,CX-MAC ContikiMAC、CSMA-CA、LPP等,路由层包括 AODV、RPL等短评:这段话就是说,contiki是由两个协议栈部分构成的,uip和Rime,一个是TCP协议栈,另一个无线协议栈.还有一个图说明他们的关系.如下也从侧面说明了我们说的6lowpan的支持是在uIP中实现的.报头压缩适配器是在IPV6的实现部分涅.➢Contiki和uipv6的结构如图标所示,底层的硬件抽象被分成了平台部分和CPU部分,以方便移植.在这层中包含有硬件的驱动.contiki提供基本的线程和定时器支持.Rime系统是一个可伸缩的介质访问控制和网络协议库,在其中包含了许多底层通讯的范例,Uipv6 协议栈使用Rime,同时提供了类似于socket的API接口以供应用层调用,这个接口被叫做photosockets.无论是内置的还是用户自己的应用程序,都使用一种被叫做photothreads的轻型线程模型.(出自<<6lowpan:the wireless embedded internet>>)简评:这个图和上面的图就对上了,但对于uipv6和rime的关系说的更明了.总结:contiki使用了Rime和uip完成无线网络的协议栈支持,一个管无线部分,一个管与TCP/IP网络框架的支持部分.。
LM3S8962开发板用户手册目录1.概述 (4)2.电路及接口说明 (4)2.1. 电源模块 (4)2.2. 网络通信模块 (5)2.3. CAN通信模块 (5)2.4. RS485通信模块 (6)2.5. RS232通信模块 (8)2.6. SPI设备 (9)2.7. IIC设备 (10)2.8. LED驱动电路 (10)2.9. 按键检测电路 (11)2.10. AD测试电路 (11)2.11. 中文液晶接口 (12)2.12. 扩展接口 (12)3.软件使用说明 (13)3.1. K EIL MDK-ARM (13)3.1.1.搭建编译环境 (13)3.1.2.使用ULINK2仿真器的环境配置 (13)3.2. IAR编译环境 (16)3.2.1.搭建编译环境 (16)3.2.2.配置编译环境 (17)4.应用程序说明 (17)4.1. CODE\EK-LM3S8962目录下的程序说明 (17)4.1.1.EK-LM3S8962\RL\TCPnet\Http_demo (17)4.1.2.EK-LM3S8962\RL\TCPnet\ Http_upload (24)4.1.3.EK-LM3S8962\RL\TCPnet\ Telnet_demo (28)4.1.4.EK-LM3S8962\RL\TCPnet\ DNS_demo (29)4.1.5.EK-LM3S8962\RL\ FlashFS\SD_File (30)4.1.6.EK-LM3S8962\RL\ FlashFS\ CAN\ (31)4.2. CODE\S TELLARIS W ARE目录下的程序说明 (32)4.2.1.\StellarisWare\boards\ek-lm3s8962\uart_echo (32)4.2.2.\ StellarisWare\boards\ek-lm3s8962\blinky (33)4.2.3.\ StellarisWare\boards\ek-lm3s8962\timers (33)4.2.4.\ StellarisWare\boards\ek-lm3s8962\enet_uip (34)4.2.5.\ StellarisWare\boards\ek-lm3s8962\enet_ptpd (35)5.原理图 (36)6.联系方式 (36)1.概述文档适合购买LM3S8xxx系列开发板的用户使用,希望通过文档的描述可以使用户更快的进入产品的开发阶段。
栈都可以移植到单芯片模型中。
图1SoC射频模型单芯片方案的带来的一大缺点是软件开发周期的延长以及难度都是采用小型定制的微控制器内核因此要把应用程序、嵌入式操作系统以及协议栈都集成到一起需要花费更多的测试与调试周期。
同时用单独的编译器和开发环境,对软件的可重用性限制很大如果应用程序复杂度较高,或者对性能要求较高图2给出了一个双芯片模型的框图微控制器和射频收发器是分离式的。
特别地部已经固化了网络协议栈的话,它一般就被称为网络处理器AT86RF231等。
图2双芯片模型结构图网络处理器方案如果某些产品的应用程序已经完善了,所有的用户功能也已正常运作,只是需要额外给它添加网络通信功能(即协议栈)的时候,使用网络处理器方案是一种合理的途径。
该方案能够有效减少开发者学习使用一种全新芯片的时间。
一般而言,网络处理器需要配合微控制器共同使用,因此它是一种特殊的双芯片方案。
不同的是,在网络处理器内部不仅有无线收发器,而且已经固化了6LoWPAN的协议栈。
典型图3网络处理器方案结构图和网络处理器的通信可通过UART接口或者SPI接口,通信命令类似于套接字协议。
因此该模型的使用方式不再需要将6LoWPAN协议栈集成到微控制器中,而仅仅只需通过软件通信接口即可实现。
如果实际采用了操作系统,比如LINUX来运行应用程序,则只需要很小的改进便可将6LoWPAN通信功能添加进去。
该方案的缺点如同双芯片方案,他同样需要两个芯片来实现。
因此对电路板尺寸严格控制的项目将难以实施。
由于网络处理器内部集成了图2无人机拍摄的道路画面与常规人工巡查相比,不受地形限制、巡查效率大大提高可将拍摄的数据带回分析,使得巡视不留死角,降低人工劳动强度与载人飞机和飞艇遥感相比,运营成本低,而且不需要进行飞行员培训、飞行申请随时随地进行巡视。
不受气象、地理条件的影响。
一般无人机巡查应更激烈的机动和更加恶劣的飞行环境,更适于执行特殊时期危险性不会造成人员伤亡风险;生存能力强,机动性能好不受其环境地质变化多样的地震、塌方、风刮物等影响。
能技术Energy Technology and Management 2021年第46卷第1期Vol.46No.1164doi:10.3969/j.issn.1672-9943.2021.01.059信息技术RL-TCP协议栈分析及其应用徐杰(常州长创力智能科技有限公司,江苏常州213000)[摘要]介绍了RL-TCP嵌入式以太网协议栈的特/,使用时的静/动态配置,对其中的tcp_callback()、udp_callback()回调函数做了详细分析,阐述了基于该协议栈所开发的一款在线监测系统用信号显示牌的软件设计。
实际应用结果表明,该显示牌运行稳定、可靠。
[关键词]RL-TCP;在线监测系统;信号显示牌[中图分类号]TP393.02[文献标识码]B%文章编号]1672-9943(2021)01-0164-030引言随着工业以太网技术被逐步应用到工业控制现场[1-2],现场设备层的嵌入式设备以太网需求也越来越多。
TCP/IP协议栈作为嵌入式设备联网必不可少的软件基础,目前常见的嵌入式以太网协议栈主要有LwIP、uIP以及linux IP等。
这些协议栈具有一定的通用性,协议内容比较全,同时也比较复杂F 具体在移植到应用系统的时候要考虑的问题较多,各个库文件和全用,要定系统,牵一发而动全身。
尤其存的及上层议与底层网络驱动的接口是移植时的2个难题叫RL-TCP作为一款smart型的TCP/IP协议栈,有过多的文。
文RL-TCP协议栈作了,基协议栈发的一在系统用的软件设计。
1RL-TCP协议栈特点RL-ARM是Keil MDK自带的实时库文件,其中包括Real-Time executive实时操作系统RTX内核、RL-FlashFS文件系统、TCP/IP协议栈RL-TCPnet、CAN总线函数库RL-CAN和USB总线函数库RL-USB⑷。
文主要介绍RL-TCPnet嵌入式以太网协议栈,RL-ARM的其库不多。
实现6LoWPAN技术的解决方案简析作者:王荣来源:《科技视界》2014年第20期【摘要】本文提出了几种基于6LoWPAN协议为基础的工程应用项目解决方案,从硬件结构设计到软件协议栈的选择给出了几种参考方法,并给出了一些相应的对比。
硬件结构主要包括单芯片、双芯片以及网络处理器几种模型,协议栈主要分为Contiki的uIPv6、TinyOS的BLIP、Sensinode的NanoStack以及Jennic的JenNet协议栈。
【关键词】6LoWPAN;协议栈;协议;解决方案1 短距离无线通信技术与6LoWPAN物联网的应用在近几年成为了信息领域的热门话题。
无线传感网(Wireless Sensor Network, WSN)是提到最多的短距离无线通信网络。
无线传感网主要通过各类微型传感器节点(Node)组成无线个域网(Wireless Personal Area Network, WPAN),用于感知和监控综合环境信息[1]。
类似的技术主要有ZigBee以及6LoWPAN协议。
尽管两者均是基于IEEE 802.15.4设计,由于ZigBee协议在连入互联网的时候需要专门的网关(不直接支持IP地址),为了实现WSN和IP网络的无缝对接[2],支持IP通信协议的6LoWPAN被越来越多的项目及科研所使用[3]。
本文主要探讨关于6LoWPAN在工程项目中应用时的几种软硬件解决方案,旨在为广大工程项目开发者提供几种思路。
2 6LoWPAN的芯片方案6LoWPAN技术作为一种短距离低速率无线网络通信技术,通常应用于嵌入式设备中。
由于6LoWPAN协议栈一般运行在微控制器芯片中,通常有3种解决方案:单芯片模型、双芯片模型以及网络处理器方案。
单芯片模型采用SoC芯片,即片上系统,将射频模块和微控制器(Microcontroller,MCU)集成在一片芯片上。
双芯片模型采用通用微控制器和一片射频收发芯片共同工作。
千兆网项目中,移植了uip到mcu中,采用udp通信方式,主要用来做一些控制协议的处理。
刚开始接手的时候,并没有做过网络方面的应用,而且对tcp/ip及udp通信又不太熟悉。
好在网上有一些文档,加上仔细阅读uip_process代码,一边用抓包软件一边调试,总算把uip很好的应用了起来,而且还针对项目某些应用的特殊性,对uip源码进行了一些修改。
本文前半部分对uip源码的一些重要函数进行介绍,后半部分将对修改的部分做个记录,以备往后查阅。
本次使用的是uip-1.0,抓包软件用的Wireshark 1.6.7,这个软件真的很不错,居然支持gige vision,这点真的很意外。
一、一个完整的UDP数据报文格式其实uip就是将你要发送到网络上的数据加上报头,好让它被成功发送到目的主机。
所以我们要先搞清楚一个完整的数据报文,才能搞清楚uip到底在做些什么。
Ethernet Header:由目标mac和本机mac及type组成,共14byte,当目标mac全为ff 时,表示是udp广播。
Type=0x0800表示是ip。
在uip中,Ethernet Header结构体定义如下:IP Header:0x45表示version=4,header length=20byte;0028表示ip header+udp header+user data长度为40byte;6C14为包的ID,每发一个包,这个ID会自加1。
80的意义是time to live,表示这个包的存活时间,路由每转发一次,就会对它自减1。
17表示通信协议类型为UDP,4a0a为ip header的校验码。
再后面就是源IP和目的IP地址了。
UDP Header:0aaa表示src port为2730;0f74表示dst prot为3956;14表示udp header+user data长度为20byte,c477表示udp header的校验码,在一般的情况下,这个可以为0。
竭诚为您提供优质文档/双击可除uip协议栈下载篇一:uip之udp应用笔记千兆网项目中,移植了uip到mcu中,采用udp通信方式,主要用来做一些控制协议的处理。
刚开始接手的时候,并没有做过网络方面的应用,而且对tcp/ip及udp通信又不太熟悉。
好在网上有一些文档,加上仔细阅读uip_process 代码,一边用抓包软件一边调试,总算把uip很好的应用了起来,而且还针对项目某些应用的特殊性,对uip源码进行了一些修改。
本文前半部分对uip源码的一些重要函数进行介绍,后半部分将对修改的部分做个记录,以备往后查阅。
本次使用的是uip-1.0,抓包软件用的wireshark1.6.7,这个软件真的很不错,居然支持gigevision,这点真的很意外。
一、一个完整的udp数据报文格式其实uip就是将你要发送到网络上的数据加上报头,好让它被成功发送到目的主机。
所以我们要先搞清楚一个完整的数据报文,才能搞清楚uip到底在做些什么。
ethernetheader:由目标mac和本机mac及type组成,共14byte,当目标mac全为ff时,表示是udp广播。
type=0x0800表示是ip。
在uip中,ethernetheader结构体定义如下:ipheader:0x45表示version=4,headerlength=20byte;0028表示ipheader+udpheader+userdata长度为40byte;6c14为包的id,每发一个包,这个id会自加1。
80的意义是timetolive,表示这个包的存活时间,路由每转发一次,就会对它自减1。
17表示通信协议类型为udp,4a0a为ipheader的校验码。
再后面就是源ip和目的ip地址了。
udpheader:0aaa表示srcport为2730;0f74表示dstprot为3956;14表示udpheader+userdata长度为20byte,c477表示udpheader的校验码,在一般的情况下,这个可以为0。
在uip中,ipheader和udpheader结构体定义如下:userdata:再后面就是用户的数据了。
二、aRp数据报文格式网络中是使用ip来标识主机的,而数据链路层的第一道关卡是mac地址。
因此ip和mac有一张动态映射表,而这张表就是由aRp协议来建立并维护的。
下面是一个aRp数据报文。
同样的,前面14byte是ethheader。
hardwaretype对于以太网来说为0001;0800表示是ipV4;06表示mac地址的长度;04表示ip地址的长度;0001表示是arp请求,如果是0002那就是aRp应答了。
后面就是发送方的mac地址,ip地址,接收方的mac地址,ip地址。
在ethheader中,目的mac全是ff,则表示这是一个广播,所有网络里的主机都能收到。
但只有ip地址为192.168.1.11的主机才会应答。
实际上,这个aRp包的意义就是在获取ip为192.168.1.11主机的mac地址。
网络里,如果114要与11进行通讯,但又不知道它的mac地址,那么就发一个这样的报文,11收到后会向114发一个aRp应答,114收到应答后,会将11的mac保存在动态映射表中。
当然这个表会动态的更新,也就是说11的mac 会有一个生成时间,当超时后,就要重新建立。
以上介绍的是一种情况,还有一种情况是ip冲突的检测,这个正好本项目中用到,后面会有介绍。
三、uip源码简介主要介绍如下三个文件。
uip_arp.c:arp的实现;uip.c:uip_process实现;tapdev.c:网卡的底层读写调用。
四、建立一个连接uip_udp_new是用来建立一个udp连接的,入口参数是远程的ip地址和远程的端口。
uip_udp_new函数将远程ip和端口写入到uip_udp_conns数组中的某一个位置,并返回它的地址。
系统中支持的最大连接数量就是这个数组的大小,可通过uip_udp_conns宏来定义它的值。
当网卡收到数据时,uip_process会遍历uip_udp_conns 数组,如果当前包的目的端口与本机端口不匹配,或者远程端口与uip_udp_new中的端口不匹配,那么uip会直接丢弃这个包。
如下例,建立的是一个目的ip为255.255.255.255,目的端口为1234的连接,本地端口号为5678。
在本项目中,是用来向网络中广播设备信息。
所有网络中的主机1234端口都能收到这个数据包。
五、uip主调函数uip协议的处理都是通过主调函数来调用的,它应该被放在主程序while循环中,而用户的数据接收处理,和数据发送则是在回调函数中。
主调函数分成三个部分,第一个是检查网卡上有没有接收到数据,第二个是检查有没有用户数据需要发送,最后一个是用来维护aRp映射表的。
这里不得不提到两个时间基准:timer_set(timer_set(一个是periodic_timer,这个为20ms,用来周期性的检查有没有用户数据需要发送。
另一个是arp_timer,用来更新aRp表,每十秒表更新一次,旧的条目会被丢弃,默认的aRp表条目生存时间是20分钟。
voidprocess_net_data(void){inti;uip_len=tapdev_read();if(uip_len>0)//从网络上收到数据{if(buF->type==htons(uip_ethtype_ip)){uip_arp_ipin();uip_input();//接收数据处理/*iftheabovefunctioninvocationresultedindatathat shouldbesentoutonthenetwork,theglobalvariableuip_lenissettoavalue>0.*/if(uip_len>0)//如果有数据需要返回给主机{uip_arp_out();篇二:协议栈简介协议栈简介在网络中,为了完成通信,必须使用多层上的多种协议。
这些协议按照层次顺序组合在一起,构成了协议栈(protocolstack),也称为协议族(protocolsuite)。
协议栈形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。
使用最广泛的是英特网协议栈,由上到下的协议分别是:应用层(http,telnet,dns,email等),运输层(tcp,udp),网络层(ip),链路层(wi-Fi,以太网,令牌环,Fddi等),物理层。
主要的协议栈:osi协议栈osi协议栈是由国际标准化组织(iso),为提倡世界范围的互操作性而定义的。
它通常被用于其它协议栈进行比较的标准。
netwarespx/ipx协议netware串行分组交换/网间分组交换(spx/ipx)协议,是由novellnetware使用的一种本质性协议(nativeprotocol)。
它源于xerox网络系统(xns)协议栈。
tcp/ip协议组传输控制协议/因特网协议(tcp/ip)是最早的网络协议栈之一。
它最初是由美国国防部为将多厂商网络产品连接在一起而实现的。
其中ip部分提供了一种对互联网络连接的最好定义,并且被许多厂商用于在局域或广域互联产品。
ibm/microsoft协议组ibm和microsoft进行互联的产品通常是结合在一起的,这是因为这两个公司联合起来开发使用他们的产品,例如,l管理器和os/2。
appletalk协议appletalk协议是由applecomputer为互联applemacintosh系统而定义的。
协议栈构建1:函数调用。
协议栈各层之间通过函数调用来传递数据包和相关的数据结构。
linux和bsd等开源系统采用这种方法。
2:消息传递。
也就是基于流消息的协议栈构建方法。
各层直接通过传递事件或消息来传递数据包和相关的数据结构。
据说solaris和windows等商业操作系统采用这种方法。
3:包队列。
各层直接通过包队列(queue)来连接,各层都实现为独立的进程或线程,通过轮询来收发数据包。
线程主动去收发包,而不是通过事件来通知。
有些系统的某些模块会采用这种方法。
数据进入协议栈时的封装过程uip协议栈分析uip特性uip协议栈去掉了完整的tcp/ip中不常用的功能,简化了通讯流程,但保留了网络通信必须使用的协议,设计重点放在了ip/tcp/icmp/udp/aRp这些网络层和传输层协议上,保证了其代码的通用性和结构的稳定性。
由于uip协议栈专门为嵌入式系统而设计,因此还具有如下优越功能:(1)代码非常少,其协议栈代码不到6k,很方便阅读和移植。
(2)占用的内存数非常少,Ram占用仅几百字节。
(3)其硬件处理层、协议栈层和应用层共用一个全局缓存区,不存在数据的拷贝,且发送和接收都是依靠这个缓存区,极大的节省空间和时间。
(4)支持多个主动连接和被动连接并发。
(5)其源代码中提供一套实例程序:web服务器,web 客户端,电子邮件发送程序(smtp客户端),telnet服务器,(6)对数据的处理采用轮循机制,不需要操作系统的支持。
由于uip对资源的需求少和移植容易,大部分的8位微控制器都使用过uip协议栈,而且很多的著名的嵌入式产品和项目(如卫星,cisco路由器,无线传感器网络)中都在使用uip协议栈。
uip架构uip相当于一个代码库,通过一系列的函数实现与底层硬件和高层应用程序的通讯,对于整个系统来说它内部的协议组是透明的,从而增加了协议的通用性。
uip协议栈与系统底层和高层应用之间的关系如图2-1所示。
从上图可以看出,uip协议栈主要提供了三个函数供系统底层调用。
即uip_init(),uip_input()和uip_periodic()。
其与应用程序的主要接口是uip_appcall()。
uip_init()是系统初始化时调用的,主要初始化协议栈的侦听端口和默认所有连接是关闭的。
当网卡驱动收到一个输入包时,将放入全局缓冲区uip_buf中,包的大小由全局变量uip_len约束。
同时将调用uip_input()函数,这个函数将会根据包首部的协议处理这个包和需要时调用应用程序。
当uip_input()返回时,一个输出包同样放在全局缓冲区uip_buf里,大小赋给uip_len。
如果uip_len是0,则说明没有包要发送。
否则调用底层系统的发包函数将包发送到网络上。
uip周期计时是用于驱动所有的uip内部时钟事件。
当周期计时激发,每一个tcp连接都会调用uip函数uip_periodic()。
类似于uip_input()函数。
uip_periodic()函数返回时,输出的ip包要放到uip_buf中,供底层系统查询uip_len的大小发送。