新技术新工艺2012年第7期
2.3实现SPI通信 化的基础,其抗干扰能力与可靠性均可有所提高。
2.2主处理器的软件设计 2.3.1 ENc28J6O的SPI时序
2.2.1合理利用程序存储器
要提高程序的设计质量,首先要了解处理器的
ENC28J60能够和很多单片机的串行外设接口
SPI直接连接,不过该器件不支持时钟极性选择,只
体系结构。PICI8F2455的存储系统是以哈佛结构
为基础,不仅具备8位处理器功耗低且简洁的优势,
还具备32位处理器计算性能良好的特点,成本相对
较低,且具备增强型的闪存程序存储器。其功能包
支持SPI模式0,0。在空闲时,SCK的SPI端口要
求其保持低电平,SCK的上升沿数据由SI引脚输
入ENC芯片的内部,在其下降沿数据会进行更新,
然后由SO引脚输出。在整个操作执行过程中,CS
括故障保护时钟监视器、双速戾动、较高的存储器耐
引脚要保持低电平,完成操作时再返回高电平。
擦写能力、扩展的指令集、1O位A/D转换器以及专 2.3.2 PIC18F2455和ENC28J60引脚连接
用的ICD/ICSP端口和增强型可寻址USART等。 P1C18F2455引脚和ENC28J60引脚相对应,其
PIC18F2455自身具备24 KB的闪存存储器,可以 对应关系分别为:RB2对应SO;RB3对应SI;RB4
存储12 288条指令。鉴于其存储器的容量比较大, 对应SCK;RB5对应CS。由于所有数据的发送及
因此在设计程序时,可以进行数据结构及查找表的
控制均由单片机来负责,其为主动方,因此编程设计
创建。程序中创建查找表便于存储常量数据,查找 是针对PICI8F2455的I/O引脚来操作。针对
表的实现方法包括计算GOTO以及表读写2种。 ENC28J60时序写出单片机引脚时序控制状态机图
2.2.2数据存储器的高效寻址 如图2所示。
在PICI8F2455器件中,通过静态RAM存储器
实现数据存储器,共2 084字节。数据存储器要实 初态 { s需
一
一
现快带存取全部地址,就要具备有效的寻址机制。
间接寻址是利用文件选择寄存器FSR作为指针,指
完Ii
待i
向被读取或写入的单元,来实现其无需在指令中给
出固定地址即可允许访问数据存储器中单元的功
、‘ 1_,●_‘_- 能。每对FSR寄存器中包括5个额外间接操作数,
避 一 S’C上K升_. ___-___ -一产沿生 / 、 ,
这些额外间接操作是虚拟的寄存器,无法对它们直 图2 ENC28J60时序控制状态机图
接进行读写,但提高了数据寻址的效率。 由于只规定SPI通信速度的上限,因此利用
2.2.3 中断的安全处理 SPI进行通信时,编写的软件满足在选定的变通I/
P1C18F2455处理器具备可以提供多个中断源
O引脚上,按照特定的顺序把数据电平或者时钟脉
和1个中断优先级的功能,从而大部分中断源可以 冲输出即可。
进行高低优先级的分配。高优先级中断向量的地址
是OxO00008,低优先级的地址为0x000018。
3网络控制器的实现
由于高优先级中断会导致正在进行的低优先级 3.1 ENC28J60的控制和数据通信
中断,此时可以先把控制中断的1O个寄存器中位采
总线控制是由P1C18F2455与ENC28J60以太
用Microchip命名,从而编译器可以自动识别指定 网控制器来实现的。ENC28J60是以太网控制器,
寄存器中位的位置;然后精心设计中断现场保护,通 带有行业标准串行的外设接口,且是相对独立的,可
常来讲,在中断服务程序中,只要寄存器有发生写操
用作所有配置SPI控制器的以太网接口。外部主控
作的可能均要保存,但是其对于现场的存储空间又
制器利用SPI接口发出命令,以该命令为依据,进行
提出了要求,所以高优先级中断可以将Status、
ENC28J60的操作。这些命令通常用于访问以太网
WREG以及BSR重要寄存器存储于快速寄存器堆
缓冲区以及控制存储器,多为1个或者多个字节的
栈,在应用RETFIE以及FAST指令由中断返回 指令。该指令最少包括1个3位操作码和1个5位
时,这些值就会被重新装回其所对应的寄存器;最
参数,参数的作用是指定寄存器地址或者数据常量。
后,在进入中断服务程序后,中断源就能够通过查询 ENC28J6O共有7条指令,所用的操作命令代码见
中断标志来确定。在重新允许中断之前,为防止重 表1。
复响应该中断1周,应利用相关软件把中断标志位
归零。
72 l 《新技术新工艺》电子信息与自动控制
电子信息 自动控制
表1 ENC28J60操作命令代码集 说明
指令命名称及其简称 字节。 字节1及后面
操作码 参数 的字节数据
读控制寄存器(RCR) 00O aaaaa N/A
读缓冲器(RBM) OO1 11010 N/A
写控制寄存器(WCR) 010 aaaaa ddddddd
写缓冲器(WBM) O11 11010 ddddddd
位域置1(BFS) 1OO aaaaa ddddddd
位域清零(BFC) 1O1 aaaaa ddddddd
下面以读缓冲器为例,说明ENC28J60的控制
和数据通信的软件实现过程。读缓冲器命令可以让
主控制器由SKB及接收缓冲器中读取字节。先把
CS引脚拉至低电平以启动RBM命令;再把RBM
操作码和随后的5位常量发送至ENC28J6O;接下 图3发送数据包结构图
来从SO引脚中把ERDPT对应的存储器中的数据
协议。以太网帧长度通常在64~1 518字节之间,
移出;此时如果主控制器继续在SCK引脚提供时钟 由五六个不同的字段组成。如果利用以太网介质发
信号,则ERDPT所对应的字节就会再次由SO引
起数据包,1个字节的帧起始定界符以及7字节前
脚移出。一旦ARTOINC被使用时,通过这种方法 导字段会被附加至以太网数据包的开头。而数据包
不用多余的SPI指令就可以连续地由缓冲存储器中 在传输至以太网的主机时,其目的装置就需要通过
顺序读取字节。 MAC地址来识别,所以在IP封包要把以太网封包
在实现ENC28J60缓冲器RBM程序代码时,
之前,要先获取目的装置的MAC地址,此时需采用
可以调用SPI通信函数,P1C18F2455中所存放数据 ARP协议,其有效措施是把1个缓冲表设置在
的缓冲区由该函数指定,因此要设置变量作为计数
ARP的处理中。采用与LRC算法相近的方法设置
器,以便能够保证接收数据不会超出预定数量。如 一个MAC以及IP地址映射的地址,然后再利用程
果数据包的长度为特定时,在接收时采用这种方法
序解析和发送ARP询问与应答的数据包。
非常有效,它可以将冗长的数据自动忽略。
3.2数据包的发送与接收
5 结语
在实现数据包的发送与接收之前,要先把数据
因特网是社会发展中重要的基础信息设施。连
缓冲区分为发送区与接收区,再利用二次读取法将 接嵌入式系统与因特网,可实现信息便利和低廉的
ENC28J60所接受的数据包写入单片机的RAM
传递,所以嵌入式系统的网络接人技术也将受到越
中。该方法共分2步进行:1)先设置1个首读窗 来越多的关注。
口,该窗口大小为6字节,读取该数据包的包头向量
参考文献
存储于PIC Bankl中,获取本数据包的长度;2)
RBM程序中所获得的数据个数以包首部向量长度
Eli田泽.嵌入式系统开发与应用教程EM].北京:北京航空
大小为依据,以其为参数调用SPI通信程序就可以
航天大学出版社,2005.
E2]李兵建.基于嵌入式Intemet的远程电网参数实时检测
读到该数据包到PIC Bankl中。发送数据包的结构
系统的设计[D].江苏:江苏大学,2008.
如图3所示。
[3]杨恢先.单片机原理及应用I-M].长沙:国防科技大学出
由图3可以看出,发送数据包的工作流程可以 版社,2003.
分为4步:首先ETXST指针的编程要正确,使其指
[4]沈红卫.单片机应用系统设计实例与分析[M].北京:北
向存储器中的未用单元;然后通过WBMSPI命令把