RL-TCPNet的移植与使用简介
2014-02-04 16:11
323 查看
本文阅读前提:
1. OSI七层模型和TCP/IP协议结构
2. 一些ARM开发经验,特别是MDK的
3. MII/RMII/SLIP相关概念
在互联网/物联网时代,嵌入式产品接入网络已经不是什么新鲜概念或高端技术了。 通过网络对产品进行远程管理是一种流行而又高效的方法,常见的方法有Telnet(TCP)、SNMP(UDP)和HTTP,这些要求产品拥有网卡(硬件)和支持TCP/IP协议(软件)。
基于嵌入式Linux的产品先天就拥有了TCP/IP的协议栈支持,而一些传统的不带OS或基于小型RTX操作系统(uCos-ii)也借助于LWIP,uIP等开源TCP/IP协议栈实现了网络应用。
Keil公司的MDK是最流行ARM开发工具,作为MDK的RL库一部分的RL-TCPnet自然值得关注,虽然在MDK早期版本就已经布RL-TCPnet,但据江湖传言有协议支持不全和bug多等问题。但经过多次改进和升级,目前(MDK v4.7)已经相当稳定和好用了,MDK v5.0更是对其进行了大幅度升级(名字都变了)。在MDK下使用RL-RTX+RL-TCPNet构建应用有着得天独厚的优势。RL-TCPnet唯一的不好,可能就是不开源吧。
根据笔者经验,移植TCP/IP做网络应用,难点不在传输层/网络层或是应用层而是在物理层(网卡/PHY芯片提供)和MAC层(ARM芯片提供)。理由如下:
1.很多TCP/IP库应用层都提供了大家熟悉的BSD Socket接口,可以像Linux上那样方便开发网络应用。
2.传输层和网络层都是封装在TCP/IP库内部,如果不是要去研究tcp/ip协议过程不需要太关心其内部细节。
3.MAC层和物理层都是由硬件提供的,各个案例使用的芯片各不相同,需要针对不同的芯片实现其驱动以及供TCP/IP库调用的接口。
以NXP的LPC1768和NS的DP83848C(PHY)为例,简单说下RL-TCPnet的使用吧,其实标题说移植有些牵强,因为RL-TCPnet是不开源的,所以MDK针对不同的硬件运行平台提供了不同的RL-TCPnet的库文件。大概步骤如下:
一.加入RL-TCPnet库到工程
针对Cortex-M3的RL-TCPnet库“TCP_CM3.lib”可以在MDK安装目录“Keil\ARM\RV31\LIB\”下找到。添加到你的工程就可以了,没有特殊情况尽量给TCP/IP库使用内部RAM以提高效率。
二.实现LPC1768的MAC驱动和PHY芯片DP83848C的驱动
需要提供如下功能:
1.实现LPC1768的MAC初始化,以及MII/RMII接口的配置
2.通过MDIO对PHY进行初始化配置,完成物理连接link以及接口模式速率的管理(一般配置成自适应模式Auto Nigotiation)。
针对1和2,RL-TCPnet库要求以函数“void init_ethernet (void)"来提供。
3.实现为TCP/IP库提供服务的接口函数(OSI网络分层定义下层实体为上层提供服务)
有两种方式:查询和中断。
3.1查询模式(指MAC主动去查询是否收到PHY发来的以太帧)
实现收帧和发帧两个接口函数:
void poll_ethernet (void)
void send_frame (OS_FRAME *frame)
3.2 中断模式 (MAC中断,不是PHY的中断)
需要实现发帧、打开/关闭MAC使能以及收帧(在中断处理中进行)函数
void send_frame (OS_FRAME *frame)
void int_enable_eth ()
void int_disable_eth ()
- interrupt function void ENET_IRQHandler (void)
以上实现代码可以参考MDK提供的”EMAC_LPC17xx.c“(位于MDK安装目录\Keil\ARM\Boards\Keil\MCB1700\RL\TCPnet\Library下)。
三.使用RL-TCPnet开发应用
RL-TCPnet既可以在RTOS上应用也可以”单独“运行,因为RL-TCPnet本身就被设计成一个单独的TCP/IP OS。使用RL-TCPnet可以开发DNS、FTP、HTTP、SNMP、Telnet等各类网络应用。具体案例本文就不展开了,可以参考MDK的RL库的user guide或示例代码(\Keil\ARM\Boards\Keil\MCB1700\RL\TCPnet)。
1. OSI七层模型和TCP/IP协议结构
2. 一些ARM开发经验,特别是MDK的
3. MII/RMII/SLIP相关概念
在互联网/物联网时代,嵌入式产品接入网络已经不是什么新鲜概念或高端技术了。 通过网络对产品进行远程管理是一种流行而又高效的方法,常见的方法有Telnet(TCP)、SNMP(UDP)和HTTP,这些要求产品拥有网卡(硬件)和支持TCP/IP协议(软件)。
基于嵌入式Linux的产品先天就拥有了TCP/IP的协议栈支持,而一些传统的不带OS或基于小型RTX操作系统(uCos-ii)也借助于LWIP,uIP等开源TCP/IP协议栈实现了网络应用。
Keil公司的MDK是最流行ARM开发工具,作为MDK的RL库一部分的RL-TCPnet自然值得关注,虽然在MDK早期版本就已经布RL-TCPnet,但据江湖传言有协议支持不全和bug多等问题。但经过多次改进和升级,目前(MDK v4.7)已经相当稳定和好用了,MDK v5.0更是对其进行了大幅度升级(名字都变了)。在MDK下使用RL-RTX+RL-TCPNet构建应用有着得天独厚的优势。RL-TCPnet唯一的不好,可能就是不开源吧。
根据笔者经验,移植TCP/IP做网络应用,难点不在传输层/网络层或是应用层而是在物理层(网卡/PHY芯片提供)和MAC层(ARM芯片提供)。理由如下:
1.很多TCP/IP库应用层都提供了大家熟悉的BSD Socket接口,可以像Linux上那样方便开发网络应用。
2.传输层和网络层都是封装在TCP/IP库内部,如果不是要去研究tcp/ip协议过程不需要太关心其内部细节。
3.MAC层和物理层都是由硬件提供的,各个案例使用的芯片各不相同,需要针对不同的芯片实现其驱动以及供TCP/IP库调用的接口。
以NXP的LPC1768和NS的DP83848C(PHY)为例,简单说下RL-TCPnet的使用吧,其实标题说移植有些牵强,因为RL-TCPnet是不开源的,所以MDK针对不同的硬件运行平台提供了不同的RL-TCPnet的库文件。大概步骤如下:
一.加入RL-TCPnet库到工程
针对Cortex-M3的RL-TCPnet库“TCP_CM3.lib”可以在MDK安装目录“Keil\ARM\RV31\LIB\”下找到。添加到你的工程就可以了,没有特殊情况尽量给TCP/IP库使用内部RAM以提高效率。
二.实现LPC1768的MAC驱动和PHY芯片DP83848C的驱动
需要提供如下功能:
1.实现LPC1768的MAC初始化,以及MII/RMII接口的配置
2.通过MDIO对PHY进行初始化配置,完成物理连接link以及接口模式速率的管理(一般配置成自适应模式Auto Nigotiation)。
针对1和2,RL-TCPnet库要求以函数“void init_ethernet (void)"来提供。
3.实现为TCP/IP库提供服务的接口函数(OSI网络分层定义下层实体为上层提供服务)
有两种方式:查询和中断。
3.1查询模式(指MAC主动去查询是否收到PHY发来的以太帧)
实现收帧和发帧两个接口函数:
void poll_ethernet (void)
void send_frame (OS_FRAME *frame)
3.2 中断模式 (MAC中断,不是PHY的中断)
需要实现发帧、打开/关闭MAC使能以及收帧(在中断处理中进行)函数
void send_frame (OS_FRAME *frame)
void int_enable_eth ()
void int_disable_eth ()
- interrupt function void ENET_IRQHandler (void)
以上实现代码可以参考MDK提供的”EMAC_LPC17xx.c“(位于MDK安装目录\Keil\ARM\Boards\Keil\MCB1700\RL\TCPnet\Library下)。
三.使用RL-TCPnet开发应用
RL-TCPnet既可以在RTOS上应用也可以”单独“运行,因为RL-TCPnet本身就被设计成一个单独的TCP/IP OS。使用RL-TCPnet可以开发DNS、FTP、HTTP、SNMP、Telnet等各类网络应用。具体案例本文就不展开了,可以参考MDK的RL库的user guide或示例代码(\Keil\ARM\Boards\Keil\MCB1700\RL\TCPnet)。
相关文章推荐
- 使用WinInet方式访问网页与使用WinHttp对象方式访问有什么不同
- Mac OS搭建Tomcat服务器, 与客户端使用JSON格式和Servlet进行HTTP通信
- 留在大城市打拼,还是去二三线城市安放青春?
- 关于HTTP Headers的讨论
- KNIME系统简介
- 关于HTTP Header的讨论
- MDK 5.0的RL Tcp/ip库和MDK 4.0的RL-TCPNet的区别
- 用JAVA实现一个简单地Http服务器
- (转)Asp.net的HttpCookie写入汉字读取时为乱...
- HTTP协议详解
- linux下的网络程序0——服务器端返回客户端输入
- 第五版PMP考试新题型:根据TCPI求AC
- 孙鑫 VC++深入详解第14课——TCP通信/UDP通信
- golang HTTP客户端
- 网络编程之路---3
- 网络流--ford-fulkerson算法
- [转】HTTP请求流程(二)----Telnet模拟HTTP请求
- 数据库之存储过程-摘自网络
- [转】:HTTP请求流程(一)----流程简介
- HTTP请求过程详解