ENC28J60驱动程序说明_第1页
ENC28J60驱动程序说明_第2页
ENC28J60驱动程序说明_第3页
ENC28J60驱动程序说明_第4页
ENC28J60驱动程序说明_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Enc28j60以太网芯片驱动程序简介本介绍可分为三块内容:1.以太网数据帧结构符合IEEE802.3标准的以太网帧的长度是介于64-1516字节之间。主要由目标MAC地址、源MAC地址、类型/长度字段、数据有效负载、可选填充字段和循环冗余校验组成,另外在通过以太网介质发送数据包时,一个7字节的前导字段和一字节的帧起始定界符被附加到以其次,在数据字段处:以太网数据字段的长度可以在0-1500字节之间变换,超过这一范围的数据包是违反以太网标准的,这些包将会被大多数以太网节点丢弃。若设置ENC28J60的巨大帧使能位为1,可以发送和接收超大规格数据包。在数据域中的填充字段是在数据字段小于46字节时

2、起填充作用。ENC28J60在发送数据包时,会自动填充0。ENC28J60在接收时自动拒绝小于18字节的数据包。数据填充亦可由主控芯片来配置。最后,在CRC处:ENC28J60在接收数据包时将检查每个传入数据包的CRC,通过检测ERXFCON.CRCEN位来判断CRC并发操作码输入数据包的CRC是否正确。ENC28J60CRC并发操作码送它。发送数据包的CRC亦可由主控芯片来提供。2驱动程序介绍ENC28J60的寄存器读写规则由于ENC28J60芯片采用的是SPI串行接口模式,其对内部寄存器读写的规则是先发前3bit+寄存器地址后5bit,再发送欲操作数据。通过不同操作码来判别操作时读寄存器(

3、缓存区)还是写寄存器(缓冲区)或是其它。ENC28J60芯片初始化程序ENC28J60发送和接收数据包前必须对内进行初始化设置,通常在复位后完成,不需再更改。voidenc28j60_init(void)/*Bankl区相关寄存器配置SPI操作块数据块/初始化程序一开始先进行软件复位,111操作码+11111参数,N/A/ENC28J60_SOFT_RESET=0 xFFenc28j60WriteOp(ENC28J60_SOFT_RESET,0,ENC28J60_SOFT_RESET);delay_ms(5);/初始化接收缓冲区,设置接收起始地址NextPacketPtr=RXSTART_IN

4、IT;/读下一数据包指针enc28j60Write(ERXSTL,RXSTART_INIT&0 xFF);enc28j60Write(ERXSTH,RXSTART_INIT8);/设置接收读指针指向地址enc28j60Write(ERXRDPTL,RXSTART_INIT&0 xFF);enc28j60Write(ERXRDPTH,RXSTART_INIT8);/设置接收缓冲区的末尾地址/ERXND寄存器默认指向整个缓冲区的最后一个单元enc28j60Write(ERXNDL,RXSTOP_INIT&0 xFF);enc28j60Write(ERXNDH,RXSTOP_INIT8);/设置发送

5、缓冲区的起始地址/ETXST寄存器默认地址是整个缓冲区的第一个单元enc28j60Write(ETXSTL,TXSTART_INIT&0 xFF);enc28j60Write(ETXSTH,TXSTART_INIT8);/*Bank2区相关寄存器配置/MAC初始化配置/MAC接收使能,下行程序段表示使能MAC接收,使能IEEE流量控制enc28j60Write(MACON1,MACON1_MARXEN|MACON1_TXPAUS|MACON1_RXPAUS);/MACON2清零,让MAC退出复位状态enc28j60Write(MACON2,0 x00);/下行程序段表示使能自动填充和自动CRC

6、添加enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,MACON3,MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN);/enc28j60Write(MACON3,MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN);/配置非背对背包之间的间隔enc28j60Write(MAIPGL,0 x12);enc28j60Write(MAIPGH,0 x0C);/配置背对背包之间的间隔enc28j60Write(MABBIPG,0 x12);/设置允许接收或发送的最大帧长度编程enc28j60Wr

7、ite(MAMXFLL,MAX_FRAMELEN&0 xFF);enc28j60Write(MAMXFLH,MAX_FRAMELEN8);/*Bank3区相关寄存器配置/将MAC地址写入MAADR0-MAADR5寄存器中/NOTE:MACaddressinENC28J60isbyte-backwardenc28j60Write(MAADR5,UIP_ETHADDR0);enc28j60Write(MAADR4,UIP_ETHADDR1);enc28j60Write(MAADR3,UIP_ETHADDR2);enc28j60Write(MAADR2,UIP_ETHADDR3);enc28j60W

8、rite(MAADR1,UIP_ETHADDR4);enc28j60Write(MAADR0,UIP_ETHADDR5);/阻止发送回路的自动环回enc28j60PhyWrite(PHCON2,PHCON2_HDLDIS);/*Bank0区相关寄存器配置enc28j60SetBank(ECONl);/设置寄存器区/中断使能enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,EIE,EIE_INTIE|EIE_PKTIE);/包接收使能enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON1,ECON1_RXEN);说明:enc28j60

9、Write函数内部包含了SetBank设置寄存器区子程序,而enc28j60WriteOp直接根据spi操作码前3bit+寄存器地址后5bit进行操作的。(3)ENC28J60发送数据包程序ENC28J60内的MAC在发送数据包时会自动生成前导符合帧起始定界符。此外,也会根据用户配置以及数据具体情况自动生成数据填充和CRC字段。主控器必须把所有其它要发送的帧数据写入ENC28J60缓冲存储器中。另外在待发送数据包前要添加一个包控制字节。包控制字节包括内容有:包超大帧使能位(PHUGEEN)、包填充使能位(PPADEN)、包CRC使能位(PCRCEN)和包改写位(POVERRIDE)四个内容。如

10、图2所示。voidenc28j60PacketSend(u16_tlen,u8_t*packet)/配置发送缓冲区写指针起始地址enc28j60Write(EWRPTL,TXSTART_INIT);enc28j60Write(EWRPTH,TXSTART_INIT8);/根据给定数据域的大小配置发送缓冲区的末尾地址enc28j60Write(ETXNDL,(TXSTART_INIT+len);enc28j60Write(ETXNDH,(TXSTART_INIT+len)8);/给每个数据包的包控制字节预留一个单元enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM,0,

11、0 x00);/TODO,fixthisupif(uip_len8);/下一个数据包的读指针NextPacketPtr=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);NextPacketPtr|=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)8;/读数据包字节长度len=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);len|=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)8;/读接收数据包的状态rxstat=enc28j60ReadOp(ENC28J60_READ

12、_BUF_MEM,0);rxstat|=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)8;/计算实际数据长度/移除CRC字段的长度来减少MAC所报告长度len=MIN(len,maxlen);/从缓冲区中将数据包复制到packet中enc28j60ReadBuffer(len,packet);/ERXRDPT读缓冲器指针/ENC28J60将一直写到该指针之前的一单元为止u16_trs,re;rs=enc28j60Read(ERXSTH);/ERXST接收缓冲区的起始地址rs=8;rs|=enc28j60Read(ERXSTL);re=enc28j60Read(E

13、RXNDH);/ERXND0收缓冲区的末尾地址re=8;re|=enc28j60Read(ERXNDL);if(NextPacketPtr-1re)enc28j60Write(ERXRDPTL,(re);/ERXRDPT接收读地址enc28j60Write(ERXRDPTH,(re)8);elseenc28j60Write(ERXRDPTL,(NextPacketPtr-1);enc28j60Write(ERXRDPTH,(NextPacketPtr-1)8);/数据包个数递减位EPKTCNT减1enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);returnlen;前一数据包结束下一个数据包的指针结构1059h106AM10

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论