在Nucleo STM32F401RE上使用SPI DMA方式提高W5500传输速率

发布者:MysticSerenade最新更新时间:2015-09-30 来源: eefocus关键字:Nucleo  STM32F401RE  DMA方式  W5500  传输速率 手机看文章 扫描二维码
随时随地手机看文章

WIZnet W5500 支持高达 80MHz SPI 时钟,所以用户可用 MCU来提供一个最大传输速率的高速以太网SPI通讯。本文中,我将展示如何用STM32 MCU来让W5500达到最大传输速率。

当使用来自STMicro的Cortex M3/M4产线的32位处理器,以太网传输速率可以在使用SPI通讯模式事产生最大变化。我将比较使用SPI标准模式和SPI DMA模式的不同传输速率。

组成

MCU : Nucleo STM32F401RE

以太网控制器 : WIZnet WIZ550io(内嵌 W5500)

引脚连接
MCU与WIZnet WIZ550io之间的引脚连接,请参见下表。
首先,连接电源线。

其次,连接SPI信号。连接SCS 引脚到GPIOA_Pin12,因为我将用软件方法处理它。

第三,连接 RSTn 引脚到 GPIOA_Pin11 来复位WIZ550io.

最后, 用GPIOA_pin1这个引脚连接到W550io的RDY引脚上完成初始化.

RSTn 引脚和 RDY 引脚的连接并不至关重要,但是连上更稳定.

Nucleo1

Nucleo2

怎样实现SPI协议 

SPI 协议控制W5500和在SPI标准模式及SPI DMA模式是相同的。然而,这两种模式之间的不同是,在SPI总线的数据之间的空闲时间。

用于W5500的SPI协议在WIZnet ioLibrary中W5500.c中提供,具有如下功能。

  • WIZCHIP_READ(uint32_t AddrSel)
  • WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb)
  • WIZCHIP_READ_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len)
  • WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len)

当SPI DMA 模式未使用时, 内部函数调用标准SPI 读/写函数,比如下面的WIZCHIP_READ_BUF() 功能。

#if !defined (SPI_DMA)
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0);
for(i = 0; i < len; i++) pBuf[i] = WIZCHIP.IF.SPI._read_byte();

当使用 SPI DMA 模式时,准备命令数据,由地址和操作码组成,称作 SPI_DMA_READ() 函数。

#else
spi_data[0] = (AddrSel & 0x00FF0000) >> 16;
spi_data[1] = (AddrSel & 0x0000FF00) >> 8;
spi_data[2] = (AddrSel & 0x000000FF) >> 0;
SPI_DMA_READ(spi_data, pBuf, len);
#endif

正如在“如何在STM32F2xx or STM32F4xx中使用SPI DMA来完成全双攻通信”, SPI_DMA_READ() 和 SPI_DMA_WRITE() 是由使用SPI DMA模式的代码组成的。[page]

标准 SPI 模式 & SPI DMA 模式的性能比较 

下面相关数据的源代码是用于loopback测试的例程。可以看到在标准SPI模式和SPI DMA模式中存在多大的性能差异。

标准SPI模式

在 spi_handler.h 中
#ifndef SPI_DMA
//#define SPI_DMA
#endif

如果你把“#define SPI_DMA” 行打上注释,你将在标准SPI模式下操作。

如果你在Nucleo板上编译之后下载了二进制文件,并用WIZnet提供的AX1.exe上做了loopback的测试,随后传输和接收就如下图所示分别能达到 1.6Mbps,我们可知SPI全速传输速率高达3.2Mbps。

Nucleo3

这里, SPI 时钟是 24MHz,你可以清晰的看到在SPI数据间的空闲时间。

Nucleo4

SPI DMA 模式

#ifndef SPI_DMA
#define SPI_DMA
#endif

如上, 移去 “#define SPI_DMA”行注释.

接下来, 如果你下载二进制文件到 Nucleo, 然后你就能看到 SPI DMA 模式的传输速率。传输和接收的loopback测试性能可分别达到  4.3Mbps,并且 SPI全速传输速率超过 8Mbps。如果你使用自己的板子,并且有一个高速的外部时钟来代替Nucleo 板, 随之你就得到了更快的传输速率。

Nucleo5
这里, 你可以看到无任何空闲时间的连续SPI通讯,如下图。

Nucleo6

