LINUX RS485串口编程

vctony 2004-09-21 09:45:22
目前PC的串口是RS232的,受制于传输距离的限制,我们公司的硬件工程师在PC原有RS232串口的基础上做了改进,改为RS485的,但这样一来,LINUX原来的驱动就不能用了,所以要写新的驱动。硬件工程师告知我,RS232是全双工的,而RS485是半双工的,需要通过修改其I/O端口的寄存器的值,改为半双工通信。
但我考虑了一下,RS232是内核本来就支持的,重写驱动必然会很耗时,而且我也没这个能耐,如果通过重新
编译新内核的办法解决,但又发现内核配置中没这个选项,直接修改内核源代码似乎也行不通,而已有的对RS232进行设置的系统调用也没有能将其设置为半双工通信的参数选项。这可难倒了我了!!
现在我的想法是仍然调用LINUX提供的系统调用来设置比如波特率,停止位,数据位和校验,另外写一个函数
在用户空间设置串口的参数尤其是直接修改I/O端口的寄存器的方法,将其设置为半双工通信模式,
我想到的函数有:
ioperm();
iopl();
iocntl();
我就知道这些了,请问哪位大侠做过类似的实现,或有更好的解决办法,望不吝赐教,小弟不胜感激!!!

还有就是如果重写驱动,原有的驱动程序和设备结点文件的主设备号将会与新驱动的主设备号发生冲突,这个问题如何来解决!!

谢谢了!!
...全文
3955 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzw_happy 2004-10-25
  • 打赏
  • 举报
回复
看看硬件如何设计的。
其实应该没有什么关系的。我以前买了个232-485转换器,就在pc上和485设备通信了。
tbchinese 2004-10-23
  • 打赏
  • 举报
回复
232转485的硬件就可以实现了.
sx0421 2004-10-20
  • 打赏
  • 举报
回复
232转485转换器,正解
lion1900 2004-10-19
  • 打赏
  • 举报
回复
mark
camsharping 2004-10-18
  • 打赏
  • 举报
回复
偶遇到的问题正是space和mark校验方面的,linux本身不支持这两种校验方式。偶用嵌入式linux做下位机的时候很容易的实现了这两种校验,只要设置一下ARM芯片的相关寄存器就行了。但PC机上的Ret hat Linux不知道怎么修改驱动才能支持?好像Ret hat Linux的串口驱动文件不是直接使用寄存器的。
Jet法拉利 2004-10-18
  • 打赏
  • 举报
回复
买一个转换器就行了,之间的差异可以由转换器来解决,现在还有增强型的232-485转换器,功能好强的。
比你直接写驱动好多了
zm2002 2004-10-16
  • 打赏
  • 举报
回复
主从方式 需要注意的是效验位设置 主要是space和mark效验来发送地址。这里不详细
说 看看一些单片机硬件方面的书就可以。
zm2002 2004-10-16
  • 打赏
  • 举报
回复
使用RS232转换RS485的转换器 120元可以买到 只是编写程序需要改为半双工 如果使用RS485
的网络,可以参考RS232的主从方式编程。windows下我是这样做的。Linux下我只做过RS232
应该是可以的。我测试过转换器发送接受数据,但是没有测试主从方式来查询发送!
taosiming 2004-10-15
  • 打赏
  • 举报
回复
用个硬件转化器不久可以了么
vctony 2004-09-29
  • 打赏
  • 举报
回复
那两台计算机之间如何知道对方在收或发的状态.
mastercyl 2004-09-29
  • 打赏
  • 举报
回复
485和232,编程是不变的
lanchat 2004-09-27
  • 打赏
  • 举报
回复
根本不用什么新的驱动就可以了!232是对485透明通讯,只要你没发送的时候,别去接受就可以了,接受的时候,别去发送就可以了!他们没什么区别,所谓硬件更改只是电压匹配而已,并非uart改动,所以,很简单了吧?对你来说,就当作半双工的232就可以了

http://www.morning-tech.com
vctony 2004-09-27
  • 打赏
  • 举报
回复
to: nextzone(Nextzone)
谢谢了,我又去仔细问了一下其他的硬件工程师,他说的和你一样, 对于PC的操作系统来说,他并不知道在RS232
上又接了什么电路,所以编程是不变的,多谢楼上的各位给予的关注.

我搞工控的,是新手.

vctony 2004-09-27
  • 打赏
  • 举报
回复
我想过了,信号的机制似乎不能在两台只能用串口连接的计算机之间实现.
vctony 2004-09-27
  • 打赏
  • 举报
回复
to :lanchat(lanchat)
你说的对, 可是我现在想把RS232的串口通过编程序的方法设置成半双工的模式,这要怎么写.
或者按您所说的,我在两个进程中如何做到收发的异步,简单来说就是,接收的进程如何知道发送的进程在发送数据而它此时不需要去读取数据.

谢谢了.
老板今天来和我说要想办法将RS232串口通过编程的方法设置成半双工模式.

至于您所说的,为了实现收发的异步是否要借助于其他技术如信号呢,这个方案是否可行或比较好呢.
nextzone 2004-09-26
  • 打赏
  • 举报
回复
如果有电路图我可以帮你。
但是,一般来说,硬件工程师的做法是将RS232加转换电路成RS485接口电平,编程是不变的。你也可以用232/485转换器来连接。你是ARM?
vctony 2004-09-22
  • 打赏
  • 举报
回复
有没有做过的高手!
gtkknd 2004-09-22
  • 打赏
  • 举报
回复
应该没那么麻烦,RS485也是遵循RS232协议,只是在你的程序中发的同时不要接收,或者接收的同时不要发送,实际上发是发不出去的。
vctony 2004-09-22
  • 打赏
  • 举报
回复
to : xmzh(xmzhang)

有空的话,请您能讲的具体点。
串口驱动是编译到内核的,现在对RS232的电路改造后,出口电路就是RS485的了,我查了很多资料,
但没有这方面的编程资料。

要怎么写, 是要重写驱动吗,进来个达人,帮帮我啊
xmzh 2004-09-22
  • 打赏
  • 举报
回复
应该没那么麻烦,RS485也是遵循RS232协议,只是在你的程序中发的同时不要接收,或者接收的同时不要发送,实际上发是发不出去的。
加载更多回复(3)

4,468

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