2、硬件接口基础:MCU与NB-IoT模组之间的硬件接口选型与电路设计要点

大家好,我是你们的嵌入式讲师。今天咱们聊聊MCU和NB-IoT模组之间怎么“对话”。说白了,就是硬件接口怎么选、电路怎么搭。

我做了这么多年IoT开发,发现很多新手甚至老手,都在接口选型上栽过跟头。选错了接口,轻则通信不稳定,重则模组烧掉。嗯,这节课我就把压箱底的经验掏出来,跟你们好好掰扯掰扯。

2.1 四大接口:UART、SPI、I2C、GPIO

目前主流的NB-IoT模组,比如移远BC95、BC26,中移物联M5310,还有华为的Boudica系列,它们和MCU通信的接口就那么几种。我按使用频率排个序:

  • UART(串口):绝对的老大,90%以上的项目都在用。
  • SPI:速度快,但用得少,一般用于固件升级或大数据量传输。
  • I2C:偶尔见到,通常是模组作为从机,MCU去读状态。
  • GPIO:控制复位、唤醒、电源开关,属于“辅助角色”。

我的建议:除非有特殊需求,否则优先选UART。原因很简单——稳定、简单、调试方便。我见过有人非要用SPI去传AT指令,结果把自己折腾得够呛。

2.2 UART接口:最常用的“老伙计”

UART是NB-IoT模组的标配。模组一般会提供两路UART:主串口(AT指令口)和调试串口(日志输出)。

2.2.1 电平匹配问题

这里有个大坑——电平不匹配。MCU通常是3.3V,但有些NB-IoT模组是1.8V的IO电平。比如早期的BC95-B5就是1.8V。

我曾经在一个项目中,直接把3.3V的STM32 TX接到了1.8V的模组RX上。结果呢?模组烧了。后来查手册才发现,模组IO耐压只有2.0V。

避坑指南:设计前一定先看模组数据手册的“Digital IO Characteristics”章节。如果电平不匹配,必须加电平转换电路。

电平转换的常用方案:

  • 分立MOS管方案:用2个N沟道MOS管(如2N7002)搭成双向电平转换电路。成本低,适合量产。
  • 专用芯片方案:比如TXS0102、PCA9306。省事,但贵几毛钱。
  • 电阻分压:只适合单向传输(MCU→模组),且速度不能高。我一般不推荐。

2.2.2 硬件流控(RTS/CTS)

很多模组支持硬件流控。说白了,就是让模组告诉MCU:“我忙,你先别发数据”。

我个人习惯:如果MCU的UART资源够,就接上RTS/CTS。特别是当你要用TCP/IP协议栈,或者模组要处理大数据包时,流控能避免数据丢失。

举个例子,我用BC26做数据上报,一次发500字节。没有流控时,偶尔会丢包。加上流控后,再也没出过问题。

2.2.3 电路设计要点

UART电路其实很简单,但有几个细节要注意:

  • TX/RX不要接反:MCU的TX接模组的RX,MCU的RX接模组的TX。这听起来像废话,但我真见过有人接反的。
  • 预留测试点:在TX、RX线上预留焊盘或排针。调试时用逻辑分析仪抓波形,能省很多时间。
  • ESD保护:如果模组有外接天线接口,建议在UART线上加TVS管(比如PESD5V0S1UB)。静电打坏IO口的事,我遇到过不止一次。

2.3 SPI接口:高速但“娇气”

SPI在NB-IoT模组上用得不多,但一旦用上,就是大活——比如OTA固件升级。

SPI的典型接法:

  • SCLK:时钟线
  • MOSI:主出从入
  • MISO:主入从出
  • CS:片选

注意:SPI的时钟频率不能太高。模组内部的SPI接口通常跑不了多快,一般不超过10MHz。我习惯先设成1MHz,稳定后再往上调。

小技巧:SPI的走线要尽量短,特别是时钟线。如果PCB上走线超过5cm,建议加33Ω的串联电阻,抑制过冲。

2.4 I2C接口:模组当“小弟”

I2C接口在NB-IoT模组上比较少见。如果模组提供了I2C,通常是让MCU去读模组内部的传感器数据或状态寄存器。

比如,有些模组内部集成了温度传感器,MCU可以通过I2C读取温度值,用来做基站信号补偿。

I2C设计要点:

  • 上拉电阻:SCL和SDA必须接上拉电阻,典型值4.7kΩ。如果总线电容大,可以换成2.2kΩ。
  • 地址冲突:I2C设备有7位地址。如果总线上挂了多个设备,注意不要冲突。

2.5 GPIO接口:控制模组的“命门”

GPIO虽然简单,但很重要。模组的几个关键控制引脚,都是靠GPIO来操作的:

引脚功能 说明 设计要点
PWRKEY 开机/关机 一般需要拉低一段时间(如1秒)才能开机。建议用开漏输出或三极管驱动。
RESET 硬件复位 低电平有效。复位时间至少100ms。注意不要和PWRKEY共用。
WAKEUP_IN 唤醒模组 模组休眠时,拉低此引脚可以唤醒。注意唤醒后要等模组准备好再发AT指令。
STATUS 模组状态指示 输出引脚,MCU可以读取来判断模组是否正常工作。

我曾经犯过一个低级错误:把PWRKEY直接接到了MCU的GPIO上,没加任何驱动。结果MCU上电瞬间,GPIO输出高电平,模组死活开不了机。后来加了个NPN三极管做反相驱动,问题解决。

核心原则:模组的控制引脚,尽量用三极管或MOS管隔离驱动。不要直接用MCU的GPIO去拉电流。模组的开机电流可能达到几十毫安,GPIO扛不住。

2.6 接口选型决策表

最后,我给你们整理了一个选型表。做项目时,对着这个表选接口,基本不会错:

应用场景 推荐接口 理由
AT指令控制 UART 简单、通用、调试方便
OTA固件升级 SPI 或 高速UART SPI速度快,UART实现简单
读取模组内部传感器 I2C 线少,适合读寄存器
低功耗休眠控制 GPIO 直接控制电源和唤醒
大数据量透传 UART + 流控 流控保证数据不丢

好了,这节课就到这里。接口选型说白了就是权衡——速度、复杂度、成本、稳定性,你得找到那个平衡点。下一节,咱们聊聊电源设计,那可是模组的“心脏”,搞不好会出大事。