一种单片机的远程通讯装置及其方法转让专利

申请号 : CN201010172093.8

文献号 : CN101833296B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 马思乐王平陈清玫王海相陈晓军郭俊美

申请人 : 山东大学

摘要 :

本发明涉及一种单片机的远程通讯装置及其方法。它在控制器的成本不高的前提下,实现控制器的远程通讯功能,甚至可以将单片机数据连接到因特网上,利用现有的网络资源进行数据传输,在传输数据量不是很大的控制系统中,完全可以满足实时控制的要求,大大的降低了控制系统的成本,其结构为:它包括带SPI接口的独立以太网控制器ENC28J60,单片机与太网控制器连接,以太网控制器与网络系统连接;在以太网控制器的差分接收引脚上,设有一个脉冲变压器I;在差分发送引脚上,外接一个脉冲变压器II。

权利要求 :

1.一种单片机远程通讯装置的通讯方法,其特征是,它的方法为:

步骤1)单片机将要传输的数据进行打包;

步骤2)通过以太网控制器ENC28J60将数据传输给以太网,通过uIP协议栈进行数据传输;其中,以太网控制器ENC28J60工作频率为25MHz,它内部有一个振荡器启动时钟,上电7500个时钟周期300us后,仍通过SPI总线对所有的以太网寄存器和缓冲器进行读写操作,然而在这期间不应试图使用软件发送任何数据包;

步骤3)启动时钟超时后应用软件查询CLKRDY位来确定器件的正常工作;

其中,数据收发过程为:

首先判断以太网控制器ENC28J60的接收缓冲器内是否有数据包,如果没有则重新扫描;如果有则判断数据包的类型是IP数据包还是ARP数据包;

①如果是IP数据包,则首先更新ARP的高速缓存表,然后调uIP协议栈函数uip_input()处理数据包;有数据包输出时,首先调用函数uip_arp_out(),来查询发送目的地的物理地址,如果没有则利用以太网驱动函数MACWrite()函数发送ARP数据包,如果有则发送IP数据包;

②如果数据包是ARP数据包,则调用函数uip_arp_arpin(),如果ARP数据包是回答,则更新ARP高速缓存表,然后利用MACWrite()函数发送数据包确认;

如果数据包是请求,则利用MACWrite()函数发送ARP回答数据包;uIP协议栈通过事件函数去调用应用程序,应用程序根据不同的事件函数做出相应的响应。

2.如权利要求1所述的单片机远程通讯装置的通讯方法,其特征是,所述uIP协议栈的内存管理方式是使用了一个全局的数组uip_buf[],所述数组的长度包含一个最大的数据包,当在接到数据包时,系统通过底层的驱动将数据写到uip_buf[]中,数据包的长度为uip_len,也是全局变量,它们共同管理一个数据包;为了节省RAM,发送数据和接收数据使用同一个uip_buf[];只有在uip_len等于0的时候才可以接收和发送数据;数据的重发与发送新的数据没有区别,都是应用程序根据uIP协议栈的接口数据包状态UIP_REXMIT和UIP_ACKDATA来发送的;如果状态是UIP_REXMIT,则应用程序发送刚才的数据;如果状态是是UIP_ACKDATA,则应用程序根据实际情况发送新的数据。

说明书 :

一种单片机的远程通讯装置及其方法

