恁谁刚开始学单片机、捣鼓传感器的时候,没被那一把把的飞线逼疯过?
我记得早些年做个小项目,柜子里头温度测一下,窗户那边湿气探一下,外头再加个浸水报警,那家伙,机柜后头的线乱得跟蜘蛛精织网似的。你拉一条电源线,他扯一条地线,还有时钟线、数据输入输出线...那时候我师傅蹲在地上理线,理了半个钟头,站起来骂了一句:“这哪是搞技术,这是纳鞋底子!”

后来接触到这个叫单总线的东西,第一反应是——早些年我受的那些苦,算是白受了。
其实咱说的单总线技术,最撩人的地方就一个字:省。它不是省那一根两根线的事,是直接把“多线制”逼到墙角没活路。你看I2C再牛也得两根线吧?SPI更狠,四根线起步。结果单总线技术倒好,一根线,从头捅到尾,时钟也是它,数据也是它,控制也是它,双向干活还不带吭声的-1-4。这就好比你以前出门得背个双肩包,左边水壶右边雨伞,现在好了,全揣进裤兜里,两手插兜还能吹口哨。

而且这根线不光是细,还能往长了扯。资料上说标准能干三百米,你要是加个扩展、弄个适配器,甚至能怼到两公里外-2-5。你晓得不,这对搞大型环境监控、粮仓测温、变电站巡检的人来说,简直就是救命。以前一个传感器就得拉一路模拟信号线,走远了信号还发飘,线上串点干扰指针就跳舞。现在一条双绞线拉过去,上面像糖葫芦一样挂它三五十个器件,施工队乐了,甲方也乐了,老板再也不用为“多一米线多五块钱”的事跟你拍桌子。
这还只是表面。单总线技术真正让我服气的,是它那套“寄生供电”的路子。头一回看DS18B20的手册,我还以为印错了——不接电源也能干活?后来才知道,这些芯片都贼精,空闲时候从总线上“偷”那么一点点电,攒在片内电容里,干活的时候拿出来用-2-7。空闲几微瓦,干活几毫瓦,比我家那个待机功耗都低的机顶盒还省。这下好了,不仅省了信号线,连电源线都给全省了。你要是经历过那种在现场一手攥着剥线钳、一手攥着烙铁、嘴里还得叼着手电筒的日子,你就知道这个设计有多贴心。
当然,有人要问了:恁一根线上挂几十个东西,它们不会打架吗?单片机咋知道你在喊谁?
这就是单总线技术第二个高招——身份证制度。每一片单总线器件,出厂的时候厂家就用激光给它烧了一个64位的ROM编码,前八位是家族代码,中间四十八位是独一份的序列号,后八位是CRC校验-1-7。这玩意儿说白了就跟咱身份证号一样,全国十四亿人都不重样。所以哪怕线上挂一百个DS18B20,主机喊“28hxxxxxxxx”的时候,只有那个对应编号的温度计会答应,别的该睡觉睡觉-7。你说这思路,是不是比传统模拟采集那种“扫一圈轮询”聪明多了?
我自己第一次用这个做项目,是在一个老厂房加装温湿度监控。厂房里大铁皮柜子摞得跟山似的,拉线根本拉不过去。我当时就扯了一根网线,里头八芯取了四芯做单总线,一路穿过去,柜子里塞一个DS2450挂湿敏电阻,再塞一个DS18B20测温度,末梢还挂个DS2405当开关,控制排风扇-7-8。那感觉,就像以前炒菜得备八种调料,现在一勺老干妈全搞定。老板验收的时候站在中控室看屏幕,愣了半天:“就这?这就好了?你线呢?”
我说线在墙里头,就一根。
他还是不信,非扒开线槽看了才服气。
不过你也别以为单总线技术就是个完美神仙。它也有它的命门——慢。这是天生的,串行分时,码分多址,一根线上又传时钟又传数据,快了必然打架-2-5。一般干到100kbps就顶天了,DS18B20转个温度要两百毫秒-2-5-8。你要用它传视频、刷图片,那是找不自在。但你要测温度、读开关、看水位、查浸水——这不就正好落在它怀里么?
再一个坑,就是时序敏感。去年帮朋友看一块板子,四片PGA309,三片活蹦乱跳,一片装死。示波器怼上去,发现主机发完读命令释放总线那一下,正常芯片能把电平拉到3.2V,那片死活只有2.8V-6。一开始还以为是芯片坏了,换了一片照样趴窝。查了两天,最后发现是那一路走线长了点,寄生电容太大,上拉10K拽不上去。换了4.7K,世界清净了-6。这事儿给我整得挺刻骨铭心——单总线技术看着简单,其实特别讲“分寸”。上拉电阻选大了,信号沿太缓,时序对不上;选小了,功耗上去,从机偷电又偷不够。这哪是调电路,这是调中药。
所以我跟年轻人讲,你要是头一回玩单总线技术,别上来就怼几十个器件,先老老实实挂一个,把复位脉冲、应答时序、读0写1这些基本工给练扎实了-1-4。你去看那些老工程师调DS18B20,哪个不是抱着逻辑分析仪啃半天的。你以为人家是天赋,其实人家是见过鬼。
还有一个容易踩坑的地方是静电。单总线器件大多是用CMOS工艺,栅极脆弱得很,尤其是那种拖长线的应用场景,冬天干燥,人走过去摸一下,静电就能顺着信号线把芯片端口打穿。好在这事儿也有解,达拉斯自己就出了DS9502这种保护二极管,接在线路末端,钳位电压,泄放电荷-2-5-7。几毛钱的成本,能省几百块的返修运费。这事儿我吃过亏,所以现在逢人就说:别省那个钱,省到最后哭的是自己。
说到软件开发,以前干这活是真磨人。你得自己掐着微秒级延时,写复位、写0、写1、读数据,一个延时不对,器件直接装死。现在好多了,有TMEX这种开发包,DLL给你封装好了,VB、C++、Delphi都能调-2-5-7。你就把它当黑盒子使,会话建立,ROM,功能命令,三步走完,数据到手。早年那些啃时序表的苦日子,总算翻篇了。
可我还是会跟徒弟念叨:你别光会调库,得懂底下的波形长啥样。万一哪天线上挂了一堆器件,有个别失联了,你能靠波形判断是供电不足、电容过大、还是芯片挂了?要是没这根弦,线上挂五十个温度计,坏了一个你都找不出来。不是说非得自己写底层驱动,但得有不被封装蒙住眼睛的本事。
说白了,单总线技术这玩意儿,就像一把瑞士军刀。它不万能,但特别好使;它不是最快的,但最省事;它不是最复杂的,但里头全是心眼儿。三十年前达拉斯半导体那帮人搞出这个东西的时候,怕是也没想到,到今天,咱还在用它测温度、搞门禁、做农业大棚。这么多年,总线和接口标准换了一茬又一茬,USB从1.0干到4.0,PCIe都出5.0了,这根老掉牙的单线,愣是还活着。
为啥?就因为它挠到了工程里最痒的那个地方——省事、省钱、省心。
我以前总觉得技术就该往高速、大带宽、多通道去卷。干得年头久了才发现,工业现场、农业大棚、仓储物流那些地方,根本不差那几兆的速率,差的是“有人愿意把复杂藏在简单背后”。单总线技术就是这样。你看着它就是一根线,普普通通,但它背后有64位激光刻录的唯一身份,有在电容里攒了一辈子的寄生电能,有掐着微秒级往前跳的时序脉搏。
这根线,不比谁粗,不比谁快,但拉得远,扛得糙,认人准,吃得少。
所以你要问我对单总线技术是什么感情?我想了想,不是崇拜,不是追捧,是踏实。是那种看着工具箱角落里那卷双绞线,知道它又能帮你扛一个项目的踏实。