基于NiosII的嵌入式网络通信系统
时间:11-21
来源:互联网
点击:
3 软件设计
协议栈使用了现在在嵌入式应用领域已经很成熟的uip。如果使用altera提供的lwip协议栈,那么就得考虑其在嵌入式操作系统上的移植,这样无疑会增加系统软件设计的复杂度和代码量。
设计的关键部分是uip协议栈在nios ii上的移植。针对niosii的特点,将uip做适当的修改,使niosii处理器的处理能力得到充分发挥,提高系统的性能。uip原来是针对8位处理器的,现在将其修改为16位,这样理论上处理能力就提高了一倍,系统的性能也就提升了一倍。
根据tcp/ip模型结构,数据链路层和物理层使用网络接口芯片lan9c111完成;网络层和传输层协议解析在niosii中由嵌入式tcp/ip协议栈实现;应用层由用户根据需要编写。各个模块合起来共同完成网络通信功能。
3.1 底层驱动程序的编写
lan9c111芯片的底层驱动是由altera免费提供的,可以调用这些底层驱动来完成初始化、通信建立、监听等通信功能。这些底层驱动函数是已经封装好的,用户不需要了解其细节就可以编写网络通信程序,但是为了进行高级的开发,必须对整个程序的工作机制有一定的了解。
几个主要的底层驱动函数来完成启动、复位和初始化phy、以太网packet的收发及中断处理函数等工作:
static void r_lan91c111_enable():用于启动芯片工作,使能发送和接收。
int nr_lan91c111_reset():对芯片尽心复位。
static int r_lan91c111_init_phy( ):完成物理层芯片的初始化。
int nr_lan91c111_set_irq():设置芯片的中断
上层的通信程序调用这些函数实现网络接口的控制,通信功能的实现以此为基础。
3.2 通信软件的实现
通信软件完成设备之间通信的主要功能,主要是uip协议栈的。传输层实现了tcp和udp,这在软件设计时就需要做不同的考虑,不同的数据传输需求要求使用不同的传输层协议,比如,实时性要求高的传输应用就要求使用无连接的udp协议;对实时性要求不高并且要保证数据传输的可靠性的应用使用面向连接的、可靠的tcp协议可以保证传输的可靠性。
程序框架如下:
main()
{
netif_init(); // 网络接口初始化
uip_init(); // 协议栈初始化
arp_table_init(); // arp 表初始化
netconn_new() // 建立新的连接
netconn_bind() // 绑定端口号
netconn_listen() // 侦听端口
while(1)
{
if (收到数据){
…… // 处理接收的数据
}
else if(发送数据){
…… // 发送数据
}
else
…… // 返回准备下次处理
}
}
图2是软件处理流程。
4 结束语
采用niosii进行系统设计,由于sopc builder工具的强大系统开发功能再加上niosii ide集成开发环境,使得系统的设计变得简单方便、可扩展性强,并且系统软件的设计与系统设计同时进行,大大缩短开发周期。在该网络平台的设计中,使用了嵌入式领域非常成熟的uip,并且是开放源代码的,所以对uip的移植非常的方便,只是对其进行修改以最大限度的发挥niosii处理器的特点,再加上简单灵活的用户自定义指令,对系统性能的提升起到很大作用。这个系统已经在硬件上经过了验证,可以进行可靠、稳定的网络通信,并已经应用于一个要求远程网络通信功能的数据处理机系统。
协议栈使用了现在在嵌入式应用领域已经很成熟的uip。如果使用altera提供的lwip协议栈,那么就得考虑其在嵌入式操作系统上的移植,这样无疑会增加系统软件设计的复杂度和代码量。
设计的关键部分是uip协议栈在nios ii上的移植。针对niosii的特点,将uip做适当的修改,使niosii处理器的处理能力得到充分发挥,提高系统的性能。uip原来是针对8位处理器的,现在将其修改为16位,这样理论上处理能力就提高了一倍,系统的性能也就提升了一倍。
根据tcp/ip模型结构,数据链路层和物理层使用网络接口芯片lan9c111完成;网络层和传输层协议解析在niosii中由嵌入式tcp/ip协议栈实现;应用层由用户根据需要编写。各个模块合起来共同完成网络通信功能。
3.1 底层驱动程序的编写
lan9c111芯片的底层驱动是由altera免费提供的,可以调用这些底层驱动来完成初始化、通信建立、监听等通信功能。这些底层驱动函数是已经封装好的,用户不需要了解其细节就可以编写网络通信程序,但是为了进行高级的开发,必须对整个程序的工作机制有一定的了解。
几个主要的底层驱动函数来完成启动、复位和初始化phy、以太网packet的收发及中断处理函数等工作:
static void r_lan91c111_enable():用于启动芯片工作,使能发送和接收。
int nr_lan91c111_reset():对芯片尽心复位。
static int r_lan91c111_init_phy( ):完成物理层芯片的初始化。
int nr_lan91c111_set_irq():设置芯片的中断
上层的通信程序调用这些函数实现网络接口的控制,通信功能的实现以此为基础。
3.2 通信软件的实现
通信软件完成设备之间通信的主要功能,主要是uip协议栈的。传输层实现了tcp和udp,这在软件设计时就需要做不同的考虑,不同的数据传输需求要求使用不同的传输层协议,比如,实时性要求高的传输应用就要求使用无连接的udp协议;对实时性要求不高并且要保证数据传输的可靠性的应用使用面向连接的、可靠的tcp协议可以保证传输的可靠性。
程序框架如下:
main()
{
netif_init(); // 网络接口初始化
uip_init(); // 协议栈初始化
arp_table_init(); // arp 表初始化
netconn_new() // 建立新的连接
netconn_bind() // 绑定端口号
netconn_listen() // 侦听端口
while(1)
{
if (收到数据){
…… // 处理接收的数据
}
else if(发送数据){
…… // 发送数据
}
else
…… // 返回准备下次处理
}
}
图2是软件处理流程。
图2 通信软件流程图
4 结束语
采用niosii进行系统设计,由于sopc builder工具的强大系统开发功能再加上niosii ide集成开发环境,使得系统的设计变得简单方便、可扩展性强,并且系统软件的设计与系统设计同时进行,大大缩短开发周期。在该网络平台的设计中,使用了嵌入式领域非常成熟的uip,并且是开放源代码的,所以对uip的移植非常的方便,只是对其进行修改以最大限度的发挥niosii处理器的特点,再加上简单灵活的用户自定义指令,对系统性能的提升起到很大作用。这个系统已经在硬件上经过了验证,可以进行可靠、稳定的网络通信,并已经应用于一个要求远程网络通信功能的数据处理机系统。
- 蓝牙无线电调制解调器Siw1701原理与应用(02-19)
- 嵌入式移动数据库的关键技术(03-20)
- 在嵌入式SQL中怎样使用游标(08-12)
- 嵌入式Linux系统软件开发学习思路详细介绍 (08-20)
- 基于AVR单片机的嵌入式“瘦服务器”系统设计思想(03-11)
- 嵌入式系统设计中的存储碎片收集策略(05-04)