序言:怕什么真理无穷,进一寸有一寸的欢喜
“为什么”写这本书?
这个想法可以追溯到我上大学的时候。
那时候,一个室友在写C代码。我在旁边看着,突发奇想地说了一句:如果能够知道代码运行时,电脑里面是如何控制电子的就好了。
室友一脸诧异,说:这个也太扯了。
后来我在面板厂,看到了电路图是如何在基板上一层层长出来的。在嵌入式公司,每天调试着底层软件和应用层代码。那个问题一直悬在心里:这套系统究竟有多深?
后来有一次,调试一个flash写入的问题,让我印象很深。背景是NvM通过FEE往flash写数据,FEE按sector管理空间,数据更新时往已擦除区域写,sector写满则翻页,擦一个新sector,把有效数据拷过去,再继续写。我的场景是周期性写入4K数据块,跑了大约20次后,写入始终返回失败。
我先上逻辑分析仪抓SPI波形,发现擦除指令用的是0x21,这是4K擦除。但FEE那边预期的sector是64K,一次只擦了4K,翻页时大面积区域没擦干净。写之前FEE会读flash确认是否全为0xFF,读到旧数据直接报失败。把擦除指令改成64K,翻页问题修复。
接下来发现写入的数据不对:前1K正常,后面3K全变成了0xFF。在FEE的internal buffer上打了监控断点,发现在第一个1K chunk写完后,FEE的安全机制主动把buffer清零成0xFF,防止残留数据泄漏,这是设计意图。问题是internal buffer只有1K,而我的数据块是4K。buffer从0x400扩到0x1000,问题解决。
擦除粒度是硬件手册的理解偏差,buffer清零是AUTOSAR安全机制和块大小的配置冲突,两个bug分属软件栈的不同层,但症状搅在一起。花了几天才厘清。那一刻我问自己:就一个“往flash里存数据”的操作,下面藏着多少层东西?
电路板上的每一颗芯片,都是用沙子造的。沙子里有二氧化硅,提纯到 99.999999999%,拉成单晶,切出晶圆,光刻、刻蚀、掺杂、沉积,十几种工序,几百道步骤,操作精度达到原子级别。这块硅片上,几十亿个晶体管以 GHz 的频率开关,执行指令、搬运数据、响应中断。然后代码驱动外设,外设驱动执行器,执行器驱动车轮。车子在路上跑起来。
从沙子,到芯片,到汽车电子。
这中间隔着物理学、化学、材料科学、电子工程、计算机体系结构、操作系统、网络协议、实时控制、功能安全,几十个学科。没有任何一个人能通晓全部。但在汽车电子领域,你必须掌握其中相当一部分。因为 ECU 的 bug,可能不在代码里,而在电源完整性上。时间同步的抖动,可能不是协议的问题,而是晶振的温漂。
我开始系统性梳理所学,慢慢写出笔记。几年下来,笔记变成了草稿,草稿变成了这本书。
写了这本书,我依然无法完全知道软件运行时,电子究竟在做什么。但至少,我对这套系统懂了一点点。
这就是本书的终极隐喻:工程不是一个人的创作,而是一场接力赛。图灵递出了第一棒,冯·诺依曼接住了。肖克利递出了晶体管,基尔比接住了。博世递出了CAN协议,AUTOSAR接住了。现在,这根接力棒传到了你手里。这本书就是我在跑自己这一棒时写下的笔记,希望你接过去之后,能跑得更远。
给所有人的30秒实验
在开始阅读之前,做一件事。伸出双手,掌心向上。握拳是 0,伸开是 1。右手是低位,左手是高位。
试试看:
0(两手都握拳) 1(只伸右手) 2(只伸左手) 3(两手都伸开)
你刚刚用身体完成了一次数字编码:物理状态(手型)→ 信息(数字)。这本书讲的一切:图灵纸带上的孔、晶体管里的通断、ECU 寄存器里的每一位,都是同一种编码,只是从两只手扩展到了几十亿个晶体管。
这算什么书?
它不是教材。教材讲“是什么”,这本书讲“为什么”。
它不是技术手册。手册给你结论,这本书给你追问。
这是一个工程师的理解。它从“什么是计算”这个哲学问题出发,一路走到 CAN 总线上的诊断应答。它试图串起底层硬件到顶层应用的知识脉络。
计算机是人类集体智慧的结晶。从莱布尼茨的梦想、到图灵的纸带、到晶体管的发明、到集成电路的量产、到汽车电子化,这是几百年来无数人接力的成果。我想把它讲出来。
这本书写给谁?
写给汽车电子领域的嵌入式工程师。你们每天都在和寄存器、中断向量表、CAN matrix、UDS 诊断服务打交道。你们知道怎么用,但可能没有时间想“为什么”。这本书帮你想。
也写给所有对“计算的本质”好奇的人。你不需要造过 ECU,只要你曾经好奇:芯片是怎么从沙子变出来的?计算机“为什么”能“计算”?汽车里几十个 ECU 是怎么对话的?这本书就是给你写的。
你已经在参与了
你每天早上坐进车里,拧一下钥匙。这个动作背后发生了什么?车身控制器检测到钥匙插入,通过LIN总线通知发动机ECU唤醒。ECU上电,HSM验证固件签名。通过之后,CPU开始执行代码:初始化CAN控制器、配置ADC、开启PWM输出。你踩下刹车,刹车灯亮了,这半个动作经过了至少5颗ECU的协作。你什么都没想,但几十亿个晶体管已经开始为你工作。你已经在参与这场人类历史上最庞大的工业协作,只是你自己还不知道。这本书就是帮你“知道”的。
这本书不写什么?
- 不写完整的数学推导(那不是本书的定位)
- 不写产品级别的完整代码(去读源码和 spec)
- 不写“30 天学会 xxx”(效率是重要的,但不是最重要的)
本书的目标是:让你理解。理解得足够深,以至于你可以跟任何同行深入讨论,可以对着电路板和代码自信地调试,可以看到问题背后更大的图景。
阅读建议
全书分七部分,每部分之间是递进关系,但每章相对独立。
- 初学者:按顺序读。从第一部分开始,建立对“计算”的直觉。
- 有经验的工程师:可以跳读。第二部分(芯片物理)和第四部分(通信协议)可能是你平时用的最多但理解最浅的部分。
- 需要“燃”的读者:直接跳到第七部分。
每章结构一致:从一个思想实验或工程问题切入,然后进行硬核技术解析,最后引入工程实践或历史案例。
这本书是我的兰亭
王羲之在《兰亭集序》里说“列叙时人,录其所述”:记录下今天的人和事,让后来的人读到时有共鸣。这就是我写这本书的初心。我把我在半导体工厂良率分析中的感悟、在嵌入式开发中的踩坑、在阅读标准文档时的追问、在示波器前度过的深夜,都“录”在这本书里。我不知道读到它的人会是谁,也许是一个刚入行的汽车电子工程师,也许是一个计算机系的学生,也许是一个对“计算是什么”感到好奇的高中生。但我知道:当你在书里读到某一段、被触动、觉得“这个人想的问题和我想的一模一样”时,我们就完成了一次跨越时空的“若合一契”。这就是我的兰亭。希望它也能成为你的。
致谢
感谢 PTP 技术书的读者们。你们的反馈让我相信:用思想实验 + 硬核技术 + 人文温度的方式写技术书,是可行的。
感谢所有在论坛、邮件、GitHub 上分享知识的工程师们。你们写的技术博客、调试笔记、源码注释,是这个行业最珍贵的养分。
最后,感谢所有在有限资源下依然选择前进的人。
“怕什么真理无穷,进一寸有一寸的欢喜。”——胡适
2026 年 5 月