我想做一个网口转串口驱动,请大家给点思路

时间:2022-06-18 23:10:47
目前有一个项目,需要做一个小设备实现网口转多路串口,硬件方案为ARM9+网口芯片+多串口芯片,现在对具体怎么做有点不太清楚。
我知道需要在网络协议部分进行解析,解包后发往指定串口,串口发往网口时需要按照TCP/IP协议进行打包然后加上串口标签发往网口,另外还有工作模式和访问机制,这个就不是很清楚了,因为我没做过TCP/IP相关的东西。
现在我的思路是:
1.可以不上linux系统,因为linux下驱动编程不是很有把握
2.需要移植TCP/IP协议栈,然后调用其API接口实现TCP/IP功能,移植TCP/IP栈可以在网上找找,应该有的
现在存在的问题是:
1.工作模式和访问机制这些在哪里实现?如何实现?
2.所谓的串口特性功能比如超时、诊断、事件是什么意思,这些如何实现
3.这样一个设备难点在哪里?
请有类似经验的大虾给些指导,谢谢。

9 个解决方案

#1


感觉主要是协议栈上要处理好 这方面没做过 帮你顶

#2


对了  通过51上的串口可以转网口的  有类似的芯片或模块 
如果兄弟是要做项目的话  可以在网上找找相关的信息
如果想学习一下的话 这个活倒是个很不错的机会  

#3


多谢Heaven_Redsky兄
另外还有其他大虾做过类似项目没?

#4


    感觉有点像是路由器或者交换机的存储-转发工作方式。我觉得首先要定义一个自己的协议,相当于OSI的应用层协议,TCP输中真正的数据部分要根据这个协议来存储。比如说定义数据开头1个字节表示目标串口号,后511个字节是数据段,网卡获得数据后根据TCP协议格式解包获得真正的数据,而这部分数据其实是根据你自己的协议封包了的。arm读取第一个字符得到目标串口号,然后把后面511个字符发往这个串口。从串口获得数据的话每511个字符分段加上串口号作为数据包再经过TCP封包传输。最近我也准备写和网卡相关的一点东西,我用的8019网卡,感觉还是实现网卡驱动和TCP协议编写是比较重头的地方。我也不是大虾,随便说说我的想法。

#5


引用 4 楼 cokewei 的回复:
    感觉有点像是路由器或者交换机的存储-转发工作方式。我觉得首先要定义一个自己的协议,相当于OSI的应用层协议,TCP输中真正的数据部分要根据这个协议来存储。比如说定义数据开头1个字节表示目标串口号,后511个字节是数据段,网卡获得数据后根据TCP协议格式解包获得真正的数据,而这部分数据其实是根据你自己的协议封包了的。arm读取第一个字符得到目标串口号,然后把后面511个字符发往这个串口。从串口获得数据的话每511个字…


   个人觉得该项目的工程完全能够在Linux下面完成,做一个简单的字符设备驱动就能实现这样的功能。既然采用了arm9的硬件,为什么不利用linux的完善的网络性能来达到简化呢。要移植一个TCP/IP协议,个人觉得很麻烦,得不偿失。如果能用linux下的套接字来实现,只需要在定义包结构的时候,添加一个标明串口号的标识,应该就好了。这个协议实现很简单,而且你串口的速率不会很高,网口能完全应付得了

#6


如果只是网口转串口,个人觉得根本不需要协议栈,完全是大材小用了

正如你说的,关键是拆包、组包的过程,还是一个串口数据流的转换

知道包的格式是什么样的就行了,用协议栈就还复杂了

#7


使用Linux系统好些吧,你可以精简它的内核。主要好处有:
1、TCP/IP协议栈有现成的;
2、至于驱动程序,如果你用的网卡芯片和多串口芯片都是常见的,Linux内核中应该会有相应的驱动源代码,或者去芯片厂家网站下载Linux驱动也可;
3、驱动搞定后,你可以设计一个应用程序,实现网卡和多串口之间数据的存储转发,完全可以自己控制的。

另外,怎么感觉你这个项目 像是要做个“终端服务器”。是吗?

#8


uping

#9


个人感觉移植协议栈还是比较麻烦的,另外用arm9成本上也比较高,为什么不用现成的串口转网口的模块,比如ZLSN2000模块。

#1


感觉主要是协议栈上要处理好 这方面没做过 帮你顶

#2


对了  通过51上的串口可以转网口的  有类似的芯片或模块 
如果兄弟是要做项目的话  可以在网上找找相关的信息
如果想学习一下的话 这个活倒是个很不错的机会  

#3


多谢Heaven_Redsky兄
另外还有其他大虾做过类似项目没?

#4


    感觉有点像是路由器或者交换机的存储-转发工作方式。我觉得首先要定义一个自己的协议,相当于OSI的应用层协议,TCP输中真正的数据部分要根据这个协议来存储。比如说定义数据开头1个字节表示目标串口号,后511个字节是数据段,网卡获得数据后根据TCP协议格式解包获得真正的数据,而这部分数据其实是根据你自己的协议封包了的。arm读取第一个字符得到目标串口号,然后把后面511个字符发往这个串口。从串口获得数据的话每511个字符分段加上串口号作为数据包再经过TCP封包传输。最近我也准备写和网卡相关的一点东西,我用的8019网卡,感觉还是实现网卡驱动和TCP协议编写是比较重头的地方。我也不是大虾,随便说说我的想法。

#5


引用 4 楼 cokewei 的回复:
    感觉有点像是路由器或者交换机的存储-转发工作方式。我觉得首先要定义一个自己的协议,相当于OSI的应用层协议,TCP输中真正的数据部分要根据这个协议来存储。比如说定义数据开头1个字节表示目标串口号,后511个字节是数据段,网卡获得数据后根据TCP协议格式解包获得真正的数据,而这部分数据其实是根据你自己的协议封包了的。arm读取第一个字符得到目标串口号,然后把后面511个字符发往这个串口。从串口获得数据的话每511个字…


   个人觉得该项目的工程完全能够在Linux下面完成,做一个简单的字符设备驱动就能实现这样的功能。既然采用了arm9的硬件,为什么不利用linux的完善的网络性能来达到简化呢。要移植一个TCP/IP协议,个人觉得很麻烦,得不偿失。如果能用linux下的套接字来实现,只需要在定义包结构的时候,添加一个标明串口号的标识,应该就好了。这个协议实现很简单,而且你串口的速率不会很高,网口能完全应付得了

#6


如果只是网口转串口,个人觉得根本不需要协议栈,完全是大材小用了

正如你说的,关键是拆包、组包的过程,还是一个串口数据流的转换

知道包的格式是什么样的就行了,用协议栈就还复杂了

#7


使用Linux系统好些吧,你可以精简它的内核。主要好处有:
1、TCP/IP协议栈有现成的;
2、至于驱动程序,如果你用的网卡芯片和多串口芯片都是常见的,Linux内核中应该会有相应的驱动源代码,或者去芯片厂家网站下载Linux驱动也可;
3、驱动搞定后,你可以设计一个应用程序,实现网卡和多串口之间数据的存储转发,完全可以自己控制的。

另外,怎么感觉你这个项目 像是要做个“终端服务器”。是吗?

#8


uping

#9


个人感觉移植协议栈还是比较麻烦的,另外用arm9成本上也比较高,为什么不用现成的串口转网口的模块,比如ZLSN2000模块。