做物联网,没有以太网怎么能行!
基于Enc28j60,我们团队独立实现了以太网精简协议栈TinyIP,目前支持ARP/ICMP/TCP/UDP/DHCP,还缺一个DNS就完整了。
TinyIP内置一个数据缓冲区,Enc28j60收到数据以后,放入缓冲区,然后TinyIP内部开始根据Ethernet/ARP/IP/ICMP/TCP/UDP/DHCP头部结构体对数据进行拆分和重组,执行业务逻辑。
TinyIP百分百是我们团队独立完成,没有抄袭那怕参考任何一款已有以太网协议(例如uip/lwip),各种协议结构作为国际标准是公开的,我们只需要按照协议去实现即可。
鄙视那些自己做不到就说别人抄袭的人!

#include "Sys.h"
#include "Enc28j60.h"
#include "SerialPort.h" #include "TinyIP/TinyIP.h" #include "conf.h" Spi* spi; Enc28j60* enc; TinyIP* tip; void OnPing(TinyIP* tip, ICMP_HEADER* icmp, byte* buf, uint len) {     debug_printf("Ping From ");     TinyIP::ShowIP(tip->RemoteIP);     debug_printf(" with Payload=%d\r\n", len); } void OnUdpReceived(TinyIP* tip, UDP_HEADER* udp, byte* buf, uint len) {     debug_printf("Udp From ");     TinyIP::ShowIP(tip->RemoteIP);     debug_printf(":%d with Payload=%d  ", tip->RemotePort, len);     TinyIP::ShowData(buf, len);     debug_printf(" \r\n"); } void OnTcpAccepted(TinyIP* tip, TCP_HEADER* tcp, byte* buf, uint len) {     debug_printf("TcpAccepted From ");     TinyIP::ShowIP(tip->RemoteIP);     debug_printf(":%d with Payload=%d\r\n", tip->RemotePort, len); } void OnTcpDisconnected(TinyIP* tip, TCP_HEADER* tcp, byte* buf, uint len) {     debug_printf("TcpDisconnected From ");     TinyIP::ShowIP(tip->RemoteIP);     debug_printf(":%d with Payload=%d\r\n", tip->RemotePort, len); } void OnTcpReceived(TinyIP* tip, TCP_HEADER* tcp, byte* buf, uint len) {     debug_printf("TcpReceived From ");     TinyIP::ShowIP(tip->RemoteIP);     debug_printf(":%d with Payload=%d  ", tip->RemotePort, len);     TinyIP::ShowData(buf, len);     debug_printf(" \r\n"); } void TestEthernet() {     debug_printf("\r\n\r\n");     debug_printf("TestEthernet Start......\r\n");     spi = new Spi(SPI_3);     enc = new Enc28j60(spi);     tip = new TinyIP(enc);     tip->UseDHCP = true;     tip->Init();          tip->OnPing = OnPing;     tip->OnUdpReceived = OnUdpReceived;     tip->OnTcpAccepted = OnTcpAccepted;     tip->OnTcpDisconnected = OnTcpDisconnected;     tip->OnTcpReceived = OnTcpReceived;     debug_printf("\r\n TestEthernet Finish!\r\n"); }

芯片GD32F103VK/GD32F103VE/STM32F103VE
TinyIP类内部根据系统ID生成随机的MAC地址和初始IP地址192.168.0.x,IP最后一字节就是系统ID第一字节。
开启DHCP后,将会自动获取IP地址。
必须实现ARP协议,否则别人找不到你这个IP所对应的MAC,进而无法通信。
支持Ping/TCP/UDP多种必要事件挂载。

以太网所有功能全开,RTM下固件ROM大概9k。

End.

                转石头大哥

转载于:https://www.cnblogs.com/Ph-one/p/3960961.html

SmartOS之以太网精简协议栈TinyIP相关推荐

  1. 基于FPGA的万兆以太网UDP/IP协议栈讲解

    基于FPGA的UDP/IP协议栈 1 udp协议分析 1.1 udp介绍 UDP即User Datagram Protocol,用户数据报协议,还有一个耳熟能详的叫做TCP(Transmission ...

  2. linux升级ipv6协议栈,IPv6技术及基于Linux平台IPv6协议栈的实现

    IPv6技术及基于Linux平台IPv6协议栈的实现 简单介绍了 IPv6的基本原理和特征 ,重点探讨了 IPv6技术在 L inux环境中的应用 :对支持 IPv6协 (本文共5页) 阅读全文> ...

  3. 【AUTOSAR】【以太网】 EthIf

    目录 一.概述 二.说明 三.依赖模块 四.功能说明 4.1 以太网BSW协议栈

  4. [工业互联-3]:工业有线互联总线之工业以太网总线

    目录 第1章 工业以太网概述 1.1 概述 1.2 工业以太网与普通以太网的比较 1.3 以太网在工业控制领域中应用的优势 1.4 工业以太网与其他工业互联总线的比较 第2章 工业以太网网络部署 第3 ...

  5. 【AUTOSAR】 【以太网】EthTrcv

    目录 一.概述 二.依赖 三.功能 3.1 以太网BSW协议栈 3.1.1 索引方案 3.1.2 睡眠唤醒

  6. i.MX6网卡驱动程序fec.c的分析(AR8035网卡驱动程序的详细分析)之二

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 今天接着分析上次没有分析完的i.MX6网卡驱动程序.上一篇分析了iM ...

  7. powerlink源码解析与使用

    powerlink是底层基于标准以太网,协议栈基于canopen协议的工业互联网协议. 主要可分为三个模块,用于节点通信的PDO和SDO.协议栈和对象字典.对上用户接口. 1.协议栈和对象字典 对象字 ...

  8. 浙江大学控制科学与工程学院冯冬芹教授团队招聘FPGA工程师1名

    我们迫切需要您这样的高水平.高技术人才加入,与公司共同成长,加入我们后,如果您成绩出色,您不单单会有高薪,后期都将成为企业发展的重要的合伙人,一起与老板创业,一起分享创业带来的成果(持股),后续会有很 ...

  9. TCP/IP网络协议栈:以太网数据包结构、802.3、MTU

    <TCP/IP网络协议栈:以太网数据包结构.802.3> <TCP/IP网络协议栈:ARP协议详解> <TCP / IP攻击:ARP缓存中毒的基本原理.TCP序列号预测和 ...

最新文章

  1. 内存是拿来用的不是拿来看的
  2. indesign选中不了图片删除_(54)批量给图片加上说明文字
  3. Java——标签组件:JLabel
  4. 生成5个不同的随机数
  5. java检测textarea换行_Textarea和Java 换行符
  6. lambda java kotlin,Kotlin之Lambda编程
  7. 分享一个网盘:千脑网
  8. Mockito + JUnit 单元测试实例
  9. TOM邮箱容量满了收发不了邮件?你应该快速做到这些事
  10. 1寸证件照排版、1寸照片、1寸证件照尺寸,不改变图片大小改分辨率,不改变分辨率改变(保证分辨率)...
  11. 3ds Max 布尔(Boolean)运算——象棋的制作
  12. VS2008简体中文版下载及安装破解
  13. 香港理工大学,新设“元宇宙科技”专业
  14. android.bp 编译,Android编译系统中的Android.bp
  15. 系统设计原则之里氏代换原则
  16. ios 事件穿透的原因和解决方法
  17. 使用POI 导出word模板文件
  18. 数据库PostrageSQL-证书认证
  19. 最详细的golang + 私库(gitlab gitee) 模块开发 这一篇文章解决所有问题
  20. 北京宣武区一个居民区停电三个月

热门文章

  1. 关于IBM Lotus的JAVA代理进入jar包的说明
  2. c++仪表盘。。。附源码
  3. 这样写的博客才有更多的人愿意看
  4. 在网上常听到说CEO CTO CIO CGO COO CFO什么什么..现在了解了一下..呵呵
  5. MspEmu 一阶段小结
  6. Linux快速查看某条命令的版本和存放的位置(ls -l `which mvn`)
  7. 笑傲江湖,独孤求败-NetScaler MAS应用交付神功详解
  8. 【R】神经网络相关的R包
  9. 01.The Introduction of Linux
  10. 常用的 服务器 与 交换机