tag 标签: 以太网网关

相关博文
  • 热度 20
    2015-6-16 17:03
    835 次阅读|
    0 个评论
    已刊登至《无线电》六月刊 早在 1994 年爱立信公司就创立了蓝牙技术,并制定了基本的技术规范,原意是创造一种设备间通讯的标准化协议,以解决设备间通讯不兼容的情况,规范公布后得到大量移动设备制造商的支持,并于 1999 年成立 蓝牙技术联盟(Bluetooth Special Interest Group),该联盟制定并维护蓝牙无线规范,并对设备制造厂商提供Bluetooth认证与授权。   当前影响最广的版本应该是蓝牙4.0, 本标准中增加了 Bluetooth Smart 和 Bluetooth SmartReady 标准。特别是 Bluetooth Smart 版本,作为低功耗蓝牙( Bluetooth Low Energy ,简称 BLE ),相对历史版本有质的飞跃,主要表现在成本低,功耗低,峰值电流极小并可以非常快速的建立连接,使用一粒纽扣电池就可以连续工作数年之久。相较于 Zigbee 和传统蓝牙,协议标准化和低功耗的优势让 BLE 在智能家居和穿戴设备上的优势一目了然,如图 1 所示。   图 1  常用无线协议比较 特别是 2011 年开始苹果 iOS 原生支持 BLE 之后, BLE 得到大量 iOS 周边厂商和智能设备厂商的响应,基于 BLE 技术开发的智能硬件遍地开花,如:智能体重秤,智能手环,智能灯控,智能水杯,智能马桶,智能闹钟……   项目背景 近两年各种智能家居的产品层出不穷,而且众多“科技公司”“互联网企业”“资本投资公司”纷纷加入战团,看到做手机的 A 公司出了一个智能净化器,做空调的 B 公司出了一个智能手机,做手表的 C 公司出了一个智能手环,做马桶的 D 公司坐不住了,在马桶里面塞进去了一个温控 + 通讯模块,就诞生了智能马桶 … 智能设备市场好热闹啊。那么智能产业迅速发展的现在,我们在智能家居上还能有什么创意可以挑衅?灵感真的都源于生活,小熊有一天开门收快递,然后无情的风把万恶的门拍死了,只剩小熊穿着睡衣举着手机拿着包裹在风中凌乱,开锁小哥在小熊女友担保外加 3 张毛爷爷之后才高抬贵手开了门,懊恼啊 … 拍大腿的瞬间,当时小熊就萌发了一个念头,要是门锁换成智能控制的话,是不是钥匙就不再困扰我们了!!!只需要打开手机 APP ,就可以操纵智能门锁开门,或者像有强迫症的熊二,每次锁完门都要回头再看一次门有没有锁好,是不是有了门锁的手机 APP ,就可以随时看自家门锁的开关状态了!   想法出来了,回头就开始一步步落实。经过对场景设想,最终选用蓝牙 + 以太网网关的方案,正是因为蓝牙短距离 + 传输速度快的优势,其中以太网网关部分使用 W5500 硬件协议栈芯片实现。为了更加体现门锁的智能化,小熊设想了几个场景:其一是小熊出门收快递,门被无意中关上了,可以直接用手机开门;其二小熊不在家,小熊女朋友需要进门洗衣服做饭,小熊可以远程给女朋友开门;其三是熊二被女朋友赶出来了,需要临时借宿,小熊可以给熊二手机授予限时的开门权限(如 2 周)。看起来是不是很强大!图 2 就是小熊今天要为大家介绍的蓝牙智能门锁的实现示意图。 图 2  蓝牙智能门锁示意图 本方案的组成主要分为三个部分: BLE 门锁机构, BLE 网关设计,门锁管理服务器。因为门锁管理服务器主要为数据库管理以及 APP 调用等内容,本文不做过多阐述,本文将主要讲述 BLE 门锁和 BLE 的以太网网关的实现等部分内容。   关于 BLE 的实现,我们选用的是目前市场上最常见的 TI CC2541 , CC2541 是 BLE 单芯片解决方案,包含一个工业级的 8051 内核以及 RF 收发器,集成 TI 的 BLE 低功耗协议栈并拥有相对完善的低功耗外设;而以太网部分用的硬件协议栈芯片 W5500 , W5500 芯片 使用硬件逻辑门电路实现TCP/IP协议栈的传输层及网络层(如:TCP, UDP, ICMP, IPv4, ARP,  IGMP, PPPoE 等协议),并集成了数据链路层,物理层,以及 32K 字节片上 RAM 作为数据收发缓存。不言而喻, W5500 非常适合 CC2541 这种 8051 内核,而且片上资源不是很丰富的 MCU ,一切就这么愉快的决定了。   为了实现 BLE 通讯,我们需要使用两个 CC2541 模块,一个作为 Central ,另一个作为 Peripheral ;他们之间实现 BLE 通信,其中 Peripheral 作为门锁机构的控制,而 Central 则驱动 W5500 作为 TCP Client 实现网络通信,从而在网络端查询门锁状态以及实现网络控制开锁的功能。图 3 列出了需要准备的硬件设备。 图 3  所需硬件设备 准备工作: 1.  安装编译环境 IAR Embedded Workbench for 8051 8.10 Evaluation 2.  安装协议栈 BLE-CC254x-1.3.2 3.  安装 CC-Debugger 模块调试下载器驱动   BLE 以太网网关部分: BLE 以太网网关部分结构如图 4 :   图4  BLE 以太网网关接线图 需要在 CC2541 的 Central 模式中集成 W5500 的驱动以及 Socket 处理部分,由于 W5500 的函数驱动库是分层次书写的,我们只需将 SPI 通信的硬件抽象层的函数重新编写即可。 以下为 CC2541 的 SPI1 的初始化配置函数和数据收发函数的程序,以及复位管脚的控制程序 继续阅读: http://www.iwiznet.cn/blog/?p=7192
  • 热度 20
    2015-6-16 10:41
    1104 次阅读|
    0 个评论
    已刊登至《无线电》六月刊   早在 1994 年爱立信公司就创立了蓝牙技术,并制定了基本的技术规范,原意是创造一种设备间通讯的标准化协议,以解决设备间通讯不兼容的情况,规范公布后得到大量移动设备制造商的支持,并于 1999 年成立 蓝牙技术联盟(Bluetooth Special Interest Group),该联盟制定并维护蓝牙无线规范,并对设备制造厂商提供Bluetooth认证与授权。   当前影响最广的版本应该是蓝牙4.0, 本标准中增加了 Bluetooth Smart 和 Bluetooth SmartReady 标准。特别是 Bluetooth Smart 版本,作为低功耗蓝牙( Bluetooth Low Energy ,简称 BLE ),相对历史版本有质的飞跃,主要表现在成本低,功耗低,峰值电流极小并可以非常快速的建立连接,使用一粒纽扣电池就可以连续工作数年之久。相较于 Zigbee 和传统蓝牙,协议标准化和低功耗的优势让 BLE 在智能家居和穿戴设备上的优势一目了然,如图 1 所示。     图 1 常用无线协议比较 特别是 2011 年开始苹果 iOS 原生支持 BLE 之后, BLE 得到大量 iOS 周边厂商和智能设备厂商的响应,基于 BLE 技术开发的智能硬件遍地开花,如:智能体重秤,智能手环,智能灯控,智能水杯,智能马桶,智能闹钟……   项目背景 近两年各种智能家居的产品层出不穷,而且众多“科技公司”“互联网企业”“资本投资公司”纷纷加入战团,看到做手机的 A 公司出了一个智能净化器,做空调的 B 公司出了一个智能手机,做手表的 C 公司出了一个智能手环,做马桶的 D 公司坐不住了,在马桶里面塞进去了一个温控 + 通讯模块,就诞生了智能马桶 … 智能设备市场好热闹啊。那么智能产业迅速发展的现在,我们在智能家居上还能有什么创意可以挑衅?灵感真的都源于生活,小熊有一天开门收快递,然后无情的风把万恶的门拍死了,只剩小熊穿着睡衣举着手机拿着包裹在风中凌乱,开锁小哥在小熊女友担保外加 3 张毛爷爷之后才高抬贵手开了门,懊恼啊 … 拍大腿的瞬间,当时小熊就萌发了一个念头,要是门锁换成智能控制的话,是不是钥匙就不再困扰我们了!!!只需要打开手机 APP ,就可以操纵智能门锁开门,或者像有强迫症的熊二,每次锁完门都要回头再看一次门有没有锁好,是不是有了门锁的手机 APP ,就可以随时看自家门锁的开关状态了!   想法出来了,回头就开始一步步落实。经过对场景设想,最终选用蓝牙 + 以太网网关的方案,正是因为蓝牙短距离 + 传输速度快的优势,其中以太网网关部分使用 W5500 硬件协议栈芯片实现。为了更加体现门锁的智能化,小熊设想了几个场景:其一是小熊出门收快递,门被无意中关上了,可以直接用手机开门;其二小熊不在家,小熊女朋友需要进门洗衣服做饭,小熊可以远程给女朋友开门;其三是熊二被女朋友赶出来了,需要临时借宿,小熊可以给熊二手机授予限时的开门权限(如 2 周)。看起来是不是很强大!图 2 就是小熊今天要为大家介绍的蓝牙智能门锁的实现示意图。 图 2 蓝牙智能门锁示意图   本方案的组成主要分为三个部分: BLE 门锁机构, BLE 网关设计,门锁管理服务器。因为门锁管理服务器主要为数据库管理以及 APP 调用等内容,本文不做过多阐述,本文将主要讲述 BLE 门锁和 BLE 的以太网网关的实现等部分内容。   关于 BLE 的实现,我们选用的是目前市场上最常见的 TI CC2541 , CC2541 是 BLE 单芯片解决方案,包含一个工业级的 8051 内核以及 RF 收发器,集成 TI 的 BLE 低功耗协议栈并拥有相对完善的低功耗外设;而以太网部分用的硬件协议栈芯片 W5500 , W5500 芯片 使用硬件逻辑门电路实现TCP/IP协议栈的传输层及网络层(如:TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE 等协议),并集成了数据链路层,物理层,以及 32K 字节片上 RAM 作为数据收发缓存。不言而喻, W5500 非常适合 CC2541 这种 8051 内核,而且片上资源不是很丰富的 MCU ,一切就这么愉快的决定了。   为了实现 BLE 通讯,我们需要使用两个 CC2541 模块,一个作为 Central ,另一个作为 Peripheral ;他们之间实现 BLE 通信,其中 Peripheral 作为门锁机构的控制,而 Central 则驱动 W5500 作为 TCP Client 实现网络通信,从而在网络端查询门锁状态以及实现网络控制开锁的功能。图 3 列出了需要准备的硬件设备。 图 3 所需硬件设备 准备工作: 1. 安装编译环境 IAR Embedded Workbench for 8051 8.10 Evaluation 2. 安装协议栈 BLE-CC254x-1.3.2 3. 安装 CC-Debugger 模块调试下载器驱动   BLE 以太网网关部分: BLE 以太网网关部分结构如图 4 :   图4 BLE 以太网网关接线图   需要在 CC2541 的 Central 模式中集成 W5500 的驱动以及 Socket 处理部分,由于 W5500 的函数驱动库是分层次书写的,我们只需将 SPI 通信的硬件抽象层的函数重新编写即可。 以下为 CC2541 的 SPI1 的初始化配置函数和数据收发函数的程序,以及复位管脚的控制程序: 01 void WIZ_SPI_Init(void) 02 { 03      PERCFG |=   0x02;                 // PERCFG.U1CFG = 1 04      P1SEL   |=   0xE0;                 // P1_7, P1_6, and P1_5 are 05                 peripherals 06 07      P1SEL   = ~0x10;                 // P1_4 is GPIO (SSN) 08      P1DIR   |=   0x10;                 // SSN is set as output 09 10      // Set baud rate to max (system clock frequency / 8) 11      U1CSR = 0;                       // SPI Master Mode 12      // Configure phase, polarity, and bit order 13      U1GCR = 15; 14      U1BAUD = 255; 15      U1UCR = 0x80; 16      U1GCR |= BV(5); 17 18      P1SEL   = ~0x08;             // P1_3 is GPIO (SSN) 19      P1DIR   |=   0x08;             // P1_3 is set as output 20 } 21 22 void WIZ_RST(uint8 val) 23 { 24      if (val == LOW) 25      { 26          P1_3=0; 27      } 28      else if (val == HIGH) 29      { 30          P1_3=1; 31      } 32 } 33 // Connected to Data Flash 34 void WIZ_CS(uint8 val) 35 { 36      if (val == LOW) 37      { 38          P1_4=0; 39      } 40      else if (val == HIGH) 41      { 42          P1_4=1; 43      } 44 }   需要注意的是, CC2541 的 LCD 驱动的部分引脚与 SPI1 的几个引脚是复用的,需要将和 LCD 有关的编译项去掉,避免发生冲突,导致 SPI 不可用。具体方法为在工程选项的编译子项里,将 ”HAL_LCD=TRUE” 更改为 “HAL_LCD=FALSE” 。   程序重写完毕后,打开 TI 官方 BLE 的例程 SerialApp3 ,此例程包含 Central 和 Peripheral 两部分,原始例程可以实现串口数据透传,基于此例进行集成相对起来会比较简单。将 W5500 的驱动程序包添加到工程中,如图 5 所示。   图 5 将 W5500 部分集成并初始化 其中Ethernrt_Init函数主要负责W5500的接口和参数的初始化: 01 /* 该函数将会在任务函数的初始化函数中调用 */ 02 void Ethernrt_Init( uint8 taskID ) 03 { 04      WIZ_SPI_Init();      //初始化CC2541的SPI1作为W5500的通讯接口 05      Reset_W5500();       //复位W5500 06      set_default();   //设置初始化参数如MAC,IP地址等参数 07      set_network();       //使初始化的IP参数生效 08 09      //记录任务函数的taskID,备用 10      sendMsgTo_TaskID = taskID; 11 }   TI 的官方 BLE 例程中有比较完备的协议栈程序,提供了完备的应用函数供用户调用,用户可以在应用层添加自己的任务和事件;更改应用层数据之前我们必须了解一下 BLE 的应答机制以及 CC2541 的 OSAL 也就是系统抽象层的任务调用机制,首先 TI 已经做了大量工作,我们无需重写 BLE 协议,而只需要根据自身的需求更改相应任务参数即可,在 SimpleBLECentral_Init 函数中将 Central 的相关参数初始化,比如: GAPCentralRole_SetParameter : 设置 Central 可以扫描到的最大从端设备数目;   继续阅读: http://www.iwiznet.cn/blog/?p=7192  
  • 热度 16
    2014-8-5 09:57
    2998 次阅读|
    0 个评论
    物联网技术的实现中,无线技术是不可缺少的部分。近年无线技术的发展,将ZigBee推入人们的视线中,那么ZigBee是怎样的一种技术呢?带着疑问,我查询了它的来历: ZigBee,来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,可以想象蜜蜂依靠这样的方式构成了群体中的通信网络!  是不是有点意思,那么随之 ZigBee的出现就成了一种我们熟知的无线组网通讯技术并广为应用。本篇就带你认识ZigBee,并实现一种常见应用:ZigBee转以太网网关。   将ZigBee技术连接互联网 图1 智能家居中ZigBee应用示意图 ZigBee是一种低成本,低功耗的近距离无线组网通讯技术,在智能家居、智能楼宇、工业监控等领域均有广泛应用。基于ZigBee的智能家居应用,如图1所示,用户在家庭中安装一个主控中心(ZigBee网关),及若干个与家电设备相连的分控终端,来远程操控所有家用电器,设想下躺在沙发上控制厨房的电饭煲煮饭是不是无限畅快呢?如果网关可以连到互联网上,甚至远在公司,打开手机就能登录到家里的网关查看家里的情况。 作为开源爱好者,可能很多人已经做过ZigBee方面的开发,一般使用TI公司的CC2530射频芯片较多,TI公司也针对这类芯片制定了完备的软件协议栈zstack。CC2530受处理器速度和内存限制,无法运行TCP/IP协议,用户往往通过串口获得协调器汇聚的数据。想要让协调器直接连上互联网只能借助其他网络芯片,由于W5500以太网芯片在硬件上实现了TCP/IP协议,即使像CC2530这样的16位单片机也可以自如操控W5500,实现联网,无需借助其他辅助处理器做数据转换。 本文我们使用两个CC2530模块,组建一个小型的ZigBee网络,一个作为协调器建立网络,另一个作为终端节点不断的采集温湿度数据并发送给协调器。为实现协调器的联网,我们在协调器上外接一个W5500模块,协调器作为TCP客户端连接以太网内的主机,并将终端节点发来的数据通过W5500上传给主机。应用系统的实物如图2所示: Zigbee2 图2系统实物   准备工作 1. 安装编译环境IAR Embedded Workbench for MCS-51 7.51A 2. 安装协议栈ZStack-CC2530-2.2.2-1.3.0 3. 安装CC2530模块调试下载器驱动   硬件连接与驱动程序重写 W5500在硬件上实现TCP/IP协议,用户几乎不需要任何网络基础,并且WIZnet公司针对W5500也有很好的程序包的支持,只需调用socket函数,就可以完成网络的建立和通讯,当然,要获得以上便利,我们要先将CC2530与W5500连接起来,并能够发送数据控制W5500。 W5500与MCU通信使用SPI接口,CC2530是带有8051内核的无线MCU,片上有两个SPI接口,并且与USART复用,这里我们选择SPI1作为W5500的控制接口。图2为W5500模块的管脚对应关系,控制这个模块仅需J1插针上的1-7引脚(程序上使用轮询机制,所以可以省略INT中断管脚)。图3为CC2530模块上SPI1引脚的对应关系,另外使用P13作为W5500模块RST(复位)的输出控制引脚。通过排线将以上引脚对应连好后就可以编写硬件驱动程序啦。 Zigbee3 图3 W5500模实物与原理图管脚对照 图4 CC2530EB板SPI管脚对照 由于W5500的函数驱动库是分层次书写的,我们只需将SPI通信的硬件抽象层的函数重新编写即可。 以下为CC2530的SPI1的初始化配置函数和数据收发函数的程序,以及复位管脚的控制程序:   CODE: SELECT ALL #include “ioCC2530.h” //SPI管脚和初始化配置 voidWIZ_SPI_Init(void) {   PERCFG |=0×02;//打开UART1外设   P1SEL  |=0xE0;// 使能P1_7, P1_6, and P1_5 外设功能   P1SEL  =~0×10;// 配置P1_4为普通GPIO (SPI_CS)   P1DIR  |=0×10;// 配置P1_4输出引脚 // Set baud rate to max (system clock frequency / 8)   U1BAUD =0×00;// BAUD_M = 0   U1GCR |=0×11;// BAUD_E = 17   U1CSR =~0xA0;// SPI 主机模式 // Configure phase, polarity, and bit order   U1GCR =~0xC0;// CPOL = CPHA = 0   U1GCR |=0×20;// ORDER = 1   P1SEL  =~0×08;// 配置P1_3为普通GPIO (RST)   P1DIR  |=0×08;// 配置P1_3为输出引脚 } //W5500 复位引脚的控制 void WIZ_RST(uint8 val) { if(val== LOW){    P1_3=0;//引脚拉低 }elseif(val== HIGH){    P1_3=1;//引脚拉高 } } //SPI CS管脚的电平控制 void WIZ_CS(uint8 val) { if(val== LOW){      P1_4=0; }elseif(val== HIGH){      P1_4=1; } } //SPI数据发送和接收 uint8 SPI2_SendByte(uint8 byte) { uint8 temp;   U1DBUF = byte; while(!(U1CSR0×02));//等待数据发送完毕   U1CSR =0xFD;   temp = U1DBUF;//读取数据缓冲区接收字节 return temp; } 程序重写完毕后,打开zstack的例程,将W55 00的驱动程序包添加到工程中。如图5所示,需要注意的是,CC2530的LCD驱动的部分引脚与SPI1的几个引脚是复用的,需要将和LCD有关的编译项去掉,避免发生冲突,导致SPI不可用。具体方法为在工程选项的编译子项里,去掉“LCD_SUPPORTED”,并添加“HAL_LCD=FALSE”。 继续阅读: http://wizwiki.net/forum/viewtopic.php?f=91t=1075 WIZnet官方网站:http://www.iwiznet.cn WIZnet官方微博:http://weibo.com/wiznet2012
  • 热度 19
    2014-8-5 09:42
    1372 次阅读|
    0 个评论
    物联网技术的实现中,无线技术是不可缺少的部分。近年无线技术的发展,将ZigBee推入人们的视线中,那么ZigBee是怎样的一种技术呢?带着疑问,我查询了它的来历: ZigBee,来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,可以想象蜜蜂依靠这样的方式构成了群体中的通信网络!  是不是有点意思,那么随之 ZigBee的出现就成了一种我们熟知的无线组网通讯技术并广为应用。本篇就带你认识ZigBee,并实现一种常见应用:ZigBee转以太网网关。   将ZigBee技术连接互联网 图1 智能家居中ZigBee应用示意图 ZigBee是一种低成本,低功耗的近距离无线组网通讯技术,在智能家居、智能楼宇、工业监控等领域均有广泛应用。基于ZigBee的智能家居应用,如图1所示,用户在家庭中安装一个主控中心(ZigBee网关),及若干个与家电设备相连的分控终端,来远程操控所有家用电器,设想下躺在沙发上控制厨房的电饭煲煮饭是不是无限畅快呢?如果网关可以连到互联网上,甚至远在公司,打开手机就能登录到家里的网关查看家里的情况。 作为开源爱好者,可能很多人已经做过ZigBee方面的开发,一般使用TI公司的CC2530射频芯片较多,TI公司也针对这类芯片制定了完备的软件协议栈zstack。CC2530受处理器速度和内存限制,无法运行TCP/IP协议,用户往往通过串口获得协调器汇聚的数据。想要让协调器直接连上互联网只能借助其他网络芯片,由于W5500以太网芯片在硬件上实现了TCP/IP协议,即使像CC2530这样的16位单片机也可以自如操控W5500,实现联网,无需借助其他辅助处理器做数据转换。 本文我们使用两个CC2530模块,组建一个小型的ZigBee网络,一个作为协调器建立网络,另一个作为终端节点不断的采集温湿度数据并发送给协调器。为实现协调器的联网,我们在协调器上外接一个W5500模块,协调器作为TCP客户端连接以太网内的主机,并将终端节点发来的数据通过W5500上传给主机。应用系统的实物如图2所示: Zigbee2 图2系统实物   准备工作 1. 安装编译环境IAR Embedded Workbench for MCS-51 7.51A 2. 安装协议栈ZStack-CC2530-2.2.2-1.3.0 3. 安装CC2530模块调试下载器驱动   硬件连接与驱动程序重写 W5500在硬件上实现TCP/IP协议,用户几乎不需要任何网络基础,并且WIZnet公司针对W5500也有很好的程序包的支持,只需调用socket函数,就可以完成网络的建立和通讯,当然,要获得以上便利,我们要先将CC2530与W5500连接起来,并能够发送数据控制W5500。 W5500与MCU通信使用SPI接口,CC2530是带有8051内核的无线MCU,片上有两个SPI接口,并且与USART复用,这里我们选择SPI1作为W5500的控制接口。图2为W5500模块的管脚对应关系,控制这个模块仅需J1插针上的1-7引脚(程序上使用轮询机制,所以可以省略INT中断管脚)。图3为CC2530模块上SPI1引脚的对应关系,另外使用P13作为W5500模块RST(复位)的输出控制引脚。通过排线将以上引脚对应连好后就可以编写硬件驱动程序啦。 Zigbee3 图3 W5500模实物与原理图管脚对照 图4 CC2530EB板SPI管脚对照 由于W5500的函数驱动库是分层次书写的,我们只需将SPI通信的硬件抽象层的函数重新编写即可。 以下为CC2530的SPI1的初始化配置函数和数据收发函数的程序,以及复位管脚的控制程序:   CODE: SELECT ALL #include “ioCC2530.h” //SPI管脚和初始化配置 voidWIZ_SPI_Init(void) {   PERCFG |=0×02;//打开UART1外设   P1SEL  |=0xE0;// 使能P1_7, P1_6, and P1_5 外设功能   P1SEL  =~0×10;// 配置P1_4为普通GPIO (SPI_CS)   P1DIR  |=0×10;// 配置P1_4输出引脚 // Set baud rate to max (system clock frequency / 8)   U1BAUD =0×00;// BAUD_M = 0   U1GCR |=0×11;// BAUD_E = 17   U1CSR =~0xA0;// SPI 主机模式 // Configure phase, polarity, and bit order   U1GCR =~0xC0;// CPOL = CPHA = 0   U1GCR |=0×20;// ORDER = 1   P1SEL  =~0×08;// 配置P1_3为普通GPIO (RST)   P1DIR  |=0×08;// 配置P1_3为输出引脚 } //W5500 复位引脚的控制 void WIZ_RST(uint8 val) { if(val== LOW){    P1_3=0;//引脚拉低 }elseif(val== HIGH){    P1_3=1;//引脚拉高 } } //SPI CS管脚的电平控制 void WIZ_CS(uint8 val) { if(val== LOW){      P1_4=0; }elseif(val== HIGH){      P1_4=1; } } //SPI数据发送和接收 uint8 SPI2_SendByte(uint8 byte) { uint8 temp;   U1DBUF = byte; while(!(U1CSR0×02));//等待数据发送完毕   U1CSR =0xFD;   temp = U1DBUF;//读取数据缓冲区接收字节 return temp; } 程序重写完毕后,打开zstack的例程,将W55 00的驱动程序包添加到工程中。如图5所示,需要注意的是,CC2530的LCD驱动的部分引脚与SPI1的几个引脚是复用的,需要将和LCD有关的编译项去掉,避免发生冲突,导致SPI不可用。具体方法为在工程选项的编译子项里,去掉“LCD_SUPPORTED”,并添加“HAL_LCD=FALSE”。 图5 添加W5500驱动程序包到工程 图6 修改编译项   zstack应用任务程序编写 zstack是TI公司按照Zigbee协议编写的协议栈程序,提供了完备的应用函数供用户调用,用户可以在应用层添加自己的任务和事件来完成传感器数据采集、节点通信应答等功能,有关协议栈的任务调度机制还需要读者自行学习,这里介绍如何在应用层维护W5500的通信。在本文的系统中,为了降低与协议栈的耦合度(尽量不在协议栈原有文件中增删改),开机后,当系统运行起来后,我们将W5500的初始化和配置函数放在了应用层的任务里执行,协调器在完成组网后,应用层的任务主要有以下两个事件,一个是W5500网络连接的维护,另一个是终端节点的数据处理。其中第一个事件为定时事件,每隔一段时间就要对W5500的网络状态进行一次轮询处理。 在工程中,APP子栏下有sapi、SimpleCollector(协调器)、SimpleSensor(终端节点)三组文件,其中sapi中定义了节点组网和入网的应用函数,用户不需要改写这些程序,但是其中一些事件会调用SimpleCollector和SimpleSensor中的函数,用户需要在这两个文件中编写处理函数。 先看下协调器的应用层的程序处理过程,在sapi.c文件中初始化了SAPI 任务,在这个任务中定义了ZB_ENTRY_EVENT和ZB_USER_EVENTS两个事件,其中初始化函数SAPI_Init()中启动了ZB_ENTRY_EVENT事件,即在任务建立后会首先进入该事件。任务事件处理函数SAPI_ProcessEvent()中在处理这两个事件时调用zb_HandleOsalEvent()函数,交给用户文件SimpleCollector去处理。其中ZB_ENTRY_EVENT只执行一次,用来定义设备的类型(协调器或终端节点),ZB_USER_EVENTS会执行多次,在这个事件里我们用来维护W5500的网络连接。 以下是任务事件处理函数有关这两个事件的处理程序: 继续阅读: http://wizwiki.net/forum/viewtopic.php?f=91t=1075 WIZnet官方网站:http://www.iwiznet.cn WIZnet官方微博:http://weibo.com/wiznet2012
  • 热度 21
    2013-7-29 17:11
    1236 次阅读|
    0 个评论
           低成本Zigbee转以太网网关参考设计是一个关键的产品预备方案,将IEEE 802.15.4无线网络连接有线以太网网络。对于Zigbee,使用Atmel ATmega256RFR2,还有WIZnet W5200用于以太网连接。        Atmel ATmega256RFR2的无线系统级芯片(SoC)结合了最佳无线电性能的Atmel AVR® 8位CPU。         WIZnet W5200 嵌入式以太网控制器的特点是,一个10BaseT/100BaseTX MACPHY,支持很多常见以太网协议,TCP/IP,UDPIPv4。有线以太网接口是一个低成本,可靠并且安全的连接,适用于最终用户的路由器,接入点,无线局域网和互联网服务提供商。有线以太网降低了成本也避免干扰问题,并对于内部监管问题带有无线电解决方案。这个参考设计的开发以低BOM成本为主要目标。更多信息   感谢关注!   更多与我们交流: WIZnet邮箱:wiznetbj@wiznet.co.kr WIZnet主页:http://www.wiznet.co.kr WIZnet企业微博:http://www.e.weibo.com/wiznet2012