第一章 课程导学与硬件准备

各位同学好,我是你们这门课的老周。做嵌入式Linux工控网关这块,我摸爬滚打了十几年。今天咱们开始第一讲,先把地基打牢。

很多人学工控网关,上来就啃芯片手册、刷系统,结果硬件选型就选错了,后面全白搭。这一章,咱们把CAN总线基础、硬件选型、开发板开箱启动一次讲透。

1.1 CAN总线基础概念

CAN总线,全称Controller Area Network。说白了,就是让多个设备在一条两根线的总线上互相通信。汽车、机器人、工厂设备里到处都是它。

为什么工控领域离不开CAN?我给大家拆解几个核心特点:

特性 说明 我的经验
多主通信 任何节点都能主动发数据,不分主从 调试时经常两个节点同时发,总线仲裁自动搞定优先级
差分信号 CAN_H和CAN_L两根线,抗干扰强 工厂电机一启动,RS485经常丢包,CAN稳得很
实时性高 优先级高的报文,延迟可控制在微秒级 做伺服驱动器控制时,这个特性救过我的命
错误检测 CRC校验+自动重发,误码率极低 曾经有个项目线缆被老鼠咬了一半,CAN居然还能跑

核心知识点:CAN总线物理层就是一对双绞线,波特率最高1Mbps。标准帧11位ID,扩展帧29位ID。工控场景下,大部分设备用标准帧就够了。

嗯,这里要注意。CAN总线虽然只有两根线,但终端电阻必须加。120欧姆,一个在总线最左端,一个在最右端。我见过太多新手,没加终端电阻,通信时好时坏,查了半天。

1.2 工控网关硬件选型

选型这件事,我吃过不少亏。2016年有个项目,选了某款M3内核的芯片做网关,结果CAN总线数据量一大,CPU就卡死。后来换了IMX6ULL,问题全解决了。

咱们课程聚焦两款主流芯片:NXP IMX6ULL 和 ST STM32MP157。为什么选它们?

对比项 IMX6ULL STM32MP157
架构 单核ARM Cortex-A7 双核:Cortex-A7 + Cortex-M4
主频 800MHz 650MHz (A7) + 209MHz (M4)
CAN接口 2路FlexCAN 2路FDCAN
Linux支持 非常成熟,资料多 官方维护,但社区资源少一些
典型功耗 约1.2W 约1.5W
价格 相对便宜 稍贵

我的建议:如果你主要做纯Linux网关,选IMX6ULL,资料多、坑少。如果你需要实时控制(比如电机控制),选STM32MP157,M4核跑裸机或RTOS,A7核跑Linux,分工明确。

我个人习惯,选型时先看CAN接口数量。工控网关至少需要2路CAN,一路接设备,一路接上位机或者冗余。这两款芯片都满足。

1.3 开发板开箱与启动

好,假设你已经拿到了开发板。咱们以IMX6ULL为例,走一遍开箱启动流程。

开箱第一步,别急着上电。先检查板子上的跳线帽和拨码开关。我遇到过有人把启动模式拨到了SD卡,结果插着USB线怎么都烧不进系统,折腾了两小时。

标准启动流程如下:

  1. 连接电源:5V/2A DC电源,或者Micro USB供电。注意电流要够,1A的电源带不动。
  2. 连接串口:用USB转TTL线,接开发板的UART1。波特率115200,8N1。
  3. 连接网线:开发板网口连路由器或电脑,用于NFS挂载和SSH登录。
  4. 上电:按下电源键,观察串口输出。

串口输出如果正常,你会看到类似这样的启动信息:

U-Boot 2020.04 (Jan 10 2024 - 15:30:00 +0800)

CPU:   Freescale i.MX6ULL rev1.1 at 792 MHz
Board: MY-IMX6ULL-14x14
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Net:   FEC1

Hit any key to stop autoboot:  0

看到这个,说明U-Boot已经跑起来了。接下来它会自动加载内核,挂载根文件系统。如果一切顺利,你会进入Linux命令行,出现登录提示符。

避坑指南:我曾经在调试一块板子时,串口一直没输出。检查了所有接线,最后发现是USB转TTL模块的TX和RX接反了。记住:TX接RX,RX接TX,GND接GND。这个低级错误,我犯过一次就再也没忘。

进入系统后,第一件事就是检查CAN接口是否正常:

# 查看CAN设备
ls /dev/ | grep can
# 应该看到 can0 或 can1

# 查看CAN接口状态
ip link show can0

# 设置波特率并启动
ip link set can0 type can bitrate 500000
ip link set can0 up

如果执行完这些命令没有报错,恭喜你,CAN硬件已经就绪了。

1.4 本章知识体系

我把这一章的核心逻辑画成了图,方便你理解整体脉络:

第一章知识体系图 第一章 课程导学与硬件准备 - 知识体系 CAN总线基础 硬件选型对比 开发板启动 多主通信 差分信号 实时性高 错误检测 IMX6ULL STM32MP157 CAN接口数量 功耗与价格 上电检查 串口输出 U-Boot启动 CAN接口验证 核心目标:掌握CAN总线原理,选对硬件,成功启动开发板并验证CAN接口 为后续章节的Linux驱动开发、数据采集应用打下坚实基础

本章小结:CAN总线是工控网关的“神经系统”,选对硬件是项目成功的一半。IMX6ULL和STM32MP157各有优势,根据你的场景选。开发板启动看似简单,但串口接线、电源电流、启动模式这些细节,一个不注意就卡半天。

好了,第一讲就到这里。记住我今天说的几个坑,后面咱们开始动手写驱动、搭应用。工控这东西,动手才是硬道理。