STM32F4-ETH通信(lwip)——学习笔记_stm32 lwip

7、CSMA/CD 冲突检测:

8、MAC 子层:

MAC 数据包、MAC 数据包格式、

MAC 地址:MAC 地址由 48 位数字组成,它是网卡的物理地址,在以太网传输的最底层, 就是根据 MAC 地址来收发数据的。部分 MAC 地址用于广播和多播,在同一个网络里不能 有两个相同的 MAC 地址。PC 的网卡在出厂时已经设置好了 MAC 地址,但也可以通过一 些软件来进行修改,在嵌入式的以太网控制器中可由程序进行配置。数据包中的 DA 是目 标地址,SA 是源地址。

9、TCP/IP 协议栈:

为什么需要协议栈?

10、各网络层的功能:

10.1:LLC 层:处理传输错误;调节数据流,协调收发数据双方速度,防止发送方发送得太快而接收方 丢失数据。主要使用数据链路协议。

10.2:网络层:本层也被称为 IP 层。LLC 层负责把数据从线的一端传输到另一端,但很多时候不同的 设备位于不同的网络中 (并不是简单的网线的两头)。此时就需要网络层来解决子网路由拓扑问 题、路径选择问题。在这一层主要有 IP 协议、ICMP 协议。

10.3:传输层:由网络层处理好了网络传输的路径问题后,端到端的路径就建立起来了。传输层就负责 处理端到端的通讯。在这一层中主要有 TCP、UDP 协议

10.4:应用层:经过前面三层的处理,通讯完全建立。应用层可以通过调用传输层的接口来编写特定的 应用程序。而 TCP/IP 协议一般也会包含一些简单的应用程序如 Telnet 远程登录、FTP 文件传输、 SMTP 邮件传输协议。

11、以太网外设 (ETH)

STM32F4xx 系列控制器内部集成了一个以太网外设,它实际是一个通过 DMA 控制器进行介质 访问控制 (MAC),它的功能就是实现 MAC 层的任务。借助以太网外设,STM32F4xx 控制器可以 通过 ETH 外设按照 IEEE 802.3-2002 标准发送和接收 MAC 数据包。ETH 内部自带专用的 DMA 控制器用于 MAC,ETH 支持两个工业标准接口介质独立接口 (MII) 和简化介质独立接口 (RMII) 用于与外部 PHY 芯片连接。MII 和 RMII 接口用于 MAC 数据包传输,ETH 还集成了站管理接口 (SMI) 接口专门用于与外部 PHY 通信,用于访问 PHY 芯片寄存器。 物理层定义了以太网使用的传输介质、传输速度、数据编码方式和冲突检测机制,PHY 芯片是 物理层功能实现的实体,生活中常用水晶头网线 + 水晶头插座 +PHY 组合构成了物理层。

12、SMI 接口:

12.1:SMI 是 MAC 内核访问 PHY 寄存器标志接口,它由两根线组成,数据线 MDIO 和时钟线 MDC。 SMI 支持访问 32 个 PHY,这在设备需要多个网口时非常有用,不过一般设备都只使用一个 PHY。 PHY 芯片内部一般都有 32 个 16 位的寄存器,用于配置 PHY 芯片属性、工作环境、状态指示等 等,当然很多 PHY 芯片并没有使用到所有寄存器位。MAC 内核就是通过 SMI 向 PHY 的寄存器 写入数据或从 PHY 寄存器读取 PHY 状态,一次只能对一个 PHY 的其中一个寄存器进行访问。 SMI 最大通信频率为 2.5MHz,通过控制以太网 MAC MII 地址寄存器 (ETH_MACMIIAR) 的 CR 位可选择时钟频率。

12.2:SMI 帧格式

12.3:SMI 读写操作

12.4:MII 和 RMII 接口 介质独立接口 (MII) 用于连接 MAC 控制器和 PHY 芯片,提供数据传输路径。RMII 接口是 MII 接口的简化版本,MII 需要 16 根通信线,RMII 只需 7 根通信,在功能上是相同的。图 36_1_8 为 MII 接口连接示意图,图 36_1_9 为 RMII 接口连接示意图。

