基于STM32的图像采集与网络传输系统设计

2021-01-11 10:12姜艳茹孟令军尚桠朝
自动化与仪表 2020年12期
关键词:外设寄存器以太网

姜艳茹,孟令军,尚桠朝,李 岩

(中北大学 仪器与电子学院,太原030051)

近年来芯片制造工艺和技术不断提升,微控制器的性能越来越强、功耗越来越低,进一步促进了嵌入式技术的发展[1]。随着网络的迅猛发展,具有网络功能的嵌入式设备拥有更高的使用价值和更强的通用性。网络数据传输具有传输数据保密性高、抗电磁干扰能力极强、传输数据容量大、硬件开销小等自身优势[2],满足视频传输的要求,广泛应用于智能家居、工业控制、安防及城市交通管理等领域。

文献[3]提出一种基于GPRS 的实时图像传输方法,该系统将传感器技术、GPRS 技术以及嵌入式技术集成,对硬件设备和服务器终端进行了详细的概述。该系统虽然效率较高,但是实现的过程比较繁琐。文献[4]提出一种基于树莓派的无线WiFi 传输方法,对系统实现的关键技术进行分析,在原有的视频流传输方法的基础上进行了改进,最后对系统测试进行讨论。该方法图像传输的实时性好,但是系统设计成本略高。

本文针对上述产生的问题,设计了一款基于STM32 的图像采集与网络传输系统,以STM32F429为主控芯片,UCOS-II 操作系统为基础,采用LwIP协议栈作为客户端与服务器的通信协议,提高系统性能。该设计不仅开发成本低、可以连接网络,还具有可移植性强和可维护性好的特点,可为网络图像传输或其他相关系统的开发提供一种参考方式。

1 系统总体设计

本系统的设计思路为以Cortex-M4 为内核的STM32F429 作为控制核心,利用OV2640 作为图像采集模块,与STM32F429 的数字摄像头(DCMI)接口连接接收图像数据[5],然后通过直接存储器访问(DMA)外设传输图像数据到内部SRAM,再利用可变存储控制器(FMC)外设把数据拷贝到外部SDRAM缓存,以太网(ETH)外设与外部芯片LAN8720A 以RMII 接口连接,进行数据传输。通过LwIP 协议栈实现开发板与PC 端间网络通信,把图像数据从SDRAM 传输到PC 端,PC 端将数据解码实时显示出来。系统结构框图如图1 所示。

图1 系统结构框图Fig.1 System structure block diagram

2 系统硬件设计

2.1 OV2640 摄像头模块

OV2640 是由OV 公司生产的一款CMOS 类型数字图像传感器,该传感器支持输出最大为200 万像素的图像(1600×1200 分辨率),自带压缩引擎,可以直接输出压缩后的JPEG 数据,使得在保证图像质量的前提下,尽可能减少图像数据的大小[6],减少图像的传输时间。OV2640 摄像头电路如图2 所示,24 MHz 有源晶振为OV2640 提供系统时钟,稳压芯片为OV2640 提供所需的稳定电压。

图2 OV2640 摄像头电路Fig.2 OV2640 camera circuit

STM32F429 与OV2640 以DCMI 接口连接。STM32F429 首先通过SCCB 接口的SCL 和SDA 配置OV2640 的寄存器进行初始化。数据采集时使用8 根数据线,通过设置DCMI_CR 寄存器的EDM[1:0]=00,使得D[0:7]有效,使用HSYNC 和HREF作为同步信号。当输出JPEG 格式数据时,PCLK 的数目大大减少,且不连续,数据以0XFF,0XD8 开头,0XFF,0XD9 结尾[7]。

2.2 外部SDRAM

本系统将SDRAM 作为外部存储器,将图像数据暂存到SDRAM,然后通过网络发送到PC 端。STM32F429 利用FMC 外设来驱动SDRAM 这样的动态存储器,连接电路如图3 所示,主要是地址线和数据线。V

图3 SDRAM 连接图Fig.3 SDRAM connection diagram

