记得世纪之初的第四年,我刚上大学,记得老师讲串口比并口简单,但是并口一次可以发送8位的数据,当时我就觉得并口比串口好,因为它速度更快,可是后来,随着时间的流逝,我几乎发现并口失踪了,没有人再使用它了,难道一次可以传输8位的线缆没有一次仅可以传输1位的线缆好吗?
后来参加工作,我逐渐明白了这个问题,并口虽然单次传输速度很快,然而一旦1位出错,8位的数据就全部重新传输,另一方面,也不利于单位控制,比如有的时候不需要传输8位的数据,只需要传输1位的控制位即可,另外最重要的,8位并行传输,8根线缆之间的串扰很强烈,出错率很高,除了传输ascii或者unicode字符之外,在控制方面,按位控制比按字节控制更加节能和高效,因此并口的利用率远远不如串口,硬件设计也过于复杂,而且硬件规范一旦成型就不易更改,而软件更改却很容易,因此一些控制信号最好通过软件协议来协商而不要通过硬件来固化,比如通信双方商量好,如果发送一个1110序列,那么就是马上要写数据了,数据内容中的1110如何转义也需要协商好,如果发送0111序列,那么就是请求读取数据,后面跟一个地址,这样要比专门搞一些地址针脚或者控制针脚要好很多。也就是说,硬件提供最基本的机制,比如收和发以及接地,而其余的控制协议和传输协议全部由软件来完成,这是最合理的了,这也是当今计算机工业发展的主流,比如磁盘一例,以往我们都是用ATA磁盘,也就是我们熟悉的IDE磁盘,它是并行口的,数据线有很多的针脚,两大排,插拔的时候要很小心,弄不好就插折了,而如今呢,再次打开机箱,我们发现了一根细很多的红色(也有别的颜色)线缆,那就是sata线缆,连接的就是sata磁盘,这根线缆有着不多的几个针脚,和usb差不多,它基于串行口,sata中s就是serial的意思。
后来参加工作,我逐渐明白了这个问题,并口虽然单次传输速度很快,然而一旦1位出错,8位的数据就全部重新传输,另一方面,也不利于单位控制,比如有的时候不需要传输8位的数据,只需要传输1位的控制位即可,另外最重要的,8位并行传输,8根线缆之间的串扰很强烈,出错率很高,除了传输ascii或者unicode字符之外,在控制方面,按位控制比按字节控制更加节能和高效,因此并口的利用率远远不如串口,硬件设计也过于复杂,而且硬件规范一旦成型就不易更改,而软件更改却很容易,因此一些控制信号最好通过软件协议来协商而不要通过硬件来固化,比如通信双方商量好,如果发送一个1110序列,那么就是马上要写数据了,数据内容中的1110如何转义也需要协商好,如果发送0111序列,那么就是请求读取数据,后面跟一个地址,这样要比专门搞一些地址针脚或者控制针脚要好很多。也就是说,硬件提供最基本的机制,比如收和发以及接地,而其余的控制协议和传输协议全部由软件来完成,这是最合理的了,这也是当今计算机工业发展的主流,比如磁盘一例,以往我们都是用ATA磁盘,也就是我们熟悉的IDE磁盘,它是并行口的,数据线有很多的针脚,两大排,插拔的时候要很小心,弄不好就插折了,而如今呢,再次打开机箱,我们发现了一根细很多的红色(也有别的颜色)线缆,那就是sata线缆,连接的就是sata磁盘,这根线缆有着不多的几个针脚,和usb差不多,它基于串行口,sata中s就是serial的意思。
因此,不要在硬件上花费太多的时间、精力和金钱,最好的办法是用软件解决,评价一个硬件好不好并不是它的功能强不强,而是它必须是机制化的,不要有太多的策略。太多的功能必然意味着成本的增加,在成本和性质之间必须有一个权衡,就想同轴电缆败给双绞线一样,单论传输特性,同轴电缆肯定是无以伦比的,然而它造价高的超过了它带来的好处,因此它败了,双绞线的劣势完全可以用软件来弥补一二。软件的劣势可以通过重构来弥补,重构或者重写完全是取决于人的脑力的,而硬件的重构却需要巨大的人力财力投入,能用软件解决的问题不要用硬件解决。
本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271093