TX_CLK:数据发送时钟线。标称速率为 10Mbit/s 时为 2.5MHz;速率为 100Mbit/s 时为 25MHz。RMII 接口没有该线。

RX_CLK:数据接收时钟线。标称速率为 10Mbit/s 时为 2.5MHz;速率为 100Mbit/s 时为 25MHz。RMII 接口没有该线。

TX_EN:数据发送使能。在整个数据发送过程保存有效电平。

TXD[3:0] 或 TXD[1:0]:数据发送数据线。对于 MII 有 4 位,RMII 只有 2 位。只有在 TX_EN 处于有效电平数据线才有效。

CRS:载波侦听信号,由 PHY 芯片负责驱动,当发送或接收介质处于非空闲状态时使能该 信号。在全双工模式该信号线无效。

COL:冲突检测信号,由 PHY 芯片负责驱动,检测到介质上存在冲突后该线被使能,并且 保持至冲突解除。在全双工模式该信号线无效。

RXD[3:0] 或 RXD[1:0]:数据接收数据线,由 PHY 芯片负责驱动。对于 MII 有 4 位,RMII 只有 2 位。在 MII 模式,当 RX_DV 禁止、RX_ER 使能时,特定的 RXD[3:0] 值用于传输来 自 PHY 的特定信息。

RX_DV:接收数据有效信号,功能类似 TX_EN,只不过用于数据接收,由 PHY 芯片负责 驱动。对于 RMII 接口,是把 CRS 和 RX_DV 整合成 CRS_DV 信号线,当介质处于不同状 态时会自切换该信号状态。

RX_ER:接收错误信号线,由 PHY 驱动,向 MAC 控制器报告在帧某处检测到错误。 REF_CLK:仅用于 RMII 接口,由外部时钟源提供 50MHz 参考时钟。

因为要达到 100Mbit/s 传输速度,MII 和 RMII 数据线数量不同,使用 MII 和 RMII 在时钟线的 设计是完全不同的。对于 MII 接口,一般是外部为 PHY 提供 25MHz 时钟源,再由 PHY 提供 TX_CLK 和 RX_CLK 时钟。对于 RMII 接口,一般需要外部直接提供 50MHz 时钟源,同时接入 MAC 和 PHY。

LAN8720A、DP83848C

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

img

img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

t=“img” style=“zoom: 67%;” />

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

更多资料点击此处获qu!!

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于STM32F407和ETH LWIP,我可以为您提供一些关于TCP client客户端的开发方面的信息。 首先,您需要使用STM32CubeMX软件来配置STM32F407的ETHLWIP库。在STM32CubeMX中,您可以配置以太网接口和选择使用LWIP协议栈。确保在配置期间启用TCP/IP协议。 一旦配置完成并生成代码,您可以在生成的代码中找到LWIP库的API函数以及以太网驱动程序的相关函数。在这里,您将能够设置和管理TCP连接。 以下是一个简单的TCP客户端示例代码,用于向服务器发送数据: ```c #include "lwip/api.h" #define SERVER_IP "192.168.0.100" #define SERVER_PORT 8080 void tcp_client_task(void *arg) { struct netconn *conn; err_t err; // 创建TCP连接 conn = netconn_new(NETCONN_TCP); if (conn != NULL) { ip_addr_t server_addr; // 设置服务器IP地址和端口 IP4_ADDR(&server_addr, 192, 168, 0, 100); // 连接服务器 err = netconn_connect(conn, &server_addr, SERVER_PORT); if (err == ERR_OK) { const char *data = "Hello, server!"; struct netbuf *send_buf; // 创建发送数据包 send_buf = netbuf_new(); if (send_buf != NULL) { // 将数据添加到发送数据包中 netbuf_ref(send_buf, data, strlen(data)); // 发送数据包 err = netconn_send(conn, send_buf); // 释放发送数据包 netbuf_delete(send_buf); } } // 关闭连接 netconn_close(conn); netconn_delete(conn); } vTaskDelete(NULL); } ``` 请注意,此示例代码仅用于演示目的,您可能需要根据您的具体需求进行修改。另外,还要确保正确初始化LWIP协议栈和以太网接口。 希望这些信息对您有所帮助!如果您有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值