ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

T-Box车联网终端硬件与软件设计:从CAN总线到MQTT云链路全解析

T-Box车联网终端硬件与软件设计:从CAN总线到MQTT云链路全解析 先说结论如果你在汽车电子或者物联网行业待过T-Box这个名字一定不陌生。它装在车内某个隐蔽位置整车厂和云端平台的数据交互基本都靠它。很多人管它叫车联网的“黑匣子”因为它平时不吭声但车辆位置、电池电压、CAN总线报文、远程控制指令全都从它这里过。这篇文章我会把它从硬件到软件完整拆开从4G通信模块、MCU主控、电源管理到MQTT链路、时间戳、日志存储一条线讲清楚。全部技术细节会以拆解实际项目的角度展开覆盖器件选型、电路配置、AT指令交互、数据结构设计、日志与掉电保护策略。适合正在做车联网终端、T-Box、远程通信网关的工程师也适合物联网方向的嵌入式开发者。看完你可以直接把里面的电路思路和代码流程落到自己的项目里。T-Box这个设备价值和坑都在“细节”里尤其是MCU与4G模块之间的协作方式。下面的内容我会按硬件到软件的顺序把我踩过的坑、验证过的方案、改过的电路都摊开讲。1. 认识T-Box车联网“黑匣子”到底拆开是什么1.1 T-Box到底是什么为什么叫黑匣子T-Box全称Telematics Box中文一般叫远程信息处理终端。它的核心工作就三件事采集车辆数据、上传云端、接收并执行远程指令。比如手机App上查看车辆位置、远程开空调、远程锁车、呼叫救援背后都是T-Box在工作。为什么叫“黑匣子”呢因为它在车里几乎不显眼不承担娱乐、导航这类人机交互功能但又全天候在工作车辆状态的关键数据都会经过它、记录在它内部。一旦车辆发生异常或者需要溯源T-Box里的日志、时序、事件记录就是最直接的依据。和飞机上的黑匣子类似平时没人注意关键时刻缺它不行。从系统架构看T-Box处在“整车CAN网络”和“云端平台”的交界处。整车这边发动机、车灯、车窗、车门、电池管理系统都在CAN总线上云端那边通过4G网络对接车企的TSP平台车联网服务平台。所以它本质上是一个通信网关把整车的数据协议翻译成云端的网络协议再把云端的指令翻译回整车的CAN信号。1.2 硬件组成与功能模块划分T-Box内部大致可以分成六个功能单元功能模块核心器件职责主控单元MCU如STM32、NXP S32K、瑞萨RH850协议转换、状态管理、数据缓存通信单元4G模块如移远EC25、广和通L610网络注册、TCP/TLS/MQTT链路、与云端收发数据接入单元CAN收发器如TJA1043与整车CAN总线交互接收和发送报文定位单元GPS/北斗模块如移远L76K获取车辆定位信息和UTC时间电源单元DCDC、LDO、PMOS开关从车载12V/24V电源转换出多路电压支持低功耗休眠储存单元内部Flash、外部NOR Flash固件存储、参数存储、日志存储、离线数据缓存其中“主控MCU 4G模块”是T-Box最核心的数字链路也是大多数开发者最早接触T-Box时的主要学习路径。先把这个链路吃透后面的CAN接入和电源管理就顺理成章了。2. 核心硬件选型与电路设计要点2.1 4G模块选型与外围电路设计4G模块是T-Box连接云端的大门。市面主流选择有移远EC25、广和通L610、芯讯通SIM7600等。选型时不能光看“能不能上网”要结合T-Box的实际场景车辆在行驶过程中会持续上报位置和状态也会接收远程控制指令数据流量不大但实时性要求高另外还要考虑模块进入低功耗模式的深度和唤醒时间。我自己的习惯是优先选支持标准AT指令集、带内置MQTT协议栈或支持TCP/IP协议栈的模块这样MCU侧只需通过串口发送AT指令不需要自己移植复杂的网络协议栈开发效率高很多。以移远EC25为例外围电路重点看这几处主供电VBAT必须在模块天线发射瞬间提供足够的峰值电流尤其GSM频段瞬间电流可能超过2A建议用一个1000uF以上的电解电容并联多个100nF陶瓷电容靠近模块电源脚放置。开机时序PWRKEY引脚需要拉低500毫秒以上再释放模块会完成内部上电初始化然后通过串口输出上电日志或就绪提示。SIM卡电路USIM_VCC、USIM_DATA、USIM_CLK、USIM_RST加上ESD保护器件走线尽量短避免信号边沿劣化导致SIM卡不识卡。天线接口主天线和分集天线位置要避开金属遮挡天线走线需要50Ω阻抗控制。很多人第一次调T-Box会卡在“模块供电正常但无法注网”这个环节我遇到过一例原因是VBAT处的电容容量不够模块在发射时电压跌落太多导致掉网。排查方法很简单用示波器测模块VBAT引脚电压波形如果发射瞬间掉到3.4V以下就要加大储能电容或者换用更大电流输出能力的DCDC。2.2 MCU主控选型与电源开关电路MCU在T-Box里承担的是“交通警察”的角色所有数据的进出都要经过它调度。可选方案很多传统经典的是STM32F105/F407现在国产替代需求越来越大国民技术N32系列、GD32、极海等也有Pin-to-Pin兼容或相近的系列。主控选型的核心指标我总结为三个CAN接口数量、Flash和RAM容量、低功耗表现。T-Box一般至少需要一路CAN与整车通信如果要做网关桥接需要两路以上。Flash大小决定了固件和日志存储能力RAM大小决定了数据缓存能力。低功耗表现则直接关系到车辆长时间停放时的蓄电池消耗。电源开关方面这里说一个很多新手会踩坑的点用PMOS做外设电源开关。比如4G模块、定位模块这些大电流外设不能一直供电否则待机功耗扛不住所以主控MCU会通过一个PMOS管控制它们的电源通断。电路配置通常长这样MCU的GPIO引脚接一个NPN三极管或N-MOS管再去控制PMOS的栅极。PMOS源极接系统供电漏极接外设电源输入。在PMOS栅源之间加一个10kΩ~100kΩ电阻保证上电时栅极被拉高、PMOS默认关断。需要开启外设时GPIO输出高电平三极管导通PMOS栅极被拉低PMOS导通。这里最容易犯的错是选错PMOS型号只关注最大电流而忽略栅源电压Vgs。如果MCU供电是3.3VPMOS的Vgs(th)阈值选得太高可能根本没法完全导通外设供电不足运行不稳定。实测下来低电压应用选Vgs(th)在-0.5V到-1V之间的PMOS比较稳妥同时关注导通电阻Rds(on)在额定电流下压降要低于0.2V。2.3 CAN收发器与总线保护电路T-Box要接入整车CAN网络就必须有CAN收发器。经典型号是TJA1043、TJA1044、TJA1051。TJA1043支持低功耗待机和CAN唤醒非常适合T-Box这类需要休眠唤的场景我一般首发就是它。CAN收发器外围看似简单两个关键点别忽略。一个是总线端要接120Ω终端电阻如果总线上其他节点已经有终端电阻T-Box这边再并联会导致等效阻抗变成60Ω通信反而出问题所以建议通过跳线或配置位让120Ω可以接入也可以断开。另一个是总线和电源入口要做ESD防护典型做法是加TVS管和共模电感防止整车连接器抛负载时的浪涌损坏通信芯片。3. MCU角色拆解从协议转换到状态管理3.1 协议转换与数据采集链路T-Box上电后MCU的逻辑非常明确周期采集CAN数据、解析成业务信号、打包发送给4G模块、由模块走MQTT上云同时监听云端下发的指令解析后通过CAN发送给整车执行。这里MCU最核心的能力是处理CAN报文。CAN报文本质上就是一串十六进制数据比如“18FF50E1”这个ID下面挂了8个字节哪几个字节代表发动机转速、哪几个字节代表冷却液温度需要由DBC文件CAN数据库文件来定义。MCU根据DBC解析这些原始字节转化成实际物理值再组包上报。实际开发中我建议把CAN解析层和业务层在代码架构上分开。比如建一个can_parser模块输入是CAN ID和数据场输出是结构体变量里面是解析好的车速、转速、档位等信号。这样无论后续更换DBC还是增加新信号只需要修改parser不会影响上报逻辑。3.2 双MCU协作与低功耗状态机T-Box的系统设计师经常会讨论一个问题到底用单MCU还是双MCU方案单MCU方案成本低、代码统一但功能安全等级不好做。因为4G模块的协议栈、数据上报逻辑、CAN处理逻辑如果都在同一个MCU上跑一旦主控死机或者程序卡死整个T-Box就“哑了”。而双MCU方案里一颗主MCU负责业务逻辑和通信另一颗辅助MCU负责电源管理、看门狗监控、休眠唤醒控制两颗MCU互相监控可靠性高很多。这也是为什么车规级T-Box普遍采用双MCU方案。低功耗状态机是MCU侧的重头戏。我常用的状态划分是四态正常运行态、准待机态、休眠态、唤醒过渡态。在准待机态关闭4G模块、定位模块这些大功耗外设只保留MCU和CAN收发器的唤醒监听功能持续一段时间没有事件进入休眠态休眠电流目标做到3mA以下整车点火信号或者CAN总线活动可以唤醒MCU然后重新进入正常运行态。这里有一个实测重点从休眠态唤醒重新开启4G模块后不要立刻发数据先等模块注册网络并建立MQTT连接整个过程可能耗时3到10秒。如果唤醒后立刻发数据模块还没来得及联网数据就丢了。3.3 标定与调试接口设计“MCU标定”这个词在汽车电子领域经常出现通俗讲就是不用重新编译烧录固件直接通过某种调试通道修改变量参数。T-Box里的应用场景很典型不同车型的超时报时、CAN报文周期、上送策略都可能不同如果每次改一个参数都重新烧录现场开发和售后排查会非常痛苦。常用做法是划分一片Flash专门存标定参数通过CAN或者串口提供读写接口。配合一个简单的上位机就能实时读取TCU相关阈值、修改上报周期。开发调试阶段我习惯在固件里加一个调试串口输出MCU状态切换、CAN收发统计、4G模块AT指令回显日志。T-Box不像普通开发板有屏幕可以看状态调试串口就是工程师的眼睛。4. 4G模块与云端联调MQTT链路走通全流程4.1 从AT指令到网络注册4G模块的启动流程我相信做过物联网的同学都熟悉但T-Box场景有几个细节跟设备端不一样。车辆可能有长时间停放、信号不稳定、跨区域漫游等条件所以初始化流程要设计得足够健壮。标准的AT指令序列大致如下ATE0 # 关闭回声 ATCPIN? # 查询SIM卡是否就绪返回READY才是正常 ATCSQ # 查询信号质量返回如CSQ: 25,99第一项越大越好 ATCREG? # 查询网络注册状态0,1或0,5才正常 ATCGATT? # 查询PS域附着状态返回1为已附着 ATCIMI # 获取IMSI确认SIM卡身份有些模块会建议先ATCFUN1设置全功能模式再ATCGDCONT1,IP,APN设置运营商接入点。APN一般由运营商决定T-Box项目里通常是车联网专用APN需要和运营商确认。调试器的编码建议写成状态机避免用固定延时死等。比如模块上电后每秒查询一次CPIN和CREG超时条件设为30到60秒。车辆从地库开出时信号恢复慢如果超时太短会导致误判模块异常太长了又会耽误正常流程。4.2 MQTT连接与数据上报T-Box与云端通信目前的主流协议是MQTT原因很直接MQTT是发布/订阅模型支持设备离线消息、QoS服务质量、长连接保活非常适合车联网这种低带宽、弱网环境。如果4G模块固件内置了MQTT协议栈那MCU侧只需要发送一组AT指令即可完成连接。以移远EC25为例流程是ATQMTOPEN0,你的mqtt服务器地址,1883 ATQMTCONN0,clientId,用户名,密码 ATQMTPUB0,0,0,0,/topic/vehicle/status,{\speed\:30,\engine\:1} ATQMTSUB0,0,/topic/vehicle/cmd,0主控MCU与4G模块之间通常用串口UART通信。STM32侧发送这些AT指令后需要逐条解析模块返回的“OK”或者“QMTOPEN: 0,0”这类响应不能盲目往下执行。我的建议是把AT指令封装成函数每个函数带超时等待和错误处理参数全部做日志输出。MQTT参数设计有几个值得注意的点客户端ID必须全局唯一云端一般用它做设备识别。常用格式是“产品Key_设备唯一标识”。心跳KeepAlive建议设置在60到120秒之间。太短会增加模块功耗和流量太长会导致云端误判设备在线状态不及时。QoS级别建议上报用1保证至少一次送达避免关键状态丢失但也要配合去重机制因为QoS1存在重复投递的可能。4.3 上云平台对接以阿里云物联网平台为例说到车联网平台对接阿里云物联网平台在国内很多T-Box项目中被采用。设备端核心要搞定三件事设备身份认证、Topic订阅发布、物模型数据格式。设备身份认证用的是“一机一密”即每个设备在平台上注册后生成三元组ProductKey、DeviceName、DeviceSecret。设备连接时用这三元组计算签名参数发送给平台完成认证。T-Box的量产环节中三元组一般提前烧录进MCU的Flash或安全芯片中每台车都不一样。Topic通常定义为属性上报/sys/{productKey}/{deviceName}/thing/event/property/post指令下发/sys/{productKey}/{deviceName}/thing/service/property/set物联网平台在云端已经定义了一套标准化物模型接口设备端的JSON数据只要按平台格式封装就能自动映射到业务系统里。T-Box上报车辆状态时我习惯在JSON里带上经纬度、卫星数、车速、电量、点火状态等字段对齐平台的物模型定义避免字段名不一致导致平台解析失败。5. 关键数据链路设计时间戳、日志与存储5.1 时间同步与时间戳机制T-Box的重要职责之一是记录事件发生的准确时间。比如远程开锁指令是哪一秒下发的、碰撞信号是哪一秒上报的这些都要在日志里留有时间戳。MCU本身没有绝对时间概念它只能提供相对时间想要得到标准UTC时间必须外接时间源。常见方案有三种GPS/北斗模块解析出的UTC时间在定位成功时精度很高但地下车库或隧道内无定位信号时无法获取。4G基站时间模块注网后可通过AT指令查询系统时间精度取决于运营商网络配置。NTP时间同步设备连接云端后通过NTP服务器同步时间精度可以达到毫秒级但依赖网络链路。我的实际做法是“多源融合主从仲裁”以GPS时间为优先源GPS无效时用模块基站时间再不行就退回上次保存到RTC里的时间。每次云端下发数据也可以携带服务器时间设备端收到后如果发现本地时间偏差超过阈值就主动校准。PPS秒脉冲Pulse Per Second是提升时间精度的关键。很多定位模块会引出一根PPS引脚每秒输出一个精确的下降沿。把PPS接到MCU的外部中断引脚在PPS到来的瞬间打上当前系统计数器的值就能把时间戳精度做到毫秒甚至微秒级。对于需要做车辆轨迹回放、事件时序分析的项目这个精度很有必要。MCU内部计时常用一个32位或者64位计数器在STM32上就是SysTick或者TIM定时器。要特别留意溢出问题32位计数器在主频较高的情况下可能会在几十秒内溢出必须用软件进行扩展否则时间戳会周期性跳变排查起来非常痛苦。我踩过一次这个坑现象是日志里时间戳每隔一段时间突然倒回零后来才发现是计数器溢出没有做进位扩展。5.2 MCU内部Flash日志存储与接口访问T-Box要记录日志但车里没有硬盘MCU的内部Flash空间也有限所以日志存储是嵌入式工程师绕不开的一个话题。这里先回答一个很多初学者会问的问题MCU内部的Flash是用什么接口访问的绝大多数MCU的内部Flash不是通过SPI或I2C这类外设接口访问的而是直接挂在芯片内部的总线上。以STM32为例内部Flash挂在AHB总线上CPU可以直接用指针读取Flash内容写入则需要通过Flash控制器操作一系列寄存器比如FLASH_KEYR解锁、FLASH_SR查询状态、FLASH_CR触发编程等。外部扩展的NOR Flash则通常通过SPI/QSPI接口访问用FM25Q、W25Q这类芯片。存储位置访问接口读取方式写入方式MCU内部FlashAHB总线/Flash控制器指针直接读取按页擦除后编程外部NOR FlashSPI/QSPI发读指令读取发写使能后编程MCU内部EEPROMI2C/模拟I2C字节读取字节写入有寿命限制内部Flash有个硬约束编程前必须擦除而擦除以页或扇区为单位。数据库中一个日志记录可能只有几十字节但一页Flash可能是2KB到4KB这意味着日志存储不能每写一条就做一次擦除写操作否则Flash寿命很快就耗尽了。所以我一般会在Flash里做环形日志缓冲区逻辑上把Flash分区成多个扇区写完一个扇区就切到下一个满一轮后从最老的扇区开始覆盖。每次写日志只追加写入当前扇区连续地址只有扇区尾部不足时才对该扇区做擦除。这样磨损均衡Flash寿命会长很多。// Flash日志写入伪代码示意 bool flash_log_append(const uint8_t *buf, uint16_t len) { if (current_sector_remaining len) { flash_erase(current_sector); current_sector_offset 0; current_sector_remaining SECTOR_SIZE; } flash_program(current_sector_addr current_sector_offset, buf, len); current_sector_offset len; current_sector_remaining - len; return true; }5.3 离线缓存与断点续传策略4G网络不像家里WiFi那么稳定车辆过隧道、进地库时网络中断很常见。如果T-Box只在每次事件发生时实时上报网络断开期间的数据就全部丢失了。所以成熟的T-Box必做离线缓存与断点续传。我的设计思路是MCU上报数据时先写本地缓存等云端确认收到后再删除缓存记录。缓存数据结构里至少要包含自增序号、时间戳、数据类型、数据体长度、数据体、CRC校验。自增序号用于云端去重时间戳用于补齐上传间隙的时间线CRC校验用于防止Flash中的数据被异常改写。断点续传的触发条件是网络链路恢复。T-Box建立MQTT连接成功后先检查本地缓存队列如果有未上报数据按照时间顺序逐条补报。补报频率可以设高一点快速“清积压”但注意不要一次发太多把信道堵塞。我一般限制每次重连后最多连续补报100条之后进入正常周期上报模式。掉电保护是缓存设计里最容易被忽略的一环。车辆电瓶突然断电、车主拔线维修这些情况T-Box都拦不住但缓存数据不能因此丢太多。可靠做法是写缓存时先写完整数据到临时扇区再更新索引区。上电启动时如果发现索引区记录不完整就回滚到上一个完整快照。虽然极端情况下会丢最后一条数据但至少不会导致整个缓存链损坏。6. 常见问题与排查技巧实录6.1 4G模块无法注网或频繁掉线现象ATCREG?始终返回0,2或0,3信号强度CSQ又低又波动强烈甚至偶发PDP DEACT。排查步骤先用示波器测模块VBAT电压波形排除供电瞬间跌落。确认天线连接完好天线位置是否被金属罩遮挡。确认SIM卡是否开通物联网卡专用APN部分APN需要设备端主动设置。检查模块的省电模式设置有些模块默认开了PSM省电模式长时间没有数据通信时会自动退网需要关闭PSM或者配置合适的心跳周期。经验技巧在仪表板测试阶段用外置天线直连模块的IPEX座可以快速区分是模块本身问题还是车载天线安装问题。整车环境中天线增益不够导致的注网困难比模块本身故障多得多。6.2 时间戳突然跳变现象日志里时间戳出现“倒退”或者“跳到2099年”这种怪值。常见原因32位计数器溢出未处理。RTC后备电池掉电导致时间归零。GPS定位模块输出异常UTC时间设备端没有做范围校验。NTP同步握手过程中解析到错误的分包数据。解决思路时间戳必须做上下限校验比如2020年到2100年之外的数值直接丢弃以当前保持时间为准。GPS时间接收后要和当前时间比较跳变超过5分钟才允许更新否则认为数据异常。6.3 MCU死机与看门狗策略T-Box最怕的不是功能跑不出来而是跑着跑着死机没人发现车辆远程控制失效。看门狗Watchdog是最基础的保障但很多项目的看门狗形同虚设。一个错误示范是主循环里无条件喂狗哪怕某个任务卡死了只要主循环还能跑喂狗就正常看门狗永远不触发。正确做法是把喂狗逻辑拆成多任务检查点CAN接收任务每100ms检查一次接收计数是否增长MQTT发送任务每500ms检查一次发送队列是否耗尽所有检查点都正常才喂狗。这样任何一个核心任务卡死看门狗都会在几秒内复位系统。T-Box项目里我通常同时启用独立看门狗IWDG和窗口看门狗WWDG前者防死循环、后者防喂得过超前两个一起用复位机制才完整。6.4 云端显示设备离线但设备端网络正常现象设备端AT指令查询CREG正常、MQTT连接看似建立但云端后台显示离线。这种情况九成是MQTT心跳保活问题。设备端设置的KeepAlive时间太长或者业务线程阻塞导致PINGREQ报文没有按时发出云端在KeepAlive超时后主动断开了连接但设备端没有及时感知造成“半死连接”。排查方法抓串口日志看模块是否周期性发送MQTT PINGREQ或者用抓包工具看链路层数据。修复方案是开启模块的“TCP/UDP关闭通知”URC上报云端断链时模块会主动上报QIURC: 0,0MCU收到后立即重新连接而不是等到下次上报才发现链路断了。6.5 日志数据丢失排查方向主要是Flash擦写和掉电逻辑。确认擦写是否按扇区边界对齐是否需要每次写前先解锁Flash。确认写入缓冲是否被意外覆盖是否因为任务优先级导致写日志时被高优先级中断打断。掉电场景下是否用了双存储区回滚还是只写了数据区没更新索引区。问题可能原因排查手段解决建议无法注网供电跌落/天线异常示波器测VBAT、检查天线接口加大储能电容、优先排除天线遮挡时间戳跳变计数溢出/RTC掉电打印原始计数器值和时间源扩展计数器、加时间有效性校验MCU死机无人知看门狗无效检查喂狗代码、任务检查点改为多检查点喂狗、启用IWDGWWDG云端显示离线MQTT半死连接抓URC上报、检查心跳PINGREQ开启断链URC通知、缩短KeepAlive日志丢失Flash擦写掉电损坏检查索引和数据区一致性双区回滚、掉电前先更新索引7. 延伸思考国产替代与AI辅助开发7.1 国产MCU替代STM32的注意点这两年供应链波动让“国产化替代”成了热词国民技术N32系列、GD32、极海等都在做Pin-to-Pin兼容STM32的产品。表面上看引脚排列一致、外设功能相近但千万别抱着“换芯片重新编译就能跑”的心态去照搬。记住三点差异。第一内部Flash地址空间和页大小可能与STM32不同如果有直接操作Flash地址的代码必须重新核对。第二部分国产系列的系统时钟树配置和中断优先级设计也不一样直接沿用STM32的初始化代码可能导致时钟频率不对或者中断进不去。第三车规认证方面不同型号的AEC-Q100等级和应用温度范围要逐一确认T-Box是装在车上的-40℃到85℃甚至105℃的宽温需求必须覆盖。我的建议是如果要换国产MCU先花一个迭代周期跑通最小系统时钟、UART、CAN、Flash读写、低功耗唤醒这五件事全部验证通过后再评估量产切换。7.2 AI辅助MCU编程的实际使用感受最近AI辅助编程很热很多朋友问我MCU开发能不能用。我的经验是可以而且效率提升明显但要用对场景。AI最擅长的是生成初始化代码、写标准外设驱动模板、解析数据帧的逻辑。比如让AI按寄存器手册写一个UART DMA接收环形缓冲区的实现几分钟就能得到可编译代码。但AI不擅长的是处理具体硬件平台的非标准特性、异常时序和复杂的业务状态机。T-Box这种涉及多模块交互、时序强耦合的项目AI生成代码只能当“初稿”用关键逻辑必须人工逐行审查。我自己的流程是先用AI快速搭好代码骨架然后针对CAN解析层、MQTT数据封装层这些业务核心做手工重写和加固最后用debug串口做长时间运行验证。AI帮我省掉大量重复劳动但它替代不了对系统整体运行节奏的理解。实际上T-Box这类设备开发到最后核心竞争力还是在于对数据链路的掌控能力。谁能把CAN报文解析得准、把MQTT链路维持得稳、把日志存得可靠谁就能在实车调试时少熬夜。根据我的经验做T-Box跟做普通物联网设备最大的区别是普通物联网设备可以随时重启、坏了就换但T-Box装进车里以后你大概率不会有机会频繁回车里去拔线调试。所以设备端的自恢复能力、日志记录能力、远程调试通道从一开始就要当核心功能来设计不能当成“锦上添花”。如果看完这篇文章你打算上手做一个T-Box原型我的建议是先别碰CAN和整车协议拿一块MCU开发板加一个4G模块先把MQTT上报链路跑通再去接CAN收发器和真正的车辆网络。链路通了剩下的都是工程细节。
返回列表