| 
					阅读:5395回复:13
				 2440串口FIFO溢出问题
					系统是远峰提供的S3C2440+WINCE4.2,通过2440的UART0接口数据,当数据量较大时(超过100K)出现丢失数据现象,通过在驱动中读取2440的UART0的出错状态寄存器,发现硬件FIFO有溢出错误,就是说数据没有来得及读取而被覆盖了,提高驱动和上层接收应用程序的优先级还是会出现丢数据现象,理论上驱动和上层程序应该足够快去读取硬件FIFO呀?是不是WINCE读取COM口的方法有错?各位有什么建议,这个问题困扰了我很久了!!!				 | |
| 沙发#发布于:2007-01-15 22:10 
					看了一下4.2 2440的串口驱动代码,建议你修改drivers/serial/ser2440_hw.c->SL_GetRxBufferSize() return (0);把零值改成10240或以上。64K以下好了。 | |
| 板凳#发布于:2007-01-18 10:21 
					谢谢,zhengshijie兄。 我把drivers/serial/ser2440_hw.c->SL_GetRxBufferSize() return (0);修改了,好像有改善,但还是会丢。后来发现有个奇怪的现象,如果在接收连续的数据时中往串口输出一些打印信息,接收数据就没有丢了,此时系统鼠标就动不了,必须等接收完数据才能操作,我想可能是在接收过程中发送的信息要等接收完成后才能发送,系统一直都在处理串口进程,没有跳到其他进程去,所以系统鼠标动不了,所以串口数据都接收到。这只是猜测,具体原因还没找到!大家有什么建议? | |
| 地板#发布于:2007-01-26 16:17 
					等待大牛解答,在此学习。				 | |
| 地下室#发布于:2007-01-27 17:12 
					三星的系统我没有用过,不知道具体是怎么回事, 你认为是读取串口速度太低引起的,可以把从FIFO中读取数据的代码移到ISR中, public\common\oak\drivers\serial\ISR16550目录下就是WINCE提供的ISR代码,可以看看能否适用于你的系统. | |
| 
 | 
| 5楼#发布于:2007-01-28 10:51 
					“往串口输出一些打印信息,接收数据就没有丢了”,是不是对方忙于接收串口中的数据,从而减少了发送数据?所以你这方接收到的数据减少,从而错误率下降。你可以再作个试验,在发送方每发送一个字节睡一毫秒,看错误率是否下降。如果有改善的话,可能还是你这边的接收速率太慢所致,解决的根本办法是增加流控机制来解决。也可通过适当减少发送方的数据发送速率来解决。				 | |
| 6楼#发布于:2007-02-06 13:19 
					事实上4.2 S3C2440 BSP默认是使能AFC(自动流控),可以看到s2440.h有定义: #define USE_AFC 1 但是板子侧有流控,而发送方没有流控反而更会出问题,所以要么发送方使能流控,或把板子侧流控禁掉。还有就是系统的主频最好是400MHz或以上,SDRAM控制器的配置要优化,提高系统性能。 不要在中断中读取数据。 | |
| 7楼#发布于:2007-02-10 18:48 
					一楼的兄弟解决没有啊?我最近也在写串口的驱动,我觉得可能有这种可能: 你发送这么大的数据,在接收的同时是不是也在发送啊?如果是这样,可能需要平衡两者的CPU使用率,就是不要让发送或接收占用太多的时间. 而且你打调试信息能改善,从这个现象判断,有这两种可能:1.接收速度太快,CPU发现硬件已经有数据可以读取,但读取的时候硬件实际还没有准备好数据. 2.接收速度太慢,这可能是IST反应速度太慢所致. 可以用不同的速率测试一下,如果9600等低速时正常,高速时有错,应该是IST太快,反之应该是系统太慢. 但也可以查一下发送是否正常,而不只是关心接收. 也可以问一下三星,硬件是不是有什么问题,芯片有BUG也很正常. 仅供参考. | |
| 
 | 
| 8楼#发布于:2007-03-02 11:16 
					一楼的兄弟解决没有啊? 本人碰到和你一模一样的问题。 | |
| 9楼#发布于:2007-03-02 11:21 
					我在57600的波特率下,如果通过pc机向ce平台发送数据,WriteFile一次写10k字节,发现ce平台能够完整地接收到10k字节的数据; 如果在115200的波特率下,ce平台就不能完整地接收到10k字节的数据,有时丢的多,有时少。 | |
| 10楼#发布于:2007-03-13 20:23 
					发数据的时候丢包有没有遇到过?我这里是发数据丢。				 | |
| 
 | 
| 11楼#发布于:2008-03-11 11:16 
					各位老大们,我现在也遇到和楼主同样的问题,请教下各位是如何解决的?多谢				 | |
| 12楼#发布于:2008-08-15 22:15 
					我也到此问题,发送超出40个大小的字节,就有可能出现丢包现象。 我是写应用程序的,感觉需要优化驱动来解决问题。 | |
| 13楼#发布于:2008-08-15 22:52 
					你们方向都错了~ 我的才设FIFO最低等级, 但传送接收数百MB 未见任何错误(115200-8-N-1) (只使用RXD和TXD,没CTS和RTS线) 只要AP每次下令前把Buffer清掉,就搞定了 | |
 
							
 
				 
				