4. 模块上电与启动流程

好,咱们直接切入正题。模块上电,听起来简单吧?插电就行。但做车载通信的兄弟都知道,这里头门道可不少。我见过太多开发板,上电时序没搞好,模块要么不启动,要么启动到一半就挂了。说白了,这就是个「先给谁喂电」的问题。

4.1 模块供电时序要求

车载无线通信模块,一般需要多路电源。比如主电源VCC、IO口电源VIO、还有内部PLL用的电源。这些电源谁先上、谁后上,是有严格要求的。

我个人的习惯是,先看芯片手册里的「Power Up Sequence」图。那图里一般会画几条线,标着t1、t2、t3。嗯,这里要注意:VCC必须先稳定,然后VIO才能上电。如果VIO先上电,模块内部的IO口可能会处于不确定状态,轻则漏电,重则烧坏。

警告: 千万不要让VIO比VCC早超过10ms上电。我在项目中遇到过,某次为了省一个MOS管,把VIO和VCC直接连在一起。结果模块偶尔启动失败,查了三天才发现是时序问题。

具体时序参数,我整理了一个表格,大家可以参考:

参数 最小值 典型值 最大值 说明
t1 (VCC上升时间) 100μs 500μs 1ms VCC从10%到90%的时间
t2 (VCC到VIO延迟) 0ms 5ms 10ms VCC稳定后VIO才能开始上升
t3 (VIO上升时间) 100μs 300μs 1ms VIO从10%到90%的时间
t4 (所有电源稳定到复位释放) 10ms 20ms 50ms 确保内部电路初始化完成

你想想看,如果VCC上升太慢,模块内部的POR(上电复位)电路可能误触发。我曾经遇到过,用了一个廉价的LDO,输出上升时间到了2ms,结果模块每次上电都复位两次。后来换了颗快一点的LDO,问题就解决了。

4.2 复位时序设计

复位,说白了就是让模块「从头再来」。但怎么复位、什么时候复位,这里头有讲究。

模块一般有两个复位引脚:一个是硬件复位(RESET_N),一个是软件复位(AT+CFUN=1,1)。硬件复位是硬拉,软件复位是发命令。我个人建议,硬件复位引脚一定要加一个上拉电阻,不然上电瞬间电平不确定,模块可能反复复位。

复位时序要注意几点:

  • 复位低电平持续时间:一般要求至少10ms。太短了,模块内部还没反应过来。
  • 复位释放后的等待时间:释放复位后,不要立刻发AT命令。等个500ms到1秒,让模块内部初始化完成。
  • 复位期间不要操作其他引脚:复位时,模块处于未知状态,这时候发数据可能会被误判。
小技巧: 我习惯在复位引脚上并联一个0.1μF的电容到地。这样能滤除噪声,防止误复位。另外,复位信号最好用开漏输出,不要用推挽输出。为什么?因为开漏输出可以兼容不同电平的模块。

我曾经在一个项目中,复位引脚直接连到了MCU的GPIO。结果MCU上电时GPIO电平不稳定,导致模块反复复位。后来加了一个RC延时电路,问题才解决。嗯,这里要注意,复位电路一定要可靠,不然调试起来很头疼。

4.3 启动日志分析

模块上电后,会通过串口输出一堆启动日志。这些日志,说白了就是模块的「体检报告」。我每次拿到一个新模块,第一件事就是接上串口,看启动日志。

启动日志一般包含以下信息:

  • 硬件版本:比如「HW Rev 2.0」,确认硬件版本对不对。
  • 固件版本:比如「FW v1.2.3」,确认固件是不是最新的。
  • IMEI号:模块的唯一标识,核对一下。
  • 网络状态:比如「Searching...」、「Registered」等。
  • 错误信息:比如「SIM not inserted」、「No network」等。

我给大家看一段典型的启动日志:

[BOOT] Power On Reset
[BOOT] HW Version: 2.0
[BOOT] FW Version: 1.2.3
[BOOT] IMEI: 123456789012345
[BOOT] SIM Status: SIM_READY
[BOOT] Network: Searching...
[BOOT] Network: Registered (LTE)
[BOOT] Ready

看到「Ready」了吗?这说明模块启动成功了。如果卡在某个地方,比如一直「Searching...」,那就要检查天线或者SIM卡了。

重点: 启动日志里如果出现「ERROR」或者「FAIL」字样,一定要重视。我遇到过,模块启动时打印「SIM PIN required」,结果是因为SIM卡开启了PIN码验证。发个AT+CPIN=1234就解决了。

你想想看,如果启动日志里没有「Ready」,那后面的AT命令肯定发不出去。所以,一定要等模块输出「Ready」后,再开始发AT命令。不然你发一百条,它一条都不回。

4.4 AT命令初始化流程

模块启动后,我们要通过AT命令来配置它。这个流程,我称之为「初始化三部曲」。

第一步:检查模块状态

先发一个AT,看看模块回不回「OK」。如果回,说明模块活着。如果不回,检查串口配置和硬件连接。

AT
OK

第二步:配置基本参数

比如关闭回显、设置波特率、设置APN等。我习惯先关回显,不然调试时看着乱。

ATE0
OK
AT+IPR=115200
OK
AT+CGDCONT=1,"IP","CMNET"
OK

第三步:注册网络

发AT+CREG? 查看网络注册状态。如果返回「+CREG: 0,1」,说明注册上了。如果返回「+CREG: 0,2」,说明正在搜索。如果返回「+CREG: 0,3」,说明注册被拒。嗯,这里要注意,注册被拒可能是SIM卡问题或者网络问题

AT+CREG?
+CREG: 0,1
OK
我的习惯: 初始化流程里,我会加一个超时机制。比如发AT+CREG? 后,如果5秒内没收到OK,就重试。重试3次还不行,就报错。这样能避免程序卡死。

我曾经在一个项目中,模块初始化时总是卡在「AT+CREG?」这一步。查了半天,发现是SIM卡接触不良。后来在SIM卡座上加了一个弹簧片,问题就解决了。所以,硬件问题往往比软件问题更隐蔽

好了,模块上电与启动流程就讲到这里。下一章,咱们聊聊AT命令的详细用法。记住,上电时序、复位设计、日志分析、初始化流程,这四个环节环环相扣,一个都不能少。