以太网串口双向透传网关设计要点记录
2015-10-15下午 DanielLee_USTB
(1)以太网到串口数据的双缓冲机制+双DMA机制
解决收发数据速度不匹配问题
在以太网到串口双向透传数据的开发都会遇到如何处理收发速度不匹配的问题,处理不好,很容易造成丢包.开始时在串口转TCP/UDP这个方向上,串口使用DMA循环缓冲区来接收,TCP/UDP定时轮询发送,这样没什么问题.在收到TCP/UDP一包数据后,直接通过串口发出去,这样处理很简单,但串口发送数据耗时很长,很有可能数据发不完下一包TCP/UDP数据就来了,这样就会造成丢包.最根本的解决办法就是串口发送也使用DMA方式,把网络数据包收到的数据放到一个循环队列中,等到DMA发送完成后,再从队列中把数据取出发出去,经过测试,这种方法很好的提高了数据收发的实时性。
(2)关于TCP、UDP最大包长问题
以太网帧长度为64-1518字节。
TCP帧机构 以太网帧头18字节(6目的MAC+6源MAC+2以太网类型+4CRC32)+20IP头+20个TCP头+(1~1460个TCP数据字节).
UDP帧结构 以太网帧头18字节(目的MAC+源MAC+以太网类型+CRC32)+20IP头+8个UDP头+(1~1472个TCP数据字节)
最大UDP数据包长度 65535字节
(3)关于ARP数据帧格式:
ARP数据包包含 以太网目的地址+以太网原地址+帧类型+选项+发送者MAC+发送者IP+目的MAC+目的IP。
当TCP/UDP发送数据请求时,先去自己的ARP表中查询是否有对方IP的MAC地址,如果没有,则先发送ARP进行地址解析,收到MAC地址后放入ARP表中,并且进行数据传输。
(4)DHCP实现过程
在项目中实现了DHCP自动获取IP过程,以UDP 67和68端口进行通信.
DHCP租约过程分为4步:
①客户机请求IP(客户机发DHCPDISCOVER广播包);
②服务器响应(服务器发DHCPOFFER广播包);
③客户机选择IP(客户机发DHCPREQUEST广播包);
④服务器确定租约(服务器发DHCPACK/DHCPNAK广播包)。
(5)DMA的“发送完成中断”出现在 刚发送倒数第二个字节的起始位的地方 这时候切换485 接收端会丢失两个自己数据。
在DMA发送中断完成产生后,时间上还有2个字节还没有传出去,如何保证这个两个自己传完才更改485芯片的传输方向呢?
1.在DMA传输完成中断中加入两个字节的延时,这个延时必须十分准确,并且根据不同波特率进行调整;
2.在DMA传输完成中断中使能串口发送完成中断,在串口发送完成中断中对485芯片控制引脚进行控制,这样进行一次发送传输得产生两次中断;
直接使能串口发送完成中断不就行了!完全好使!(不过这样在外边是232时候会有接收也能引发传输完成中断的问题!)
3.可以在硬件设计时采用自收发电路,解决一切485方向控制问题!