- UID
- 1029342
- 性别
- 男
|
物联网是在互联网的基础上,将用户与物品或者物品与物品用互联网进行连接,并通过互联网进行信息交换和通信的一种概念。物联网主要通过信息采集设备以及能够将这些信息采集设备接入互联网的终端平台来实现。近年来,嵌入式系统以其功能完善,设计方案灵活,功耗可控制等特点,已广泛应用于生活、商业、医疗以及工业等各个领域。比起通用计算机来,嵌入式系统具有针对性更强、体积更 小,成本更低等优点,是物联网领域应用设计的首选方案。对于一些数据量不大,传输速率要求不高的应用,要考虑用较低的成本实现最可靠的物联网服务。
一. 平台硬件设计
1.1 平台结构及原理
该平台采用ATMEL公司AT91SAM7X512处理器作为主控芯片,该处理器内部集成了以太网控 制器、512kbytes FALSH以及128kbytes SRAM。只需外接一片以太网物理层(PHY)收发芯片DM9161和一个网络变压器HR601680,即可构成以太网终端硬件平台。 AT91SAM7X512采用3.3 V和1.8 V双工作电压,使用频率为18.432 MHZ的晶振作为时钟电路的振荡源,调试电路采用标准的20针JTAG仿真调试接口。该方案成本低,功耗小,并且所用芯片集成度很高因而保证了系统的稳定 性。
AT91SAM7X512的以太网控制模块实现了一个与IEEE802.3标准兼容的以太网MAC,支持全双工模式,可通过DMA 方式进行数据收发。当物理层芯片DM9161接收到来自以太网的上位机数据时,ARM通过MII接口(媒体独立接口)读取数据,并在内部通过DMA方式将 数据读入 SRAM中交给TCP/IP协议栈进行处理。同时,当RFID射频读卡器或者传感模块有数据需要传输时,平台也能沿着相同的通道将数据传输至上位机。系统 整体结构如图1所示。
图1 系统结构原理示意图
1.2 AT91SAM7X512和DM9161的接口电路设计
AT91SAM7X512的以太网控制器和物理层收发芯片 DM9161之间有MII(Media Independent Interface)和RMII(Reduced Media Independent Interface)两种接口。这两种接口都能够工作在10 Mb/s和100 Mb/s共两种速率下,在本设计中采用MII接口。MII数据接口总共需要16个信号,包括 TX_ER,TXD《3:0》,TX_EN,TX_CLK,COL,RXD《3:0》,RX_EX,RX_CLK,CRS,RX_DV 等,在时钟速率25 MHz的情况下以4-bit并行方式发送和接收数据。以太网控制器依靠MDIO接口与物理层芯片进行通信,用于自动协商期间确保以太网控制器和物理层芯片 被配置为相同的速度和双工模式。AT91SAM7X512和DM9161的接口电路如图2所示。
图2 以太网接口电路原理图
当系统上电后,由AT91SAM7X512给DM9161提供复位信号及引脚初始化电平,完成DM9161的上电初始化工作。当初始化完成后,系统会通过MII接口读取DM9161内部状态寄存器的值来完成对网络连接模式和连接状态的检测。
二. 平台软件的实现
2.1 TCP/IP协议栈的移植
LwIP是瑞典计算机科学研究院(SICS)设计的一个开源的轻量级TCP/IP协议栈。它的目的是减少内存使用率和代码大小,使LwIP能够适用于资源紧张的嵌入式系统。利用μC/OS-Ⅱ提供的信号量和消息传递机制等系统服务可以实现对LwIP的移植。
2.1.1 信号量操作函数
LwIP 使用信号量进行通信,这个信号量可以是计数信号量,也可以是二值信号量,所以在sys_arch中需要实现与信号量操作相关的信号量结构体struct sys_sem_t、信号量建立函数sys_sem_new()、信号量释放函数sys_sem_free()、信号量发出函数 sys_sem_signal()和信号量等待函数sys_arch_sem_wait()。由于在μC/OS-Ⅱ中已经实现了与信号量操作有关的各种函 数,而且功能和上述几个LwIP中所需要实现的函数的功能是完全一致的,所以只要调用μC/OS-Ⅱ中的信号量操作函数来重新包装成LwIP中的信号量操 作函数即可。
2.1.2 邮箱操作函数
LwIP使用邮箱来进行消息传递,用户可 以用一个队列来将其实现,需要注意的一点是,投递进邮箱中的消息只能是一个指针。因此要根据以上要求来实现消息队列结构sys_mbox_t,以及相应的 操作函数:sys_mbox_new()、 sys_mbox_free()、sys_mbox_post()和sys_arch_mbox _fetch()。μC/OS-Ⅱ很好地实现了消息队列结构及其操作,为消息队列提供了丰富的管理函数,但μC/OS-Ⅱ没有对消息队列中的消息进行管 理,因而不能直接使用,必须在μC/OS-Ⅱ的基础上重新实现。具体实现时,可创建多个邮箱,并使用单向链表将这些邮箱链接在一起,每个邮箱可接收消息的 数量由消息数组的大小来决定。对消息队列本身的管理用μC/OS-Ⅱ中的队列操作函数来完成,然后通过对链表的操作来实现对消息的创建、使用、删除和回 收,两部分综合起来形成了LwIP的邮箱功能。 |
|