硬件设计要点:TX/RX交叉连接、地线共地、流控引脚RTS/CTS、电平转换芯片选型
做UART驱动开发,很多人一上来就撸代码。但我得说句实在话——硬件设计没搞对,后面调驱动就是给自己挖坑。我见过太多工程师拿着逻辑分析仪抓波形,抓了半天发现TX和RX压根没交叉连,或者地线没共好,数据全是乱码。
这一章,咱们就把UART硬件设计的几个关键点掰开揉碎讲清楚。你把这些记住了,后面写驱动的时候会省很多事。
2.1 TX/RX交叉连接——最基础也最容易翻车的地方
UART通信是异步串行,数据在TX和RX两根线上跑。但有个原则:发送方的TX要接接收方的RX,接收方的RX要接发送方的TX。说白了就是交叉连接。
为什么必须交叉?因为UART是点对点通信,没有时钟线。A设备从TX发数据,B设备必须从RX收数据。如果TX接TX,两边都在发,没人听,数据就丢了。
你想想看,这就像两个人打电话,一个人光说,另一个人光听。要是两个人都对着话筒喊,那谁也听不清对方说什么。
| 设备A | 设备B | 连接方式 | 结果 |
|---|---|---|---|
| TX | RX | 交叉 | ✅ 正常通信 |
| TX | TX | 直连 | ❌ 数据冲突 |
| RX | RX | 直连 | ❌ 双方都收不到 |
2.2 地线共地——信号完整性的命根子
很多新手会忽略地线。觉得UART就两根信号线,地线随便拉一根就行。我告诉你,地线没共好,数据全是错的。
UART的电平判断是相对于GND的。如果两个设备的地电位不一样,A设备发一个高电平(比如3.3V),B设备的地飘到了0.5V,那B设备看到的电平就变成了2.8V。虽然大多数芯片能容忍一定范围,但地电位差大了,数据就判不准了。
我记得有一次调试一个工业设备,UART通信时好时坏。用示波器一看,地线上有200mV的噪声。后来把地线加粗、缩短,问题就解决了。嗯,地线这事,真不能省。
2.3 流控引脚RTS/CTS——什么时候用,什么时候不用
UART的流控分硬件流控和软件流控。硬件流控靠RTS(请求发送)和CTS(允许发送)两根引脚。
简单说:RTS是输出,告诉对方“我准备好了,你可以发了”;CTS是输入,对方告诉你能不能发。
但说实话,大部分嵌入式场景用不到硬件流控。为什么?因为嵌入式设备的数据量通常不大,MCU的处理速度也够快。你想想看,一个115200bps的UART,每秒也就传11.5KB,MCU完全来得及处理。
那什么时候用?我总结了几种情况:
- 高速通信:比如460800bps以上,MCU可能来不及处理,需要流控来“刹车”
- 多设备共享总线:比如RS-485的多机通信,RTS用来控制收发切换
- 接收缓冲区太小:有些低端MCU的UART FIFO只有16字节,数据一多就溢出
如果要用硬件流控,接线是这样的:
| 设备A | 设备B | 说明 |
|---|---|---|
| RTS | CTS | A告诉B“我能收” |
| CTS | RTS | B告诉A“我能收” |
注意,RTS和CTS也是交叉的。RTS接对方的CTS,CTS接对方的RTS。
2.4 电平转换芯片选型——3.3V和5V怎么共存
现在的MCU大多是3.3V供电,但很多传感器、老式设备还是5V的。直接连?不行。3.3V的IO口可能被5V烧掉,5V的设备也识别不了3.3V的电平。
这时候就需要电平转换芯片。我常用的方案有几种:
- 专用电平转换芯片:比如TXS0102、SN74LVC1T45,双向自动检测方向,用起来方便
- 分立元件搭:用MOS管加两个电阻,成本低,但只能单向转换
- 电阻分压:5V转3.3V可以用两个电阻分压,但3.3V转5V不行,因为电压不够
我个人习惯用TXS0102。它支持双向转换,不需要方向控制引脚,而且封装小,适合板级设计。
- 速率:UART最高波特率是多少?TXS0102支持到24Mbps,够用
- 方向:是单向还是双向?UART是双向的,所以选双向芯片
- 电压:两边的电压范围是多少?常见的是1.8V/2.5V/3.3V/5V
- 封装:板子空间够不够?SOT-23还是QFN?
我曾经在一个项目里用了电阻分压做5V转3.3V,结果波特率一高,波形就变形了。后来换成专用芯片,问题就没了。嗯,该花的钱还是得花。
2.5 硬件设计知识图谱
下面这张图把本章的核心知识点串起来了。你可以把它当作硬件设计的检查清单:
2.6 本章小结
硬件设计是UART通信的地基。地基没打好,上面写再多代码也是白搭。我总结了几条铁律,你记一下:
- TX/RX必须交叉——画原理图的时候拿红笔描一遍
- 地线必须共地——别省那根线,省了就是给自己找麻烦
- 流控按需使用——大部分场景用不到,别为了炫技加复杂功能
- 电平转换选专用芯片——电阻分压只适合低速、临时测试