AC620FPGA学习笔记——RTL8201+MAC+ARP

AC620FPGA学习笔记——RTL8201+MAC+ARP

RTL8201+MAC+ARP

工程地址:https://github.com/HaHaHaHaHaGe/Planof2019_half/tree/master/Course_Project/FPGA/class12_RTL8201_MII_MAC
使用RTL8201 PHY芯片的MII接口方式在FPGA上实现MAC底层驱动,并构建ARP模块向指定IP发送ARP包

整体框架

在这里插入图片描述
这个图是test顶层,左边是一个定时器,定时去发送arp包
在这里插入图片描述
PHY芯片的底层驱动,包括了crc32的检验与ram缓存

Wireshark

在这里插入图片描述

代码部分

逻辑复杂更多详细内容在github

顶层代码

module arp_test(
	clk,
	rst,
	
	ETH_TX_EN,
	ETH_TX_CLK,
	ETH_TX_DATA,
	ETH_RST_N
);

input clk,rst,ETH_TX_CLK;
output [3:0]ETH_TX_DATA;
output ETH_TX_EN,ETH_RST_N;

wire [7:0]SEND_DATA;
wire SENT_BUSY,CLK,RST;
wire busy,SEND_EN;
reg start;
ARP ARP1(
	.mac_addr(48'h12_34_56_78_90_ab),
	.src_ip(32'hc0_a8_00_09),
	.dst_ip(32'hc0_a8_00_03),
	.start(start),
	.busy(busy),
	.clk(clk),
	.rst(rst),
	
	.SEND_DATA(SEND_DATA),
	.SENT_BUSY(SENT_BUSY),
	.SEND_EN(SEND_EN),
	.CLK(CLK),
	.RST(RST)
);



RTL8201_MII_MAC RTL8201_MII_MAC1(
	//ETH_TX_ER,
	.ETH_TX_EN(ETH_TX_EN),
	.ETH_TX_CLK(ETH_TX_CLK),
	.ETH_TX_DATA(ETH_TX_DATA),
	//ETH_MDC,
	//ETH_MDIO,
	
	.ETH_RST_N(ETH_RST_N),
	
	.ETH_RX_DV(),
	.ETH_RX_ER(),
	.ETH_RX_CLK(),
	.ETH_RX_DATA(),
	//ETH_COL,
	.ETH_CRS(),
	
	
	
	.SEND_DATA(SEND_DATA),
	.SENT_BUSY(SENT_BUSY),
	.SEND_EN(SEND_EN),
	.CLK(CLK),
	.RST(RST)
);

reg [31:0]cnt;
always@(posedge clk,negedge rst) begin
if(!rst) begin
	cnt <= 0;
	start <= 0;
end
else if(cnt == 32'd80_000_000) begin
	start <= 1;
	cnt <= 0;
end
else begin
	start <= 0;
	
	cnt <= cnt + 1;
end
end

endmodule
### 如何使用 RTL8201 和 STM32 进行网络接口设计 #### 硬件连接 为了使STM32能够与RTL8201物理层芯片协同工作,建立稳定的以太网连接,硬件部分的设计至关重要。通常情况下,STM32系列微控制器会集成MAC(Media Access Control),而PHY(Physical Layer)则由外部组件如RTL8201来完成。两者之间通过RMII(Reduced Media Independent Interface)或MII(Media Independent Interface)相接。 - **电源供应** - VCC_3V3为整个电路供电,确保电压稳定可靠。 - **复位线路** - nRST引脚需接到STM32的NRST上,以便于系统初始化时重置RTL8201[^3]。 - **MDIO和MDC控制线** - MDIO (Management Data Input/Output) 及 MDC (Management Data Clock) 需要分别对应到STM32上的指定管脚,用于配置和读取PHY寄存器状态。 - **RMII数据交换路径** - TX_EN, TXD[0:1], RX_ER, CRS_DV, RXD[0:1]这些信号端口应按照手册指示正确无误地对接至MCU相应位置,从而构建起双向的数据流通渠道[^4]。 ```c // 初始化函数示例代码片段 void ETH_Init(void){ // GPIO、ETH外设时钟开启... /* RMII模式下GPIO配置 */ GPIO_InitStruct.Pin = GPIO_PIN_X | ... ; // 定义具体针脚 HAL_GPIO_Init(GPIOX, &GPIO_InitStruct); EthHandle.Instance = ETH; EthHandle.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE; // 自动协商启用 EthHandle.Init.PhyAddress = PHY_ADDRESS_DEFAULT; // 默认PHY地址 EthHandle.Init.MACAddr = MAC_ADDR; // 设置MAC地址 EthHandle.Init.RxMode = ETH_RXPOLLING_MODE; // 接收方式设定 EthHandle.Init.ChecksumFeatures = ETH_CHECKSUM_BY_HARDWARE; // 校验计算选项 if(HAL_ETH_Init(&EthHandle)!=HAL_OK){/* 错误处理 */} } ``` 上述代码展示了如何利用STM32CubeMX生成的基础框架进一步定制化Ethernet模块的相关参数设置过程[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值