【项目思维】这是一份嵌入式软件开发的大纲(简化版)
这是一份嵌入式软件开发的大纲(简化版),当然,如果你想要在这个专业上更进一步,目前的技术栈是远远不够的,项目我也仅仅介绍了项目运作的思维模型。后续如果大家需要,我会继续写下去,运用日常手搓的小项目和真实的大型项目 向您介绍项目开发的完整流程。
首先,我们要掌握基本的C语言语法:
因为嵌入式开发一般是跑在Linux系统上的,所以我们需要学习 Linux 的用法:
然后,我们开始进入单片机,需要理解单片机的大体框架(单片机都有哪些):
我们最常见的一些单片机(GD32,ESP32,STM32…),我们需要深入到单片机的内部:
因为 XMIND 绘图空间有限,仅仅写了一点问答示意,实际的技术问答非常多,在面试中会逐一遇到这些内容,所以单片机的外设部分一定要精通。
然后我们进入Linux驱动 / 理解Linux内核,推荐书籍:
《深入理解Linux内核》作者:DANIEL P.BOVET & MARCO CESATI 著 —— 中国电力出版社
此处的内容写的非常简化,其中还有更多的技术内容,您可以在书的目录上找到更多分支章节。
🧭 一、嵌入式系统的分类
✅ ① MCU(微控制器)
MCU = Microcontroller Unit,适用于实时控制、低功耗场景。
📌 按位数分类:
位数 | 代表架构 | 典型芯片 | 特点 |
---|---|---|---|
8位 | 8051 | C51 | 架构简单,资源极少,学习入门 |
16位 | STC89、STC15 | STC 系列 | C51升级版,性能略高 |
32位 | ARM Cortex-M | STM32、GD32、ESP32 | 主流嵌入式开发平台 |
✅ ② MPU(嵌入式 Linux)
MPU = MicroProcessor Unit,通常运行 Linux / Android 等操作系统,适合图形界面、网络通信、AI 等。
📌 常见 MPU 芯片:
平台 | 芯片 | 厂商 | 特点 |
---|---|---|---|
STM32MP1 | STM32MP157 | ST | 支持 Linux + Cortex-M 协处理 |
RK 系列 | RK3566、RK3588 | 瑞芯微 | 多媒体强、NPU支持 |
MTK 平台 | MT6765 等 | 联发科(MTK) | 多用于手机/IoT |
全志平台 | V3S、A133 | 全志科技 | 廉价、高性价比 |
海思平台 | Hi3516、Hi3559 | 华为海思 | 安防/摄像头方案用得多 |
✅ ③ DSP(数字信号处理器)
专门用于高速信号处理、音频/图像/雷达等领域。
厂商 | 典型芯片 | 应用场景 |
---|---|---|
TI | C6000/C2000 | 电机控制、雷达信号处理 |
ADI | SHARC | 音频、滤波处理 |
✅ ④ FPGA(现场可编程逻辑门阵列)
用于硬件级并行逻辑控制,可实现软硬件协同或完全自定义逻辑。
厂商 | 典型芯片 |
---|---|
Xilinx | Spartan、Zynq |
Intel (Altera) | Cyclone、MAX |
二、总览:单片机内容知识树结构
我将单片机的知识树系统整理如下五大板块:
模块 | 说明 |
---|---|
① 初级外设 | 基础硬件控制,适合入门:GPIO、UART、ADC、PWM 等 |
② 高级外设 | 用于图像/存储/通信等复杂系统:CAN、SDIO、DCMI 等 |
③ 操作系统 | 基于 MCU 的 RTOS:FreeRTOS、RT-Thread 等 |
④ 外设总线 | (板级) 各种总线协议对应的典型外设使用 |
⑤ 板间通信 | 多板卡/模块间通信方式:USB、485、WIFI、蓝牙等 |
📦 ① 初级外设(基础控制类)
编号 | 模块 | 说明 |
---|---|---|
1 | 开发环境 | Keil、VSCode + 插件、PlatformIO |
2 | GPIO 控制 | 高低电平输出、LED、按键输入等 |
3 | 时钟树 | SYSCLK、APB1CLK、APB2CLK 配置,影响外设速度 |
4 | 中断控制器 | NVIC 配置,外部中断、优先级管理 |
5 | 定时器 / PWM | 定时触发、中断 / 控制舵机、LED 呼吸灯 |
6 | ADC | 模拟量采集(电压、光敏、温度) |
7 | DMA | 内存外设之间高速搬运 |
8 | UART | 串口通信,串口调试、打印日志 |
9 | I2C | EEPROM、OLED、RTC、音频芯片 |
10 | SPI | Flash、OLED、SD 卡等高速外设通信 |
🧩 ② 高级外设(复杂接口类)
外设 | 用途 | 说明 |
---|---|---|
SDIO 协议 | SD卡高速接口 | 比 SPI 快,需文件系统支持 |
DCMI | 摄像头图像采集 | STM32F4+ 常见,图像识别 |
FSMC | 与并口 TFT 屏接口 | 外部存储器控制器 |
CAN 总线 | 工业通信 | 车载、工业自动化广泛使用 |
RS-485 | 长距离通信 | 差分信号、抗干扰强 |
WIFI/蓝牙 | 无线通信 | ESP32 内置,STM32 需外挂模块 |
🧩 ③ 操作系统支持(RTOS)
系统 | 特点 | 适合芯片 |
---|---|---|
FreeRTOS | 轻量级、跨平台、工业应用广泛 | STM32、ESP32、GD32 |
RT-Thread | 国产 RTOS,图形化配置,组件丰富 | STM32、GD32、RISC-V |
ESP-IDF | 乐鑫官方开发框架,内置 RTOS | ESP32 专用 |
📌 单片机操作系统支持 学习重点:
- 任务调度(优先级、抢占)
- 互斥锁 / 信号量 / 队列 …
- 软件定时器
- 系统 SysTick 和节拍精度
🔌 ④ 外设总线(板级接口 + 模块接入)
接口 | 对应模块 | 技术要点 |
---|---|---|
GPIO | 红外、人体感应 | 数字电平检测 |
单总线 | DHT11 温湿度 | 单线协议,需时序控制 |
UART | WIFI(ESP8266),4G,GPS | 串口通信 |
I2C | OLED、wm8978 音频芯片、触摸屏 | 地址访问,主从模式 |
SPI | OLED、RC522、SD卡 | 高速,主从模式,4线 |
SDIO | SD 卡 | 高速模式,需 FatFS |
FSMC | TFT 屏 | 并口屏幕,需大量引脚 |
MIPI/DSI/DCMI | 摄像头 / 屏幕 | 图像采集、显示接口 |
📌 常见模块推荐:
- OLED 0.96寸(I2C/SPI)
- RC522(SPI)
- DHT11(单总线)
- SD 卡(SPI/SDIO)
- 摄像头 OV2640(DCMI)
🧩 ⑤ 板卡之间的通信方式
通信方式 | 特点 | 使用场景 |
---|---|---|
USB | 高速、即插即用 | USB转串口、HID |
UART | 简单、可靠 | 单片机间通信、调试 |
RS-485 | 抗干扰、远距离 | 工厂总线、楼宇控制 |
RS-232 | 老式串口协议 | PC通讯、工业仪表 |
WIFI | 无线、需要协议栈 | 模块间远程通信 |
蓝牙 | 近距离无线 | 配对通信、BLE传感器等 |
📌 一些拓展问题解答(如图示):
- 通信速度排序:USB > WIFI > SPI > UART > I2C > 485 > 单总线
- 通信距离排序:485 > RS232 > WIFI > 蓝牙 > UART/I2C
- 232 与 485 的区别:
- 232 为单端通信,点对点;最大距离约15米
- 485 为差分通信,支持多点通信,最大距离可达1200米
- SPI 传输距离短的原因:
- 高速信号无差分、抗干扰差
- 可通过加缓冲芯片、屏蔽线、降低速率、加 CRC 检错等方式提升可靠性
单片机阶段推荐学习路径:
阶段 | 内容 | 推荐平台 |
---|---|---|
基础阶段 | GPIO、UART、ADC、PWM、I2C | STM32F103 / GD32F103 |
提高阶段 | DMA、FreeRTOS、SPI、OLED | STM32F407 / ESP32 |
项目阶段 | 音频、摄像头、WIFI、SD卡 | ESP32 / STM32F4 + 模块 |
通信阶段 | 485、CAN、蓝牙、WIFI通信 | GD32+RS485 / ESP32 |
系统阶段 | RTOS + 多任务 + 外设调度 | RT-Thread / FreeRTOS |
单片机开发就像搭积木:先学会控制每个外设模块 + 掌握系统调度能力 + 精通通信协议,然后你就能搭建出任意嵌入式应用系统。
三、总览:《Linux 驱动开发知识结构树(初级 + 高级)》
📘 Linux 驱动开发知识树(总体结构)
Linux 驱动开发
├── 初级阶段
│ ├── 1. 系统移植与内核裁剪
│ ├── 2. 字符设备驱动框架
│ ├── 3. 设备树写法
│ ├── 4. GPIO 子系统 / pinctrl 子系统
│ ├── 5. 平台设备驱动模型
│ ├── 6. 中断处理机制
│ └── 7. select / poll 等应用层接口
│ └── 8. ...
├── 高级阶段
│ ├── 1. input 子系统
│ ├── 2. I2C 子系统
│ ├── 3. SPI 子系统
│ ├── 4. 混杂设备子系统(misc)
│ ├── 5. DRM 显示驱动框架
│ ├── 6. 触摸屏驱动(结合 input + I2C)
│ ├── 7. V4L2 视频驱动框架
│ ├── 8. 音频驱动(ASoC 框架)
│ └── 9. USB 驱动框架 / 按键设备驱动
│ └── 10. ...由于技术无远弗届,所以学到了常用的技术之后就可以开始进入项目阶段了,后续的技术在项目中用到的时候再去补充技术栈。
🧱 初级阶段
📌 1. 系统搭建与内核裁剪
- uboot 移植、内核移植
- uboot 启动流程分析
- 内核启动流程、根文件系统制作
- menuconfig 配置内核、设备树编写
- 交叉编译工具链准备
📌 2. 字符设备驱动编写
- 编写最小字符设备驱动框架
- 注册主设备号:register_chrdev
- 创建设备节点:device_create
file_operations
操作集:open
、read
、write
、ioctl
- 提供用户空间访问入口
📌 3. 设备树的写法
- 设备节点定义格式
compatible
、reg
、interrupts
等属性- 如何绑定驱动和设备树节点
📌 4. GPIO 子系统 / pinctrl 子系统
- GPIO 描述与申请方式
- GPIO 子系统接口使用
pinctrl
子系统配置方法
📌 5. 平台设备驱动模型
platform_device
/platform_driver
- 资源管理:
IO
、IRQ
、clock
- 设备和驱动的匹配机制
📌 6. 中断上下半部机制
- 中断注册与释放
- 上半部(快速处理)、下半部(
tasklet/workqueue
)
📌 7. select
/ poll
机制
- 阻塞与非阻塞通信
- 驱动层
poll
实现 - 应用层
select
使用
🧱 高级阶段
📌 1. input 子系统
- 驱动键盘、触摸屏、鼠标
input_event
上报机制input_register_device
流程
📌 2. I2C 子系统
i2c_driver
/i2c_client
注册- I2C 总线驱动模型
i2c_transfer
/i2c_smbus_xxx
使用
📌 3. SPI 子系统
spi_driver
/spi_device
spi_transfer
/spi_sync
接口- 典型 SPI 外设驱动(如 Flash)
📌 4. 混杂设备子系统
misc_register
/misc_deregister
- 简化字符设备开发流程
- 应用于 LED、蜂鸣器、按键等
📌 5. DRM 显示驱动框架
- DRM 架构基本组成:
CRTC、Encoder、Connector、Plane
- 屏幕驱动开发流程
- 分辨率配置 / 缓冲区管理
📌 6. 触摸屏驱动
- I2C 协议通信
- input 子系统事件上报
- 多点触控处理
📌 7. V4L2 视频驱动框架
- 摄像头驱动框架
video_device
注册- V4L2
ioctl
实现(VIDIOC_REQBUF
等)
📌 8. ASoC 音频驱动
- Codec 驱动 / 平台驱动
- DAI(音频接口)配置
- 声卡注册流程
📌 9. USB 驱动
- USB 总线枚举流程
- USB 驱动模型(
usb_driver
) - 按键 / 存储类设备驱动编写
📘 推荐硬件平台:
平台 | 说明 |
---|---|
RK3568 | 工业级,支持多媒体、Linux 驱动开发 |
STM32MP157 | Cortex-A7 + Cortex-M4,适合 Linux + RTOS |
IMX6ULL | NXP 主推的嵌入式 Linux 教学平台 |
全志 V3S | 带 DDR 的国产芯片,主打低成本 Linux 驱动开发 |
以上。这是一份嵌入式软件开发的大纲(简化版)汇总推荐。
以上,欢迎有从事同行业的电子信息工程、互联网通信、嵌入式开发的朋友共同探讨与提问,我可以提供实战演示或模板库。希望内容能够对你产生帮助!