网站大量收购独家精品文档,联系QQ:2885784924

Enc28j60以太网芯片驱动程序简介-Rming.doc

Enc28j60以太网芯片驱动程序简介-Rming.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Enc28j60以太网芯片驱动程序简介-Rming

Enc28j60以太网芯片驱动程序简介 本介绍可分为三块内容: 1.以太网数据帧结构 符合IEEE802.3标准的以太网帧的长度是介于64-1516字节之间。主要由目标MAC地址、源MAC地址、类型/长度字段、数据有效负载、可选填充字段和循环冗余校验组成,另外在通过以太网介质发送数据包时,一个7字节的前导字段和一字节的帧起始定界符被附加到以太网数据包的开头。以太网数据包的结构如图1所示。 图1以太网数据帧结构图 ENC28J60在发送或接收数据包时由以下几点值得关注: 首先,ENC28J60具有一个接收过滤器可以丢弃或接收具有组播、广播或单播目标地址的数据包。 其次,在数据字段处: 以太网数据字段的长度可以在0-1500字节之间变换,超过这一范围的数据包是违反以太网标准的,这些包将会被大多数以太网节点丢弃。若设置ENC28J60的巨大帧使能位为1,可以发送和接收超大规格数据包。 在数据域中的填充字段是在数据字段小于46字节时起填充作用。ENC28J60在发送数据包时,会自动填充0。ENC28J60在接收时自动拒绝小于18字节的数据包。数据填充亦可由主控芯片来配置。 最后,在CRC处: ENC28J60在接收数据包时将检查每个传入数据包的CRC,通过检测ERXFCON.CRCEN位来判断输入数据包的CRC是否正确。ENC28J60在发送数据包时,将自动生成一个有效的CRC并发送它。发送数据包的CRC亦可由主控芯片来提供。 2.驱动程序介绍 (1)ENC28J60的寄存器读写规则 由于ENC28J60芯片采用的是SPI串行接口模式,其对内部寄存器读写的规则是先发操作码前3bit+寄存器地址后5bit,再发送欲操作数据。通过不同操作码来判别操作时读寄存器(缓存区)还是写寄存器(缓冲区)或是其它。 (2)ENC28J60芯片初始化程序 ENC28J60发送和接收数据包前必须对内进行初始化设置,通常在复位后完成,不需再更改。 void enc28j60_init(void) { //*****Bank1区相关寄存器配置 SPI操作块 数据块 //初始化程序一开始先进行软件复位,111操作码+11111参数, N/A // ENC28J60_SOFT_RESET=0xFF enc28j60WriteOp(ENC28J60_SOFT_RESET, 0, ENC28J60_SOFT_RESET); delay_ms(5); //初始化接收缓冲区,设置接收起始地址 NextPacketPtr = RXSTART_INIT; //读下一数据包指针 enc28j60Write(ERXSTL, RXSTART_INIT0xFF); enc28j60Write(ERXSTH, RXSTART_INIT8); //设置接收读指针指向地址 enc28j60Write(ERXRDPTL, RXSTART_INIT0xFF); enc28j60Write(ERXRDPTH, RXSTART_INIT8); //设置接收缓冲区的末尾地址 // ERXND寄存器默认指向整个缓冲区的最后一个单元 enc28j60Write(ERXNDL, RXSTOP_INIT0xFF); enc28j60Write(ERXNDH, RXSTOP_INIT8); //设置发送缓冲区的起始地址 //ETXST寄存器默认地址是整个缓冲区的第一个单元 enc28j60Write(ETXSTL, TXSTART_INIT0xFF); enc28j60Write(ETXSTH, TXSTART_INIT8); //*****Bank2区相关寄存器配置 //MAC初始化配置 //MAC接收使能,下行程序段表示使能MAC接收,使能IEEE流量控制 enc28j60Write(MACON1, MACON1_MARXEN|MACON1_TXPAUS|MACON1_RXPAUS); //MACON2清零,让MAC退出复位状态 enc28j60Write(MACON2, 0x00); //下行程序段表示使能自动填充和自动CRC添加 enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,MACON3, MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN); //enc28j60Write(MACON3, MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN); //配置非背对背包之间的间隔 enc28j60W

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档