Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2169908
  • 博文数量: 436
  • 博客积分: 9833
  • 博客等级: 中将
  • 技术积分: 5558
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-29 10:27
文章存档

2013年(47)

2012年(79)

2011年(192)

2010年(118)

分类:

2010-10-25 09:58:05

网络工程作业阶段性成果及下一步研究计划报告4

题目:嵌入式系统中的无线技术 zigbee,bluetooth,wifi,红外协议分析

组长:李天祺 组员:李天祺

报告日期:20101025

一.研究内容概述:

本阶段继续学习蓝牙的核心协议和《基于蓝牙HCI实现单片机与PC间无线通信》的软件部分。

二.本阶段学习内容及成果:

1. 文献研究()

《基于蓝牙HCI实现单片机与PC间无线通信》

软件设计

4单片机端

单片机端的软件在Keil平台下进行嵌人式C编程实现,传输层采用UART,单片机通过UART控制蓝牙模块。软件包括初始化,蓝牙交互,处理数据三个模块。初始化包括系统初始化和蓝牙初始化。系统初始化包括CPU时钟初始化,管脚分配,串口初始化等,蓝牙初始化是通过UART给蓝牙模块发送一系列初始化命令,蓝牙模块返回事件,交互完成一系列的复位,鉴权,读地址等初始化操作。通信就是初始化完成后若本地蓝牙作从设备,则等待远端蓝牙设备的建链请求,如果接受请求,则继续等待建链成功,获得一个连接句柄,从而进行数据交换,若本地蓝牙作主设备,则通过一系列主动查询,建链,发送数据,断链等操作。处理数据就是将数据显示在与单片机相连的LCD上等一系列后续操作。程序流程图如图所示。数据结构方面,程序按照HCI规范构造了HCI指令分组cmd_pktHCI事件分组event_pktHCIACL数据分组acl_pkt的数据结构,并设计了用于标识当前蓝牙设备的hci_device结构体,包括蓝牙设备配置信息hci_info,蓝牙连接信息HCIcon和用于存储返回分组信息的接收缓冲区hci_bui[1000],具体如图所示。

软件采用前后台的方式实现,前台运行主程序,后台定时循环调用HCI状态机HCI状态机是一个子程序,用来专门处理蓝牙模块返回的HCI事件分组和HCI数据分组。状态机通过分析HCI事件分组来决定相应操作,获取相关信息,通过分析HCI数据分组,来接收实际传输数据并存储到接收缓冲区。具体的HCI状态机的处理流程如图所示。

HCI状态机初始状态置为IDLESTATE,根据HCI UART传输层格式规范,按字段取蓝牙模块返回的各个字节,每个字节为一个十六进制数,不同的数代表不同的含义。第一个字节为分组指示器,标识分组的类型。ACL数据分组为ACLPKT(0x02)SCO数据分组为SCOPKT(0x03),事件分组为EVT_PKT(0x04),另外指令分组为CMD_PKT(0xO1),蓝牙模块只返回ACLSCO和事件分组。取出第一个字节判断出分组类型。若为事件分组,则状态机转换为EVENT— HDR— STATE状态,继续取字节,读出事件码和参数长度后,转换到EVENT_DATASTATE状态,表示再来的字节即为事件参数,读取事件参数,并调用processevent()处理事件,完成后回到IDLE— STATE状态。若为ACL数据分组,则先转换为ACL_ HDR_ STATE状态,取出连接句柄,转换为ACHINA NEW TELECOMMUNICACL DATA STATE状态,处理后续来的数据,即为实际接收到的数据,完成后回到IDLESTATE状态。若为SCO数据分组,类同ACL数据分组的处理过程。HCI状态机要通过系统预先设定的一个定时器定时循环调用,虽然HCIUART得到的数据流是一块一块的,有可能刚好是一个分组,有可能是几个分组,还可能是一个分组的部分数据,但状态机对接收到的一块数据流的处理是连续进行的,数据流的间断只会造成状态机的暂时等待,而不会影响其正确处理返回分组。如中途出现分组丢失或错误的字段,状态机会报错并重新置回初始态。程序主要函数如表所示。

4. 2 PC

操作系统采用Windows XP,蓝牙USB适配器采用CSR BlueCore 04,蓝牙USB适配器驱动程序采用csrbc1.18。此驱动程序提供了一系列的控制字,通过这些控制字可以直接在HCI层上控制蓝牙适配器。编程环境为VC++6.0。驱动程序的接口采用Win—dows API函数。

5 结束语

蓝牙通信的实现方案多种多样,本文仅是提出了一种基于HCI层的单片机通过UART控制蓝牙模块与Pc通过USB控制蓝牙适配器进行点对点通信的实现方案,当然,就算是这一种方案中,也有不同的实现模式,单片机端同样可以通过USB控制蓝牙模块,PC端加上一个电平转换同样也可以通过UART控制蓝牙模块。本系统只是实现了基本的点对点数据传输,在此基础上可以进一步完善,实现点对多点数据传输,还可以在两端开发对等层的文件传输协议,实现文件传输。此系统采用了状态机实现HCI,具有一定的规范性,可在此基础上开发蓝牙高层协议,也可作为一个通用的模块集成到具体应用系统中,较为方便地实现短距离的无线通信。

2. 参考资料:

无线通信及网络(第二版)                 William  Stallings

嵌入式系统设计与实例开发             王田苗  魏洪兴 

蓝牙技术                                    严紫建  刘元安 

《基于蓝牙HCI实现单片机与PC间无线通信》          周洪利 

三.本阶段研究面临问题及解决方案(针对文献答疑)

KeilKeil C51是美国Keil Software公司出品的51系列兼容单片机C语言 软件开发系统

句柄一个句柄是指使用的一个唯一的整数值,是指一个四字节长的数值,用 于标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口, 按钮,图标,滚动条,输出设备,控件或者文件等,应用程序能够通过句柄访 问相应的对象的信息。但是,句柄不是一个指针,程序不能利用它句柄来直接 阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的

状态机状态机的一个确切的描述是它是一个有向图形,由一组节点和一组相 应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属 于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子 集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须 是终态。当到达终态, 状态机停止

APIAPI(Application Programming Interface,应用程序编程接口)是一些预 先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一 组例程的能力,而又无需访问源码,或理解内部工作机制的细节

四.本阶段研究总结:

本阶段继续文献《基于蓝牙HCI实现单片机与PC间无线通信》研究并像上次一样通过上网查阅解决不懂的问题,但由于资源和时间有限,有些方面回答的比较简单。

经过前阶段对理论的初步了解,这两次的报告比较贴近实际研究,但文献中没有详细的软件程序代码,所以只能从思路和逻辑上对文献中的技术学习。

五.下阶段研究计划

下一周内大概要完成以下内容

1. 查找新的相关文献;

2. 完成蓝牙核心协议的学习;

3. 查找文献程序代码。

阅读(2042) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-04 22:26:42

有了,这回

chinaunix网友2010-11-03 20:47:27

有图啊

chinaunix网友2010-10-27 17:45:29

图?没法看。老师。