用串口扩展串口的失败经验...

[复制链接]
2580|1
 楼主| hongdikeji 发表于 2007-7-17 14:47 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;说来惭愧呀。我进来在进行一个项目,需要用到等多的串口。于是“领导”就选了款串口扩展串口的芯片,来扩展串口。我当时也没有考虑就将它设计到了系统中。<br />&nbsp;&nbsp;&nbsp;&nbsp;后来等到我编写好linux下的驱动程序,并作了简单的测试后。我开始做大流量的周期测试才发现问题。<br />&nbsp;&nbsp;&nbsp;&nbsp;系统根本来不及处理4路9600bps的子串口数据,而出现数据接收溢出。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;这个串口扩展芯片的一个读写操作需要2个字节(W/R_OP),主串口波特率设置为T&nbsp;=&nbsp;230400bps。而从这个芯片中收/发一个字节数据需要至少6次读写操作,相当于从主串口收/发12字节的数据。于是系统通过串口扩展芯片能处理的最大波特率:B=&nbsp;T&nbsp;/12&nbsp;=&nbsp;230400&nbsp;/12&nbsp;=&nbsp;19200bps。<br />&nbsp;&nbsp;&nbsp;&nbsp;而实际中在uClinux下的中断延迟(t1)和用户中断服务程序中的处理过程(t2)这两个时间,以及中断共享下的耗时(t3)。因此实际处理收/发一个字节的时间:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;t1&nbsp;+&nbsp;t2&nbsp;+&nbsp;(n-1)*t3&nbsp;+&nbsp;1/B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(打开的子串口路数)<br />实际测试的得到的波特率:14388.5bps。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;“领导”要求支持4路子串口1200~9600bps波特率的同时收发。我测试时一直在找是不是程序有问题呀。可苦了我啦。<br />&nbsp;&nbsp;&nbsp;&nbsp;后来仔细地计算考虑发现是方案的错误。<br />&nbsp;&nbsp;&nbsp;&nbsp;告诫大家要先考虑方案是否可行,否则“领导”会以为你...,其实错从开始就错了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
hqgboy 发表于 2007-7-17 14:57 | 显示全部楼层

...谢谢分享.

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

本版积分规则

31

主题

85

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部