微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > TCP/IP协议栈在MSP430单片机上的实现

TCP/IP协议栈在MSP430单片机上的实现

时间:01-18 来源:互联网 点击:

结构体UIP_conn 指针指向当前连接。UIP_conn 记录一条TCP 连接的所有相关信息,它是维持uIP 运行的关键结构,定义如下:

struct uip_conn {
u8_t  tcpstateflags ;  PPTCP 的状态和标志
u16_t lport , rport ;  PP当地和远端端口
u16_t ripaddr[2] ;  PP远端的IP 地址
u8_t  rcv- nxt [4] ;  PP下一个要接收的序列号
u8_t  snd- nxt [4] ;  PP上一个已发送的序列号
u8_t  ack- nxt [4] ;  PP对端下一个应答序列号
u8_t  timer ;  PP重传时间
u8_t  nrtx ;  PP计算特殊段的重发数量
u8_t  mss ;  PP连接中最大分段的大小
u8_t  appstate[UIP_APPSTATE_SIZE] ;
  } ;
UIP 提供给应用程序的接口函数如: uip_listen ( ) 、uip_connect ( ) 、uip_send( ) 、uip_datalen( ) 、uip_close ( ) 、uip_abort ( ) 、uip_stop ( ) 、uip_stopped( ) 、uip_restart ( ) 等,实现了TCP/IP 协议栈的基本功能。

UIP 系统接口

从系统的角度来分析,UIP 包含3 个C 函数:uip_init ( ) ,uip_input ( ) ,和uip_periodic ( ) 。uip_init ( ) 函数初始化uIP协议栈,在系统启动期间调用。其中uIP_input ( ) 和uIP_periodic ( ) 实质上都是使用uIP_process ( ) ,但它们调用的参数和使用情况不一样。当网络设备接收到新数据时调用函数uip_input ( ) ;uip_periodic ( ) 周期性运行,通常一秒调用一次。当设备驱动程序发数据包到缓存(uip_buf) 时,系统应该调用uip_input ( ) 函数。函数将会处理这个包,并在需要时调用应用程序。当uip_input ( ) 返回时,会有一个输出包放在包缓存里。包的大小由全局变量uip_len 约束,如果uip_len 是0 ,说明没有数据包要发送。

周期时钟函数用于驱动UIP 内部时钟事件。当周期计时被激活时,uip_periodic ( ) 函数被调用。连接号作为参数传递给uip_periodic ( ) 函数。如果有数据输出,则输出的IP 包放在包缓存里。下面是察看输出包的一小段代码,它调用了uip_periodic( ) 函数。其中netdev- send ( ) 是网络驱动部分,负责将uip_buf 数组的内容发出到网上。

for ( i = 0 ;i UIP- CONNS; ++i) {
 uip_periodic (i) ;
 if (uip_len > 0)
  netdev_send() ;
}

UIP 协议移植到MSP430F149

基于MSP430 F149 的嵌入式TCP/IP 网络通信系统硬件部分主要包括MSP430 芯片、以太网控制器CS8900A 和以太网接口,软件部分包括设备驱动程序、嵌入式TCP/IP 协议栈等部分。

图2  方案的硬件实现

硬件的实现

本方案的单片机选择MSP430F149 完成TCP/IP 协议的解释和执行, 以太网控制器芯片CS89200A 实现遵循的IEEE802.3 协议的CSMAPCD 和CRC 校验等功能,以太网隔离变压器HR601627 转换电平抑制高频干扰接入以太网,最后通过RJ245接口实现终端设备接入Internet 。MSP430F149 是一款16 位超低功耗单片机,具有强大的处理能力,RISC结构,125ns 的指令周期,具有丰富的片内外设,如硬件乘法器、ADC、定时器、看门狗等。它内部具有2KB的RAM和60KB 的FLASH ,寻址空间达64K。它适用于工业控制领域,同样也适用于处理复杂的TCP/IP 协议。CS8900A是CIRRUS LOGIC 公司的一种低价格、高集成度、单芯片、全双工的以太网控制器,也是专门为嵌入式系统设计优化的以太网控制器。CS8900A 有三种工作方式: IPO 方式、存储器方式和DMA 方式。我们选择IPO 方式,以便利用8-bit 数据总线,该总线连接到MSP430 的IPO-port 5。IOR 和IOW是控制线,指示进程是否有读P写访问。

软件的实现

软件部分包括以太驱动、TCP/IP 协议实现等部分。在CS8900A 驱动程序中,以太模块cs8900. c 中包含有很多C 函数,如Init8900( ) 、Write8900( ) 、Read8900( ) 等,完成初始化控制器、读写数据等功能;在头文件cs8900.h 中,配置网络接口的MAC 地址,用户自己设置,注意不要与现有的MAC地址冲突。

TCP/IP 协议栈完成大部分网络功能,一方面它利用以太模块的函数收发数据,另一方面为上层应用程序提供简单易用的API 接口。uip.c 完成ip 、tcp 协议以及基本的ICMP 功能,它还定义了两个前面提及过的重要参数: uip_buf 和uip_len ,uip_buf存储需要收发的数据, uip_len 存储收发数据的长度; uip -arp.c 完成地址解析;uip_arch.c 完成检验和uIP的设置包含在一个叫uipopt.h 的头文件里,以宏的形式定义,便于修改。用户根据自己的需要,设置本地的物理地址、IP 地址、网关地址、数据缓冲区尺寸、ARP表大小等选项。在正确配置UIP后,用户根据自己的应用

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top