[0001] 技术领域:
[0002] 本发明涉及一种单片机的远程通讯装置及其方法。
[0003] 背景技术:
[0004] 目前,单片机微处理器已经广泛用于控制系统当中,单片机本身具备一些SPI串行通讯等近距离的通讯功能,但是通常通讯距离都有限。常用的RS232,485等通讯方式的数据传输距离都不会超过几百米。当有数据需要远程通讯的时候,单片机往往就显得无能为力了。
[0005] 有的控制系统为了实现远程通讯功能,采用带网线接口的PLC等带远程通讯功能的控制器,也会令控制器的成本大幅度增加,并且对于简单的控制系统来说更是一种资源的浪费。
[0006] 目前,有些单片机的应用场合,为了实现控制系统的远程数据传输,采用专门的一套以太网传输装置。这些装置也采用以太网控制器,RJ45接口等来连接网络,不足之处是往往采用嵌入式系统等来实现复杂的协议,而且在传输的过程中需要比较大的存储空间,往往需要扩展FLASH,RAM存储器等。这就增加了远程通讯的成本,而且增加了系统的复杂度。这些传输方式往往采用套接字接口,会涉及到多线程,环境代价重大,不但线程管理等会增加代码的复杂度,而且往往需要额外的存储器,还有执行任务切换的时间开销等。这种传输方式对于存储器和代码量有限的单片机来说是不能接受的。为了实现通讯功能,只能另外增加相应的控制模块,成本高,实现起来很复杂,本来不是很复杂的控制系统,往往通讯部分比控制部分还要花费精力,得不偿失。目前还很少见能用单片机来实现远程通讯的方法,也就无法把控制与远程通讯放在一个单片机里面来一次性实现。
[0007] 发明内容:
[0008] 本发明的目的就是解决上述问题,提供一种单片机的远程通讯装置及其方法,它在控制器的成本不高的前提下,实现控制器的远程通讯功能,甚至可以将单片机数据连接到因特网上,利用现有的网络资源进行数据传输,在传输数据量不是很大的控制系统中,完全可以满足实时控制的要求,大大的降低了控制系统的成本;通讯协议实现方法简单,可以大大减轻设计人员的工作量;用一个单片机微处理器就可以实现控制和远程通讯,从而使得系统结构变得简单。
[0009] 为实现上述目的,本发明采用如下技术方案:
[0010] 一种单片机的远程通讯装置,它包括带SPI接口的独立以太网控制器ENC28J60,单片机与太网控制器连接,以太网控制器与网络系统连接;在以太网控制器的差分接收引脚上,设有一个脉冲变压器I;在差分发送引脚上,外接一个脉冲变压器II。
[0011] 所述脉冲变压器I为10BASE-T操作的1:1脉冲变压器。
[0012] 所述脉冲变压器II为一个带有中心抽头的1:1脉冲变压器。
[0013] 所述以太网控制器的主控制器运行在非3.3V的电压下时,当SPI和中断输入由ENC28J60上的3.3V CMOS输出驱动时,主控制器需要与单向电平转换芯片连接。
[0014] 所述单向电平转换芯片采用74ACT125型电平转换芯片。
[0015] 一种单片机远程通讯装置的通讯方法,它的方法为:单片机将要传输的数据进行打包,然后通过以太网控制器ENC28J60将数据传输给以太网,通过uIP协议栈进行数据传输;其中,以太网控制器ENC28J60工作频率为25MHz,它内部有一个振荡器启动时钟,上电7500个时钟周期300us后,仍可通过SPI总线对所有的以太网寄存器和缓冲器进行读写操作,然而在这期间不应试图使用软件发送任何数据包;启动时钟超时后应用软件查询CLKRDY位来确定器件的正常工作。
[0016] 所述以太网控制器ENC28J60与单片机的通讯是通过SPI实现的,以太网控制器ENC28J60所执行的操作完全依据外部控制器通过SPI接口发出的命令,命令为一个或多个字节的指令,用于访问控制存储器和以太网缓冲区,所述指令至少包含一个3位操作码和一个用于制定寄存器地址或数据常量的5位参数,写和位域指令后还会有一个或多个字节的数据。
[0017] 所述uIP协议栈的内存管理方式是使用了一个全局的数组uip_buf[],所述数组的长度包含一个最大的数据包,当在接到数据包时,系统通过底层的驱动将数据写到uip_buf[]中,数据包的长度为uip_len,也是全局变量,它们共同管理一个数据包;为了节省RAM,发送数据和接收数据使用同一个uip_buf[];只有在uip_len等于0的时候才可以接收和发送数据;数据的重发与发送新的数据没有区别,都是应用程序根据uIP协议栈的接口数据包状态UIP_REXMIT和UIP_ACKDATA来发送的;如果状态是UIP_REXMIT,则应用程序发送刚才的数据;如果状态是是UIP_ACKDATA,则应用程序根据实际情况发送新的数据。
[0018] 所述数据收发过程为:
[0019] 首先判断以太网控制器ENC28J60的接收缓冲器内是否有数据包,如果没有则重新扫描;如果有则判断数据包的类型是IP数据报还是ARP数据报,①如果是IP数据报,则首先更新ARP的高速缓存表,然后调uIP协议栈函数uip_input()处理数据包;如果有数据包输出,首先调用函数uip_arp_out(),来查询发送目的地的物理地址,如果没有则利用以太网驱动函数MACWrite()函数发送ARP数据报,如果有则发送IP数据报;②如果数据包是ARP数据报,则调用函数uip_arp_arpin(),如果ARP数据报是回答,则更新ARP高速缓存表,然后利用MACWrite()函数发送数据报确认;如果数据报是请求,则利用MACWrite()函数发送ARP回答数据报;uIP协议栈通过事件函数去调用应用程序,应用程序根据不同的事件函数做出相应的响应。
[0020] 本发明将单片机中要传输的数据进行打包,由以太网控制器将数据传输给以太网,通过uIP协议栈进行数据传输。
[0021] 本发明采用带SPI接口的独立以太网控制器ENC28J60。与其他以太网控制器相比较,它只有28引脚这就大大简化了硬件设计。ENC28J60与微控制器MCU的通讯是通过SPI实现的。ENC28J60所执行的操作完全依据外部控制器通过SPI接口发出的命令。命令为一个或多个字节的指令,用于访问控制存储器和以太网缓冲区。指令至少包含一个3位操作码和一个用于制定寄存器地址或数据常量的5位参数。写和位域指令后还会有一个或多个字节的数据。
[0022] 本发明采用的进行数据传输的uIP协议栈是一种免费的可实现极小的TCP/IP协议栈。它去掉了全功能TCP/IP协议中不常使用的功能,保留了网络通讯所必要的协议机制,减少了协议代码量,降低了协议对系统的要求。本发明应用的版本为1.0,只需要9KFLASH和不到1K的RAM,就可以移植到单片机上,通过TCP/IP进行通讯。套节字接口适用于大部分的操作系统,却不适合微系统,因为在应用设计里,它使用一个线程基于编程模块。一个多线程环境代价重大,因为不但在线程管理里涉及增加代码的复杂性,而且保存每线程堆栈需要额外的储存器,还有执行任务切换的时间开销也摊派在这里。微型系统不会有足够的资源去实现一个多线程环境,因此需要这个环境的应用接口不适合uIP。uIP使用一个基于编程模块的事件,模块是实现应用程序作为一个C函数被uIP调用的地方,uIP响应一定的事件。uIP调用应用在,当接收数据时,当数据成功送达另一方中止连接时,当一个新的连接建立时,或者当数据需要重发时。应用程序也周期性地循环等待新数据。应用程序的调用是由于事件来引起的。本发明将写的应用程序定义成宏函数,当有事件发生时调用宏函数。以此在应用程序中完成数据的发送和接收。
[0023] 本发明的有益效果是:实现了单片机微处理器的远程通讯功能,可以采用此方案设计出成本比较低,而又可以实现远程通讯功能的控制器,而且结构简单,操作方便,简单。
[0024] 附图说明:
[0025] 图1是ENC28J60控制器连接电路;
[0026] 图2是ENC28J60控制器外部连接电路;
[0027] 图3是uIP协议栈的数据包处理过程流程图;
[0028] 图4是该发明总体框图;
[0029] 其中,1.单片机,2.以太网控制器,3.RJ45接头,4.网络系统。
[0030] 具体实施方式:
[0031] 下面结合附图与实施例对本发明做进一步说明。
[0032] 本发明总体的连接如图4所示。需要进行数据传输的单片机1与以太网控制器2相连接,具体连接电路如图1所示。以太网控制器2又通过RJ45接头3与网络系统4相连接,将数据通过网线发送出去。以太网控制器2的工作频率为25MHz,它内部有一个振荡器启动时钟,上电7500个时钟周期(300us)后,仍可通过SPI总线对所有的以太网寄存器和缓冲器进行读写操作。然而在这期间不应试图使用软件发送任何数据包。启动时钟超时后应用软件查询CLKRDY位来确定器件的正常工作。要实现以太网接口,ENC28J60需要几个标准的外部器件。如图2所示,在差分接收引脚上,需要一个专用于10BASE-T操作的1:
1脉冲变压器。在差分发送引脚上,需要外接一个带有中心抽头的1:1脉冲变压器。变压器应具有2KV以上的电压隔离性能以防止静电干扰。ENC28J60是一个工作电压为3.3V的器件,它被设计为易于集成到单片机电路系统中。主控制器运行在非3.3V的电压下时,当SPI和中断输入由ENC28J60上的3.3V CMOS输出驱动时,需要一个单向电平转换芯片,本发明采用74ACT125作为电平转换芯片。
[0033] 为了节约RAM,uIP内存的管理方式没有采用动态的分配内存,而是使用了一个全局的数组uip_buf[]。数组的长度可以包含一个最大的数据包,当在接到数据包时,系统通过底层的驱动将数据写到uip_buf[]中,数据包的长度为uip_len,也是全局变量,它们共同管理一个数据包。为了节省RAM,发送数据和接收数据使用同一个uip_buf[]。只有在uip_len等于0的时候才可以接收和发送数据。数据的重发与发送新的数据没有根本上的区别,都是应用程序根据uIP协议栈的接口数据包状态UIP_REXMIT和UIP_ACKDATA来发送的。如果状态是UIP_REXMIT,则应用程序发送刚才的数据;如果状态是是UIP_ACKDATA,则应用程序根据具体情况可发送新的数据。数据收发过程如图3所示,首先判断以太网控制器ENC28J60的接收缓冲器内是否有数据包,如果没有则重新扫描。如果有则判断数据包的类型是IP数据报还是ARP数据报,①如果是IP数据报,则首先更新ARP的高速缓存表,然后调uIP协议栈函数uip_input()处理数据包。如果有数据包输出,首先调用函数uip_arp_out(),来查询发送目的地的物理地址,如果没有则利用以太网驱动函数MACWrite()函数发送ARP数据报,如果有则发送IP数据报;②如果数据包是ARP数据报,则调用函数uip_arp_arpin(),如果ARP数据报是回答,则更新ARP高速缓存表,然后利用MACWrite()函数发送数据报确认;如果数据报是请求,则利用MACWrite()函数发送ARP回答数据报。uIP协议栈通过事件函数去调用应用程序,应用程序根据不同的事件函数做出相应的响应。