课 程 设 计
课程设计名称: 物联网数据传输处理综合课程设计
专 业 班 级 :
物联网工程 1502 班
学 生 姓 名 :
许雨
学
号 :
201516070215
指 导 教 师 :
蒋玉英
课程设计时间:
2018.6.19-2018.6. 30
物联网工程 专业课程设计任务书
学生姓名
许雨
专业班级
物联网
1502
学号
201516070215
题 目
课题性质
指导教师
基于 ZigBee 的无线通信系统
A.工程设计
王锋
课题来源
同组姓名
自拟课题
1. 利用两个 cc2530 芯片一个作为协调器,一个作为终端,实现两台 PC 机间的串口
主要内容
透传无线传输数据,即聊天系统。
2. 在实验中能够顺利的接收数据,并能够实现多个节点数据收发。
1.掌握 CC2530 串口的配置与使用
任务要求
2.掌握串口透传,熟知数据无线传输的接收与发送原理。
3.明白透传的原理,能够灵活运用此原理实现数据收发。
[1] CC2530 中文数据手册完全版[EB/OL],郑州新双恒信息技术有限公司, 2009.
[2] 刘连浩.物联网与嵌入式系统开发[M], 北京:电子工业出版社,2012.
参考文献
[3]
cc2530-datasheet[EB/OL],Texas Instruments Incorporated,2009.
[4] 周怡,凌志浩.Zigbee 无线通信技术及其应用[EB/OL],2005.
审查意见
指导教师签字:
教研室主任签字:
2018 年 6 月 15 日
一、设计任务与要求
利用两个 cc2530 芯片一个作为协调器,一个作为终端,实现两台 PC 机间的
串口透传无线传输数据,即聊天系统。
二、设计思想
利用 CC2530 的核心板,底板以及天线组成的小型单片机,将应用程序以协
调器和终端的形式下载到两个这样的单片机中,协调器作为组网的一端,终端加
入到这个网络当中,通过传输和接收数据到 PC 端的串口来显示它们之间的通信
过程,验证组网成功,可以进行聊天。
三、主要元器件介绍
3.1 CC2530 芯片介绍
CC2530 是用于 2.4-GHz IEEE 802.15.4、ZigBee 和 RF4CE 应用的一个真
正的片上系统 (SoC)解决方案。它能够以非常低的总的材料成本建立强大的
网络节点。CC2530 结合了领先的 RF 收发器的优良性能,业界标准的增强型
8051 CPU,系统内可编程 闪存,8-KB RAM 和许多其它强大的功能。CC2530 有
四种不同的闪存版本:CC2530F32/64/128/256,分别具有 32/64/128/256KB 的闪
存。CC2530 具有不同的运行模式,使 得它尤其适应超低功耗要求的系统。运
行模式之间的转换时间短进一步确保了低能源消耗。CC2530F256 结合了德州仪
器的业界领先的黄金单元 ZigBee 协议栈(Z-Stack™),提供了一 个强大和完
整的 ZigBee 解决方案。 CC2530F64 结合了德州仪器的黄金单元 RemoTI,更
好地提供了一个强大和完整的 ZigBee RF4CE 远程控制解决方案。
CC2530 模块大致可以分为三种类型:CPU 和内存相关的模块;外设、时
钟和电源管理相关 的模块;无线电相关的模块。 CC253x 设备系列使用的 8051
CPU 内核是一个单周期的 8051 兼容内核。它有三个不同的存 储器访问总线
(SFR、DATA 和 CODE/XDATA),以单周期访问 SFR、DATA 和主 SRAM。
它还包括 一个调试接口和一个 18 输入的扩展中断单元。 中断控制器提供了
18 个中断源,分为六个中断组,每组与四个中断优先级相关。当设备 从空闲模
式回到活动模式,也会发出一个中断服务请求。 内存仲裁器位于系统中心,因
为它通过 SFR 总线,把 CPU 和 DMA 控制器和物理存储器和 所有外设连接
1
在一起。内存仲裁器有四个存取访问点,访问每一个可以映射到三个物理存储器
之一:一个 8-KB SRAM、一个闪存存储器和一个 XREG/SFR 寄存器。它负责
执行仲裁,并确定同 时到同一个物理存储器的内存访问的顺序 。
图 3.1
CC2530 内部图
3.2 CC2530 芯片资料
图 3.2
CC2530 芯片简略图
2
CC2530 是专门针对 IEEE 802.15.4 和 Zigbee 应用的单芯片解决方案,经济
且低功耗。CC2530 有四种不同的版本:CC2530-F32 /64 /128 /256。分别带有 32
/64 /128 /256 KB 的闪存空间;它整合了全集成的高效射频收发机及业界标准的
增强型 8051 微控制器,8 KB 的 RAM 和其他强大的支持功能和外设。
3.3 8051 CPU
增强型 8051 内核使用标准的 8051 指令集。因为以下原因指令执行比
标准的 8051 更快
⚫ 每个指令周期是一个时钟,而标准的 8051 每个指令周期是 12 个时钟。
⚫ 消除了总线状态的浪费。 因为一个指令周期与可能的内存存取是一致
的,大多数单字节指令在一个时钟周期内执行。除了速度提高之外,增强型 8051
内核还包括结构上的改善:
⚫ 第二个数据指针
⚫ 一个扩展的 18 源中断单元 8051 内核的对象代码兼容业界标准的
8051 微控制器。即对象代码使用 8051 内核上执行的 业界标准的 8051 编
译器或汇编器编译,在功能上是等同的。但是,因为 8051 内核使用了不 同于
许多其他 8051 类型的一个指令时序,带有时序循环的已有代码可能需要修改。
而且,因为 诸如定时器和串行端口的外设单元不同于其他 8051 内核,包含使
用外设单元 SFR 的指令的代 码不能正确运行。 闪存预取默认不是使能的,但
是提高了 CPU 高达 33%的性能。这一设置的代价是功率消耗 略有增加,但 是
因为这样更快,大多数情况下提高了能源消耗。闪存预取可以在 FCTL 寄存器
中使能。
四、设计方案
大致的实验步骤:
1.选择 CoodinatorEB, 下载到开发板 A ;作为协调器,通过 USB 线跟电脑连
接.
2.选择 RouterEB, 下载到开发板 B;B 无线发送数据给协调器。
3.A,B 上电,打开串口调试助手,并打开串口选择自己的端口号。终端连网成
3
功后会向协调器发送数据,使用调试助手观察两者能否成功互相收发数据。
五、硬件连线
图 5.1 硬件连接图
图 5.2 组网成功图
六、程序流程图
4
图 6.1
Z-Stack 系统运行流程图
七、程序源代码
第一个功能:协调器的组网,终端设备和路由设备发现网络以及加入网络
//第一步:Z-Stack 由 main()函数开始执行,main()函数共做了 2 件事:一是系统初
始化,另外一件是开始执行轮转查询式操作系统
int main( void )
{
// Initialize the operating system
osal_init_system();
osal_start_system();
//第二步,操作系统初始化
//初始化完系统任务事件后,正式开始执行操作系统
}
//第二步,进入 osal_init_system()函数,执行操作系统初始化
uint8 osal_init_system( void )
任务
{
//初始化操作系统,其中最重要的是,初始化操作系统的
// Initialize the Memory Allocation System
osal_mem_init();
// Initialize the message queue
osal_qHead = NULL;
// Initialize the timers
osalTimerInit();
// Initialize the Power Management System
osal_pwrmgr_init();
// Initialize the system tasks.
osalInitTasks();
// Setup efficient search for the first free block of heap.
//第三步,执行操作系统任务初始化函数
5
osal_mem_kick();
return ( SUCCESS );
}
//第三步,进入 osalInitTasks()函数,执行操作系统任务初始化
void osalInitTasks( void )
//第三步,初始化操作系统任务
{
uint8 taskID = 0;
tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt)); //任务优先级由高向低依次排
列,高优先级对应 taskID 的值反而小
macTaskInit( taskID++ ); //不需要用户考虑
//不需要用户考虑
nwk_init( taskID++ );
Hal_Init( taskID++ );
//硬件抽象层初始化,需要我们考虑
#if defined( MT_TASK )
MT_TaskInit( taskID++ );
#endif
APS_Init( taskID++ );
//不需要用户考虑
#if defined ( ZIGBEE_FRAGMENTATION )
APSF_Init( taskID++ );
#endif
ZDApp_Init( taskID++ );
是协调器将建立网络,如果是终端设备将加入网络。
#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
ZDNwkMgr_Init( taskID++ );
#endif
SerialApp_Init( taskID );
个按键触发事件,
//应用层 SerialApp 层初始化,需要用户考虑
//第四步,ZDApp 层,初始化 ,执行 ZDApp_init 函数后,如果
在此处设置了一
//当有按键按下的时候,产生一个系统消息
}
//The seventh step,分两种情况,1.协调器 2.路由器或终端设备
1)协调器
void ZDO_NetworkFormationConfirmCB( ZStatus_t Status ) //The seventh step,给予 ZDO
层网络形成反馈信息(协调器)
{
osal_set_event( ZDAppTaskID, ZDO_NETWORK_START ); //发送网络启动事件 到 ZDApp
层,接着转到 ZDApp_event_loop()函数
}
UINT16 ZDApp_event_loop( uint8 task_id, UINT16 events )
{
if ( events & ZDO_NETWORK_START )
// 网络启动事件
{
ZDApp_NetworkStartEvt();
//网络启动事件,接着跳转到 The ninth step, 执行 ZDAp
p_NetworkStartEvt()函数..
6