采用ARM7的蓝牙接入点的软、硬件系统设计
储已够用了,所以在外部没有进行 RAM的扩展。网卡芯片 AX88796通过片选线、中断线、读写信号控制线和地址数据总线和 cpu相连,实现蓝牙接入点和上位机的网络通信。AT91R40008通过串口 1实现与蓝牙模块的数据交换,通过串口 0实现和上位机之间的串口调试。
3.1.2 FLASH存储器 SST36VF160
由于该系统是应用与工业现场以太网中,在软件中必须加入相应的以太网规范标准,所以在系统设计中,在 cpu的外部拓展了 2M字节的 FLASH。SST39VF160是一个 1M×16的 CMOS多功能 FLASH器件,由 SST特有的高性能的 SupeRFlash技术制造而成。 SST39VF160功耗较低,工作电压为 3.3V,具有高性能的编程功能,字编程时间为 14us。基于 SST39F160的这些优点选用这款 FLASH,在实践中证明这款 FLASH能够更方便和更低成本的满足程序配置和数据存储的要求。
3.1.3 蓝牙模块 BCM04是满足自适应的可进行数据交换和语音通信的蓝牙通信模块。其体积小,为 17.5×15.0×2.3mm;工
作电压为 1.8V,功耗较低;以 UART为主接口,另有语音接口、 SPI接口、 PIO口等,其结构框图如图 2所示; BCM04内部集成了 16Kbits的 EEPROM和 4Mbits的 FLASH/ROM,具有丰富的存储器资源。
在设计中,使用了蓝牙模块的 UART口和微处理器 AT91R40008的串口 1相连,通过蓝牙模块向工业现场的无线设备发送和接收数据,在由 cpu,经工业以太网将数据传送到上位机中,实现上位机对蓝牙设备的访问与监控。
3.1.4 网络通信接口在设计中采用采用网络接口将蓝牙接入点接入工业以太网,数据由以太网传递到上位机中,实现工业现场的无线设备和上位机的通信。网络隔离器采用的是 HR61H50L,网卡芯片使用的是 AX88796。
AX88796是台湾 Asix公司推出的 NE2000兼容快速以太网控制器。其内部集成有 10/100 Mb/s自适应的物理层收发器和 8K×16位的 SRAM,支持 MCS-51系列、80186系列以及 MC68K系列等多种 CPU总线类型。 AX88796执行基于 IEEE802.3/IEEE802.3u 局域网标准的 10Mb/s和100Mb/s以太网控制功能,并提供IEEE802.3u兼容的媒质无关接口 MII(Media Independent Interface),用以支持在其它媒质上的应用。 AX88796的地址总线 SA[9:0]与数据总线 SD[15:0]分别与 CPU的地址/数据总线相连。 CPU通过 I/O读写 NE2000寄存器来控制 AX88796的工作状态,通过远程 DMA FIFOs与 AX88796的内部缓存 SRAM进行数据交换。SRAM与 MAC核之间进行 Local DMA将数据发送至 MAC层,再经由内部的 PHY层发送至 RJ45接口,或者经过 MII接口送至外部的物理层芯片。SEEPROM接口可以用来连接串行 EEPROM。EEPROM可用于存储 MAC地址,供 AX88796每次初始化时读取。
3.1.5 电源部分
电源采用的是以太网供电设备,该设备采用符合 802.3受电设备标准,输出标准的 +24V,经过 LM2576-5、 AS1117-1.8和 AS1117-3.3电源芯片,电平转换后,输出蓝牙接入点上的 cpu、存储器、网卡芯片和蓝牙模块上所需的 1.8V和 3.3V电源。
3.1.6 串口通信
串口通信使用的是 MAX3232芯片。这里使用串口通信接口主要是为了调试蓝牙模块、 cpu和上位机之间的通信,及测试其通信性能。
3.2 软件部分
在软件设计部分,主要介绍一下蓝牙模块的通信原理。首先,初始化蓝牙模块,直到初始化成功。接着对通信模块的各个端口进行定义。AT91R40008有 32位的 I/O口,设计时结合实际中的情况,考虑具体所用的端口,结合其他通信模块定义这些端口。定义通信模块端口完成以后,立即与现场无线设备进行连接。随后,蓝牙接入点开始搜索现场设备,并对现场设备进行读写,接收蓝牙指令并更新。其蓝牙模块的通信流程图如图 3。
蓝牙接入点向本地子网广播自己的设备声明,并接收其他设备的设备声明。初始化完后 5秒钟内用来搜寻子网中的邻居设备,搜寻完成后,开始建立邻居表,并把邻居表内的其他从设备加入到无线调度列表中。网络组建完成后,接入点按照确定性调度算法轮询从设备。并把蓝牙数据报文转换成工业以太网的报文,放入工业
以太网的调度器中。设备声明报文:
typedef struct _zgb_pkt_ann {
} zgb_pkt_ann;
信息分发报文:
typedef struct _zgb_distribute { INT8U devdesp[16]; INT8U mdata[16];
} zgb_distribute;
令牌:
typedef struct _zgb_pass_token { INT8U ans;INT8U res[3]; // 设备描述, 字符串 //主 or从? 0主设备; 1 从设备 //设备状态: 0设备未组态 , 自由发包; //1设备已组态 , 获取令牌才能发包 // 保留字段
// 设备描述, 字符串 // 信息分发的内容
//确认? 0不确认 ; 1确认 //
- Linux嵌入式系统开发平台选型探讨(11-09)
- VxWorks实时操作系统下MPC8260ATM驱动的实现(11-11)
- VXWORKS内核分析(11-11)
- Linux内核解读入门(11-09)
- linux文件系统基础(02-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)