SDRAM 上电后先进行初始化,初始化完成后,通过映射的地址直接访问SDRAM,地址范围为0xC0000000-0xDFFFFFFF。在程序中,定义一个指向上述地址的指针,当需要对该存储单元读写时通过指针直接访问,FMC 外设会自动完成数据读写过程,无需其他操作。

2.3 以太网通信模块

以太网接口电路如图4 所示,STM32F429 通过RMII 接口与外部芯片LAN8720A 连接,以实现介质访问控制层与物理层的数据传输。LAN8720A 芯片引脚数目少,拥有1.2 V 内置稳压源,是低功耗10/100 M以太网物理收发器[8]。

RMII 接口方式在保持物理层器件现有特性的前提下减少了PHY 的连接引脚[9],引脚如下。RMII_REF_CLK 为50 MHz 参考时钟信号,LAN8720A内部集成PLL,可将25 MHz 时钟源倍频到50 MHz并指定到该引脚;RMII_CRS_DV 为侦听载波信号与接收数据有效信号的整合信号,由LAN8720A 驱动;RMII_TXD[1:0]和RMII_RXD[1:0]为发送接收数据线。ETH_MDIO 和ETH_MDC 组成MAC 内核访问PHY 寄存器的标志接口,向寄存器写入数据或读取状态,最大通信频率为2.5 MHz。数据帧格式如表1 所示,第一个PADDR 用于指定PHY 地址,第二个RADDR 用于指定PHY 寄存器地址,TA 为状态转换域,数据段有16 位,对应PHY 寄存器每个位,先发送或接收到的位对应以太网MAC MII 数据寄存器(ETH_MACMIIDR)寄存器的位15。

图4 以太网接口电路Fig.4 Ethernet interface circuit

表1 数据帧格式Tab.1 Data frame format

3 系统软件设计

本系统软件部分以UCOS-II 操作系统为基础,移植了LwIP 协议栈,在系统的调度下,初始化OV2640,采集图像数据,使用DMA 双缓存机制接收图像数据到SRAM,再通过地址访问写入外部SDRAM,利用LwIP 协议栈,实现STM32F429 与PC 端之间网络通信,把图像数据上传到PC 客户端显示[10]。UCOS-II操作系统是一个可固化、可移植、可剪裁的占先式实时多任务内核,特别适合于微处理器和控制器[11]。将UCOS-II 操作系统移植进STM32F429,进行裁减配置,使之能够正常运行。

3.1 数据接收

STM32F429 接收数据时采用DMA 双缓冲机制。OV2640 摄像头与DCMI 接口连接,通过数据线D[0:7]传输JPEG 数据流,然后通过DMA 进行传输。DCMI_CR 寄存器中的CAPTURE 位置1 时,激活DMA 接口。netcam_blk_buf0(内存1)和netcam_blk_buf1(内存2)作为DMA 的两个缓冲区,大小为NETCAM_BLK_SIZE*4 个字节,交替存储JPEG 数据流,如图5 所示。netcam_blk_buf0 和netcam_blk_buf1 所指向的内存,必须是内部内存,程序中利用内存管理为这两个指针在内部SRAM 中分配内存。

图5 DMA 双缓存接收流程Fig.5 DMA double buffer receiving process

考虑到网络速度可能会跟不上摄像头的数据输出速度,导致图片显示错误。针对此问题,本系统将数据先放在指针数组netcambuf 中,大小为NETCAM_BUF_NUM 个缓冲区,每个缓冲区NETCAM_BLK_SIZE*4 个字节,利用readdpos 和writedpos 记录当前的读写位置,如图6 所示。netcambuf 利用内存分配函数为其在外部SDRAM 中分配内存。DMA传输完成中断后,在中断函数中将netcam_blk_buf 里面的数据,存储到netcambuf 里。然后ETH 外设将netcambuf 里的数据通过RMII 接口的发送数据线传输给LAN8720A,最后通过网口传输数据到PC 端。

图6 指针数组cambufFig.6 Pointer array cambuf

3.2 LwIP 协议栈

