免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2405 | 回复: 6
打印 上一主题 下一主题

[驱动] 串口驱动的相关问题,请大侠来帮帮忙 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-15 11:10 |只看该作者 |倒序浏览
小弟,最近开始着手linux平台下串口驱动的开发。现在遇到一个问题,就是用某串口从GPS模块读取信息的时候,有时候会出错。我们这里采用了一个额外的串口五,当然,内核等是修改过以适应扩展的串口,并以复用的方式和串口4整合在一起(这里是我不明白的一个点,串口复用是什么意思。。。。怎么工作的。。。。)。
当我们不用和串口5复用的串口4读取GPS模块的信息,而是用串口2的时候,出错的现象就会减少(当然,这里会出错,这些和GPS天线、信号等有关)。所以可以知道,硬件上是没有问题的,所以是驱动上的问题。现在就着手看串口的结构,但是tty、uart等的结构不是很清晰,我是看了些驱动的代码,网上的结构说明也不是很清晰,在两者如何相关上的说明不是很多。是否有相关这些结构的东西的细致的介绍,同时,串口的工作上是怎么进行的,当然,如果能提点一些俺遇到的问题的方向,那就更好了。
所以也求各位大侠能否指点一二。万分感谢。

论坛徽章:
0
2 [报告]
发表于 2010-10-15 22:48 |只看该作者
1 "串口复用" 具体问题具体分析, 你是使用什么板子, 硬件电路图是怎样, 无人知晓. 因此没发很好地回答, 就理解为该串口是与其中4个中的一个并联的, 但是具体怎么区分就不清楚了.

2 "有时候会出错" 不明白你指的出错是什么意思? GPS报个没有收到星? 还是串口读取时发生错误? 如果是GPS报个数据的错误,那么跟串口无关, 但若是读取数据错误, 应该跟GPS的天线等无关吧. GPS管不管有没有信号, 都应该会输出的.

3 tty包含uart, 可参考毛德操的linux情景分析中tty部分, 只与uart嘛, 没有什么书籍具体描述的, 看kernel源码吧.

论坛徽章:
0
3 [报告]
发表于 2010-10-19 09:36 |只看该作者
回复 2# kamingli

1 使用的是arm体系的GM8180.具体怎么复用的,其实我也不是很了解,前人做的东西,留下来的文档说明不是很详细,也没有指明。大致上应该是第五个口和4个中的一个并联在一起.就是具体并联的话,他们分享同一个中断之类的是吗?并联起来的目的可能是有些什么?还望指点

2 出错就是,GPS会不停的收到信息,当我们直接从GPS模块读取信息的时候,会发现信息的格式什么的都是正确的,并且每条信息之间是分割开的。但是当我们从串口中读取出GPS的信息的时候,会发现有些GPS的信息会丢失或者出现错误(具体的就是和直接从GPS上读取出来的信息做比较),有些读取出来的GPS信息会上下两条信息合并在一起(也就是信息A的结束码和紧接着的信息B的起始码错误叠加,导致了两条信息变成了一条信息)。只是不知道从哪里入手,因为单单使用串口2(没有并联的单独一个串口),读取信息虽然也会有些丢失的错误,但是情况很少发生,所以基本就确定是代码上有问题了。最近也只是看看内核相关的代码,但是毫无头绪,望大侠能指点一个方向。

3 好的,这部分我会去看下。最近也是死命的看kernel,但是看的一知半解的,也不知道看了点什么有用的。也只有这么看,希望能有些个灵感。

论坛徽章:
0
4 [报告]
发表于 2010-10-19 10:34 |只看该作者
鉴于描述的情况,  
1 我不能确定所说的复用到底是怎么一个情况, 不过也不用这么较真了, 前人说复用就复用吧.

2 首先得肯定一下, 你板子上的串口(你最终想使用的那个), 是否已经是好的(包括驱动和硬件)

3 如果那个串口是好的, 那么目前看来有可能是buffer不够, 导致数据丢失了, 因为串口的接收buffer, 若满了,数据就会被覆盖的.

论坛徽章:
0
5 [报告]
发表于 2010-10-19 14:31 |只看该作者
回复 4# kamingli


1 小弟这么较真这个复用是自己估计,因为三个串口复用了(使用的串口2,3,4,它们有多种功能,用于GPIO,或者UART等,复用会不会是指的这个?虽然也不是很明确),然后这三个会彼此影响。当然三个复用的串口当中的其他两个口并没有在使用中(和串口相应的设备并没有开启使用)。介于改变硬件电路而使用没有复用的串口1的时候,没有什么大问题,所以可能出现的问题估计是在复用上导致的。

2 硬件应该是没问题的,因为板子不是只有一块,换过也试过了。驱动的话,不敢保证,因为前人为了使用串口4而修改了一些配置,但是总体上的东西没有改动,只是增加了串口2,3,4的复用(唯一添加的地方)。关键是改了电路后,使用串口1,而不改变驱动什么的话,是可以保证使用正常的。

3 buffer的问题倒是非常的有可能,感谢提点。

不过,我还是不怎么知道如何着手。。。还望大侠能继续指点交流

论坛徽章:
0
6 [报告]
发表于 2010-10-19 19:37 |只看该作者
GPS的波特率是9600以下吧? 串口有没有FIFO? 这得看手册了. 还有就是, 应用层得勤快一点, 随时准备把数据读走.

论坛徽章:
0
7 [报告]
发表于 2010-10-19 20:51 |只看该作者
回复 6# kamingli

GPS是9600的,那么CPU通过串口读取数据的时候是要设置成9600的对吧?

串口有FIFO的。。。但是感觉,在使用上不会造成buffer被堆满的。。。不过具体的还是不好说。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP