基于enc28j60的学习心得

article/2025/11/5 16:35:25

1.概述

enc28j60是带SPI接口的独立以太网控制器,兼容IEEE 802.3,集成MAC和10 BASE-T PHY,最高速度可达10Mb/s。基于enc28j60控制器的理解可阅读文章: ENC28J60学习笔记,在该文章内详细介绍控制器的使用方法,本文不对使用方法进行讲解,只提供代码下载路径: github开源地址。
在使用该控制器时,会涉及SPI通信协议。以OSI模型为标准,还会涉及物理层、链路层、网络层等知识。下面分别介绍。

2.spi通信协议

SPI(Serial Peripheral Interface)是一种高速的、全双工、同步的通信总线。SPI以主从方式工作,通常有一个主设备和一个或多个从设备,
SPI 控制器的信号线描述如下:
  • MISO:主设备数据输入,从设备数据输出;
  • MOSI:主设备数据输出,从设备数据输入;
  • SCLK: 时钟信号,由主设备产生;
  • SS: 从设备使能信号,由主设备控制。这个信号可以是SPI外设的一部分,也可用GPIO引脚实现。
SPI 典型接线方式如下。
 

SPI总线支持的四种工作方式,取决于串行同步时钟极性(CPOL)和串行同步时钟相位CPHA的组合。四种工作方式时序描述如下:

CPOL是用来决定SCLK时钟信号空闲时的电平,CPOL=0,空闲电平为低电平,CPOL=1时,空闲电平为高电平。
CPHA是用来决定采样时刻的,CPHA=0,在每个周期的第一个时钟沿采样,CPHA=1,在每个周期的第二个时钟沿采样。
SPI主模块和与之通信的外设时钟相位和极性应该一致。
spi具体协议可参看:https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
spi 在接口enc28j60ReadOp和enc28j60WriteOp中会使用:

//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
BYTE enc28j60ReadOp(BYTE op, BYTE address)
{// activate CSCSACTIVE;// issue read commandSPDR = op | (address & ADDR_MASK);waitspi();// read dataSPDR = 0x00;waitspi();// do dummy read if needed (for mac and mii, see datasheet page 29)if(address & 0x80){SPDR = 0x00;waitspi();}// release CSCSPASSIVE;return(SPDR);
}
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
void enc28j60WriteOp(BYTE op, BYTE address, BYTE data)
{CSACTIVE;// issue write commandSPDR = op | (address & ADDR_MASK);waitspi();// write dataSPDR = data;waitspi();CSPASSIVE;
}


3.网络知识

以太网是一种在计算系统间交换数据的网络拓扑,很多微控制器集成以太网MAC控制器,MAC控制器作为链路层协议控制器连接外部以太网PHY。

典型的以太网是mac利用MII访问phy,用rj-45接口外接水晶头,接入网线即可完成数据交换。


如果对mac,mii,phy等概念不是很熟悉可参考文章:http://www.cnblogs.com/jason-lu/articles/3195473.html

在文中提及了ARP协议,,ARP是地址解析协议,它的作用就是在以太网环境下,通过第三层(网络层)的IP地址来找寻第二层(链路层)的MAC地址,得到一张ARP缓存表,而正是依靠IP和mac地址才能保证网络通信的正常,如果进入第四层传输层时,我们开发人员只要关心IP即可,如TCP、UDP协议。在一次TCP协议传输时,会涉及ICMP,ARP协议等


http://chatgpt.dhexx.cn/article/kNYHsvEF.shtml

相关文章

单片机学习:手把手教你移植LWIP(ENC28J60)

这里只是移植,所以LWIP那么多的协议都不需要管,只要知道哪里需要我们修改,为什么修改就可以了。 上图就是整个移植的基本思路,非常清晰的三个层次。其实想想,本质上就是收发数据,只是LWIP协议通过对数据的…

单片机 STM32 HAL 网络模块 ENC28J60

文章目录 一、 简介二、特性三、示例代码 一、 简介 ENC28J60 是带有行业标准串行外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器。它可作为任何配备有 SPI 的控制器的以太网接口。ENC28J60 符合IEEE 802.3的全部规范&#x…

ENC28J60 简介

单片机以太网方案 单片机想要使用以太网的话,通常有以下几种方案: 如果 MCU 内部集成 MAC 控制器,则只需外接一个 PHY 芯片就可以了如果 MCU 内部没有 MAC 控制器,需要外接 MAC 芯片和 PHY 芯片,这两颗芯片可以分立也…

c语言程序设计 国外教材,标准C程序设计(第7版国外计算机科学经典教材)

导语 内容提要 E.巴拉古路萨米著李周芳译的《标准C程序设计(第7版国外计算机科学经典教材)》专门用于满足渴望成为程序员的学生,最新版按照Bloom分类法所定的学习目标来呈现主题,支持基于学习的成果。本书解释了基本概念和高级内容,且主要关注…

学习C语言的教材

作者: 阮一峰 日期: 2011年9月18日 我的C语言是自学的,这些年看过不少教材。 下面,我对其中一些教材做个点评。 1. How to Think Like a Computer Scientist: C version 这是我读过最易懂的C语言教材。 虽然它只讲解最基本的语法&…

新概念c语言周二强07答案,新概念C语言能力教程(普通高等教育十二五规划教材)...

导语 内容提要 周二强编写的《新概念C语言能力教程(普通高等教育十二五规划教材)》以先进的教学理念为指导,以培养编程能力与学习能力为目标,从全新的角度解析了C语言,高屋建瓴地阐释了C语言学习中的诸多难点,对序列点、指针等概念…

计算机程序c语言教材,全国计算机等级考试二级C语言程序设计教材(2018年版)...

2018年计算机二级教材:C语言程序设计 简介 书名:全国计算机等级考试二级教程——C语言程序设计(2018年版) 作者:教育部考试中心 出版社:高等教育出版社 出版时间:2017年11月 ISBN:9787040488524 定价&#…

树莓派(0)C语言教材学习

学习日记的功能主要是记录学习C语言的知识还有难上手的地方,之后会记录配置树莓派环境还有设计linux环境下C语言的实验题目 目前在K&R的《C语言程序设计》教材学习,前面的内容没有难度,基本上和高级程序设计语言的学习思路一样&#xff0…

国内C语言教材中几种值得商榷的说法

作者:巨同升 “C语言程序设计”这门课程在国内高校普遍开设已有近三十年,课程的建设和研究取得了长足的进步,涌现出了数量众多、各具特色的C语言教材。尽管如此,在许多C语言教材中还或多或少地存在着一些不准确甚至是值得商榷的说…

既然谭浩强的C语言教材不好,那应该选什么书作C语言教材?

易道云学院C语言/C语法学习不在于你看了多少书,而在于你实实在在写了多少有效代码。易道云学院 回到这个问题,其实我个人认为,看什么样的书,也是需要应对不一样的场景易道云学院去有目的地涉猎。我暂时想到了几种情况,…

c语言课本答案解析宋士银,c语言教材

22.40定价:28.00(8折) /2007-02-01 根据教育部高等学校计算机科学与技术教学指导委员会提出的《关于进一步加强高等学校计算机基础教学的意见暨计算机基础课程教学基本要求》的有关要求,编者组织了一批多年工作在教学一线且有丰富教学经验的教师编写了《…

C语言的环境变量配置

一、编辑器选择与安装 这边选用的编辑器是比较常见的devc,当然vscode和vc也都可以用来学习C语言,要软件和C语言环境变量的话可以加QQ群:373270625 第一步全部默认勾选就行无脑下一步 第二步选择一个放软件的文件夹,我这边选择的…

Jmeter环境变量配置

解压后 电脑桌面----》“计算机”图标----》鼠标右键选择“属性”----》点击高级系统设置----》高级---》环境变量页面 1.在系统变量框,点击“新建”,建立一个变量:JMETER_HOME,值为你解压的jmeter安装路径 2.配置classpath变量&#xff0c…

java设置环境变量jre_JRE环境变量配置图解

JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。如果大家需要查看JRE环境变量配置图解过程,看完本文你的问题也就迎刃而解了。 我们这里使用jre-7u67-windows-i586的32位JRE安装包,大小只有20多M,比JDK7小了…

Anaconda环境变量配置

Anaconda Anaconda环境变量配置 学习自用 解决问题 例如在VSCode中使用虚拟环境运行python代码导致的问题 *ImportError: DLL load failed while importing win32gui*新建系统变量,添加Anaconda安装路径 以后想用其他环境直接修改变量值就可以了 新建环境变量 变…

npm环境变量配置

NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用。允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。…

windows 10中R的环境变量配置

创建于:20221113 修改于:20221113 文章目录 1、情况介绍2、环境变量配置3、参考资料 1、情况介绍 win10 64bit系统中,已经安装好了R,Rtools ,Rstudio,并且已经配置了java开发环境。 上述两个链接讲述的非…

SVN环境变量配置

1、环境变量配置 2、复制地址 3、环境变量配置: 步骤: 右击电脑属性、高级系统设置、高级、环境变量、 系统变量、找到Path、双击进入、新建粘贴到刚刚复制的地址,确定即可。

Mac环境变量配置(Java)

1.打开终端: 2.输入命令:【/usr/libexec/java_home -V】,查看默认的jdk下载地址(绿色下划线的就是jdk默认路径)(注意⚠️:命令行终端是区分大小写的【-v 是不对的,必须是大写 -V】) …

adb环境变量配置

关于adb 什么ADB如何配置CMD命令窗口的使用 什么是adb 首先,我们先说说,adb是什么,他的全称叫安卓调试桥,也就是Android debug bridge ,它是连接Windows平台和安卓手机之间的软件调试工具,很适合软件开发…