前言

DM9051NP芯片 SPI接口占用管脚数量比以太网PHY的RMII/MII少,PCBA版线布局可更精简。而DM9051NP驱动软件方面,由于源代码已集成在ESP IDF中,可见其可靠度以及网口性能得到乐鑫官方认可。 在ESP32既有SPI 时钟31.2MHz的条件下,DM9051NP能充分发挥网口资料送收性能,相关Iperf测试数据,请参考第5章节。

1.DM9051NP + ESP32模块介绍

此模块是基于安可信ESP-12K模块来设计,以DM9051NP SPI接口转以太网芯片为ESP-12K模块(核心模块为ESP32-S2)增加了有线网口功能,其中,DM9051NP只占用了4个GPIO,原本ESP32有线网口参考设计为以太网PHY,在RMII模式下,需佔用10个GPIO ; MII模式下,GPIO占用更多,为16个。

同样地,DM9051NP更适合用ESP32-WROOM32(核心模块为ESP32)的以太网口应用上,在有限GPIO接口的情况之下,使用DM9051NP SPI接口转以太网芯片,空出来的GPIO能让MCU更方便去扩展其他功能。

1-1.ESP 12K模组介绍

ESP32-S2 提供丰富的外设接口,包括SPI,I2S,UART,I2C,LED PWM,LCD 接口, Camera 接口,ADC,DAC,触摸传感器,温度传感器和多达43 个GPIO。

ESP-12K 是由安信可科技开发的Wi-Fi 模块,该模块核心处理器ESP32-S2 是一款 高集成度的低功耗Wi-Fi 系统级芯片(SoC),专为物联网(IoT)、移动设备、可穿戴电子 设备、智能家居等各种应用而设计。

1-2. DM9051NP网卡芯片介绍

DM9051NP SPI接口网卡芯片是为了方便物联网行业进行以太网通信而开发出的解决方案。DM9051NP芯片是带有行业标准串列外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器。DM9051NP符合IEEE 802.3 规范,它还支持以DMA 模式來传输,以实现资料传送快速。DM9051NP通过1个中断引脚和SPI接口來进行与主控制器/MCU单片机的通信,资料传输规格为10/100 M。

•Package:32支接脚封装,QFN.

•IEEE 802.3az Energy Efficient Ethernet (EEE)

•远程唤醒 (WOL)

•Support 光口界面

•EMI (Class B) and HBM ESD Rating 8KV

• 工业温度规范: –40℃ to +85℃

2.实验环境

2-1.应用:访问网页

图2.1

DM9051 ESP32 12K模块利用HTTP协议,完成无线Wi-Fi转传有线以太网的透传功能,而两端数据包进行双向即时转发。

在透传功能演示时,将模块当作一个小网关(无线热点Wi Fi AP),让手机或平板等透过无线WIFI连上线,模块会要求输入密码,待登入后,此时DM9051NP会释放出ESP32 AP access point(eth2ap的功能),当手机连线模块后,由路由的DHCP Server进行DHCP 的动态IP分配,让DM9051NP取得IP ,接著ESP32-DM9051-eth2ap进行数据透传,成功连线并访问网页。

如果路由沒有DHCP server的话,使用者可对手机设置静态IP,也可访问网页。

此应用可用于IPC监控、家庭物联网网关搭建等。

3.硬件部分

3-1 .硬件环境

此DM9051 ESP 12K开发版规格如下:

图3.1

主要组件

功能描述

P1

DC5V电源插座

J28

J29

选择 USB (默认设置) or DC电源插座来供电

J28 ON: 5V 电源由 USB (J1)供应

J28 OFF: 5V电源由 DC插座 (P1)供应

J29 ON: 5V电源由 DC插座 (P1)供应

J29 OFF: 5V电源由 USB (J1)供应

J27

J30

选择 USB (默认设置) or DC电源插座来为DM9051 以及 ESP 12K (ESP32-S2)供电

J27 ON: 5V电源由 USB (J1)供电给DM9051

J27 OFF: 5V电源由 DC插座 (P1)供电给DM9051

J30 ON: 5V电源由 DC插座 (P1)供电给ESP 12K(ESP32-S2)

J30 OFF: 5V电源由 USB (J1)供电给ESP32-S2

JP4

LED1

LED2

RJ45 网络接口插座为10M以及/100Mbps Ethernet,插座有LED1 与LED2灯号。

(LED 灯号模式1: 默认设置)

LED1 :绿灯表示 (Link / Active)

ON: 联机中

OFF: 不是联机中

Flash: 数据传送中

LED2 :黄灯(当联机中时,为网速灯号 )

ON: 100M Full duplex

OFF: 10M Full duplex

U3

DM9051

U2

ESP32-S2 Module : ESP-12K

SW1

启动按键

SW2

重启按键

LED4

LED灯号自定义义(GPIO2)

LED5

电源灯号

J3

ESP32-S2 I/O

J2

ESP32-S2 I/O

J1

MicroUSB 插座( USB5V供电 以及 通信)

表1

3-2. SPI硬件接线部分

ESP32 有线接入以太网方法:

DM9051NP通过SPI接口控制内部寄存器,并有中断输出接口。ESP 12K(ESP32-S2)通过SPI1和DM9051NP相连。具体接口如下:

DM9051NP

ESP32 S2

SPI_CS

Pin17

Pin13

SPI_CLK

Pin18

Pin16

SPI_MOSI

Pin19

Pin14

SPI_MISO

Pin20

Pin15

SPI_INT

Pin24

Pin18

*在ESP IDF的Ethernet example DM9051NP module:

在ESP32官方例程 examples/ethernet/中,介绍了DM9051NP SPI接口的接线方法,下面链结网址的说明文档README.md中,有说明接线方法。在這裡要提醒,DM9051NP以及ESP32模块,基于走线佈局考量,設計成如图3.2/图3.3的变更。

​​​​​​https://github.com/espressif/esp-idf/tree/1d7068e4be430edd92bb63f2d922036dcf5c3cc1/examples/ethernet

4.软件部分

4-1. ESP32 硬件开发的软件环境:ESP IDF

此实作使用 ESP-IDF (Espressif IoT Development Framework) 环境来开发以太网口通讯,配置相关菜单,编译、下载固件至 ESP32 12K模块。对于如何搭建ESP32 硬件开发的软件环境,请各位同学参考上海乐鑫官方搭建教学,这里写得很详细,会手把手带着同学完成开发环境:

快速入门 - ESP32 - — ESP-IDF 编程指南 latest 文档

4-2. HTTP

 1.)HTTP简介

HTTP协议是Hyper Text Transfer Protocol超文本传输协议的缩写,基于TCP传输层协议进行通信,采用Client端与Server端架构,属于应用层协议。

ESP IDF有提供软件组件使用和设计文档,让同学们运用ESP-IDF的各项功能,本实作即是在ESP IDF范例(Example)中构建HTTP的应用程序。

2.)ESP IDF的HTTP接口:

    ESP IDF自带的HTTP接口的使用, ESP HTTP模块提供了完整的API以支持HTTP的应用,其源代码,请同学参考IDF目录下的test_http_client.c,其路径esp-idf\components\esp_http_client\test

3.)HTTP请求

HTTP请求格式是Client端往Server端发送请求动作,告知Server自己的要求。

4.)HTTP报文

HTTP报文是HTTP应用程序之间传输的数据块,HTTP报文分为HTTP请求报文和HTTP响应报文。

对于HTTP请求与报文的详细内容,在这裡就先不谈了,已经有其他先进在各论坛做了详细介绍,有兴趣的同学可上网自行学习。

5.)ESP32的HTTP接口介绍

请同学直接参考ESP IDF的官方指南,那边介绍得更多更详细,相关网址如下:API 参考 - ESP32 - — ESP-IDF 编程指南 latest 文档

4-3.有线以太网转Wi-Fi的AP路由功能:ETH2AP

1.)介绍:

ESP32有提供官方例程,这个例程(ETH2AP)功能是以太网+Wi-Fi热点AP(access point),各位同学可在ESP IDF范例(esp-ide/examples/Ethernet)找到,链结网址如下:

esp-idf/examples/ethernet/eth2ap at 1d7068e4be430edd92bb63f2d922036dcf5c3cc1 · espressif/esp-idf · GitHub

2.)如何使用ETH2AP example

 步骤1: 初始化有线以太网以及无线热点模式(Wi-Fi AP mode: Access point)

步骤2: 有线以太网接入路由/交换器/PCE,开启DHCP server功能

步骤3:开启 ESP32的Wi-Fi AP

步骤4: 无线设备(智能手机)连接 ESP32的Wi-Fi

详细内容,建议各位同学参考这位先进的文章:

ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi_Lovely_him的博客-CSDN博客_esp32 以太网

4-4. DM9051NP驱动

DM9051NP驱动源代码参考如下:

static void emac_dm9051_task(void *arg)

{

emac_dm9051_t *emac = (emac_dm9051_t *)arg;

uint8_t status = 0;

uint8_t *buffer = NULL;

uint32_t length = 0;

while (1) {

// block indefinitely until some task notifies me

ulTaskNotifyTake(pdTRUE, portMAX_DELAY);

/* 清除中斷狀態 */

dm9051_register_read(emac, DM9051_ISR, &status);

dm9051_register_write(emac, DM9051_ISR, status);

/* 收到封包 */

if (status & ISR_PR) {

do {

length = ETH_MAX_PACKET_SIZE;

buffer = heap_caps_malloc(length, MALLOC_CAP_DMA);

if (!buffer) {

ESP_LOGE(TAG, "no mem for receive buffer");

} else if (emac->parent.receive(&emac->parent, buffer, &length) == ESP_OK) {

/*將緩衝buffter堆疊在TCP/IP層*/

if (length) {

emac->eth->stack_input(emac->eth, buffer, length);

} else {

free(buffer);

}

} else {

free(buffer);

}

} while (emac->packets_remain);

}

}

vTaskDelete(NULL);

}

*DM9051NP ESP32 完整驱动代码链结:

esp-idf/esp_eth_mac_dm9051.c at master · espressif/esp-idf · GitHub

4-5 其他笔记

有些同学反应,之前他们从Github论坛下载DM9051NP sample code,执行后会出现连上线后,有断线情况。经过分析试验后,其原因是原本ESP32轮询的间隔时间为50ms,要改成10ms。相关源代码修改建议如下:

1.)ESP32 轮询的间隔为改成10ms”, 将ulTaskNotifyTake(pdFALSE, pdMS_TO_TICKS(50));改成Line 257  vTaskDelay(pdMS_TO_TICKS(10));

2.)请删除原本example的这一行代码/components/esp_eth/src/esp_eth_mac_dm9051.c

3.)增加此行代码  "dm9051_register_write(emac, DM9051_ISR, 0xFF);"到 emac_dm9051_task() function的部分。

4.)增加此行代码  "dm9051_register_write(emac, DM9051_ISR, 0xFF);" 到emac_dm9051_receive() function. 的部分。

5有线以太网转Wi-Fi的AP功能演示

5-1)测试架构与需要设备如下:

访问网页---路由---DM9051NP_ESP 12K模块 <<<--->>>手机

注:依照当时的网路环境,同学需要对路由的WAN口以及LAN口做DHCP server配置。

在图5.1中,手机经由模块,直接连线到左方的路由,此路由提供DHCP server。所以,手机向路由得到DHCP动态IP后,再经过路由连线到网际网路。

 5-2 ) ETH2AP功能演示相关讯息:

以智能手机透过无线WiFi来连上模块,手机WiFi进行扫描后,可以找到模块的SSID 名称为“+++eth2ap_9051_s2_56_06”,表示模块的Wi-Fi已经准备好。点选后,输入Password : 12345678,成功连线后,手机可透过模块来上网。

我们可以在调适终端上看到ETH-to-AP运行后,相关的设置讯息:

模块上电后看到USB端口打印s2[e2ap]: Ethernet Link Up (如图5.2,ETH-to-AP’s message in the terminal)表示以太网路成功连线。模块的Wi-Fi AP配置了MAC地址:00:60:6e:90:56:06,模块的以太网也同样配置了MAC地址00:60:6e:90:56:06。这两个配置的MAC地址,在之前提到的透传功能中,于最底层硬件概念上,有它的意义,而且不会出现在数据包的收送内容中。接著,模块运行ETH2AP功能,进行收送数据包,从DM9051NP网口收到数据包,就原封不动地透过Wi-Fi口转送出去,从Wi-Fi口收到数据包也原封不动由网口转送出去,此为『透传』。

5-3内网测试(Intranet)

这裡以华硕路由器(产品型号:ASUS RX3041)来进行内网测试,图中手机经由模块直接连线左方的路由器,并且从路由的DHCP server得到DHCP动态IP。路由器在内网这一段区域,它本身是一个网络站点,而且是内网的IP支配者。所以,路由肯定有一个静态IP,由于它是内网的IP支配者(就是DHCP server),所以,会分配动态IP给DHCP客户端(手机)。经查看华硕路由器手册,找到预先配置的静态IP为192.168.6.1。

此内网测试,在手机成功取得动态IP后,手机会出Wi-Fi AP已连上的状态图案。此时,同学开启网页流览器(Browser)来访问前述的192.168.6.1,也就是路由器的web server首页,路由器会要求同学登入帐户与密码,查看路由器手册后,得知帐户是admin,密码也是admin。登入后,手机即可访问路由器的web server首页,完成ETH-to-AP内网测试。

5-4 Iperf测试

以Iperf测试DM9051NP有线网口性能,在SPI clock 20MHz下,获得下面TCP传输数据:

TX

10.34 mbps

RX

9.58 mbps

完。

