STM32+LWIP网络协议栈移植(网卡采用DM9000)

发布时间:2023-08-28  


一、环境介绍


MCU: STM32F103ZET6


代码开发工具: Keil5

TCP/IP协议栈: LWIP

网卡: DM9000

本篇文章主要讲解如何在STM32F103工程里添加移植LWIP协议,最终完成TCP服务器、TCP客户端的通信测试。 网卡采用的是DM9000,工程代码中,采用STM32的FSMC接口来驱动DM900网卡,DM9000是并口网卡,引脚多,但是速度快,也可以采用其他网卡,SPI协议的、UART协议的等。 比如:ENC28J60。 因为主要是讲LWIP协议栈的移植,所以网卡相关的代码就没有细说(需要准备一个网卡可以正常通信的工程,再移植)。


下面进行工程的移植代码比较多,需要下载对应版本的LWIP源码,STM32本身的DM9000网卡代码也比较多,文章里会讲解移植的详细的过程,代码贴出了核心部分。


为了方便大家下载体验,下面给了个下载链接,里面包含了本次文章移植的工程、LWIP源码,移植文档等,方便直接体验。地址在这里:https://download.csdn.net/download/xiaolong1126626497/19907087


资料包里的内容如下:


poYBAGDYdXCAWkKMAAAAK8RNs4s030.png


poYBAGDYdXCAWkKMAAAAK8RNs4s030.png



二、D9000网卡

2.1 DM9000简介

DM9000 是一款完全集成的、性价比高、引脚数少、带有通用处理器接口的单芯片快速以太网控制器。 自带一个 10/100M PHY 和 4K 双字的 SRAM ,DM9000A 为适应各种处理器提供了8位、16 位数据接口访问内部存储器,DM9000拥有自动协商功能,DM9000特性如下:

1、集成自适应10/100M收发器。

2、内置16k字节的SRAM。

3、支持硬件帧校验。

4、兼容3.3V和5.0V输入输出电压。

DM9000 有多种型号,有 100 引脚和 48 引脚的, 开发板选择的是 48 引脚的 DM9000,型号为 DM9000CEP。

2.2 DM9000 中断引脚电平设置

DM9000的34(INT)引脚为中断输出引脚,默认情况下该引脚高电平有效。可以通过设置DM9000 的 20(EECK)引脚来改变 INT 的有效电平,当 EECK 拉高以后, INT 低电平有效,否则的话 INT 是高电平有效的。开发板上 R66 电阻为 EECK 的上拉电阻,因此开发板上 DM9000 的 INT 引脚是低电平有效的。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png


2.3 DM9000 数据位宽设置

前面我们提了一下 DM9000 支持 8 位和 16 位两种数据位宽,可以通过 DM9000 的 21(EECS)引脚设置其数据位宽,当 EECS 上拉的时候 DM9000 选择 8 位数据位宽,否则的话选择 16 位数据位宽。开发板上的 R65 电阻为 EECS 的上拉电阻,但是此电阻并未焊接! DM9000 芯片的数据位宽为 16 位。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png



2.4 DM9000寄存器表

寄存器

描述

寄存器地址

默认值

NCR

网络控制寄存器。

00H

00H

NSR

网络状态寄存器。

01H

00H

TCR

发送控制寄存器。

02H

00H

TSR I

发送状态寄存器 I。

03H

00H

TSR II

发送状态寄存器 II。

04H

00H

RCR

接收控制寄存器。

05H

00H

RSR

接收状态寄存器。

06H

00H

ROCR

接收溢出计数寄存器。

07H

00H

BPTR

背压门限寄存器。

08H

37H

FCTR

溢出控制门限寄存器。

09H

38H

FCR

TX/RX 流量控制寄存器。

0AH

00H

EPCR

EEPROM/PHY 控制寄存器。

0BH

00H

EPAR

EEPROM/PHY 地址寄存器。

0CH

40H

EPDRL

EEPROM/PHY 数据寄存器低位。

0DH

XXH

EPDRH

EEPROM/PHY 数据寄存器高位。

0EH

XXH

WCR

唤醒控制寄存器。

0FH

00H

PAR

物理地址寄存器。

10H~15H

由 EEPROM 决定

MAR

广播地址寄存器。

16H~1DH

XXH

GPCR

通用目的控制寄存器(8bit 模式)。

1EH

01H

GPR

通用目的寄存器。

1FH

XXH

TRPAL

TX SRAM 读指针地址低字节。

22H

00H

TRPAH

TX SRAM 读指针地址高字节。

23H

00H

RWPAL

RX SRAM 写指针地址低字节。

24H

00H

RWRAH