UCOS-II 只是一个实时的任务调度及通信内核,缺少对网络协议的支持,需要将LwIP 移植到UCOS-II 上,使其支持网络功能[12]。LwIP 是一个小型的网络协议栈,使用灵活,提供了多种常用的的协议,这些功能可以通过lwippopts.h 中的宏定义来决定功能的启用或者禁用[13]。LwIP 在UCOS-II 系统中的结构如图7 所示。应用程序层采用标准netconn接口函数与上层交互;硬件驱动层根据驱动不同实现函数编写,是移植LwIP 的重点。移植时跟硬件密切相关的为以下三个函数:Low_level_init()函数主要完成实际对硬件的初始化设置;Low_level_output()函数用于发送数据,将LwIP 协议栈Pbuf 缓冲区中的数据拷贝到DMA 发送数据缓存区,通过网卡发送出去;Low_level_input()函数用于接收数据,从网卡中提取数据,将DMA 缓冲区中数据拷贝到Pbuf结构体中,然后将Pbuf 返回[14]。

图7 LwIP 在UCOS-II 系统中的结构Fig.7 Structure of LwIP in UCOS-II system

本系统采用LwIP 作为STM32F429 与PC 端上位机通讯的协议,移植时,NO_SYS 设置为0,使用UCOS 操作系统,这有利于提高整体性能。同时使用NETCONN 的TCP 接口方式,在头文件中把LWIP_NETCONN 与LWIP_TCP 设置为1,从而启动TCP协议。STM32F429 作为服务器,PC 端作为客户端,传输流程如图8 所示。用户可以用网线连接路由器,或者直接用网线连接电脑的网口。上位机界面配置好端口和地址点击连接,连接成功,即可发送数据流到PC 端上位机显示。

图8 网络传输流程Fig.8 Network transmission flow chart

3.3 逻辑设计

本系统的整体运行顺序如图9 所示,系统启动后,初始化LwIP,包括:初始化LAN8720A、申请内存、添加并打开网卡,然后初始化UCOS 操作系统,创建两个任务:图像采集传输任务、DHCP 处理任务。

图9 主程序流程Fig.9 Main program flow chart

图像采集任务中,初始化OV2640,通过SCCB总线配置内部寄存器使其输出JPEG 格式的图像数据,等待主机连接,连接成功,启动数据传输,发送数据到PC 端,之后若是断开连接,释放内存,关闭传输。DHCP 处理任务中,开启DHCP 服务,然后等待DHCP 获取IP 成功,如果DHCP 获取失败,将使用静态IP(固定为:192.168.1.20),端口号固定为:8088,最后将IP 信息打印到串口显示。然后把任务交由任务管理器,由任务调度管理,这样便可实现在不同的任务之间来回调度,实现多任务同时进行[15]。

4 实验及结果

系统连接成功,编译程序下载到开发版,用网线连接开发板与电脑,电脑端IP 设置为与开发板IP 在同一网段,采用Windows 的ping 指令进行网络测试,检测通讯是否正常及丢包率情况,测试结果如图10 所示,网络功能正常。网络测试正常后,在PC 端的上位机界面输入串口显示的服务器IP 地址和端口号,点击启动,就会显示采集到的图像,如图11 所示。实测最大可以传输1600×1200 的图像,帧率15 fps 左右,传输平均速率达到2 Mbit/s,视频流畅,运行稳定。

图10 网络测试结果Fig.10 Network test results

图11 图像显示Fig.11 Image display

5 结语

本文基于STM32F429、OV2640 及LAN8720A等硬件设计实现了一款图像采集与网络传输系统,分析了系统的硬件和软件设计,并通过图像显示结果很好的验证了系统的性能。该系统功耗低、体积小巧、性能稳定可靠、成本低廉,还可以用于构成复杂的传输网络,同时具有良好的可移植性和可维护性,对多种视频传输等更多领域的应用与研究具有很好的价值。

猜你喜欢
外设寄存器以太网
Lite寄存器模型的设计与实现
二进制翻译中动静结合的寄存器分配优化方法
移位寄存器及算术运算应用
三大因素驱动创新提速以太网快步迈入“灵活”时代
三大因素驱动创新提速 以太网快步迈入“灵活”时代
谈实时以太网EtherCAT技术在变电站自动化中的应用
Lx5280模拟器移植设计及实施
外设天地行情
外设天地行情
外设天地行情