课程导论与硬件平台准备:了解网络摄像头系统架构,熟悉开发板与调试工具
各位同学,欢迎来到《嵌入式网络摄像头协议栈移植实战》的第一课。
说实话,做嵌入式网络摄像头这个方向,我踩过的坑比你们想象的多。早些年我在一个工业监控项目里,摄像头死活连不上路由器,折腾了三天,最后发现是PHY芯片的复位时序没调对。嗯,这种经历一次就够你记一辈子了。
所以这节课,我们先不打代码,先把整个系统的骨架搭起来。你想想看,盖房子总得先看图纸吧?
1.1 网络摄像头系统架构概览
一个典型的嵌入式网络摄像头,说白了就三大块:
- 图像采集端:CMOS传感器 + 镜头 + ISP(图像信号处理器)
- 主控处理端:MCU(比如STM32)负责控制、编码、协议栈
- 网络传输端:以太网PHY(比如LAN8720)+ RJ45接口
我个人习惯把系统分成「数据流」和「控制流」两条线来看。
数据流是这样的:
摄像头传感器 → DCMI接口 → STM32 DMA → 内存缓冲区 →
编码(JPEG/MJPEG)→ 协议栈封装(TCP/IP)→ MAC → PHY → 网线
控制流则简单一些:
上位机(PC/手机)→ 网络 → 协议栈解析 → STM32处理 →
控制云台/调整参数/触发拍照
核心要点:数据流讲究「带宽」,控制流讲究「实时性」。我在项目中遇到过,有人把控制命令和数据流混在同一个优先级里,结果云台转动卡成PPT。记住,控制包要单独走高优先级队列。
1.2 开发板选型:为什么是STM32 + LAN8720?
市面上能跑网络摄像头的方案很多,比如ESP32、全志V3s、海思Hi3516。但我为什么选STM32F4/F7 + LAN8720?
| 方案 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| STM32F4 + LAN8720 | 资料多、生态好、调试方便 | 性能上限低(约5-15fps VGA) | 教学、原型验证 |
| ESP32 | 自带WiFi、便宜 | 有线以太网需外扩、稳定性一般 | 无线低清场景 |
| 海思Hi3516 | 硬件编码、性能强 | 开发门槛高、资料封闭 | 工业产品 |
我个人建议初学者先用STM32。为什么?因为出问题了你能用调试器一步步跟,逻辑分析仪一根根线测。海思那种方案,一旦跑不起来,你连问题出在哪都不知道。
我的经验:如果你手头是STM32F407,搭配LAN8720A,这个组合我至少验证过5个不同厂家的板子,兼容性最好。F429带LCD控制器,还能直接显示摄像头画面,调试起来更直观。
1.3 硬件平台搭建与关键连接
好,现在我们把板子拿出来。STM32和LAN8720之间,主要通过RMII接口连接。RMII相比MII,少了一半的引脚,对于引脚紧张的MCU来说很友好。
标准的RMII连接是这样的:
STM32 LAN8720
------ -------
PA1 (ETH_RMII_REF_CLK) → XTAL1/CLKIN
PA2 (ETH_RMII_MDIO) → MDIO
PC1 (ETH_RMII_MDC) → MDC
PG11 (ETH_RMII_TX_EN) → TX_EN
PG13 (ETH_RMII_TXD0) → TXD0
PG14 (ETH_RMII_TXD1) → TXD1
PA3 (ETH_RMII_CRS_DV) → CRS_DV
PC4 (ETH_RMII_RXD0) → RXD0
PC5 (ETH_RMII_RXD1) → RXD1
PA7 (ETH_RMII_RX_ER) → RX_ER (可选)
注意! 这里有个常见的坑:LAN8720的REF_CLK(50MHz)必须由外部晶振或STM32提供。我曾经遇到过有人把REF_CLK悬空,结果PHY完全不工作。检查了三天才发现是时钟没给。嗯,这种低级错误,犯过一次就不会再犯了。
另外,LAN8720的nRST引脚不能直接接VCC。我建议用STM32的一个GPIO来控制复位,这样可以在软件里做「硬复位」——有时候PHY卡死了,拉一下复位比什么重启协议栈都管用。
1.4 调试工具准备:你的「第三只眼」
做嵌入式开发,没有调试工具就像蒙着眼睛走路。我个人必备的三样东西:
- USB转TTL(串口):最基础的输出通道。printf大法好,但要注意波特率别设错。我习惯用115200,8N1。
- 逻辑分析仪:这个太重要了。调试RMII时序、分析PHY寄存器读写、抓I2C配置摄像头,全靠它。
- 万用表:别笑,我见过有人焊完板子发现3.3V和GND短路,用万用表一测就找到了。
关于逻辑分析仪的选择:不用买太贵的。采样率100MHz以上的就够了,24MHz的RMII信号完全能抓到。我用的还是几年前买的Saleae逻辑分析仪克隆版,配合PulseView软件,够用。
调试时,我习惯这样接线:
STM32板子 → USB转TTL(接PA9/PA10,即USART1)
→ 逻辑分析仪(接RMII关键信号:REF_CLK、TX_EN、CRS_DV)
→ 网线直连电脑(或通过路由器)
为什么要抓REF_CLK和CRS_DV?因为这两个信号能告诉你PHY是否正常工作。REF_CLK有50MHz方波,说明PHY起振了;CRS_DV有电平变化,说明有数据在传输。
1.5 上电前的最后检查
在给板子通电之前,我建议你按这个清单检查一遍:
- 电源:3.3V和1.2V(LAN8720内核电压)是否正常?用万用表测一下。
- 晶振:LAN8720的25MHz晶振两端电压差?正常应该在0.8V-1.2V之间。
- 复位:nRST引脚是否被拉高?低电平复位,高电平工作。
- LED:LAN8720的LED1/LED2是否接上?通电后Link灯应该亮起。
- 网线:插上网线后,电脑端网口灯是否闪烁?
一个小技巧:第一次上电时,用手摸一下LAN8720芯片表面。如果发烫,大概率是短路了。正常工作时,芯片只是微温。
1.6 本章小结与下章预告
这节课我们走了一遍网络摄像头的系统架构,认识了STM32+LAN8720这个经典组合,也准备好了调试工具。说白了,硬件平台就是你的「战场」,工具就是你的「武器」。熟悉它们,后面的协议栈移植才能打得顺手。
下一节课,我们会正式进入软件层面——搭建STM32的以太网工程,配置LWIP协议栈,让板子能ping通。到时候我会手把手带你配置CubeMX,写第一个网络初始化代码。
好,今天就到这里。有什么问题,欢迎在课程群里交流。记住,硬件调试急不得,一步一步来,信号不会骗人。
—— 一位踩过坑的嵌入式工程师