关键字:Nucleo  STM32F401RE  DMA方式  W5500  传输速率 引用地址:在Nucleo STM32F401RE上使用SPI DMA方式提高W5500传输速率

上一篇:基于W5500+STM32的SNMP协议应用
下一篇:基于语音识别的微博签到系统

推荐阅读最新更新时间:2024-03-16 14:33

STM32 | 串口空闲中断接收不定长数据(DMA方式
在使用STM32的串口接收数据的时候,我们常常会使用接收中断的方式来接收数据,常用的是RXNE。这里分享另一种接收数据的方式——IDLE中断(PS:本文的例子运行在STM32F103ZET6上)。 一、IDLE中断什么时候发生? IDLE就是串口收到一帧数据后,发生的中断。什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据。 二、RXNE中断和IDLE中断的区别? 当接收到1个字节,就会产生RXNE中断,当接收到一帧数据,就会产生IDLE中断。比如给单片机一次性发送了8个字节,就会产生8次RXNE中断,1次IDLE中断。 三、IDLE中断如何配
[单片机]
STM32 | 串口空闲中断接收不定长数据(<font color='red'>DMA</font><font color='red'>方式</font>)
STM32 Nucleo扩展板电机控制选型指南
STM32 ODE 生态系统 快速、经济的原型设计和开发 STM32开放开发环境(ODE)在一个开放、灵活、简单、经济的开发环境下,基于STM32位微控制器,结合其他通过扩展板连接的ST尖端原件,从而快速进行原型设计,迅速转换为最终设计。 STM32ODE包括下述五个单元: STM32 Nucleo开发板。全面的经济型开发板,适用于所有STM32微控制器系列,具有无限的统一扩展能力,具有集成的调试器/编程器。 STM32 Nucleo扩展板。该扩展板具有更多功能,能按需增加传感、控制、连接、供电、音频或其他功能,可以插在 STM32 Nucleo开发板上,更复杂的功能可以通过堆叠更多的扩展板来实现。 STM32Cube
[单片机]
STM32 <font color='red'>Nucleo</font>扩展板电机控制选型指南
STM32的SPI采用DMA方式传输测试
环境: 主机:WIN7 开发环境:MDK4.23 MCU:STM32F103CBT6 说明: 参考链接:http://www.openedv.com/posts/list/3159.htm SPI传输数据分为连续传输和非连续传输. 连续传输时序图: 非连续传输时序图: 非连续传输模式可以参考上篇文章:http://blog.csdn.net/jdh99/article/details/7598573 官方pdf关于连续和非连续传输的说明: 当在主模式下发送数据时,如果软件足够快,能够在检测到每次TXE的上升沿(或TXE中断),并立即在正在进行的传输结束之前写入SPI_DR寄存器,则能够实现连续
[单片机]
STM32的SPI采用<font color='red'>DMA</font><font color='red'>方式</font><font color='red'>传输</font>测试
STM32基础设计(6)---ADC转换(DMA方式
本文简单介绍了STM32F103C8,通过DMA方式读取ADC并通过串口中断向电脑端打印出当前电源ADC的值。 现在先将设计过程的主要步骤介绍如下: 1,串口配置 2,中断配置 3,DMA配置 4,ADC配置 5,中断服务函数 6,主函数 先总结下博主在这次基础设计中犯的错误,在中断初始化函数中,没有将中断通道使能,导致电脑端没有接收到数据,发现后就去检查串口初始化函数了,结果没有发现错误,而是检查了一遍代码才发现错误。发现串口无法工作后,先核查初始化函数,如果问题没有解决,第二步,如果是串口中断方
[单片机]
NUCLEO-G474RE 开发板扩展 LSM6DSO 实现 Data Fusion 演示
1.前言 当使用一个新的开发板作为基板,基于现有软硬件资源,实现对 MEMS sensors 的评估或工程演示时,往往需要快速地得到直观的评估效果。Unicleo-GUI 是针对运动 MEMS 和环境传感器扩展软件的 GUI,主要功能是演示 MEMS 传感器和算法。LSM6DSO 是一款具有 3D 数字加速计和 3D 数字陀螺仪的 MEMS Sensor。本文针对 NUCLEO-G474RE 平台搭载 LSM6DSO 实现快速效果评估演示的过程进行阐述。 2.配置过程 使用 STM32CubeMx 或 STM32CUBEIDE 集成的 CubeMX 选择开发板,使用开发板默认配置即可。 下载 X-CUBE-MEMS1 软件包
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved