极海APM32F107V6 + DP83848CVV驱动网口(一)

一、实现目标

首先目标先是跟4G模块一样,数据上云吧,接着再看看其他功能。其次是通过这块开发板的外设,了解一下lwIP这个协议栈。对tcp/ip通信加深理解吧。

二、lwIP

1、简介

LwIP(Lightweight IP) 是一个为嵌入式系统设计的完整TCP/IP协议栈,它的特点是:

内存占用小:RAM使用可低至几十KB

模块化设计:可按需裁剪功能

无操作系统要求:可在裸机或RTOS上运行

支持主要协议:TCP、UDP、IPv4、DHCP、DNS等

2、编程接口

①、Raw/Callback API - 性能最优

设计理念 :事件驱动,基于回调机制

特点 :

内存占用最低,性能最好

与协议栈在同一线程中运行

编程复杂度较高

典型应用 :资源极其受限的系统,如无操作系统环境

②、NETCONN API - RTOS环境推荐

设计理念 :提供阻塞式的读写接口,类似标准socket API

特点 :

官方文档中称为:higher-level "sequential" API

特点:基于消息传递、阻塞式操作模型、更易于使用

适用场景:多线程RTOS环境、需要更清晰程序结构的应用

优势:提供open-read-write-close范式,应用程序可在独立线程中运行

③、Socket API - 标准兼容

设计理念 :兼容传统BSD套接字API

特点 :

基于Sequential API构建

为现有应用程序提供兼容性

便于端口现有代码

然后我看例程用的是Socket API,适合我这种初学吧,就是占用资源比较大

三、底层驱动

1、驱动芯片

DP83848CVV是德州仪器(TI)生产的一款单端口10/100Mbps以太网物理层(PHY)收发器。它充当着微控制器(如APM32F107内部的以太网MAC)与物理网络(如RJ-45接口和网线)之间的桥梁,负责将数字信号和网络上的模拟信号进行相互转换。

支持网络标准:兼容10BASE-T与100BASE-TX以太网标准

MAC接口:支持MII(Media Independent Interface,媒体独立接口,共16根数据信号线)、RMII(Reduced Media Independent Interface,精简媒体独立接口,共6根数据信号线)以及SNI(Serial Network Interface)接口,提供了与不同微控制器连接的灵活性。在资源紧张的嵌入式系统中,RMII因其引脚数量少而被广泛使用

2、使用引脚

看看原理图,我们用RMII的方式,用到哪几个引脚

上边有个虚框写得很清晰,不用RMII的时候,还需要用到虚框里边的几个。

引脚作用:

官方sdk里的好像跟原理图的引脚分配好像不太一样,稍后再确定。

3、数据传输过程:

①、发送数据过程 (MCU → PHY → 网络)

应用层数据 → Socket API → lwIP协议栈 → ETH MAC → RMII引脚 → PHY → 网络线缆

RMII发送时序

时钟周期: T1 T2 T3 T4 T5 T6 T7 T8

REF_CLK: ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑

TX_EN: ────────────────────────────────────────

TXD1: D1 D3 D5 D7 D9 D11 D13 D15

TXD0: D0 D2 D4 D6 D8 D10 D12 D14

组合数据: D1D0 D3D2 D5D4 D7D6 D9D8 D11D10 D13D12

②、接收数据过程 (网络 → PHY → MCU)

网络线缆 → PHY → RMII引脚 → ETH MAC → lwIP协议栈 → Socket API → 应用层

时钟周期: T1 T2 T3 T4 T5 T6 T7 T8

REF_CLK: ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑

CRS_DV: ────────────────────────────────────────

RXD1: D1 D3 D5 D7 D9 D11 D13 D15

RXD0: D0 D2 D4 D6 D8 D10 D12 D14

③、关键时序特性

时钟频率 :50MHz(RMII标准)

数据位宽 :2位并行

有效数据率 :100Mbps

时钟同步 :所有信号同步于REF_CLK上升沿

双工通信 :发送和接收可同时进行

四、例程

我看的是freertos的。

1、main函数

一个led任务一个驱动网口的任务

初始化硬件的io和以太网的MAC和DMA配置接口,还有lwip库的初始化

2、lwip库初始化

分4步,我加了注释

初始化完成后的框架:

应用层 → tcp_client_test.c

Socket API → lwIP Socket接口

协议栈层 → TCP/IP协议栈(tcpip_thread)

网络接口 → ethernetif (netif结构体)

硬件驱动 → DP83848 + APM32F107 MAC

物理层 → 以太网硬件

3、tcp任务

这个例程是实现tcp回声客户端,测试可靠的数据传输

我加了一些注释看看

五、验证程序

我是路由器分别直连开发板和我的电脑,打开cmd ipconfig一下

其中ETH_IP_ADDR为开发板的ip地址,改成和路由器在同一网段就好了(需要选择这个网段中未被占用的ip,我设了123)

ETH_NET_MASK是子网掩码,直接复制

ETH_GATEWAY是网关地址,设成路由器的ip,即上边的默认网关

然后修改tcp_client_test.c中的服务器IP改为电脑的ip,即上边看到的ipv4地址

然后用网络调试助手,设置tcp Server 设好电脑的主机地址,端口跟例程一样用5005

打开串口

然后开发板的调试串口最后会打印连接成功

输出hello world 接收成功

再cmdping一下开发板,是连通的。

相关推荐
Ch_champion2 小时前
嵌入式研发人员的共享盘文件目录-分享
嵌入式
凉、介1 天前
静态路由探究
网络·笔记·操作系统·嵌入式
网易独家音乐人Mike Zhou1 天前
【RealMCU】瑞昱官方LOG信息保存及解析,DebugAnalyzer自动化接收脚本(不需要用到ROM.trace文件)
单片机·mcu·物联网·自动化·嵌入式·iot·瑞昱
charlie1145141912 天前
嵌入式C++教程——ETL(Embedded Template Library)
开发语言·c++·笔记·学习·嵌入式·etl
良许Linux2 天前
51单片机都有哪些优缺点
单片机·程序员·嵌入式·编程
嵌入小生0072 天前
数据结构 | 常用排序算法大全及二分查找
linux·数据结构·算法·vim·排序算法·嵌入式
梵刹古音3 天前
【C语言】 结构化编程与选择结构
c语言·开发语言·嵌入式
百锦再3 天前
《C#上位机开发从门外到门内》2-7:网络通信(TCP/IP、UDP)
tcp/ip·udp·c#·嵌入式·上位机·通信·下位机
嵌入小生0073 天前
数据结构与算法 | 完全二叉树的实现、哈希表的实现
linux·c语言·数据结构·算法·vim·嵌入式
梵刹古音5 天前
【C语言】 浮点型(实型)变量
c语言·开发语言·嵌入式