RX SRAM 写指针地址高字节。

25H

0CH

VID

厂家 ID。

28H~29H

0A46H

PID

产品 ID。

2AH~2BH

9000H

CHIPR

芯片版本。

2CH

18H

TCR2

发送控制寄存器 2。

2DH

00H

OCR

操作控制寄存器。

2EH

00H

SMCR

特殊模式控制寄存器。

2FH

00H

ETXCSR

即将发送控制/状态寄存器。

30H

00H

TCSCR

发送校验和控制寄存器。

31H

00H

RCSCSR

接收校验和控制状态寄存器。

32H

00H

MRCMDX

内存数据预取读命令寄存器(地址不加 1)。

F0H

XXH

MRCMDX1

内存数据读命令寄存器(地址不加 1)。

F1H

XXH

MRCMD

内存数据读命令寄存器(地址加 1)。

F2H

XXH

MRRL

内存数据读地址寄存器低字节。

F4H

00H

MRRH

内存数据读地址寄存器高字节。

F5H

00H

MWCMDX

内存数据写命令寄存器(地址不加 1)

F6H

XXH

MWCMD

内存数据写命令寄存器(地址加 1)。

F8H

XXH

MWRL

内存数据写地址寄存器低字节。

FAH

00H

MWRH

内存数据写地址寄存器高字节。

FBH

00H

TXPLL

TX 数据包长度低字节寄存器。

FCH

XXH

TXPLH

TX 数据包长度高字节寄存器。

FDH

XXH

ISR

中断状态寄存器。

FEH

00H

IMR

中断屏蔽寄存器。

FFH

00H







2.5 DM9000常用寄存器介绍

NCR、 NSR、 TCR、 RCR、 FCTR、 BPTR、 TCR2、 ISR、 IMR。

NCR(网络控制寄存器)寄存器

BIT

7

6

5

4

3

2

1

0

名称

RESERVED

WAKEEN

RESERVED

FCOL

FDX

LBK

RST


FCOL:强制冲突模式,用于检测。

FDX:内部 PHY 全双工模式。

LBK:回环模式(LoopBack)

00 正常;

01 MAC 内部回环;

10 内部 PHY100M 模式数字回环;

11 保留;

RST:置 1 软件复位, 10us 后自动清零。

NSR 寄存器(网络状态寄存器)

BIT

7

6

5

4

3

2

1

0

名 称

SPEED

LINKST

WAKEST

RESERVED

TX2END

TX1END

RXOV

RESERVED

SPEED:网络速度,在使用内部 PHY 情况下,0 表示 100Mbps,1 表示 100Mbps,当 LINKST=0时,此位无意义。

LINKST:连接状态, 0 为连接失败, 1 位已连接。

TX2END: TX(发送)数据包 2 完成标志,读取或写 1 将清零该位。

TX1END: TX(发送)数据包 1 完成标志,读取或写 1 将清零该位。

RXOV: RX(接收)FIFO 溢出标志。


TCR 寄存器(发送控制寄存器)

BIT

7

6

5

4

3

2

1

0

名 称

RESERVED

TJDIS

EXCECM

PAD_DIS2

CRC_DIS2

PAD_DIS1

CRC_DIS1

TXREQ

TJDIS: Jabber 传输禁止。

1,禁止 Jabber 传输定时器(2048 字节)。

0,使能。

EXCECM:严重冲突模式控制

0,当冲突计数多于 15 则终止本次数据包。

1,始终尝试发送本次数据包。

PAD_DIS2:禁止为数据包 II 添加填充。

CRC_DIS2:禁止为数据包 II 添加 CRC 校验。

PAD_DIS1:禁止为数据包 I 添加填充。

CRC_DIS1:禁止为数据包 I 添加 CRC 校验。

TXREQ: TX(发送)请求,发送完成后自动清零该位


RCR 寄存器(发送控制寄存器)

BIT

7

6

5

4

3

2

1

0

名称

RESERVED

WTDIS

DIS_LONG

DIS_CRC

ALL

RUNT

PRMSC

RXEN

WTDIS:看门狗定时器(2048 字节)禁止。

1,进制

0,使能

DIS_LONG:丢弃长数据包, 1,丢弃数据包长度超过 1522 字节的数据包。

DIS_CRC:丢弃 CRC 校验错误数据包。

ALL:允许广播。

RUNT:允许小于最小长度的数据包。

PRMSC:各种模式。

RXEN:接收使能。


FCTR 寄存器(流控制阈值寄存器)

BIT

7

6

5

4

3

2

1

0

名称

HWOT

HWOT

HWOT

HWOT

LWOT

LWOT

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>