ESP32-S2上使用SPI接口芯片DM9051NP转以太网的无线物联网网关开发指导相关推荐

  1. 联发科服务器芯片,基于MTK7623N芯片的香蕉派 BPI-R2 ,智能通信物联网网关开发平台...

    Banana Pi BPI-R2 Banana Pi 发布的香蕉派BPI-R2 智能路由开发板,采用MediaTek MT7623N, 四核ARM Cortex-A7 处理器,集成了Mali 450 ...

  2. SDI、PDI、UART,I2C,SPI 接口总结

    SDI.PDI SDI:Serial Digital Interface,串行数字接口. PDI:Parallel Digital Interface,并行数字接口(PDI涵盖了SPI或者EMIF异步 ...

  3. 08. LED点阵屏与SPI接口控制

    内容提示: 编写自定义函数 变量的作用域 节省"主存储器"空间的变量设置方式 双重循环 建立自定义函数 函数:一组具有特定功能,并能被重复使用的代码 函数的调用:函数的名称,后面的 ...

  4. arm spi 接口概述

    原文地址:http://baike.baidu.com/link?url=fc5KkK7PSEwN_k41avHRLH6RgrH1qD9JF8stDmo68QIzHg-2UNrH78hx8vGeGOO ...

  5. 物联网常用模块_工业级SPI接口WiFi模块WG228助力工业物联网数据传输

    工业物联网简单来说就是工业领域的物联网技术,物联网架构可分为三层:感知层.网络层和应用层,主要涵盖了数据的采集.传输及分析应用.物联网应用都有一个共同点:收集数据并将其发送到服务器或其他系统中,在数据 ...

  6. ESP32 SPI 接口的应用

    总体介绍 1. ESP32 共有 4 个 SPI 控制器 SPI0.SPI1.SPI2.SPI3,用于连接支持 SPI 协议的设备. SPI0 控制器作为 cache 访问外部存储单元接口使用; SP ...

  7. FPGA实现的SPI协议(二)----基于SPI接口的FLASH芯片M25P16的使用

    写在前面 SPI协议系列文章: FPGA实现的SPI协议(一)----SPI驱动 FPGA实现的SPI协议(二)----基于SPI接口的FLASH芯片M25P16的使用 在上篇文章,简要介绍了SPI协 ...

  8. 【Esp32】Esp32+sx1268 Spi接口驱动SX1268模块

    [Esp32]Spi接口驱动SX1268模块 0. 实验结果 1.原理解析 2.硬件接线 3. SX1268 模块的 SPI 时序分析 4. 基于 ESP32 实现函数封装 4.1 读寄存器 4.2 ...

  9. 物联网开发笔记(60)- 使用Micropython开发ESP32开发板之SPI接口控制Micro SD卡TF卡模块

    一.目的 这一节我们学习如何使用我们的ESP32开发板来通过SPI接口控制Micro SD卡TF卡模块. 二.环境 ESP32 + SPI接口控制Micro SD卡TF卡模块 + Thonny IDE ...

最新文章

  1. 开发者福利:史上最全Android 开发和安全系列工具
  2. DICOM:标准内容概述
  3. oracle存档模式,Oracle的备份和存档模式
  4. LaTeX常见文件类型
  5. Linux网络编程--sendfile零拷贝高效率发送文件
  6. 最小二乘法 c 语言程序,最小二乘法采用C语言.docx
  7. linux --- inotify 文件系统变化通知机制
  8. 怎么使用阿里巴巴矢量图标
  9. 《认知心理学》思维导图
  10. NeuSE: A Neural Snapshot Ensemble Method for Collaborative Filtering(阅读论文笔记)
  11. 必备技能~程序员如何提高工作效率?如何更好获得领导的认可?
  12. 测试模板:Showcase规范和流程
  13. 空气净化器哪个品牌口碑好 空气净化器除甲醛排行榜前十名
  14. PAT乙级10019题——C语言
  15. matlab 冲激响应不变法,matlab实验七冲激响应不变法IIR数字滤波器设计.doc
  16. 浅析组合子集和的互异性
  17. 网络带宽和速度的关系
  18. 实现将网页多条磁力链接一次性全部下载
  19. C++核心准则边译边学-目标之外
  20. 灵魂发问,Java并发和线程池,只言片语真的可以讲清楚吗?

热门文章

  1. 山石岩读丨一文读懂区块链安全:区块链到底是什么?
  2. MATLAB 中出现 Undefined variable py or function py.command 错误
  3. 2022茶艺师(中级)考试题模拟考试题库及答案
  4. 商务网站建设与维护【1】
  5. 修改linux服务器nls_lang,Oracle下服务端字符集修改
  6. 用UML建模开发嵌入式软件
  7. 补充“为什么Scrum不行” (转自陈勇)
  8. Python爬虫实战 | (1) 爬取猫眼电影官网的TOP100电影榜单
  9. Jetson TX2 镜像拷贝和烧写
  10. 如何在自己网站上播放上传到优酷的视频