5617|24

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

串口驱动只能接收16字节,16字节后的数据丢失问题? [复制链接]

用wince下的串口驱动移植的。
写完测试的时候都是在16字节以内进行的,收发正常。现在PC端每次发送超过16字节的数据,我的WINCE设备这边只能收到16字节,每次发送超过16字节的就丢失了。
芯片用得是16554. 这个可能是什么原因啊? 很奇怪我把FIFO设置成1字节也是只能收到16字节的数据。
高人指点一下。

最新回复

115200 bps => 8.68 uS/bit => 86.8 uS/byte(N81=10bits/byte) => 1390 uS/16bytes. 也就是在 115200 bps 的速度下, 16 bytes FIFO 只要 1.39 mS 就会满了. 算错了, 真难为情. Paul, Chao @ Techware  详情 回复 发表于 2009-5-6 16:03
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
哦,上次你不是说快搞定了吗?

我的现在时接收32字节,和FIFO大小相同,我现在正在搞camera,没有时间搞了,搞定后教教我哦。
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我以为是中断只能在读完FIFO后清除的,后来发现不是那个问题。你的驱动是什么情况? 一次能接收多少字节?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
uping
 
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

5
 
老兄不要光uping啊,帮忙之招啊。时间不多了哦。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

6
 
貌似接收数据时关闭了串口中断,后续没有使能该串口中断...
第一次听说这种事情...
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 2 楼 papapa123123 的回复:
我以为是中断只能在读完FIFO后清除的,后来发现不是那个问题。你的驱动是什么情况? 一次能接收多少字节?


32字节。这个我暂时不管了,先搞定所有驱动再测试改进。人手少就这样。现在就我一个人在瞎折腾。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

8
 
不是这个问题,因为pc一直发送大于16字节的数据包,每次都是只能接收到16字节。 wince这边发送是正常的
引用 5 楼 morris88 的回复:
貌似接收数据时关闭了串口中断,后续没有使能该串口中断...
第一次听说这种事情...
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
我觉得这是芯片设计的问题,它的FIFO是一次性读写的。不能像自带串口那样。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

10
 
在下一字节收到之后把数据读出来并且清中断,波特率都不太高,CPU做这些事还是来得及的,我接GPS的数据,没丢包。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

11
 
1. FIFO 設 1 個指的是 Trig Level, 還是 depth??

2. 是否 IST 反應太慢

3. 試著將 IISR isr16550.dll 掛起來看看.

Paul, Chao @ Techware
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 9 楼 Veabol 的回复:
在下一字节收到之后把数据读出来并且清中断,波特率都不太高,CPU做这些事还是来得及的,我接GPS的数据,没丢包。


我是使用最高的波特率测试的。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 
谢谢,我怎么觉得现在是FIFO添满了然后才读数据的。
我在读完FIFO后,也做了个清除中断的动作也不行。第一包16字节后的数据就丢了,但是不影响第二包接收,也只能收到前16字节。
引用 9 楼 Veabol 的回复:
在下一字节收到之后把数据读出来并且清中断,波特率都不太高,CPU做这些事还是来得及的,我接GPS的数据,没丢包。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

14
 
谢谢Paul Chao
这里的1是 Trig Level,这个depth怎么理解?不是16么?

觉得IST 不是反应慢,如果是,那么能正确接收的16字节中也会丢失数据,但从现象看前面16字节接收总是正确的。

3,这个我试下,IISR用来共享中断的,但是我现在没有测试其他3个通道,也就是通道A独占外部中断。

这个FIFO接收超过16字节,比如我的Trig level设置成1,是不是每接收一个字节都要产生1个中断,设置成4是不是接收4个字节产生一个中断?
引用 10 楼 paul_chao 的回复:
1. FIFO 設 1 個指的是 Trig Level, 還是 depth??

2. 是否 IST 反應太慢

3. 試著將 IISR isr16550.dll 掛起來看看.

Paul, Chao @ Techware
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

15
 
16554 驱动没有正常响应16554的硬件中断。 100% 是这个问题。查你中的的 IST 有没有执行,用示波器看你 16554 的中断信号是否正确。
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

16
 
1. 将中断触发门限设低点,比如8个就触发,确保不会超过fifo造成溢出。
2. 实在无法确保的时候,启用#CST/#RTS硬件流控功能,这样可以确保不会丢数据。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 15 楼 shuiyan 的回复:
1. 将中断触发门限设低点,比如8个就触发,确保不会超过fifo造成溢出。
2. 实在无法确保的时候,启用#CST/#RTS硬件流控功能,这样可以确保不会丢数据。


这个方法是不错,可是我的没有接这些。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 13 楼 papapa123123 的回复:
谢谢Paul Chao
这里的1是 Trig Level,这个depth怎么理解?不是16么?

觉得IST 不是反应慢,如果是,那么能正确接收的16字节中也会丢失数据,但从现象看前面16字节接收总是正确的。

3,这个我试下,IISR用来共享中断的,但是我现在没有测试其他3个通道,也就是通道A独占外部中断。

这个FIFO接收超过16字节,比如我的Trig level设置成1,是不是每接收一个字节都要产生1个中断,设置成4是不是接收4个字节产生一个中断?



1. 看来你的 FIFO depth 是 16, 所以不管有没读走, 你的 16554 都可以正确读到 16 bytes in FIFO.

2. 建议将 baudrate 降低做测试, 若是 1200 就不会 lost, 115200 会 lost, 那麽就是 ISR-IST latency 太大.

3. Trig level 设 1, 接收 1 byte 就产生 1 个中断, 设成 4, 就 4 bytes 产生 1 个中断, 若设成 1 还是会 lost, 感觉像是中断没处理好.

4. GIISR.dll 才是共享中断, isr16550.dll 另可以做 software FIFO.

Paul, Chao @ Techware
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

19
 
非常感谢Paul Chao提供了一些很好的思路。
的确是我的波特率太高了115200,我设置成1200就ok了。
但是有没有什么办法 让自己的波特率提高?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

20
 
但是这个ISR--IST间隔怎么这么大? 会是什么原因造成的?修改一下。因为还是需要115200的。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表