版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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/9(1)ENC28J60的存放器读写规则因为ENC28J60芯片采纳的是SPI串行接口模式,其对内部存放器读写的规则是先发操作码<前3bit>+存放器地点<后5bit>,再发送欲操作数据。经过不一样操作码来鉴别操作时读存放器(缓存区)仍是写存放器(缓冲区)或是其余。(2)ENC28J60芯片初始化程序ENC28J60发送和接收数据包前一定对内进行初始化设置,往常在复位后达成,不需再改正。voidenc28j60_init(void){//*****Bank1区有关存放器配置SPI操作块数据块初始化程序一开始先进行软件复位,111<操作码>+11111<参数>,N/AENC28J60_SOFT_RESET=0xFFenc28j60WriteOp(ENC28J60_SOFT_RESET,0,ENC28J60_SOFT_RESET);delay_ms(5);初始化接收缓冲区,设置接收开端地点NextPacketPtr=RXSTART_INIT;//读下一数据包指针enc28j60Write(ERXSTL,RXSTART_INIT&0xFF);enc28j60Write(ERXSTH,RXSTART_INIT>>8);设置接收读指针指向地点enc28j60Write(ERXRDPTL,RXSTART_INIT&0xFF);enc28j60Write(ERXRDPTH,RXSTART_INIT>>8);设置接收缓冲区的末端地点2/9ERXND存放器默认指向整个缓冲区的最后一个单元enc28j60Write(ERXNDL,RXSTOP_INIT&0xFF);enc28j60Write(ERXNDH,RXSTOP_INIT>>8);设置发送缓冲区的开端地点//ETXST存放器默认地点是整个缓冲区的第一个单元enc28j60Write(ETXSTL,TXSTART_INIT&0xFF);enc28j60Write(ETXSTH,TXSTART_INIT>>8);//*****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);//配置非背对背包之间的间隔enc28j60Write(MAIPGL,0x12);enc28j60Write(MAIPGH,0x0C);3/9配置背对背包之间的间隔enc28j60Write(MABBIPG,0x12);设置同意接收或发送的最大帧长度编程enc28j60Write(MAMXFLL,MAX_FRAMELEN&0xFF);enc28j60Write(MAMXFLH,MAX_FRAMELEN>>8);//*****Bank3区有关存放器配置将MAC地点写入MAADR0-MAADR5存放器中NOTE:MACaddressinENC28J60isbyte-backwardenc28j60Write(MAADR5,UIP_ETHADDR0);enc28j60Write(MAADR4,UIP_ETHADDR1);enc28j60Write(MAADR3,UIP_ETHADDR2);enc28j60Write(MAADR2,UIP_ETHADDR3);enc28j60Write(MAADR1,UIP_ETHADDR4);enc28j60Write(MAADR0,UIP_ETHADDR5);阻挡发送回路的自动环回enc28j60PhyWrite(PHCON2,PHCON2_HDLDIS);//*****Bank0区有关存放器配置enc28j60SetBank(ECON1);//设置存放器区中止使能enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,EIE,EIE_INTIE|EIE_PKTIE);包接收使能4/9enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON1,ECON1_RXEN);}说明:enc28j60Write函数内部包含了SetBank<设置存放器区>子程序,而enc28j60WriteOp直接依据spi操作码<前3bit>+存放器地点<后5bit>进行操作的。(3)ENC28J60发送数据包程序ENC28J60内的MAC在发送数据包时会自动生成前导切合帧开端定界符。此外,也会依据用户配置以及数据详细状况自动生成数据填补和CRC字段。主控器一定把全部其余要发送的帧数据写入ENC28J60缓冲储存器中。此外在待发送数据包前要增添一个包控制字节。包控制字节包含内容有:包超大帧使能位(PHUGEEN)、包填补使能位(PPADEN)、包CRC使能位(PCRCEN)和包改写位(POVERRIDE)四个内容。如图2所示。voidenc28j60PacketSend(u16_tlen,u8_t*packet){配置发送缓冲区写指针开端地点enc28j60Write(EWRPTL,TXSTART_INIT);enc28j60Write(EWRPTH,TXSTART_INIT>>8);依据给定数据域的大小配置发送缓冲区的末端地点enc28j60Write(ETXNDL,(TXSTART_INIT+len));enc28j60Write(ETXNDH,(TXSTART_INIT+len)>>8);给每个数据包的包控制字节预留一个单元enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM,0,0x00);//TODO,fixthisupif(uip_len<=TOTAL_HEADER_LENGTH)5/9{将数据包复制到缓冲区中enc28j60WriteBuffer(len,packet);}else{len-=TOTAL_HEADER_LENGTH;enc28j60WriteBuffer(TOTAL_HEADER_LENGTH,packet);enc28j60WriteBuffer(len,(unsignedchar*)uip_appdata);}将以太网控制存放器ECON1全部地点1,以发送缓冲区数据enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON1,ECON1_TXRTS);}图2发送数据包构造4)ENC28J60接收数据包程序u16_tenc28j60PacketReceive(u16_tmaxlen,u8_t*packet){u16_trxstat;u16_tlen;检测缓冲区能否收到一个数据包if(!(enc28j60Read(EIR)&EIR_PKTIF))检//测EIR.PKTIF能否为16/9{经过查察EPKTCNT存放器再次检查能否收到包if(enc28j60Read(EPKTCNT)==0)//EPKTCNT为0表示没有包接收/或包已被处理return0;}配置接收缓冲器读指针指向地点enc28j60Write(ERDPTL,(NextPacketPtr));enc28j60Write(ERDPTH,(NextPacketPtr)>>8);下一个数据包的读指针<详情可查察接收数据包构造图图3>NextPacketPtr=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);NextPacketPtr|=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)<<8;读数据包字节长度<详情可查察接收数据包构造图图3,status[15..0]>len=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);len|=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)<<8;//读接收数据包的状态<status[31..16]>rxstat=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);rxstat|=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)<<8;计算实质数据长度移除CRC字段的长度来减少MAC所报告长度len=MIN(len,maxlen);//从缓冲区中将数据包复制到packet中7/9enc28j60ReadBuffer(len,packet);//ERXRDPT读缓冲器指针//ENC28J60将向来写到该指针以前的一单元为止u16_trs,re;rs=enc28j60Read(ERXSTH);//ERXST接收缓冲区的开端地点rs<<=8;rs|=enc28j60Read(ERXSTL);re=enc28j60Read(ERXNDH);//ERXND接收缓冲区的末端地点re<<=8;re|=enc28j60Read(ERXNDL);if(NextPacketPtr-1<rs||NextPacketPtr-1>re){enc28j60Write(ERXRDPTL,(re));//
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生成式人工智能在高校体育教研活动中的应用与效果分析教学研究课题报告
- 26年基础护理技能全产业发展课件
- 26年基础护理农民工技能培训课件
- 26年关节僵硬护理原则课件
- 26年老年高血压护理实操考核标准课件
- 年度设备租赁服务合同二篇
- 湖北省名校2026届高三下学期九模考试化学试题含解析
- 护理技巧:提升患者满意度
- 肾消通络方:糖尿病肾病防治的机制与疗效探究
- 肾启发算法在化工过程建模中的应用与优化研究
- 乡政府车辆管理办法
- 水泥安全培训试题及答案
- 2025年养老院食堂营养改善工作总结与计划范文
- (高清版)DG∕TJ 08-2342-2020 地下式污水处理厂设计标准
- 实验室生物安全管理年度工作计划
- 2025年科技节活动小学科普知识竞赛题库及答案(共80题)
- 2024版科普仁爱版七年级英语下册单词表
- 燃气公司生产安全事故隐患排查治理体系手册
- 青岛科技大学《工程热力学》2023-2024学年第一学期期末试卷
- 静脉导管相关并发症
- 《义务教育道德与法治课程标准(2022年版)》解读
评论
0/150
提交评论