标题:
基于OMAP的嵌入式TCP/IP开发(2)
[打印本页]
作者:
我是MT
时间:
2016-1-4 16:43
标题:
基于OMAP的嵌入式TCP/IP开发(2)
LAN91C96 采用地址映射方式,通过访问Innovator为的指定地址对其存储器访问。LAN91C96的寄存器在Innovator内存中的地址分配为:0x08000300-0x0800030F。寄存器共有4组(BANK0-BANK3),使用相同的地址,通过BANK_SELECT寄存器选择。
4.2 移植过程
先实现该网卡芯片的驱动程序,再用它替换PC模拟器的以太网层,程序驱动主要包括以下三个部分:
(1)初始化:主要为Lan91C96的各寄存器填入正确的初始值使其正常工作。
(2)接收:如图5所示,由CSMA(载波侦听模块)接收到符合地址要求的后,MMU(存储器管理单元)为其请求在RAM中分配存储空间并分配一个编号,DMA 将其存入RAM。接着在接收数据的前面封装STATUS的化COUNT字节信息,如果CRC检测正确,则将其编号放入接收FIFO,如果接收FIFO不为空,则RCV_INT(接收中断标识)被设置。检查接收中断寄存器状态,如果就接收中断,对应其编号,上层协议便可以取出数据了,取出后,将该数据编号从 FIFO中清除。
状态字可以从RCR寄存器中读取,它反应了接收过程出现的各种措施,如CRC错误、接收帧过长等,数据包的编号从FIFO_PORTS寄存器中获得,而数据指针可从POINTER寄存器中获得,数据信息从DATA寄存器中得到,根据这些信息将接收数据包复制到CPU内存,供上层使用,接收函数的主要流程如图6。
(3)发送:图7描述了发送数据包FIFO中的排队过程,首先MMU在RAM中分配一定字节的存储空间,然后,将分配结果寄存器中的编号放入PNR 寄存器,写数据指针寄存器POINTER并将上层数据封装后拷入DATA寄存器,根据其编号放入发送FIFO,排队的包将自动发出,发出包的编号接着进入发送完成FIFO。如果发送成功,则存储空间自动释放;否则释放存储空间并将其重新排队。
5 实验结果
5.1 内存资源占用量
运行该TCP/IP协议栈需要3MB内存,而Innovator体32MB SDRAM 和32MB Flash,内存占用率为:3M/64M=4.7%,完全适用于
嵌入式
系统。
5.2 数据传输可靠性
TCP 利用以下机制纠错。数据的传输过程中的误码:检验和机制与重传机制,数据的重复,在接收端会自动舍弃已经接收过的数据包,并且不发ACK,故不会发生一个数据包接收多次的情况,数据包的丢失,接收端在接收完一段数据后,会计算下一个预期数据的序号,如果不符合就不发ACK,从而导致发端重发,避免了数据包的丢失,经测试,在未发生拥塞情况下,传输的误码率几乎为0。
5.3文件最大平均传输速率
下面就本程序所实现的利用TCP进行文件传输功能,给出不同情况下的最大传输速率,实验环境为10Mbps以太网。
理想状态下的理论最大吞吐量:假定发送方传输两个背对背、满长度的TCP数据,接收方为其发出两个ACK,每包中用户数据量为1460位,总数据量为1538位,故最大的用户数据吞吐量为:
本实验测得文件的平均传输速率随着TCP连接数的增多有如图8所示的曲线变化,前半段随着连接数的增加成线性增长,后半段由于出现了网络拥塞,整体的平均速率反而有所下降。
实验结果与理论最大吞吐量有所差距,原因在于:
(1)理论上只是一种理想的状态,现实中难以达到。
(2)受CPU处理速度及文件传输过程的读、写文件操作的限制。
(3)本程序采用的数据传输机制是当收到上一个包的ACK之后再发送下一个数据包,这样避免了对接收数据的排序,提高了可靠性,但数据的传输速度会受到制约。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0