基于Cortex-M3的嵌入式以太网门禁系统设计

来源:华强电子网 作者:------ 时间:2014-07-16 11:13

  2 系统软件设计

  2.1 以太网协议LwIP

  LwIP是瑞士计算机科学院开发的小型开源的TCP/IP协议栈。由于它只需要十几K的RAM和40K左右的ROM就可以运行,所以很适合在硬件资源并不充裕的嵌入式系统中使用。

  LwIP属于比较松散的通信机制,通过共享内存的方式实现应用层与底层协议之间的通信。它提供了三种API:①RAM API,②LwIP API,③BSD API。

  其中的RAM API其缺点就是代码不易于理解,开发难度大,其优点是相对于其他两种方式占用的资源少,效率更加高,更适合于对于资源相对少的嵌入式使用,所以我们采用RAM API方式进行编写。

  在TCP/IP传输层中有TCP和UDP两种协议,TCP提供IP环境下数据的可靠传输,UDP提供的是不可靠传输,由于门禁系统中必须要求传输数据的正确,所以采用TCP。图5是LwIP下的TCP处理流程框图。

  RAM API把协议栈和应用程序放在一个进程里,该函数基于函数回调技术,下面是LwIP的部分关键配置和代码。

  (1)LwIP配置

  在LwIP的配置文件lwipopts.h中修改如下地方。

  是否使用操作系统,我们不用,所以填写为1:

  #define NO_SYS 1

  配置heap的大小:

  #define MEM_SIZE

  配置pool的大小

  #define PBUF_POOL_SIZE

  #define PBUF_POOL_BUFSIZE

  以上三个配置占据了LwIP协议栈大部分的内存,需要根据自己的需要修改成合适的值。

  (2)LwIP代码

  ①分别设置IP地址,子网掩码和网关:

  IP4_ADDR(&ipaddr,192,168,2,28);

  IP4_ADDR(&netmask,255,255,255,0);

  IP4_ADDR(&gw,192,168,2,254);

  ②初始化底层函数,也就是配置MAC地址,初始化ENC28J60,配置最大输出单元等:

  low_level_init(netif);

  ③连接远程主机,当连接建立,就会调用第4个参数Conn_Back:

  tcp_connect(TCP_pcb,&ipaddr,1026,Conn_back);

  ④当有新的数据接收到时调用的回调函数:

  tcp_recv(TCP_pcb。tcp_recv_callback);

  ⑤服务器成功接收到数据后调用的回调函数:

  tcp_sent(TCP_pcb,tcp_sent_callback);

  ⑥处理错误的回调函数:

  tcp_err(pcb,CMD_conn_err);

  ⑦是否接收到数据:

  ethernetif_input(&enc28j60);

  通信一旦结束或者出现异常状况后,一定要使用pbuf_free()函数释放pbuf,避免内存的浪费。还有一点要注意的是,系统在正常运行的过程中,定时器函数tcp_fasttmr()和tcp_slowtmr()函数必须以固定的时间间隔被规律地调用。

  2.2 门禁系统软件架构与设计

  门禁系统的主要流程如图6所示,每次重新启动后,首先初始化相关寄存器,初始化各个模块,确定已经连接服务器,然后进入程序主循环。

  首先监测是否需要调用LwIP内部的快速定时器和慢速定时器。然后监测服务器是否有断开,如果断开则重新连接服务器,没有断开的话则检测是否有智能卡,有的话接收卡中信息进行处理然后发送给服务器。

  

图6 门禁系统的主要流程图

  结语

  本文对使用STM32为主控芯片的门禁系统的硬件和软件架构进行了相应的描述,对于文中所涉及的芯片和以太网协议的使用具有指导意义,能够较大幅度地降低成本,同时门禁系统的使用会更加稳定,传输距离更长。

 

关注电子行业精彩资讯,关注华强资讯官方微信,精华内容抢鲜读,还有机会获赠全年杂志。

关注方法:添加好友→搜索“华强微电子”→关注

或微信“扫一扫”二维码

资讯排行榜

  • 每日排行
  • 每周排行
  • 每月排行

华强资讯微信号

关注方法:
· 使用微信扫一扫二维码
· 搜索微信号:华强微电子