(河南思维自动化设备股份有限公司,郑州 450001)
随着嵌入式系统的进一步发展,以及对通信速率的要求不断提高,以太网通信在各种工业领域的应用越来越广。目前,嵌入式工业控制领域使用最广泛的是基于ARM内核的微控制器(MCU)芯片,其在所有微控制器中占有率超过70%。从之前的ARM7、ARM9,到现在的 ARM Cortex-M3、M4,绝大多数的ARM内核微控制器最多内部集成1个以太网控制器,当系统需要2个以上以太网口时无法满足设计需求。因此,本文提出了使用最新的ARM Cortex-M4内核微控制器和并行网口芯片ENC624J600来实现双10/100 Mb/s的以太网口扩展。
本系统微控制器选用意法半导体(ST)公司的STM32F437IIT6,该芯片是以32位Cortex-M4为内核,具有高达168 MHz的工作频率,内置高速存储器(2 MB FLASH,256 KB RAM)和丰富的外设接口,并具有M4新增加的浮点运算单元(FPU)[1]。
以太网控制器选用美国微芯(Microchip)公司的ENC624J600,该芯片符合IEEE 802.3中以太网的全部规范,具有独立的MAC和10/100 Mb/s PHY控制器。ENC624J600(64引脚)与MCU之间通过8位/16位复用并行接口连接,具有24 KB可配置的发送/接收数据缓冲区。该芯片通过11种不同的接收过滤器对传入数据包进行过滤,并且还提供了16位宽的内部DMA,以实现快速数据吞吐及硬件IP校验和计算支持[2]。
本系统采用STM32F437的FSMC接口与2片ENC624J600相连,实现双网口扩展。FSMC是灵活的静态存储控制器,STM32F437芯片可利用FSMC控制NOR FLASH、PSRAM和 NAND FLASH存储芯片。这里,使用FSMC的NOR/PSRAM存储器、控制器访问ENC624J600网口芯片。NOR/PSRAM存储器地址为60000000h~6FFFFFFFh共4*64 MB的地址空间[3]。因此,可连接多达4个NOR/PSRAM类型的存储器器件。本系统中2片网口芯片占用其中的2路,另外2路扩展了2片NORFLASH芯片用以掉电保存重要的网络数据。
STM32F437与2片ENC624J600的硬件结构如图1所示。FSMC数据线D0~D15与ENC624J600双向数据线 D0~D15相连,FSMC地址线 A0~A13与ENC624J600地址输入线A0~A13相连,网口芯片的地址线A14接地。由于ENC624J600的读、写及片选控制管脚的有效电平与ST微控制器FSMC控制管脚的有效电平是相反的,因此中间需加一片反相器(如SN74LVC04A)进行反向。其中,读写控制管脚FSMC_NOE和FSMC_NWE经过反向后同时与2片ENC624J600的NET_RD和NET_WR相连,片选控制管脚FSMC_NE3经反向后与第一片ENC624J600芯片的片选NET1_CS相连,FSMC_NE4经反向后与第二片ENC624J600芯片的片选NET2_CS相连。另外,2个网口芯片的中断管脚NET1_INT和NET2_INT分别与微控制器的2个I/O相连。
图1 STM32F437与ENC624J600硬件结构Fig.1 Hardware structure between STM32F437 and ENC624J600
本设计的软件主要有微控制器接口配置和网络芯片驱动程序两部分。对STM32F437的接口配置包括对其FSMC总线初始化及EXTI外部中断初始化,ENC624J600的驱动程序主要包括对其进行初始化及数据收发处理。
对微控制器STM32F437的接口配置主要包括FSMC初始化和EXTI外部中断初始化。FSMC初始化使用了ST的库函数,需要对FSMC_NORSRAM TimingInitTypeDef和FSMC_NORSRAMInitTypeDef类型的结构体进行配置,FSMC初始化相关代码如下:
EXTI作为STM32F437的外部中断/事件控制器,负责管理映射到GPIO引脚上的中断输入,并最终映射到NVIC的相应通道上[4]。这里配置2路网口芯片中断管脚连到微控制器的2个GPIO为下降沿触发中断。
ENC624J600驱动程序包括芯片初始化及数据收发处理两部分。芯片初始化过程包括复位以及对控制寄存器、PHY寄存器和以太网缓冲器进行初始化[5],初始化流程如图2所示。
图2 网口芯片初始化流程Fig.2 Flow chart of network interface chip initialization
ENC624J600接收数据使用中断方式,当网口收到完整的一帧数据包后,会向微控制器发送中断,微控制器响应ENC624J600的中断请求,系统进入中断程序并开始接收数据。当ENC624J600发送数据时,需先确定发送数据起始指针ETXST和发送缓冲区长度指针ETXLEN,再使能发送控制寄存器。这里需要注意的是ENC624J600的收发缓冲区空间可以在0000h~5FFFh共24 KB地址空间灵活配置,因此在芯片初始化时就应配置好收发缓冲区的地址范围。
使用STM32F437和2片ENC624J600的双网口扩展技术,解决了工业控制现场多路独立网口通信的需求,并运用到实际产品中去。经过连续24 h以上工作测试,硬件和驱动程序性能稳定,在10 Mb/s、100 Mb/s均能正常工作,实际通信速率可稳定达到5 MB/s以上,取得了系统设计的预期效果。
[1]STM32F405xx/07xx,STM32F415xx/17xx,STM32F42xxx and STM32 F43xxx advanced ARM-based 32-bit MCUs reference manual[Z].STMicroelectronics,2013.
[2]ENC424J600/624J600 data sheet[Z].Microchip,2009.
[3]汤莉莉,黄伟.基于STM32的FSMC接口驱动TFT彩屏设计[J].现代电子技术,2013,36(20):139-141.
[4] 李宁.基于MDK的STM32处理器开发应用[M].北京:北京航空航天大学出版社,2008.
[5]李阳,吴成富,邓红德.基于DSP和ENC28J60的多串口与以太网数据传输系统设计[J].测控技术,2011,30(12):61-65.