网络通信实验——STM32F103ZE

一、DM9000

网络通信实验——STM32F103ZE_第1张图片
DM9000 有多种型号,有 100 引脚和 48 引脚的, ALIENTEK 战舰 STM32F103 V3 开发板选择的是 48 引脚的 DM9000,型号为 DM9000CEP。本教程讲解的DM9000 的内容都是针对 48 引脚的

1、 DM9000 中断引脚电平设置

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

2、 DM9000 数据位宽设置

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

3、 DM9000 直接内存访问控制(DMAC)

DM9000 支持 DMA 方式以简化对内部存储器的访问。在我们编程写好内部存储器地址后,就可以用一个读/写命令伪指令把当前数据加载到内部数据缓冲区,这样,内部存储器指定位置就可以被读/写命令寄存器访问。存储器地址将会自动增加,增加的大小与当前总线操作模式相同(8-bit 或 16-bit),接着下一个地址数据将会自动加载到内部数据缓冲区。内部存储器空间大小为 16K 字节。前 3K 字节单元用作发送包的缓冲区,其他 13K 字节用作接收包的缓冲区。所以在写存储器操作时,如果地址越界(即超出 3K 空间),在 IMR 寄存器 bit7 置位的情况下,地址指针将会返回到存储器 0 地址处。同样,在读存储器操作时,如果地址越界(即超出 16K 空间),在 IMR 寄存器 bit7 置位的情况下,地址指针将会返回到存储器0x0C00 地址处。

4、 DM9000 数据包发送

DM9000 有两个发送数据包: index1 和 index2,同时存储在 TX SRAM 中。发送控制寄存器(02h)控制循环冗余校验码(CRC)和填充(pads)的插入,其状态分别记录在发送状态寄存器I(03H)和发送状态寄存器 II(04H)中。发送器的起始地址为 0x00H,在软件或硬件复位后,默认的数据发送包index1。首先,将数据写入 TX SRAM 中,然后,在发送数据包长度寄存器中把数据字节数写入字节计数寄存器。置位发送控制寄存器(02H)的 bit0 位,则 DM9000 开始发送 index1 数据包。在 index1 数据包发送结束之前,数据发送包 index2被移入 TX SRAM中。在 index1数据包发送结束后,将 index2数据字节数写入字节计数寄存器中,然后,置位发送控制寄存器(02H)的 bit0 位,则 index2 数据包开始发送。以此类推,后面的数据包都以此方式进行发送。

5、 DM9000 数据包接收

RX SRAM 是一个环形数据结构。在软件或硬件复位后, RX SRAM 的起始地址为 0X0C00。每个接收数据包都包含有 CRC 校验域,数据域,以及紧跟其后的 4 节包头域。 4 字节包头格式为: 01h、状态、 BYTE_COUNT 低、 BYTE_COUNT 高。请注意:每个接收包的起始地址处在适当的地址边界,这取决于当前总线操作模式(8bit 或者 16bit)。

6、DM9000一般是挂载在STM32的FSMC上的

二、TCP/IP 协议简介

网络通信实验——STM32F103ZE_第2张图片

三、LWIP 简介

你可能感兴趣的:(STM32)