先说一下背景,否则很容易看了 如坠云里雾里。
可能大家还记得我曾经发过一些抱怨那些 USB转串口座子 有一些稀奇古怪的毛病 的帖子。
这几天我在做一块 串口组态屏 的时候,再一次出现类似的事情:
那是一个看起来很像是mfc一类框架做出来的 样子看起来很像ide的 组态串口tft屏开发工具。但玩久了就知道这其实只是一个复杂了许多的 串口助手。我弄着弄着,忽然发现串口突然收发不正常。我试着重新插拔,好家伙,硬件管理器 里 的 驱动信息居然没自动消失。然后我怎么也连不上了。我怀疑是USB口(前端)问题,于是我插到机箱后面还是一样。
没办法之下,我只好重启。
这种事情是属于让我非常忌讳的事情——我基本不认为是这根转接线的驱动问题,因为这根线我也用了好几个星期了。
那么,如果一个应用程序出故障可以导致驱动层的这种相当严重性质的bug,那这个应用程序绝对是被划出严重不可信任之列......
骂了几句TMD以后,我觉得骂一百年也没用。
回想起前几次遇到的类似的 硬件上支持/不支持流控(同一个品牌两个系列的座子)的事情,我就觉得能否找出什么方法,去保证这种 从 硬件 到 软件 的一致性,至少不能出现这种 驱动上出现故障的麻烦?!
说来惭愧,这事情我想了也有大半年了。但是我一直没去做,一个是觉得这种事情吃力不讨好还很辛苦——即使做出来了,是不是一下就让淘宝复制了呢?
如果只是自己用,是不是辛苦了点,何况下意识里,我总是觉得串口是一种老式,低速,过去的接口,早该让看起来更爽更快的USB取代.....
就这样我拖拉着,直到这次,愤怒过后安静下来,倒不是盛怒之下的那种 忍无可忍,而是觉得,明明早就知道 市面上卖的这些货色就这么个德性,自己还敢去用,自己作死,能怪谁?
于是我忍无可忍的决定,把这事情端了!
因为这份工作的关系,在新部门,要做 交流充电桩,我需要从各种国家规范中 确定需求,并了解到行业规范和国家规范的威力——权威的定义,要求,包括测试方法 等等等等。
于是我想到,我必须去寻找串口相关的规范,而且还得是 全球性的国际规范,只要我自己坚持按照这种要求去做——或者,以后自己购买,或者与第三方设备联调式,我首先按照这个规范来验收,那么,应该可以回避掉许许多多的类似问题了。
对于国际范围内的 电气,电子行业,我知道的规范不算太多。
而且大多是美国的,但是美国规范是值得信任的,这个有着这个星球上最高篮球水平NBA的国家的很多规范,都变成了事实上的全球规范。
比如IEEE,以及其他什么ISO ITU什么的,当然还有后来我慢慢搜索时了解到的一些国家规范组织,如什么EIA TIA。
可是那时候我一根筋想去找 什么 uart规范,当然在此之前我还想着干脆点,直接找 i2c,spi规范呢。
但是我都一无所获,如果说,i2c spi没有我还相信,如果说 串口没有,那么打死我也不相信的。
就在这个时候,我想起之前 chunyang老师跟我说过的,他都是自己做 这些转接模块。
联想起因为看到 那本430的书才知道,原来chunyang老师的经历和 玩430的华东师范的 沈建华 老师 非常接近,那肯定是经验丰富的。于是就给他发了站内信。
与此,同时,我在网上和别人牢骚的时候,也慢慢被各种说法启发了。
于是,我以前对串口的各种了解,突然串了起来......沙发继续
只能说,这些想法,居然和刚刚我收到的 chunyang老师的回复 很接近。
这是我和chunyang老师的 短消息
您
关于您在“chunyang,你去哪了?”的帖子
chunyang老师
还记得我和你聊过 串口转USB座子的事情么
我想请教你关于 你是怎么 自己亲手做(想必还涉及各种电性能,数据链路这些方面的妥善处置)。
就我而言,我发现最多的麻烦来源于 和 电脑通信
通常是 USB转串口
我不能确定问题是出在 USB还是串口部分。
受最近工作的启发,我试图找出uart(或者更快速的 i2c spi)的相关规范,可是我搜索了 ieee iec iso itu等官网,都没有找到。
其实停下来想想,我也感到我对此很迷糊
232/485 这些,是电平规范;
uart usart 乃至一些iso 7816 这些应属 数据链路层。
串口太过重要了,它应该是事实上的工业通信接口标准(或许只是之一)
有很多的各类数据口往 串口转接,比如最著名的 USB转串口。
因此不管我主观很不喜欢它,觉得它老旧,希望 新的 USB,或者哪怕只是I2C SPI这些更高速的通信接口取代它,但显然不太可能。
但是,如果连这种事实上的标准,都会在市面上出现那么多坏事的东西,该怎么办呢?
痛骂了别人很多次,可是自己弄又不知道该怎么入手。
我今晚试图查找这些国际性规范但都没找到。
所以很想知道你是怎么做的,多谢指教!!
前天 23:17
chunyang :
串口规范应该还可以从网上搜的到,但要用英文搜。在1980s我曾买过一本《PC标准》的盗版英文书(当年都是出版社官方影印盗版后印书卖,可不便宜,当年够吃顿大餐的),上面就有详细信息,所以没有留意过网上这方面的中文资料。不过,看MAX232之类的器件手册就应该完全可以弄清楚了,虽然MAX232本身不是标准,但它符合标准。
至于USB串口桥的兼容性则跟串口的标准一点关系也没有,决定串口桥片兼容性的是该芯片生产厂家的设计、PC主板的设计以及南桥的型号还有操作系统等。
本帖最后由 辛昕 于 2014-1-16 23:51 编辑
昨晚上我和朋友聊着聊着的时候,忽然想起了以前看过 rs232的英文wiki和以前看过的一本专门讲通信的小书里提到,rs232/485都好,它们更多的是一种 电平规范,而非USB这样的完整,从物理电平规范一直到上层数据链路,数据通信协议 的完整 协议。
毕竟串口作为一种几乎最老的通信接口,出现在1980s,而i2c spi这些大多在1990s左右才开始完成制定,更别说USB,它的提出都要推迟到1994或者1995年。
因此我突然理顺了一条死路。
作为串口这个东西,它最底层的规范,应该就是 232/485 这个层次,它规定了 电气性能,对我们来说主要是关心 电平描述,起始停止,位数 等 时序信息;
当然其实它还包括线缆长度在内的各种线缆方面的要求,甚至是机械结构的 规范定义,但这些大多数时候不是我们所关心的,所以忽略;
当然,除了232,主要是因为个人PC而成为这类标准中的中心,以及工业上长距离通信的485,其实还有一种也非常重要的TTL电平,也就是MCU直接输出来的结果;
而在此基础上,才是 “字节级”的规范,这个我们在学51的时候,经常听到下半节课打瞌睡的哪些内容,大多属于这个。不过我发觉,它和232/485/ttl 中的内容有一些重复;
至于相关的协议栈,我想,公认的一个应该是modbus。
而我也是在了解了modbus以后,才发现自己以前做过的,从别处看来的各类 自己定义的私有协议,基本上都是这个套路。
一个包含特殊前导字符,长度值 的 报头,以及一个大多数时候是CRC校验和 的 校验码 结束。
然后我重新回头去看 rs232的英文wiki
知道当前最新的232规范是 EIA/TIA-232-F 1997年发布。
废了些劲,我下载了一份,虽然是影印版但还算清晰。
我刚开始看,先上传给需要的哥们。
没看懂,我觉得我的串口线不能识别一般是电脑驱动的问题,断掉了以后,有的需要重启后又能识别了。有的直接拔了插上去就行