怎么用蓝牙直接将编码器plc读取编码器的值发送到电脑上

文章数:182
年度积分:93
历史总积分:93
注册时间:
一个机械臂来回翻转180度,现在是考虑用一个单圈绝对值编码器来读取旋转位置,plc是三菱3U的,本人之前没有用过绝对值编码器,想请问大家如何接线把信号导入plc,plc用什么指令来读取它的位置值,看了一下绝对值编码器的原理,说是反馈回来的格雷码,然后转换成十进制就可以了,我想问,比如转到90度它的格雷码又是多少呢
文章数:182
年度积分:93
历史总积分:93
注册时间:
格雷码如何对应角度
lizhengchao
文章数:6223
年度积分:1113
历史总积分:10427
注册时间:
添加到收藏夹,我不懂,但也想知道答案
文章数:40265
年度积分:1868
历史总积分:66510
注册时间:
2016论坛优秀版主
2015论坛优秀版主
2014论坛优秀版主
2014相约国庆
2013论坛优秀版主
2012论坛优秀版主
2011论坛贡献奖
2010年论坛优秀版主
呵呵;先看你的编码器是几线的,对应不同分辩率,如256 512 1024;
三菱FX3U的直接支持格雷码转换;
文章数:103
年度积分:50
历史总积分:50
注册时间:
此楼内容不符合板块规定,不予显示!
冬立自动化
文章数:126
年度积分:349
历史总积分:4566
注册时间:
你说的是并行格雷码输出的编码器,并行输出的分辨率每一位都是一根线,对应plc的一个I/O输入点。较多的就是256、512、分辨率等,对应您的360角度,plc读到数据以后转换对应下角度就行了
专注于旋转编码器研发、生产 &www.shdongli.cn
冬立自动化
文章数:126
年度积分:349
历史总积分:4566
注册时间:
这种并行格雷码输出的还有正负逻辑之分的,三菱、欧姆龙等plc大部分都是负逻辑NPN型输入的,欧系的都是正逻辑PNP型输入的
专注于旋转编码器研发、生产 &www.shdongli.cn
文章数:2827
年度积分:353
历史总积分:8299
注册时间:
西门子PLC体验(二)
三菱 FX3系列输入即可接成源型也可接成漏型;FX系列用格雷码变换指令
ytleaderplc
文章数:8211
年度积分:925
历史总积分:16571
注册时间:
一个指令就可以了此帖发自论坛APP
PLC 文本显示器 触摸屏 变频 伺服 编程电缆 plc触摸屏编程 维修等
email: &
文章数:377
年度积分:114
历史总积分:2858
注册时间:
我也想了解一下
工控学堂推荐视频:查看: 4351|回复: 28
现在可以用编码器读取计数器的值了,但是怎么去测速呢?
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
编码器怎么去测速呢?怎么通过PWM去控制直流电机呢?求教各位大神!最近在用直流电机,希望大家可以帮帮忙!谢谢啦!
你的两个中断服务程序里,一个count,一个i均是局部变量,每次进中断它们的值都是0;
整个测速过程存在四种状态:处于起始捕获状态,处于编码器工作状态,处于尾捕获状态,TIM2超时状态;
每一状态需要做的事情当然也是不一样的;TIM2和TIM3均共享当前状态,你可以先画出一个流程图,不急着先写程序;
另外,n=60*(1000000)*M1/(M2*4*400);&&这里变量的类型需要注意其最大边界?M2的高频脉冲计数很可能会溢出的,需要
进 ...
主题帖子精华
初级会员, 积分 113, 距离下一级还需 87 积分
在线时间2 小时
你的两个中断服务程序里,一个count,一个i均是局部变量,每次进中断它们的值都是0;
整个测速过程存在四种状态:处于起始捕获状态,处于编码器工作状态,处于尾捕获状态,TIM2超时状态;
每一状态需要做的事情当然也是不一样的;TIM2和TIM3均共享当前状态,你可以先画出一个流程图,不急着先写程序;
另外,n=60*(1000000)*M1/(M2*4*400);&&这里变量的类型需要注意其最大边界?M2的高频脉冲计数很可能会溢出的,需要
进行溢出统计,不然高频计数值不正确
主题帖子精华
金钱126316
在线时间1084 小时
帮顶。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
回复【2楼】正点原子:
---------------------------------
谢谢原子哥!
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
求助各位大神!!!
主题帖子精华
高级会员, 积分 860, 距离下一级还需 140 积分
在线时间38 小时
你不会是在做飞思卡尔的比赛把?我当年也是做过那个比赛,我还记得我用的是欧姆龙的编码器,不知道名字记得对不对,时间比较久了,我给你点建议:
1.你最好不要=着别人来教你告诉你一步一步该怎么做,不管你是不是在做飞思卡尔的比赛,我推荐你去飞思卡尔的淘宝店也好,哪也好,上面关于编码器测速的资料数不胜数,还比较好学,都是实践的工程师给你写的,不是那帮搞科研的,读起来就不一样。还有许多程序程序的例子,不过是基于飞思卡尔处理器的,你要用别的处理器,稍微改改就行,都差不多的。我当时也这么过来的,慢慢就解决了。
2.直流电机也好步进电机也好,驱动板是必须的把,这个你应该是有的把?或者自己画个PCB用,买也可以,都不贵的,很简单的,我以前都是用L298N或者ULN2003A,都是比较低级简单的,驱动小电机没问题的,好用好学,原理简单,说道PWM,那你就不用求助帖子了,自习去看看原子哥的资料,例程,不完全手册什么的,上面说的很详细,PWM之前,把定时器也学一下。
3.这个是我个人抛开技术上的建议,我在做项目的过程中也经常求助帖子或者问高手,但是貌似与你的问题不同,你的问的编码器测速,PWM控制电机,随便上个百度,关键字也不用多少考虑,随便一搜,出来的结果和资料我保证你几个晚上都读不完,这不是什么稀奇的问题,太大众化了,可以说是被人做烂的东西了,至少我比赛的时候就已经是了。很好找答案的呀,你自己搜过吗?资料很难懂吗?反正我个人是遇到问题,自己实在搜不到,找不到,没办法解决,才发帖求助,你的这2个问题或许论坛里有大神会耐心告诉你一步一步怎么做,但是我希望你能自己解决。加油。
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
回复【5楼】w:
---------------------------------
太感谢了!我不是在在做飞思卡尔的比赛,是要自己做点东西,用的欧姆龙的编码器!百度过编码器测速,但是资料太杂了,很难找到有用的信息!PWM控制电机以前用过,这个不是问题,就是不会编码器测速!您的建议给了我很大动力!真心感谢您的建议!
主题帖子精华
初级会员, 积分 113, 距离下一级还需 87 积分
在线时间2 小时
2点建议:
1,建议先看一看M/T测速法,理解其原理后,测速代码就很好写了;
2,然后看一看PID控制相关资料,将编码器的测速反馈给PID,输出对应的PWM对直流电机进行调速;
原理性的东西还是要自己去看的,论坛里的大神都很忙的
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
回复【7楼】joe_knight:
---------------------------------
嗯,看过M&T&M/T这几种测速方法了。看懂了大概,还在琢磨怎么写代码!编码器的测速还要反馈给PID去控制电机啊?
主题帖子精华
初级会员, 积分 113, 距离下一级还需 87 积分
在线时间2 小时
闭环控制当然要用到PID了,至于你是用P还是PI或者是PID控制看具体需求,一般用PI控制基本都能满足要求
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
回复【9楼】joe_knight:
---------------------------------
嗯,好吧!PID还完全没有接触过呢!
你能帮我看看这个编码器的代码对吗?用的400线的增量式编码器!
void&TIM_Encoder(void)
{
&&&&TIM_TimeBaseInitTypeDef&TIM_TimeBaseInitS
&&&&GPIO_InitTypeDef&GPIO_I
&&&&TIM_ICInitTypeDef&TIM_ICInitS
&&&&
&&&&GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);&&&&
&&&&
&&&&GPIO_Initstructure.GPIO_Mode&=&GPIO_Mode_IN_FLOATING;
GPIO_Initstructure.GPIO_Pin&=&GPIO_Pin_6|GPIO_Pin_7;
GPIO_Initstructure.GPIO_Speed&=&GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_Initstructure);&&
&&&&TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
&&&&TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
&&&&TIM_TimeBaseInitStruct.TIM_Period=400*4-1;
&&&&TIM_TimeBaseInitStruct.TIM_Prescaler=0;
&&&&
&&&&TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);&&&
&&&&&&&
&&&&TIM_EncoderInterfaceConfig(TIM3,&TIM_EncoderMode_TI12,&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&TIM_ICPolarity_Rising,&TIM_ICPolarity_Rising);
&&&&TIM_ICStructInit(&TIM_ICInitStructure);
&&&&TIM_ICInitStructure.TIM_ICFilter&=&6;
&&&&TIM_ICInit(TIM3,&&TIM_ICInitStructure);&&&&
&&&&TIM3-&CNT=0;
&&
&&&&TIM_ClearFlag(TIM3,&TIM_FLAG_Update);
&&&&TIM_ITConfig(TIM3,&TIM_IT_Update,&ENABLE);&
&&&&TIM_Cmd(TIM3,ENABLE);&&&&
}
主题帖子精华
初级会员, 积分 113, 距离下一级还需 87 积分
在线时间2 小时
回复【10楼】张晓斌:
---------------------------------
如果你GPIO和TIM时钟在别处都有使能的话,编码器接口配置没什么问题;
另外,你配置完编码器接口之后,还有测速周期Tc和高频脉冲计数都需要加进来的(M/T测速的话)
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
回复【11楼】joe_knight:
---------------------------------
测速周期可以用另一个定时器中断来设定吗?高频脉冲计数?是指在测速周期内读取TIM3的计数器值吗?还有我想不明白,400线的编码器为什么预装载值会是400*4呢?是因为编码器转动一周产生400个脉冲,然后在上升沿读取,4倍计数,这样理解对吗?
主题帖子精华
初级会员, 积分 113, 距离下一级还需 87 积分
在线时间2 小时
使用另一个定时器中断来进行周期测速,高频计数脉冲就是M/T法的M2,编码器计数是M1,测速的公式N=&(60&*&f0*M1)&/&(P*M2),式中,
P在你项目里是400*4,f0是测速高频脉冲定时器的频率;编码器A和B相,相位差90,每一个边沿会进行一次计数,那么每一线就是4次计数了;
对于M/T法测速,这里说的还比较详细:http://www.61ic.com/Article/C.html
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
回复【13楼】joe_knight:
---------------------------------
基本上明白了,太感谢了!
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
回复【13楼】joe_knight:
---------------------------------
思路是不是这样啊!我用TIM2产生5ms中断,TIM3作为编码器计数。进入TIM2中断后,使能TIM3,然后M1=TIM3-&CNT,M2=TIM2-&CNT。这样的话M2应该是确定的就是TIM2的计时器预装载值,这样对吗?
主题帖子精华
初级会员, 积分 113, 距离下一级还需 87 积分
在线时间2 小时
TIM2的5ms是否满足低速要求(一个测速周期至少要能检测到一个码盘脉冲),这个需要评估;
&假定Tim2周期为5ms,那Tc&=&5ms,而不是高频脉冲计数M2,高频脉冲顾名思义,频率相对较高,计数值增长较快,需要另外一个计数器来进行计数;
&TIM3的计数值就是M1,这个没错的;
&另外,需要注意的是提高测速精度,需要规避误差产生的条件,12楼的链接里误差分析也说明了这点。
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
回复【16楼】joe_knight:
---------------------------------
哦哦!如果还是TIM2产生5MS定时中断,那么进入TIM2中断后,应该使能TIM3和TIIM5,TIM5作为高频f0脉冲,这样就可以实现TIM3和TIM5的同步,然后M1=TIM3-&CNT,M2=TIM5-&CNT.测速的电机转速低,所以5MS应该可以了!通过M1计算得到弧长,也就是角位移,然后根据M2&f0可以得到脉冲时间,这样就可以得到转速。对了,在退出中断是得失能TIM3和TIM5.
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
回复【16楼】joe_knight:
---------------------------------
void&TIM5_Configuration(void)
{
&&&TIM_TimeBaseInitTypeDef&TIM_TimeBaseInitS
&&&&
&&&TIM_ClearITPendingBit(TIM5,TIM_IT_Update);&
&&&
&&&TIM_TimeBaseInitStructure.TIM_ClockDivision=0;
&&&TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
&&&TIM_TimeBaseInitStructure.TIM_Period=1600;
&&&TIM_TimeBaseInitStructure.TIM_Prescaler=71;
&&&&
&&&TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStructure);
&&&&
&&&TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);
&&&&
&&&//TIM_Cmd(TIM5,ENABLE);
}//TIM5作为高速脉冲计数
void&TIM2_Configuration(void)
{
&&&TIM_TimeBaseInitTypeDef&TIM_TimeBaseInitS
&&&&
&&&TIM_ClearITPendingBit(TIM2,TIM_IT_Update);&
&&&
&&&TIM_TimeBaseInitStructure.TIM_ClockDivision=0;
&&&TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
&&&TIM_TimeBaseInitStructure.TIM_Period=50-1;
&&&TIM_TimeBaseInitStructure.TIM_Prescaler=7199;//定时5ms
&&&&
&&&TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
&&&&
&&&TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
&&&&
&&&TIM_Cmd(TIM2,ENABLE);
}
void&TIM2_IRQHandler(void)
{
&&u16&M1=0,M2=0;
&&&&
&&TIM_Cmd(TIM3,ENABLE);
&&TIM_Cmd(TIM5,ENABLE);
&&&&
&&M1=TIM3-&CNT;
&&M2=TIM5-&CNT;&
&&n=60*(1000000)*M1/(M2*4*400);&
&&
&&TIM_Cmd(TIM3,DISABLE);
&&TIM_Cmd(TIM5,DISABLE);
&&&&
&&TIM_ClearITPendingBit(TIM2,TIM_IT_Update);&
&&&&
}
这样有什么问题吗?为什么测得的n一直是0呢?是按照那个思路啊?哪里不对啊?
主题帖子精华
初级会员, 积分 113, 距离下一级还需 87 积分
在线时间2 小时
你在TIM2的5ms中断里做的是什么呀:打开TIM3和TIM5后就读计数器?读完然后就关闭?这样在一个测速周期内TIM3和TIM5都不工作,测出来不是0都怪了。
先禁用定时器,再读数,最后再使能定时器,这流程是不是你想要的?
但这样测速是不精确的,尤其对于慢速系统。
1,我们先来看Tc是不是满足需求,n&=&(60&×&M1)/(P&×&Tc),为了在一个Tc内至少能收到一个编码脉冲,那么M1=1,P恒量4×400,n&&=&60000&/&(4&×400&×&5),n&=7.5rpm,
也就是说,在低于7.5rmp的转速时,你的测速周期就不能满足需求,如果有示波器,可以通过编码脉冲的波形可以看一看不同转速下的最小Tc;
2,为什么说这样测速精度不够呢?copy一段,你好好理解一下:Tc开始时刻与码盘输出脉冲上升沿并非一定同步到达。同样,TC结束时刻也很难刚好与码盘的输出脉冲上升沿同步。这两个时间差都与转速的大小有关,而与高频计数时钟的频率无关。由此引起的计数和计时的时间偏差可能比高频时钟周期大得多,从而降低测速的精度;
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
回复【19楼】joe_knight:
---------------------------------
蒙圈了。。。应该是初始化时使能TIM3和TIM5,然后在TIM2中断里面禁用TIM3和TIM5,读取计数值放到M1和M2里面在进行计算。这样也不能实现。然后又仔细看了看那篇文章,换了种思路,&&
主函数中&&&
&if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)==1)//TIM3的PC6&nbspC7作为编码器接口
&&&&&&{
&&&&&&&&TIM3-&CNT=0;
&&&&&&&&TIM_Cmd(TIM5,ENABLE);
&&&&&&}
然后在TIM2中断里
void&TIM2_IRQHandler(void)
{
&&u16&M1=0,M2=0;
&&&
&&&&if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)==1)
&&&&{&&&&
&&TIM_Cmd(TIM3,DISABLE);
&&TIM_Cmd(TIM5,DISABLE);&&&&
&&&
&&M1=TIM3-&CNT;
&&M2=TIM5-&CNT;&
&&&&
&&TIM3-&CNT=0;
&&TIM5-&CNT=0;
&&n=60*(1000000)*M1/(M2*4*400);&
&&
&&TIM_Cmd(TIM3,ENABLE);
&&TIM_Cmd(TIM5,ENABLE);
&&&&}&
&&TIM_ClearITPendingBit(TIM2,TIM_IT_Update);&
&&&&
}
但是这样也不可以啊!这样应该可以啊!奔溃了。。。
主题帖子精华
初级会员, 积分 113, 距离下一级还需 87 积分
在线时间2 小时
之前我做过的是这样的一个思路:在tc中断到达时,TIM3配置为输入捕获(双边沿),在TIM3捕获中断内禁用捕获,再配置TIM3为编码器模式,使能高频脉冲计数定时器;
在下一次tc中断再次到达后,禁用TIM3,读取TIM3计数M1和,然后又将TIM3配置成输入捕获模式;在TIM3捕获中断内又禁用捕获,禁用高频脉冲计数定时器,读取TIM5计数M2,计算转速;
如果再下一次的tc中断到达时,尾捕获还未产生,读取TIM5计数M2,计算转速;所以这里的测速周期实际是Tc~2Tc;
这里提供一个思路,优化空间还很大。。。
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
回复【21楼】joe_knight:
---------------------------------
void&TIM2_IRQHandler(void)
{&&&&
&&u8&count=0;
&&&if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
&&&{
&&&&&&
&&&&if(count==0)//第一次进入中断后
&&&&{
&&&&&&&&TIM3_Cap_Init();//输入捕获模式
&&&&&&&&count++;&&
&&&&}&&&&&&&&
&&&&if(count==2)//第二次进入中断
&&&&{
&&&&&&&&count=0;
&&&&&&&&TIM_Cmd(TIM3,DISABLE);
&&&&&&&&M1=TIM3-&CNT;
&&&&&&&&TIM3-&CNT=0;//计数器清零
&&&&&&&&TIM3_Cap_Init();&&
&&&&}&&&&&&&&&&&&&
&&&TIM_ClearITPendingBit(TIM2,TIM_IT_Update);&
&&&}&&&
}
void&TIM3_IRQHandler(void)
{
&&&&u8&i=0;
&&&&if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
&&&&&&&&TIM_ClearFlag(TIM3,TIM_IT_Update);
&&&&if(TIM_GetITStatus(TIM3,TIM_IT_CC1)!=RESET|TIM_GetITStatus(TIM3,TIM_IT_CC2)!=RESET)
&&&&{&&&
&&&&&&&&if(i==0)//第一次捕获
&&&&&&&&{&&&&&
&&&&&&&&TIM_Cmd(TIM3,DISABLE);
&&&&&&&&TIM3-&CNT=0;
&&&&&&&&TIM_Encoder();
&&&&&&&&TIM_Cmd(TIM5,ENABLE);
&&&&&&&&i++;
&&&&&&&&}
&&&&&&&&if(i==2)//第二次捕获
&&&&&&&&{
&&&&&&&&&&&i=0;
&&&&&&&&&&TIM_Cmd(TIM5,DISABLE);
&&&&&&&&&&M2=TIM5-&CNT;&&
&&&&&&&&}
&&&&&&&&TIM_ClearFlag(TIM3,TIM_IT_CC1);
&&&&&&&&TIM_ClearFlag(TIM3,TIM_IT_CC2);
&&&&}
}
我是按照你给的思路写的啊,但结果还是一样的。唉。。。对自己失望了。
主题帖子精华
中级会员, 积分 230, 距离下一级还需 270 积分
在线时间5 小时
回复【23楼】joe_knight:
---------------------------------
哦哦,可能是溢出没有处理好吧,我再弄弄吧!真心谢谢你!
主题帖子精华
初级会员, 积分 83, 距离下一级还需 117 积分
在线时间16 小时
主题帖子精华
新手入门, 积分 49, 距离下一级还需 -29 积分
在线时间7 小时
楼主,你的编码器能精确地测速;了吗??
主题帖子精华
新手入门, 积分 49, 距离下一级还需 -29 积分
在线时间7 小时
楼主能用编码器准确滴测速了吗??
主题帖子精华
初级会员, 积分 121, 距离下一级还需 79 积分
在线时间44 小时
楼主你搞定了吗?能分享一下吗?我也在做测速,谢谢
主题帖子精华
初级会员, 积分 62, 距离下一级还需 138 积分
在线时间14 小时
楼主 你的测速问题解决了吗
Powered by什么PLC可以直接读取伺服编码器的数据_百度知道
什么PLC可以直接读取伺服编码器的数据
我有更好的答案
各品牌PLC都有这个功能吧,采用高数计数模式,即可采集到伺服编码器的数据的龙丰自动化
采纳率:81%
来自团队:
不是读取是接收!
都差不多一个意思啦,什么PLC可以做到呢?
欧姆龙CP1E具有这种功能!一般CPU都有这种功能的!如果本体没有可以添加功能模块
为您推荐:
其他类似问题
编码器的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。换向编码器开启智能时代_物联网在线当前位置: >>
蓝牙无线通信实验
目实验一 实验二 实验三 实验四录蓝牙协议体系实验................................................... ..1 蓝牙基带分组实验…………………………….……13 蓝牙纠错编码实验………………………………….28 蓝牙跳频实验……………………………………41实验五 实验六 实验七 实验八 实验九 实验十 实验十一 实验十二 实验十三蓝牙服务发现实验..................................................53 蓝牙语音和数据通信实验…………………………70 蓝牙组网实验…………………………….……....88 蓝牙鼠标使用实验…………………….…………104 蓝牙耳机使用实验……………………….………106 HCI 指令基础实验…………………….………….109 HCI 指令操作实验………………….…………..151 蓝牙测试实验……………………….…………159 蓝牙鼠标装配实验…………….……………….174附: 服务发现(SDP)实验教师准备工作…….……………..177- 1 - 蓝牙无线通信教学系统教材实验一 蓝牙协议体系实验 (一)蓝牙协议体系实验原理蓝牙这项技术标准,是以公元十世纪统一了国家的丹麦国王哈拉德?布鲁图斯 (Harald Bluetooth)的名字命名的。由爱立信、英特尔、IBM、诺基亚、东芝发起成立 的世界蓝牙组织 Bluetooth Special Interest Group(SIG)采用了技术标准公开的策 略来推广蓝牙技术的确是相当成功的。到目前为止,世界蓝牙组织 SIG 已发展成为一个 相当大的工业界高新技术标准化组织,全球支持蓝牙技术的 2000 多家设备制造商都已 经成为它的会员(Adopters) ,包括许多世界最著名的计算机行业、通信领域以及消费 电子产品,甚至还有汽车与相机制造商和生产厂家。一项公开的、全球统一的技术规范 得到了工业界如此广泛的关注和支持是以往罕见的,由此可见基于蓝牙技术的产品具有 广阔的应用前景和巨大的潜在市场。 蓝牙是一种近距离无线通信技术规范,用来描述和规定各种信息电子产品(包括通 信产品、 计算机产品和消费电子产品) 相互之间是如何用短距离无线电系统进行连接的。 蓝牙技术最大的好处是消除了千头万绪、令人头痛的电缆线。 1.1 蓝牙技术指标和系统参数 蓝牙技术的主要参数目前大都是以满足美国 FCC 的要求为标准。对于其他国家的应 用,需要作一些改动,如发射功率和频带,可作适应性调整。蓝牙 1.1 规范已公布的主 要技术指标和系统参数见表 1。表 1 蓝牙技术指标和系统参数 技术指标与系统参数 工作频段 双工方式 业务类型 数据速率 非同步信道速率 同步信道速率 功率 跳频频率数 跳频速率 工作模式 数据连接方式 纠错方式 说明 ISM 频段,2.402~2.480GHz 全双工,TDD 时分双工 支持电路交换和分组交换业务 1Mbit/s 非对称连接 721kbit/s, 57.6kbit/s, 对称连接 432.6kbit/s 64kbit/s 美国 FCC 要求&0dBm(1mW),其他国家可扩展为 100mW 79 个频点/1MHz 1600 次/秒 PARK/HOLD/SNIFF 面向连接业务 SCO,无连接业务 ACL 1/3FEC,2/3FEC,ARQ-1- 蓝牙无线通信教学系统教材鉴权 信道加密 语音编码方式 发射距离 采用质询-相应方式 采用 0 位,40 位,60 位密钥 连续可变斜率调制 CVSD 一般可达 10cm~10m,增加功率可达 100m1.2 蓝牙协议 蓝牙产品开发,首先必须对蓝牙相关的协议和规范有一个初步的了解,对要开发的 部分有细致的研究。 蓝牙规范在其协议内采用分层结构, 蓝牙协议体系可以分为四层, 包括核心协议层、 替代电缆协议层、电话控制协议层和选用协议,每层还包含一些具体的协议: ? ? ? ? 核心协议:基带、链路管理协议(LMP) 、逻辑链路控制和适配协议(L2CAP) 、 服务发现协议(SDP) ; 替代电缆协议:串行电路仿真协议(RFCOMM) ; 电话控制协议:二元电话控制规范(TCS Binary) 、AT-命令(AT-command) ; 选 用 协 议: 点到 点 协议 ( PPP ) 用户 数 据报 / 传 输控 制协 议 /无线 网 协 议 、 (UDP/TCP/IP) 、目标交换协议(OBEX) 、无线应用协议(WAP) 、无线应用环境 (WAE) 、vCard、vCal、红外移动通信(IrMC) 。 除了以上协议层,还定义了主机控制器接口(HCI) ,它为基带控制器、链路控制器 以及访问硬件状态和控制寄存器等提供命令接口。如图 2-1 所示蓝牙协议体系结构。图 2-1 蓝牙协议体系结构1.2.1 蓝牙核心协议-2- 蓝牙无线通信教学系统教材 ? 基带协议(Base band) 在一个微微网中,只有一个蓝牙设备是主设备,可以有 7 个从设备。它们由 3 位的 活动成员地址区分。主设备的时钟和跳频序列用于对同一个微微网中的从设备进行同 步。多个独立的非同步的微微网可以形成散射网,一个微微网中的主/从设备可以另外 一个微微网中的从/主设备,不同的微微网通过使用不同的跳频序列来加以区分。 基带协议确保各个蓝牙设备之间的物理射频连接,以形成微微网。蓝牙的射频系统 使用跳频和扩频技术,其任一分组在指定时隙通过指定频率进行发送,这层使用查询和 呼叫进程来同步不同设备间的传输跳频频率和时钟。 基带对相应的基带数据分组提供两种不同的物理链路:同步面向连接(SCO)和异步 无连接(ACL) ,其中 ACL 可以在同一射频系统中采用多路技术的方式进行传输。ACL 只 能传数据分组,SCO 可以传语音分组(CVSD 编码)也可以传数据分组。所有的语音和数 据分组都附有不同级别的前向纠错或循环冗余校验编码,并可以进行加密。另外,对于 链路管理信息和控制信息分别分配一个特殊的传输信息。 ? 链路管理协议(LMP) 链路管理协议不但负责蓝牙各设备间链路的建立和控制,还用于安全方面的 鉴权和加密;另外,还可以控制无线部分的能量模式和工作周期及微微网内各设备 的连接状态。 每个设备上的链路管理器(LM)利用 LMP 协商彼此之间蓝牙空中接口的特性。其中 包括带宽的分配,设备间协商确定基带数据分组的大小,通过支持适配协议数据业务所 需要的服务级别以及保留的周期性带宽来支持话音通信业务。通信设备上的蓝牙 LMP 利 用利用“竞争-应答”的方式对设备进行鉴权,产生、交换、核实链路和加密连接密钥, 以进行身份认证和加密。在必要时,对 LM 监控设备的配对和对设备之间空中接口上的 数据流加密,其中配对是通过产生和存储连接密钥来建立起设备之间的相互信任的关 系,为以后的设备鉴权做准备。如果鉴权失败,LM 将切断设备的链路,以禁止设备间的 任何通信。 还支持能量控制, LM 通过交换彼此间的参数信息来协商低活动性基带运行方 式,从而控制功耗。 接收端的链路管理器对 LMP 消息进行过滤和解释,从而它们不会向上层传递。因为 LMP 消息的优先权大于用户数据,所以如果一个链路管理器需要发送一条消息,不会被 L2CAP 话务延迟。另外,逻辑信道通过了一个可靠的链路,所以使得 LMP 消息不需要普 遍公认。 ? 逻辑链路控制和适配协议(L2ACP) 逻辑链路控制和适配协议完成基带与高层协议间的适配,并通过协议复用、分割及 重组操作为高层提供数据业务和分类提取,来自数据应用的通信信号首先通过 L2CAP, L2CAP 层屏蔽了高层协议和应用与低层传输协议之间的关联。因此,高层协议不需要知 道在无线电波和基带层上的跳频序列,也不需要知道在蓝牙空中接口传输的特殊的分组 格式。L2CAP 支持协议复用,允许多个协议和应用共享空中接口,它支持分组的分割和-3- 蓝牙无线通信教学系统教材 重组, 将高层使用的大分组分割成适于基带传输的小分组, 在接收端将这些小分组重组。 最后,两个对等设备上的 L2CAP 层通过协商达成一个双方都能接受的业务等级,并能维 护和保持此业务级别。基于要求的业务等级,一个 L2CAP 的使用既能行使允许新的通信 信号进入的控制权,同时与低层协调以保持所需的业务等级。 L2CAP 是基带的上层协议,可认为是与 LMP 并行工作的,它们的区别在于,当数据 不经过 LMP 时,L2CAP 将采用多路技术、数据分组分割和重组技术、群提取技术以及服 务质量等, 为上层提供数据。 虽然基带提供了 SCO 和 ACL 两种连接, L2CAP 只允许 ACL, 但 并允许高层协议以 64kb/s 的速度收发数据分组。话音和电话应用的语音质量信道通常 在 SCO 上运行,然而话音数据可以打包并使用通信协议在 L2CAP 上传输。 ? 服务发现协议(SDP) SDP 是蓝牙技术框架中非常重要的一个部分,使用 SDP 可以查询到设备信息,服务 和服务类型。在对邻近的可获得的服务定位以后,蓝牙设备之间才能建立连接。SDP 支 持三种查询方式:按服务类别搜寻、按服务属性搜寻和业务浏览(Browsing) 。 1.2.2 替代电缆协议(RFCOMM) RFCOMM 表示一个虚拟串口, 它的应用类似于标准的有线串口所能实现的应用, 因此, RFCOMM 协议的内容就是使那些遗留的、基于串口的应用使用蓝牙传输方式。RFCOMM 是 基于欧洲电信联盟技术标准 ETSI07.10 规范的串口仿真协议,此标准还用于 GSM 通信设 备,此标准定义了在一条串行链路上的多路复用串行通信。RFCOMM 在 L2CAP 上提供 RS -232 串口仿真。 1.2.3 电话控制协议(TCS) TCS 包括二进制电话控制(TCS BIN)协议和一套电话控制命令(AT commands) 。其 中,TCS BIN 定义了在蓝牙设备间建立话音和数据呼叫所需要的呼叫控制信令;AT commands 则是一套可在多使用模式下用于控制移动电话和调制解调器的命令,它由 SIG 在 ITU-TQ.931 的基础上开发而成。 1.2.4 选用协议 ? 点对点协议(PPP) 这个标准定义了 IP 数据报如何子串行点到点链路上传输。 如果接入互联网, 则可以 使用这些链路。PPP 有三个注意成分: 1) 封装 PPP 提供在串口链路上封装数据报的方法,它提供封装协议,对面向比特的同步链 路和非同步链路进行 8 比特的数据封装,不包含奇偶校验。这些链路是全双工的。PPP 封装还适用于同时在一条链路上使用不同网络层协议的多路技术。它为接入不同的主 机、网桥和路由器之间的连接提供了一个公共解决方案。 2) 链路控制协议(LCP) PPP 提供 LCP 以确保在不同环境中的可移植性。LCP 用于自动约定可选的封装格式, 限制不同分组的大小, 在链路上对对等设备的一致性进行鉴权, 确定链路的运行和关闭,-4- 蓝牙无线通信教学系统教材 检测循环错误和其它常见结构错误以及种植链路。 3) 网络控制协议(NCP) 点到点链路会导致网络协议的许多问题恶化。这些问题由一系列 NCP 处理,通过它 们各自的网络层协议对特殊要求进行管理。 ? 用户数据报协议/传输控制协议/互联网协议(TCP/UDP/IP) TCP/UDP/IP 都是由 IETF 制订的,目前是最广泛被使用的协议。在蓝牙设备中使用 这些协议,是为了与互联网连接的设备进行通信。 TCP 是一个面向连接、端到端的可靠协议,适于支持多网络应用的分层结构,TCP 前向数据以 IP 数据报或分组的形式传送到接收端主机。 UDP 和 TCP 的可靠传输相比,UDP 在向 IP 传输个人信息时仅使用“尽力而为”的传 输方式,业务 IP 不是非常可靠的,所以不能保证传输。然而,UDP 对于某些如快速数据 库查询这类的通信非常有用。 通过蓝牙规范使得这些标准的实现,允许其它任何设备与互联网连接。 ? 对象交换协议(OBEX) OBEX 是 Ir OBEX 的简写,由红外数据协会(IrDA)制订的会话层协议,采用简单的 自发的方式来交换对象。它提供的基本功能类似与 HTTP,在假定传输层可靠的基础上, 采用客户机-服务器模式, 而独立于传输应用程序接口 (API)在蓝牙 1.0 协议中, 。 RFCOMM 是 OBEX 唯一的传输层,在以后的版本中,可能支持 TCP/IP 作为传输层。 ? 无线应用协议(WAP) 是为由移动电话类的设备使用的无线网络定义的协议。 1.3 蓝牙技术的应用 蓝牙技术开发的初衷是以取消各种电器之间的连线为目标,但随着技术的深入,蓝 牙技术的应用已大大发展,预计蓝牙的应用将从移动电话、笔记本电脑这样的手持机扩 展到各种应用领域,如信息家电、汽车、航空、医疗和交通等。以下是对蓝牙应用模型 的简单概括。 1.3.1 电缆替代 1) 电脑外设的无线连接 计算机及其外部设备的应用越来越多,它们之间的信息传输传统上必然要通过连接 电缆,给使用者带来很大的不便。利用蓝牙技术,如键盘、鼠标、耳机、音箱、游戏操 作杆等电脑配件、电脑输入输出设备(打印机、扫描仪、外置调制解调器、移动硬盘等) 和电脑多媒体组件(耳机、摄像头、数码相机、超低音音箱等)均可采用无线方式接入 电脑,典型如图 3-1 所示。-5- 蓝牙无线通信教学系统教材图 3-1 应用蓝牙技术典型的计算机系统连接2) 无线耳机 蓝牙耳机用于手机可以让您彻底摆脱现在有线耳机的不便。在通话过程中,您可以 将手机别在皮带上或放在一边;当电话铃响起时,您只需简单的按下耳机上的按键作出 应答;当大电话时,只需按下耳机上的按键通过语音识别的控制来发出呼叫。如图 3-2 所示蓝牙耳机。图 3-2 蓝牙耳机3) 台式电脑、笔记本电脑、移动电话的无线互连 蓝牙技术使台式电脑、笔记本电脑、移动电话三种最常用的信息工具通过无线方式 连接,给用户带来许多方便。数据在三种设备间共享,不论在哪一种设备上,您都可以 打电话、上网浏览和收发电子邮件。蓝牙技术配置在电脑和手机上有两种方式,一种是 外接符合规范的适配卡,如用于笔记本电脑的 PCMCIA 卡、用于台式电脑的蓝牙 USB 适 配器、用于掌上电脑的蓝牙闪存卡等。当然,另一种方案采用嵌入式芯片将是未来的主 流。该连接模型如图 3-3 所示。图 3-3 应用蓝牙技术的无线互联4) 多媒体无线传送 在数码相机上增加蓝牙无线发送功能,可以将数码相机拍到的图片数据通过无线传 输到打印机、笔记本电脑、台式电脑,或通过移动电话将该图片传送到任何地方,具体 如图 3-4 所示。-6- 蓝牙无线通信教学系统教材图 3-4 利用蓝牙技术远距离传输图像5) 家电的无线互连和遥控 应用蓝牙技术可以实现手机对家中各种电器设备的无线控制,如图 3-5 所示。图 3-5 家电无线遥控1.3.2 无线联网 以蜂窝移动通信为代表的无线广域网(WAN) ,以 802.11b 为代表的无线局域网 (WLAN) ,以蓝牙为主的个人区域网(WPAN) ,三者的有机结合构成一个完整的无线网络 世界。 1.3.3 无线上网 通过手机上网如图 3-6 所示。图 3-6 利用蓝牙技术通过手机上网通过接入点上网如图 3-7 所示。-7- 蓝牙无线通信教学系统教材图 3-7 利用蓝牙技术通过接入点上网1.4 蓝牙与其他无线通信技术的比较 1.4.1 蓝牙与红外 在大量宣传面前,很多人也已开始逐渐趋同一个事实:蓝牙将成为未来短距离无线 连接的主宰者,而传统的红外线传输已经逐渐退出舞台。但究竞前景如何还是要看未来 的发展。比较见表 2。表 2 蓝牙技术与红外线技术的比较 规 无线传输媒介 标称传输速率(Mbit/s) 数据/语音支持 传输距离 移动能力 方向性 目前参考成本 最大功耗 传输方式 链接设备数 安全措施 支持组织 主要用途 格 1 支持数据和语音 10~100m 极佳 全向(中间可有障碍) 20 美元 通信 30mA, 待机 0.3 mA 点到点或点到多点 8个 鉴权;128 位密钥 加密:8~128 位密钥 SIG 个人区域网 蓝牙技术 射频无线电波 红外光 1.152,4,16 只支持数据 20cm~1.2m 差 窄角(&30°,中间不能有障碍) 不到 5 美元 数 mA 点到点 2个 靠短距离、 小角度传输保证安全, 无其它安全措施 IrDA 透明可见范围内近距离数据传输 红外线技术1.4.2 蓝牙与 HomeRF HomeRF 规格相当简单,其宗旨是让所有用户能简单、轻松地实现无线联网,因此 HomeRF 系统中不需要集线器, 所有终端都是网卡, 并支持最多 16 块无线 HomeRF 网卡处 于同一网段中,每块网卡的最大理论连接速率为 1.6Mbit/s。 由于结构简单, 这套系统在 安装后几乎无需设定就能正常工作,惟一需设置的是一个 8 位网络 ID 号,以便在同一-8- 蓝牙无线通信教学系统教材 区域内有多个网络时判断处于哪个网络内。虽说 HomeRF 使用简单,但也存在不少问题。 较显著的不足是 HomeRF 网络没有密码,这意味着如有人知道网络 ID 号,他就可连入网 络,窃取网络内的资料或盗用带宽上网,安全性差。此外,HomeRF 使用的 2.4GHz 频段干 扰较严重,而 HomeRF 协议为降低成本和使用难度,致使抗干扰能力差,有效传输距离过 短,室内往往只有 40m 的实际有效范围,传输速率则通常为有效带宽的 1/3,500kbit/s 左右的连接速率仅仅相当于普通宽带 Internet 接入方式。蓝牙技术与 HomeRF 相比优势 比较明显。主要在于它是全球统一的、开放的技术标准,且安全性好。 1.4.3 蓝牙与无线局域网络 IEEE 802.11 是 IEEE 制定的无线局域网标准,主要用于解决办公室局域网和校园网 中的用户与用户终端间的无线接入。IEEE 802.11 标准主要用于数据存取,传输速率最 高只能达到 2Mbit/s。速率上的不足使得 IEEE 802.11 无法满足更多的网络应用需求, IEEE 又相继推出 IEEE 802.11b 和 IEEE 802.11a 两个新标准。 ? IEEE 802.11b IEEE 802.11b 无线网络技术特点:比蓝牙的传输能力更强;迷你基地台的室外传输 距离为 300m,室内有 120m;企业用的无线迷你基地台同时可供 2048 个使用者使用,一 般经济型的基地台也可以供 128 个使用者使用;同时具有漫游功能,可以让使用者在不 同楼层使用, 且不受干扰; 无线终端 WLAN 卡的数据传输速率为 11Mbit/s。 IEEE 802.11b 的优势:可方便地对现有线缆局域网进行扩展,只需要在现有的网络中接入一个或多个 接入点收发器;传输距离长;受方向或物质阻碍限制小;数据传输带宽大;支持数据加 密。IEEE 802.11b 的劣势:成本高(1 个收发器为 999 美元,1 块卡为 179 美元)。 尽管 IEEE 802.11b 无线网络的设置较多,但也因此获得了更理想的抗干扰能力和更 远的传输距离,其有效传输率在 5Mbit/s 左右,与普通规格有线局域网处于同一水平, 其使用范围为室外最大 300m,办公环境最大 100m,实用性远远高于 HomeRF。 ? IEEE 802.11a 为避免产生无线电干扰,IEEE 802.11a 协议避开了拥挤的 2.4GHz 频段(该频段同时 被 IEEE 802.11b、HomeRF 和蓝牙技术采用,易产生干扰)而工作在 5GHzU-ZⅡ频带,物理 层和传输层的速率可分别达到 54Mbit/s 与 25Mbit/s。因此,IEEE802.11a 在使用频率的 选择和数据传输速率两方面都优于 IEEE802.11b.但支持这种无线协议的产品价格昂贵 而且不兼容 IEEE 802.11b,若采用点对点连接很不经济,不适合小型用户。 无线接入技术区别于有线接入的特点之一是标准不统一, 不同的标准有不同的应用。 正因为此,使得无线接人技术出现了百家争鸣的局面。在众多的无线接人标准中,无线 局域网标准更成为人们关注的焦点。蓝牙(IEEE 802.15)对于 IEEE802.11 来说,它的出 现不是为了竞争而是相互补充。蓝牙比 IEEE802.11 更具移动性,比如,IEEE 802.11 限制在办公室和校园内,蓝牙能把一个设备连接到 LAN 和 WAN,甚至支持全球漫游。此 外,蓝牙成本低、体积小,可用于更多的设备。但是,蓝牙主要是点对点的短距离无线 发送技术,本质上要么是 RF 要么是红外线。而且,蓝牙被设计成低功耗、短距离、低-9- 蓝牙无线通信教学系统教材 带宽的应用,严格来讲,不算是真正的局域网技术。 通过比较分析可以看出,各种标准都是根据不同的使用场合,不同的用户需求而制 定的。有的是为了增加带宽和传输距离,有的则是考虑移动性和经济性,局部最优不等 于全局最优。因此,没有理由一味地强调蓝牙就是最好的,是万能的。 1.5 蓝牙的优势 蓝牙的优势主要体现在低成本、低功耗、小实现尺寸、点对点连接、语音与数据混 合传输以及抗干扰能力等方面。 1) 开放性优势 支持蓝牙标准的企业几乎包括全球各相关行业的所有知名企业。蓝牙的发起者都是 世界级的企业: 3Com、 Ericcsion、 IBM、 Lucent、 Software、 Motorola、 Nokia 和 Toshiba。 同时,SIG 成员的增长速度极为惊人,从 2000 年 5 月到 2001 年 6 月见,就从 1500 余家 增加到 2500 家。 作为开放性的蓝牙技术标准,只要是 SIG 成员都能无偿使用,无需交纳专利费用, 而蓝牙标准制定后,任何厂商都可以无偿地拿来生产产品,一旦通过 SIG 测试认证它完 全符合蓝牙规范后,即可投入市场。 2) 成本优势 蓝牙芯片组的进一步降价是蓝牙技术开发者的最大目标, 从开始的 20 美元左右降到 蓝牙“起飞”的 5 美元,市场完全成熟时有可能降到 2 美元以下。 蓝牙的成本低廉首先因为蓝牙系统以芯片模块为节点,无需建立基站实现各种设备 之间的连接。 蓝牙低功耗和小空间的特点使得它完全可以嵌入到各种移动通信设备中大 量使用,这是其它同类技术(IEEE802.11b 和 HomeRF 等)无法比拟的。蓝牙技术的又一 个个性化特点是协议相对简单,跳频、时分复用和时分多址等技术的使用使得蓝牙的射 频电路较为简单,协议的绝大部分内容可以用专用集成电路和软件来实现,不但是射频 电路的实现还是通信协议的设计都相对简单。事实上,蓝牙中采用的技术并不是最先进 的技术,这一定程度上降低了系统成本。 3) 便携式优势 蓝牙实现的体积小,可以直接嵌入到小型乃至微型设备中,目前蓝牙芯片只有 8~ 9mm,将来蓝牙芯片有可能缩小到黄豆般大。蓝牙的低功耗特性和各种节能控制功能使 该技术完全可以使用于采用电池供电的移动便携式设备。 4) 频带优势 蓝牙使用 2.4GHz 的 ISM 频段。对于世界上大多数国家而言,该频段是自由频段,无 需申请频率许可证,使旅行者可以随时随地的使用蓝牙设备。当然 2.4GHz 的 ISM 频段 的公开性也对运行在该频段的通信设备产生了一些限制,蓝牙必须采取相应措施防止各 种干扰,如采用快跳频扩频技术。 5) 安全性优势 蓝牙采用快跳频、自适应功率控制和短数据包等抗干扰技术。蓝牙技术将 ISM 频段- 10 - 蓝牙无线通信教学系统教材 分割成 79 个跳频信道,以每秒 1600 次的伪随机跳频序列,在 79 个信道之间改变频率。 IEEE802.11b 和 HomeRF 与蓝牙使用相同的频段, 但蓝牙的跳频速率要快的多, 而且采用 的数据包更短,这使蓝牙比其它系统更稳定,抗干扰能力更强。 蓝牙的全向性传输特性,使它有可能被任意方向的设备窃听和破坏,所以蓝牙在其 基带协议中加入鉴权和加密措施。 蓝牙的标称输出功率为 1mW,是微波炉使用功率的百万分之一,是移动电话功率的 百分之一,比所有的符合工业标准的无绳电话功率都要小。所以蓝牙设备输出的功率只 有很小一部分被人体吸收。 6) 便利性优势 除了价格因素,通信设备的使用是否方便与否也是必须考虑的一个重要方面,而方 便易用正是蓝牙的另一个特长。蓝牙的“自动接入能力” ,即蓝牙设备能自动寻找它周 围的蓝牙设备,一旦找到就会自动建立连接,这种方式与手机相仿,使用者不必按接入 键,更无需进行初始化设置,为用户提供极大的方便。其次,蓝牙的发送和接收的信号 可以穿透障碍物,而红外设备就不行。(二)蓝牙协议体系实验内容一、 教学目标 使学生深入理解蓝牙协议体系结构和蓝牙各个应用框架,从蓝牙延伸至通信系统协 议架构,掌握蓝牙的核心协议体系构成及各层功能。熟悉蓝牙技术参数和工作原理。 二、 预备知识 1.蓝牙通用描述和基本技术参数 2.蓝牙协议体系 3.蓝牙数据传输体系 4.蓝牙拓扑结构 5.蓝牙术语和缩写 三、 实验内容 1.学习蓝牙的功能和应用模型 2.学习蓝牙的主要性能 3.学习蓝牙专用术语,并测试 4.学习蓝牙协议体系架构及各层协议功能 5.学习蓝牙数据传输体系 6.学习蓝牙拓扑结构,组网方式及通信模式 7.学习蓝牙协议出现的英文缩写,并测试 四、 实验系统 1 实验条件:蓝牙无线教学系统软件实验一:蓝牙协议体系实验。 2 连接方法:无硬件连接 3 操作模式:单机方式- 11 - 蓝牙无线通信教学系统教材 五、 实验过程 1.点击蓝牙应用模型按钮,理解蓝牙应用。 2.点击蓝牙通用描述按钮,学习蓝牙的优势和蓝牙的技术参数。 3.点击蓝牙相关术语按钮,学习蓝牙专用术语,并进行测试。 4.点击蓝牙协议体系按钮,学习蓝牙协议体系架构。 5.点击蓝牙核心协议体系按钮,学习核心协议体系的构成,每一协议层的功能。 6.点击蓝牙数据传输体系按钮,学习蓝牙的数据传输机制。 7.点击蓝牙拓扑结构规则按钮,学习蓝牙的组网方式,以及蓝牙的状态定义。 8.点击术语英文缩写按钮,学习蓝牙术语的英文缩写,并测试。 六、 数据记录 1.记录蓝牙专用术语测试记录。术语 选项 中文解释2.记录蓝牙术语英文缩写测试记录。术语缩写 选项 中文解释七、 课后巩固 1.简述蓝牙的优势。 2.简要说明蓝牙核心协议体系结构。- 12 - 蓝牙无线通信教学系统教材实验二 (一)蓝牙基带分组实验原理蓝牙基带分组实验一、分组基本结构 每个分组由 3 部分组成,即接入码(AccessCode) 、头(Header) 、负载(Payload) 。 如图 2-1 所示。图 2-1 分组基本结构其中接入码和头字段为固定长度,分别为 72 比特和 54 比特;负载是可变长度,从 0~2745 比特。一个分组可以仅包含接入码字段(此时为缩短的 68 比特) ,或者包含接 入码与头字段,或者包含全部 3 个字段。 1. bit 流顺序 蓝牙基带规范中分组和消息的 bit 次序使用 Little Endian,即使用如下的规则: (1)最次重要的 bit(LSB)对应b0;(2)LSB 最先发送; (3)在用图例表示这种格式时,LSB 位于最左边。 链路控制器将来之高层软件层的地一个 bit 作为b0,即它最先发送到空中接口,而且,在基带级产生的数据字段,像分组头字段和净荷头长度,也作为最低有效位首先发 送。 2.接入码 每个分组都以一个接入码开始,如果后跟一个分组头,接入码的长度就为 72bit, 否则接入码的长度为 68bit。接入码用于同步、DC 偏移补偿和标识。接入码标示为威望 的新稻种交换的所有分组即所有在同一个微微网中发送的分组使用相同的信道接入码。 在蓝牙的接收机单元,使用一个滑动相关器对接入码进行相关处理,当超过门限值就产 生一个触发信号,触发信号用于判定接收定时。 接入码也用在寻呼和查询过程,在这种情况下,接入码作为信令消息的一部分,而 不是分组头或净荷的部分。 接入码包含三部分,即引导码,同步字和尾码(可选) 。如图 2-2 所示:图 2-2 接入码结构(1)接入码类型 有三种接入码类型: (a)信道接入码(CAC) (b)设备接入码(DAC) (c)查询接入码(IAC) 不同类型的接入码类型用于不同的运行模式。CAC 用于标识一个微微网,在该微微- 13 - 蓝牙无线通信教学系统教材 网中,信道上交换的所有分组中后含有该接入码。DAC 用于一个特殊的信令过程,即寻 呼和寻呼响应过程, 有两种变形: IAC 通用查询接入码 (GIAC) 和专用查询接入码 (DIAC) 。 GIAC 对于所有的设备是公共的,它用于发现覆盖范围内的其他蓝牙设备:DIAC 对于蓝 牙单元的专用组是公共的,这个蓝牙的专用组是具有一些公共特性的蓝牙设备单元, DIAC 只能用于发现覆盖范围内的专用蓝牙设备。 CAC 由引导头、同步字和尾码组成,总长度为 72bit。DAC 和 IAC 用作没有分组头的 纯消息时,将不包含尾码,因此长度为 68bit。 不同的接入码类型采用不同的低地址部分(LAP)构成同步字。表 2-1 是不同的接 入码类型的总结:表 2-1 接入码类型总结(2)引导码 引导码事故定的 4 个符号的 0-1 序列,即 0101 或 1010,取决于后面的同步字的第 一个 bit 是 1 还是 0。如图 2-3 所示:图 2-3 引导码(3)同步字 同步字是一个 64bit 的码字,从一个 24bit 的地址(LAP)得来。对于 CAC,使用主 节点的 LAP。对于 GIAC 和 DIAC 使用预留的专用的 LAP 地址,对于 DAC,使用从节点的 LAP 地址。该结构保证了基于不同 LAP 的同步码子之间的汉明距离最大。同时,同步码 字良好的自相关性能有助于提高同步过程定时性能。 (4)尾码 只要接入码后面跟着分组头,在同步码字的后面就附加尾码。这是接入码为 CAC 时 的典型情况。 另外, DAC 和 IAC 码字用于寻呼响应和查询响应过程的 FHS 分组交换时, 当 也使用尾码。尾码是一个固定的 0-1 序列,4bit,如果 MSB 是 0,就使用 1010,否则就 使用 0101。尾码与 3 位同步码字一起形成一个 7 位的 1-0 序列,用于扩展 DC 补偿。如 图 2-4 所示:图 2-4 尾码3.分组头 分组头包含链路控制消息,由 6 个字段组成:- 14 - 蓝牙无线通信教学系统教材 (a)AM-ADDR:3bit 激活成员地址 (b)TYPE: 4bit 类型码 (c)FLOW: 1bit 流量控制 (d)ARQN: 1bit 确认指示 (e)SEQN: 1bit 序列号 (f)HEC: 8bit 头错误校验 分组头的总长度为 18bit,经过 1/3 速率的 FEC 编码形成 54bit 的头序列。分组头 的格式如图 2-5 所示。图 2-5 分组头格式 下面介绍每个字段的功能。 (1)AM-ADDR AM-ADDR 表示一个微微网中活动节点的地址。在一个微微网中,一个或多个从节点 与一个主节点相连,为了区分每个从节点,当从节点激活时就分配一个 3bit 的临时地 址即 AM-ADDR。当主节点和从节点进行消息交换时就包含该 AM-ADDR,也就是说,在主 到从的分组和从到主的分组中都包含这个属于从节点的地址。全 0 地址预留,用于主节 点的广播使用。一个例外是,FSH 分组可以使用全 0 地址,但不是广播信息。从节点与 主节点断开时,或从节点处于停止状态时,放弃 AM-ADDR,当重新进入该微微网时,再 重新分配一个 AM-ADDR。 (2)TYPE 一共有 16 种类型的分组,用 4bit 来区分。需要特别注意的是,类型码的解释依赖 于传输分组的物理链路。 第一, 要确定分组是通过 SCO 链路传输还是通过 ACL 链路传输。 第二,决定接受的是什么类型的 SCO 分组(或 ACL)分组。TYPE 还能揭示当前的分组占 有多少个时隙。这使得无地址的接收节点能够知道还要等待多少时隙才能占用信道。 (3)FLOW 该 bit 用于对通过 ACL 链路的分组进行流量控制。当 ACL 链路接收端的 RX 缓存满 时或者没有清空时,就临时返回一个 STOP 指示(FLOW=0)停止发送过程;注意 STOP 信号只影响 ACL 分组。当 RX 缓存清空时,返回一个 GO 指示(FLOW=1) 。当没有收到分 组或收到的分组头错误时,假设隐含一个 GO 指示。在这种情况下,从节点可以接收带 有 CRC 的新分组,虽然这时 RX 缓冲区还没有清空。之后,从节点在对该分组的响应中 返回一个 NAK,即使分组通过了 CRC 校验。 (4)ARQN 这是一个确认 bit,当确认是 ACK(ARQN=1)时,表示接收还已经正确地接收到分 组及其校验;当确认是 NACK(ARQN=0)时,表示接收端还没有正确地接收到分组。当 没有接收到有关确认的消息时,就认为时 NAK。NAK 还是缺省的返回状态。 可以利用反向传输时的分组携带 ARQN, 是否成功接收用 CRC 校验来验证。 在本规范 中使用无标号的 ARQ 机制,它表示的是对最近的分组响应。 (5)SEQN SEQN 提供一种对数据流进行编号的机制。对于每一个携带数据和 CRC 校验的新分 组,都有一个新的序列号(SEQN 循环递增) 。这样目的节点可以滤除重传分组。对于无 编码的 ARQ 机制,SEQN 显得非常重要。 (6)HEC- 15 - 蓝牙无线通信教学系统教材 每个分组头都有一个 HEC 用于对分组头的完整性进行校验。HEC 含有 8bit,多项式 为 647(8 进制表示) 。在进行校验之前,HEC 产生器使用 8bit 的值进行初始化,对于在 主节点寻呼响应(Master Page Response)状态发送的 FHS 分组,使用从节点地址的上 半部分(UAP) ;对于在查询响应(Inquiry Response)状态发送的 FHS 分组,使用缺省 的初始化值(DCI) 。在其他的状态,使用主节点的地址的上半部分(UAP) 。 初始化之后,HEC 对 10bit 的分组头进行计算。如果没有通过校验,整个分组舍弃。 4.分组类型 微微网中使用的分组类型于使用的物理链路有关。到目前为止,定义了两种类型的 链路;SCO 链路和 ACL 链路。对于每一种链路定义了 10 种分组类型。4 种控制分组对于 两种链路都是相同的,即类型码与链路类型是一样的。 为了区分链路上的不同的分组类型, 使用了 4bit 的 TYPE 码, 分组类型分为 4 个段, 第一分段预留给 4 个控制分组,对于所有的链路都是一样的,所有 4 种分组类型都已经 定义。第二分段预留给占有一个时隙的分组,定义了 6 种分组类型。第三分段预留给占 用 3 个时隙的分组,定义了 2 种分组类型,第四分段预留给占用 5 个时隙的分组,定义 了 2 种分组类型。 分段直接能够反映犯罪占用时隙的情况, 且直接能够从类型码种的到。 表 2-2 总结类分配给 SCO 和 ACL 链路的分组定义情况。表 2-2 分组分配(1)公共分组类型 共有 5 个公共分组。除了表中分段 1 列出的类型,还有一个识别(ID)没有列出, 现在详细地说明每个分组。- 16 - 蓝牙无线通信教学系统教材 ①ID 分组 ID 分组由设备的 DAC 或 IAC 组成,长度固定为 68bit,接收使用已知 ID 分组 bit 序列对接收的分组进行 bit 相关处理。ID 分组一般郁郁寻呼、查询和响应例程。 ②NULL 分组 NULL 分组不包含净荷分组,只有分组头和信道接入码。总长度也是固定的,为 126bit,NULL 分组向源端返回有关前面传输(ARQN)链路消息,或者 RX 缓冲器的状态 消息(FLOW) 。NULL 分组本身没有必要进行确认。 ③POLL 分组 POLL 分组与 NULL 分组比较相像,也没有净荷部分,但需要接收端进行确认。他不 是 ARQ 机制的一部分。POLL 分组不影响 ARQN 和 SEQN 字段,从节点收到 POLL 分组就响 应一个分组。 返回分组是一个隐含的确认。 POLL 分组用于主节点在微微网中悬着从节点, 从节点必须进行响应,即使它没有消息要发送。 ④FHS 分组 是一种特殊的控制分组,它宣告发端的设备地址和时钟信息,以实现跳频同步。负 载字段包含 144 个信息比特加 16 比特的 CRC 校验码,然后用速率为 2/3 的 FEC 保护, 最终长度为 240 比特。 FHS 分组是一个特殊的控制分组,它揭示了蓝牙设备地址和发送时钟,以实现跳频 同步。净荷包括 144bit 的消息和 16bit 的 CRC 校验。之后通过 2/3 的 FEC 编码长度变 成 240bit。FHS 分组占用一个分组。 FHS 的净荷格式如图 2-6 所示。净荷包括 11 个字段。FHS 分组用于微微网信道建立 之前的跳频痛苦,或者用于已经存在的微微网变成另外一个微微网。在前一种情况,接 收端还没有分配一个活动的成员地址,FHS 分组的 AM-ADDR 字段设为全 0,但是,这是 FHS 分组不能认为是广播分组。在后一种情况,从节点已经有了 AM-ADDR,它就可以用 在 FHS 分组的分组头。FHS 分组用于寻呼主节点响应、查询响应和主从切换。在寻呼主 节点响应和主从切换中, 在北正确接收之前或时间到时要进行重传。 在查询响应中, FHS 分组不需要确认。在 FHS 分组中有实时时钟信息。在每次重传之前时钟进行更新,这样 FHS 净荷的重传与普通数据净荷的重传有所不同,普通净荷的数据重传每次净荷都是相 同的。图 2-6 FHS 净荷格式每个字段的定义如表 2-3 到表 2-5 所示。- 17 - 蓝牙无线通信教学系统教材表 2-3 每个字段的定义表 2-4 SR 字段的内容表 2-5 寻呼扫描模式字段的内容- 18 - 蓝牙无线通信教学系统教材 LAP、UAP、和 NAP 一起形成发送 FHS 分组设备的 48bit 的 IEEE 地址。使用优先级 bit 和 LAP,接收节点能够直接形成发送 FHS 分组节点的信号接入码。 ⑤DM1 分组 DM1 支持所有链路类型的控制信息且可以携带规则的用户数据。因为在 SCO 链路上 可以识别 DM1 分组,所以 DM1 分组能够中断同步过程来发送控制信息,还因为 SM1 分组 可以认为是 ACL 分组,所以在 ACL 分组还继续进行讨论。 (2)SCO 分组 SCO 分组用于同步的 SCO 链路,这些分组不含有 CRC 校验且从不重传。SCO 分组被 送到同步的 I/O(语音)端口。截止到现在,已经定义了 3 种纯的 SCO 分组。另外,还 定义了一种分组;它不仅包含同步数据字段(语音)还包含异步数据字段。目前定义的 SCO 分组一般都用于 64kbit/s 语音传输。 ①HV1 分组 HV1 分组携带 10 个信息字, 它们使用码率为 1/3 的 FEC 进行编码, 净荷的长度为固 定的 240bit,没有净荷头。 HV1 分组一般用于高质量的传输语音,语音分组不需要重传和 CRC 校验。一个 HV1 分组携带 1.25ms 的 64kbit/s 的话音,在这种情况下,每 2 个时隙发(T =2)送 1 个 HV1 分组。 ②HV2 分组 HV2 分组携带 20 个信息字, 它们使用码率为 2/3 的 FEC 进行编码, 净荷的长度为股 东的 240bit,没有净荷头。 如果 HV2 分组用于 64bit/s 语音传输,它可以携带 2.5ms 的语音。在这种情况下, 每 4 个时隙发(T =4)送 1 个 HV1 分组。 ③HV3 分组 HV3 分组携带 30 个信息字,不使用 FEC 编码和 CRC 校验。净荷的长度为固定的 240bit,没有净荷头。 如果 HV3 分组用于 64kbit/s 语音传输, 它可以携带 3.75ms 的语音。 在这种情况下, 每 6 个时隙发送(T =6)1 个 HV1 分组。 ④DV 分组 DV 分组是组合的数据语音分组。净荷字段分成两个部分:80bit 的语音字段和 150bit 的数据字段。 语音字段不使用 FEC 进行保护。 数据字段最多包括 10 个信息字 (其 中包括一个字节的净荷头)和 16bit 的 CRC 校验。数据字段使用码率为 2/3 的 FEC 进行 保护。如果需要在进行 FEC 编码之前要进行 0 填充,使净荷的数目为 10 的倍数。由于 DV 分组携带有语音字段,必须以规则的间隔进行发送,因此它属于 SCO 数据处理,不重 传,也就是说,语音字段总是新的;数据字段要进行错误检测,如果必要要进行重传。 (3)ACL 分组 ACL 分组在异步链路上传输。 分组携带的数据可以是用户数据和控制数据, 包括 DM1 分组在内,共定义了 7 种 ACL 分组。除了 AUX1 分组,其他的 6 种分组都使用 CRC 编码 和重传机制。 ①DM1 分组 DM1 分组是只携带数据信息的分组。DM 表示数据――中等速率。净荷包括最多 18 个信息字(其中包括一个字节的净荷头)和一个 16bit 的 CRC 校验。DM1 分组可以覆盖 一个时隙。信息和 CRC 一起进行码率为 2/3 的 FEC 编码。如果需要,在 CRC 校验 bit 之- 19 SCO SCO SCO 蓝牙无线通信教学系统教材 后添加 0bit,使总的 bit 数为 10 的倍数。净荷头的长度只有 1 个字节,净荷头中的净 荷长度指示是用户数据的字节数,不包括净荷头和 CRC 校验码。 ②DH1 分组 该分组与 DM1 分组相似,区别在于该分组的净荷不进行 FEC 编码,其结果是 DH1 分 组能够携带 28 个信息字节外加一个 16bit 的 CRC 校验。DH 是高速率数据的意思,DH1 分组占用一个时隙。 ③DM3 分组 DM3 分组只是比 DM1 分组的净荷长, 它占用 3 个时隙, 净荷包括 123 个信息字节 (其 中有 2 个字节的净荷头)和 16bit 的 CRC 校验码。当 DM3 分组发送或接收时,在其占用 的 3 个时隙内射频频率 RF 不变,第一个时隙时发送信道接入码的时隙。 ④DH3 分组 该分组与 DM3 分组相似。只是净荷信息不进行 FEC 编码,其结果是 DH3 分组能够携 带 185 个字节的信息(其中包括 2 个字节的净荷头)和 16bit 的 CRC 校验。DH3 分组占 用 3 个时隙,当 DH3 分组发送或接收时,在其占用的 3 个时隙内射频频率 RF 不变,第 一个时隙是发送信道接入码的时隙。 ⑤DM5 分组 DM5 分组只是比 DM1 分组的净荷长, 它占用 5 个时隙, 净荷包括 226 个信息字节 (其 中有 2 个字节的净荷头)和一个 16bit 的 CRC 校验码,当 DM5 分组发送或接收时,在其 占用的 5 个时隙内射频频率 RF 不变,第一个时隙是发送信道接入码的时隙。 ⑥DH5 分组 该分组域 DM5 分组相似。只是净荷信息不进行 FEC 编码,其结果是 DH5 分组能够携 带 341 个字节的信息(其中包括 2 个字节的净荷头)和 16bit 的 CRC 校验。DH5 分组占 用 5 个时隙,当 DH5 分组发送或接收时,在其占用的 5 个时隙内射频频率 RF 不变,第 一个时隙是发送信道接入码的时隙。 ⑦AUX1 分组 该分组与 DH1 分组相似,只是没有 CRC 校验,它能携带最多 30 个信息字节,其中 包括 1 个净荷头,该分组占用一个时隙。 (4)eSCO 分组 EV 分组用来同步 eSCO 的逻辑传输。分组包含 CRC 校验,如果没有 ACK 的话有重传 机制。eSCO 分组发送以同步 I/O 口,共定义了 3 种 eSCO 分组,用来传输 64kb/s 的语音 信号,也可以传输 64kb/s 以及其它速率的数据信号。 ①EV3 分组 EV3 分组携带 1~30 的信息字节外加一个 16bit 的 CRC 校验。没有 FEC。占用 1 个时 隙,不含净荷头,负载长度在 LMP eSCO 建立时设定,并且保持匹配,直到连接丢失或 者重新连接。 ②EV4 分组 EV4 分组携带 1~120 的信息字节外加一个 16bit 的 CRC 校验。占用 3 个时隙,信息 和 CRC 一起进行码率为 2/3 的 FEC 编码。不包括净荷头,负载长度在 LMP eSCO 建立时 设定,并且保持匹配,直到连接丢失或者重新连接。 ③EV5 分组 EV5 分组携带 1~180 的信息字节外加一个 16bit 的 CRC 校验。 没有 FEC。 EV5 分组占 用 3 个时隙。不包括净荷头。负载长度在 LMP eSCO 建立时设定,并且保持匹配,直到 连接丢失或者重新连接。 5.负载格式 在前面简单地介绍了几种分组的净荷格式。有两种不同的净荷:同步的语音字段和- 20 - 蓝牙无线通信教学系统教材 异步的数据字段。ACL 分组只有数据字段,SCO 和 eSCO 分组只有语音字段,而 DV 分组 既含有数据字段又含有语音字段。 (1)语音字段 语音字段长度固定,对于 HV 分组,语音长度是 240bit,对于 DV 分组,语音字段长 度是 80bit,没有净荷头。 (2)数据字段 数据字段分成 3 个部分:净荷头、净荷体和 CRC 校验,注意 AUX1 分组不包含 CRC 校验部分。 ①净荷头 净荷头占用1个或2个字节,单时隙分组(即 NULL、POLL、FHS、DM1 、HV1、HV3、 DV 等分组)分组头为1个字节,多时隙分组(即 DM3、DM5、DH3、DH5 分组)分组头含 有2个字节。净荷头的重要功能是指示逻辑信道、逻辑信道上的流量控制和指示净荷的 长度,单时隙净荷头的格式如图 2-7 所示,多时隙净荷头的格式如图 2-8 所示。图 2-7 单时隙净荷头格式图 2-8 多时隙净荷头格式逻辑信道(LLID)分配如表 2-6 所示。表 2-6 逻辑信道分配表L2CAP 消息可能很长,需要分成多个分块。LLID 的 2 个 bit 的编码如果是 10,就表 示是第一分块,如果是 01,就表示是后续分块,编码是 11,表示 LMP 消息。 在蓝牙基带层中定义了 5 种逻辑信道,即 LC(Link Control)控制信道、LM(Link Manager)控制信道、UA(User Asynchronous)用户信道、UI(UserIsochronous)用 户信道、US(User Synchronous)用户信道。控制信道用于链路控制和链路管理,用户 信道用于运载用户数据。LC 信道在分组头中,其它信道在分组负载中。LM、UA、UI 用 负载头中的 L-CH 字段来区分,US 信道仅在 SCO 链路中,UA 和 UI 通常由 ACL 承载,但 也可由 SCO 的 DV 分组来承载。 LM 信道 SCO 和 ACL 都可承载。 分组头的流量控制 bit 在 L2CAP 级对每个信道进行流量控制, FLOW=1 表示发送流量, FLOW=0 表示关闭流量。 在净荷头对流量 bit 没有严格实时要求, 在最近接收的分组的净- 21 - 蓝牙无线通信教学系统教材 荷头中流量 bit 决定当时的流量状态,链路管理器负责设定和处理流量 bit,通过流量 bit 从远端来业务流量可以得到控制,允许产生和发送一个净荷长度为 0 的 ACL 分组, 在 LM 分组,因为不需要流量控制,流量控制 bit 设为固定的 1,即 FLOW=1。 净荷头中的长度指示不包括净荷头和 CRC 码,只包括净荷体。 ②净荷体 净荷体包括用户信息并且确定有效的用户业务。 ③CRC 码生成 16bit 的 CRC 校验码使用 CRC-CITT 的多项式 210041(八进制)来生成。在进行 CRC 码计算之前,要对 CRC 生成器进行初始化,对于 FHS 分组在主寻呼响应状态使用从设备 的 UAP,在查询状态使用 DCI,对于其他分组使用主设备的 UAP。CRC 码的具体生成过程 在这里不详述。 6.分组总结 表 2-7 链路控制分组总结表 2-8ACL 分组总结- 22 - 蓝牙无线通信教学系统教材 表 2-9 同步分组总结二、 蓝牙地址组成 1.蓝牙设备地址(BD-ADDR) 每个蓝牙设备都分配一个 48bit 的蓝牙设备地址(BD_ADDR) ,如图 2-9 所示。该地 址由 IEEE802 标准组织分配,分成三个四段: ? LAP 字段:较低地址部分,共 24bit; ? UAP 字段:较高地址部分,共 8bit; ? NAP 字段:无意义的地址部分,包括 16bit。 LAP 和 UAP 组成 BD_ADDR,图 2-9 的 bit 部分为蓝牙地址的举例。图2-9 蓝牙地址格式2.保留地址 有一段64个连续的LAP是为查询操作保留的;有一个公共LAP保留用作通用查询,其 他63个LAP保留,专用来查询特殊设备(见 https://www.bluetooth.org/foundry/assignnumb/document/assigned_numbers),这 些保留的地址如果LAP相同,不管UAP和NAP字段的内容,认为是相同的。所以这些保留 的LAP不可以用来组成BD-ADDR。 这些保留的LAP地址是0x9E8B00~0x9E8B3F。通用查询的LAP是0x9E8B33。所有的地 址都是十六进制,LSB在最左边。如果使用保留的LAP地址时,默认的检查初始化(DCI) 当作UAP,DCI值为0x00。 3.蓝牙地址分配 1) 公司分配号(company_assigned) 该部分为蓝牙地址的LAP字段,由蓝牙设备生产厂家自行分配,每一个公司编号可 分配16,000,000个蓝牙地址,每个蓝牙设备在测试后都应被分配一个独一无二的蓝牙 地址。 2) 公司编号(Company _id) 该部分有蓝牙地址的UAP和NAP字段组成,编号由IEEE统一管理,各蓝牙设备生产厂- 23 - 蓝牙无线通信教学系统教材 家可向IEEE申请,每个公司编号可以对应16,000,000个蓝牙地址,详情参考 www.ieee.org。(二)蓝牙基带分组实验内容一、 教学目标 通过基带分组学习,掌握基带分组结构,理解分组结构的各部分含义及生成原理, 给定参数会计算分组值。 二、 预备知识 1.基带分组结构; 2.蓝牙地址结构及申请流程。 三、 实验内容 1.学习蓝牙分组的基本结构,理解分组各组成部分的含义及生成原理,并测试; 2.了解蓝牙地址的结构和申请流程,理解蓝牙地址各部分含义及功能,并测试。 四、 实验系统 1 实验条件:蓝牙无线通信教学系统软件实验二――基带分组实验; 2 连接方法:无硬件连接; 3 操作模式:单机方式。 五、 实验过程 1.打开基带分组实验程序。 2.点基带分组结构按钮,仔细阅读基带分组结构的组成,以及各部分的含义,将 鼠标放在基带分组结构组成图上,在解析区域里能显示介入码、分组头、负载三个部分 的组成和含义。 3.点比特流顺序按钮,理解小端格式的比特流顺序和发射顺序,并测试。 例:数据表示:B1-B0:1d-d3,写成二进制形式为:B1:,B0:, 则二进制发射顺序为(b0 在最左边) :1000。如图 2-1 所示。图 2-1 比特流顺序测试举例4.点蓝牙地址按钮,理解蓝牙地址的含义和组成,将鼠标放在蓝牙地址组成结构图的每一个字 段上,在解析区域会出现每个字段的定义。理解之后测试。6 字节表示:点向上,则由各字段内容 生成蓝牙地址,例:LAP:c08e75,UAP:6a,NAP:7695。十六进制为大端格式,写成低位在最 左边的小端格式二进制码, LAP: 11 11, UAP: , NAP: 10 1110。则低位在最左边的蓝牙地址为 11 11 10 10,十六进制大端格式表示为:7。如图 2-2 所示。- 24 - 蓝牙无线通信教学系统教材图 2-2 由各字段组合成六字节蓝牙地址向下则由蓝牙地址生成个字段内容,方法同上,如图 2-3 所示。图 2-3 由六字节蓝牙地址生成个字段内容8 字节表示:蓝牙地址的第一个 16bit 的低字节位 LAP 的高 8 位,高字节补零,第 二个 16bit 为 LAP 的低 16 位, 第三个 16bit 的低字节为 UAP, 高字节补零, 第四个 16bit 为 NAP。 例:点向上,LAP:1a781c,UAP:0a,NAP:37ab,写成小端格式二进制码,LAP: 01 00,UAP:,NAP:10 1100,则 蓝牙地址小端格式二进制表示:第一个 16bit 为 00 0000,第二个 16bit 为 01 1110,第三个 16bit 为 00 0000,第四个 16bit 为 10 1100,写成大端形式的十六进制为:001a781c000a37ab。如图 2-4 所示。图 2-4 由各字段内容组合成八字节蓝牙地址点向下则由蓝牙地址生成个字段内容,方法同上,如图 2-5 所示图 2-5 由八字节蓝牙地址生成个字段内容- 25 - 蓝牙无线通信教学系统教材 5.点接入码按钮,理解接入码的组成和各部分的定义,根据同步字的第一个和最 后一个字符确定头码和尾码。同步字的最低位为 0,则头码为 0101,如同步字的低位为 1, 则头码为 1010。 同理, 同步字的最高位为 0, 尾码为 1010, 最高位为 1, 尾码为 0101。 如,同步字为 0x557d1d27b7ae,写成小端格式的二进制码为:10 00 11 10,低位在最左边,最低位为 0,则头码为 0101(小 端格式) 。同理,由于上述同步字最高位为 0,所以尾码为 1010(小端格式) 。 6.点分组头按钮,理解分组头的组成结构和各部分定义。察看分组类型码代表的 分组类型。学习判断接收设备是否允许继续发送分组,FLOW 位为 0 表示停止发送,FLOW 位为 1 表示可以继续发送。 学习判断接收设备是否请求重发分组。 ARQN=1 表示对方设备 接收成功,ARQN=0 表示对方设备接收失败,需要重发。SEQN 用来表示前后两个分组是 否相同,相同的话 SEQN 相同,不同的话 SEQN 反向。例如:接收分组头为 0x01e04a,写 成二进制小端格式为(LSB)00 00,高六位补零,从低位算 起,第 8 位为流控制 FLOW 比特,这里为 0,表示应该停止发送分组。同理,低位算起第 9 位为 ARQN,第十位为 SEQN,这里,ARQN=0,SEQN=0,上一个分组的 SEQN=1,所以, 这里应该选择重发,SEQN=0,表示前后两个分组不同。 7.点负载按钮,学习负载格式,数据字段净荷头格式以及学习逻辑信道分配 LLID 的值所对应的逻辑信道和含义。 8.点分组类型按钮,这里汇总了个分组类型的定义,可以学习,也可以用来查询。 9.点分组总结按钮,察看学习各种分组类型的参数,验证最大数据传输速率。 由于没种分组的负载数据量不同,发送每个分组占用的时隙不同,而且有对称信道 和非对称信道,所以不同的分组最大数据传输速率也不同。 最大数据传输速率=分组负载 bit 数/发送每个分组需要的时间 =分组负载 bit 数/ (每个时隙时间*发送一个分组占用的时隙数) 如:DM3 分组:最大负载为 121*8bit,每个时隙的时间为 0.625ms,如果是对称信道, 则发送一个 DM3 分组需要 6 个时隙(分上行和下行) 。则对称信道的最大数据传输速率= (121*8)/(0.625*6)=258.1kb/s。如果是非对称信道,发送的是 DM3 分组,返回的 是 DM1 分组,所以上行链路发送 DM3 分组,需要 4 个时隙,而下行链路发送 DM1 分组, 也需要 4 个时隙。因此,上行的最大数据传输速率=(121*8)/(0.625*4)=387.2kb/s, 下行的最大数据传输速率=(17*8)/(0.625*4)=54.4kb/s。六、 数据记录 1.记录三组比特流顺序测试结果 数据表示二进制发射顺序(b0 在最左边)2.记录三组蓝牙地址测试结果 测试条件 BD_ADDR 六字节, 向上 六字节, 向下 八字节, 向上 八字节, 向下LAPUAPNAP- 26 - 蓝牙无线通信教学系统教材 3.记录两组头码、尾码的测试结果 同步字头码同步字尾码4.记录两组流控制和检错重发的测试结果 接受分组头继续还是停止接收分组头上一个发送分组 SEQN继续发送还是重发? SEQN=?七、 课后巩固 1.简述蓝牙分组的基本结构,由哪几部分组成? 2.蓝牙一共有多少种分组?列举每种分组的性能参数。 3.计算 DH5 分组的最大数据传输速率,列出计算公式。- 27 - 蓝牙无线通信教学系统教材实验三蓝牙纠错编码实验(一)蓝牙纠错编码实验原理在有效载荷通过空中接口发送之前,需要在发射端对比特流进行纠错编码处理,以 增强安全性和可靠性。 对于分组头使用 HEC(Header-Error-Check,分组头校验) ,白噪声扰码,以及 FEC 校验。在接受端,做反向处理。如图 3-1 所示。所有对比特流的纠错检错处理过程都是 必须的。图 3-1 分组头纠错编码处理流程图 3-2 给出了对分组有效载荷比特流的纠错检错处理流程,除了包含分组头纠错编 码时用到的处理外,还增加了加密处理。但只有白噪声扰码和解扰过程是必须的,其他 处理都是可选项,且取决于分组类型。图中虚线所示为可选处理过程。图 3-2 负载纠错编码处理流程3.1 检错在蓝牙无线连接中, 至少应该对分组头进行 HEC(Header-Error-Check, 分组头校验) 校验。另外,必要时其有效载荷也必须进行 CRC(Cyclic Redundancy Check,,循环冗余 校验)校验。使用分组头 HEC 信息和有效载荷中的 CRC 信息,可以检测分组错误和传输 错误。 分组可以用信道接入码来检错,对分组头用 HEC,对负载用 CRC。收端收到分组时, 先检查接入码。接入码中 64bit 的同步字是从 24 位的主机 LAP(Lower Address Part, 低位地址部分)得来的,所以可以检查 LAP 是否正确,就可以防止接收端接收其他微微 网的分组(假设不同微微网主机的蓝牙地址的 LAP 是不同的) 。 HEC 和 CRC 通常是由微微网中主机的 UAP(Upper Address Part,高位地址部分) 得来的,所以即使两个微微网的接入码相同,不同的 UAP 会使 HEC 和 CRC 检错失败。但 是,当发端和收端没有共同的 UAP 时例外。比如当 FHS 分组的 HEC 和 CRC 校验在查询响 应子状态时产生,此时就用 DCI(Default Check Initialization,默认校验初始值)值。 HEC 和 CRC 的产生和检错过程如图 3-5 和图 3-8 所示。在计算 HEC 和 CRC 之前,应 先对发生电路的移位寄存器用 8bitUAP(或 DCI)值进行初始化。然后将分组头和负载 信息依次移入 HEC 和 CRC 发生器,LSB(Least Significant Bit,低位)在先。3,1,1 分组头校验(HEC)分组头包含了重要的控制信息,因此需要采用编码技术加以保护。 对于不同种类的分组,所采用的编码方案也各不相同。每个分组都有分组头校验- 28 - 蓝牙无线通信教学系统教材 (HEC)来保证分组的完整性, 在产生 HEC 前, 线型反馈移位寄存器(LFSR, Linear Feedback Shift Register)需要初始化,对处于主设备寻呼响应状态的 FHS 分组,使用从设备的 UAP(接入码地址的高 8bit);对处于搜寻响应状态的 FHS 分组,使用默认校验初始值 (DCI,Default Check Initialization) ,定义为十六进制数(0X00) ;在其它情况下, 使用主设备的 UAP。 HEC 发生器的 LFSR 如图 3-3 所示,生成多项式是:g ( D ) ? ( D ? 1)( D ? D ? D ? D ? 1) ? D ? D ? D ? D ? D ? 17 4 3 2 8 7 5 2以一般分组为例, 使用主设备的 UAP 对 LFSR 进行初始化, 首先将 8bitUAP 装入 LFSR, LSB(UAP0)在最左端,UAP7 在最右端。HEC 的 LFSR 的初始状态如图 3-4 所示。然后将 开关置于“1” ,将分组头数据依次移入,当 10bit 数据移入完成后,将开关置于“2” , 系统就可以从寄存器中读出 HEC 值。 从右到左读出,第 7 位的数据先读, ( 然后第 6 位??)图3-3 产生HEC的LFSR电路图3-4 HEC产生电路的初始状态图3-5 HEC的产生和检查过程3.1.2 循环冗余校验(CRC)循环冗余校验是一种常用的检错编码,而且已经有相应的国际标准,如 CRC-CCITT。 在蓝牙无线连接中,发送方按照国际标准 CRC-CCITT ,即g (D ) ? D16?D12? D ?15并用线性反馈移位寄存器(LFSR)硬件电路生成有效载荷 (数据信息) CRC 校验码, 的 16bit 的 LFSR 的 CRC 产生电路与 HEC 产生电路类似,如图 3-6 所示,初始化时最左边 8bit 装 8bit 的 UAP(UAP0 在左 UAP7 在右) ,最右边的 8bit 置零。LFSR 的初始状态如 图 3-7 所示,在数据移入时,开关 S 置于“1” ,当数据全部移入后,把开关 S 置于“2” , 然后将寄存器中的值读出 CRC 值,从右到左。- 29 - 蓝牙无线通信教学系统教材图3-6 产生CRC的LFSR电路图3-7 CRC产生电路的初始状态图3-8 CRC的产生和检查过程3.2 数据白噪声加扰所有的分组头和有效载荷信息在发送前都要利用数据加噪进行扰码处理。这主要是 为了避免在传输过程中出现过长的连续 0 或 1 的位流模式。基带处理器需要从接收到的 模拟数据信号中判断数据是 0 还是 1,但过长的连续 0 或 1 位流会造成问题。因为在接 收到的模拟数据信号中并不存在像直流信号中那样的参考点,因此必须依靠接收到的最 后几个传输信号进行校正。任何连续的 0 或 1 的长序列位流串都可能导致校正失败。因 此需要采用数据加噪技术对信号进行扰码处理,以大大降低出现长序列 0 或 1 位流串的 可能性。 在蓝牙无线连接的发送方,这种加噪过程先于 FEC 编码完成。在接收端,接收数据 使用相同的数据加噪进行还原处理,该还原处理在 FEC 解码后完成。数据白噪声的加扰 和解扰过程如图 3-11 所示。 扰码生成多项式为g (D ) ? D ? D ? 17 4(八进制表示为 221) ,然后与分组头和负载异或(XOR) 。扰码由线性反馈移位寄存 器产生,如图 3-9 所示。每次发送前,移位寄存器要初始化,用主机蓝牙时钟的一部分 CLK6-1 去初始化,高位用 1 补全。初始化时,将 CLK1 写到位置 0,CLK2 写到位置 1, 依次类推。当在 page 请求和响应状态发送 FHS 分组时,初始化白噪声扰码寄存器时不 再用主机时钟了,而是用 X_input,5bit 的数据高位(MSB)用 1 补齐。在寄存器初始 化时,X 的低位(如 X0)写到位置 0,X1 写到位置 1,依次类推。- 30 - 蓝牙无线通信教学系统教材图 3-9 数据白噪声加扰电路图 3-10 白噪声加扰 LFSR 的初始化初始化后,分组头和负载(已经完成 CRC 编码)就可以进行白噪声扰码。负载白化 可以在包头完成 HEC(包头校验)和白化的状态时继续。不需要重新初始化移位寄存器。 最先进入序列的 bit 是分组包头的最低位(LSB) 。图 3-11 数据白噪声的加扰和解扰过程3.3 纠错在蓝牙基带协议中采用的纠错控制方案有: (1)1/3 比例前向纠错码(FEC,Forward Error Correction code); (2)2/3 比例前向纠错码(FEC); (3)数据的自动重传请求(ARQ, Automatic Repeat Request)方案。 其中,FEC(Forward Error Correction code,前向纠错编码)的目的是为了减少 数据载荷重发的次数,使用 FEC 码,检错、纠错以及编解码的过程变得简单迅速,这对 RX (Receive,接收)和 TX(Transmit,发送)间的有限处理时间非常重要。但是,采用 FEC 会降低实际数据传输速率。所以,在纠错要求不高的环境中,可以不采用 FEC。蓝 牙规范基带协议中的分组的定义对于在有效载荷中是否采用 FEC 给出了相当的灵活度, 因此在 ACL 链路中可以选择 DM 或 DH 分组,SCO 链路中选择不同的 HV 分组,以及 eSCO 链路中的 EV 分组。分组包头通常采用 1/3 比例前向纠错码保护,它含有很重要的连接 信息,能够容忍多位错误。3.3.1 1/3 比例前向纠错码(FEC)在这种 3 位重复方案中,分组头中的每一位都重复三次。主要用来避免分组头中的 错误,因为分组头中包含有重要的连接信息。实际上在整个分组包头里都采用了三倍重 复码。在这种 3 位重复方案中,重复码大部分在接收端判决,既可用于分组头,也可用 于 SCO 链接的分组。例如,在 SCO 链接中使用的 HV1 分组里的话音段中也采用了这种编 码格式。如图 3-12 所示。- 31 - 蓝牙无线通信教学系统教材图 3-12 1/3 比例前向纠错码3.3.2 2/3 比例前向纠错码(FEC)此类错误校正方法主要用来以最可靠的方式来发送数据分组。该方案能够在每 10bit 码字中纠正一位错和检测两位错。 2/3 比例前向纠错码可用于 DM 分组、 分组中 DV 的数据段、FHS 分组、HV2 分组以及 EV4 分组中。由于编码器长度为 10 bit,所以可在 CRC 位之后补 0 来保证是 10 的倍数。 所有需要编码的位数 (即: 有效载荷头、 用户数据、 CRC 和尾部数位)必须是 10 的整倍数。 在这一方案中,采用了一种(15, 10)缩短的汉明码表示方式。每 10 个信息位被 编码为 15 位的码字,生成多项式为:g ( D ) ? ( D ? 1)( D ? D ? 1)4对应八进制数表示为 65, 通常是用线性反馈移位寄存器(LFSR)来生成 2/3 比例前向 纠错码,如图 3-13。首先,LFSR 各位初始化为“0” ,前 15 个节拍,开关 S1,S2 置于 位置“1” ,10 位信息比特数据依次移入 15 位的缓存器和 LFSR,然后将 S1 和 S2 置于位 置“2” ,将 5bit 奇偶校验位移出 LFSR,附加于 10 位信息比特之后,这样每 10bit 信息 块编码为 15bit 码字,可以纠正一位,检查两位错误。图3-13(15,10)短汉明码产生LFSR纠错解码时,前 15 个节拍,开关 S1,S2 置于位置“1” ,数据依次移入 15 位的缓 存器和 LFSR,然后将 S1 和 S2 置于位置“2” ,再输入 14 个节拍的 0,即得 15bit 的解 码输出,如果传输中有 1 位错误,可以纠正。纠错解码电路如图 3-14 所示。图3-14(15,10)短汉明码纠错解码电路3.4.3 自动重传请求(ARQ)在蓝牙无线连接中,为了保证可靠传送,常用做法是采用自动重传请求(ARQ)方 案,由接收方发回特殊的控制帧,作为对输入的确认/否认(ACK/NAK)。如果出现丢帧 或丢掉确认消息的情况,则计时器在超时后会发出超时信号,提醒发送方可能出现了问 题,必须重传此帧。接收方还必须能够辨别收到的是重复帧还是新帧。- 32 - 蓝牙无线通信教学系统教材 在蓝牙采用的 ARQ 方案中,蓝牙的 DM、DH 和 DV 分组可以进行传输或重发,直到接 收端返回成功接收确认信息或超时信息。该确认信息包含在返回的分组头里,用 ARQN 位表示。 为了确定有效载荷正确与否,循环冗余校验码应该加载到有效载荷中。ARQ 方案只 工作在分组的有效载荷上(仅针对具有 CRC 的有效载荷) 。分组头和话音有效载荷不受 ARQ 保护。 蓝牙使用快速、 无编号确认方案。 为了应答前次接收分组, 应返回确认 ACK (ARQN=1) 或否认 NAK (ARQN=0)信息。在返回分组的分组头里,生成 ACK / NAK 域,同时,接收 分组的分组头中的 ACK / NAK 域可表明前面的负载是否正确接收,决定是否需要重发或 发送下一个分组。从单元将在主→从时隙后的从→主时隙中进行应答。主单元在对该从 单元的下一传输时隙进行响应,在收到某一从单元分组到响应该单元之间,主单元有可 能寻址另一从单元。由于处理时间短,当分组接收时,解码选择在空闲时间进行,并要 简化 FEC 编码结构,以加快处理速度。 快速 ARQ 方案与停止等待 ARQ 方案相似,但时延最小,实际上没有由 ARQ 方案引起 的附加时延。该结构比退后 n 帧 ARQ 更有效,并与选择重传 ARQ 效率相同,但由于只有 失效的分组被重发,可减少开销。 在快速 ARQ 方案中,接收方为了辨别是重复帧还是新帧(即过滤重传数据) ,头部 将附加 SEQN(Sequential Numbering scheme,序列编号)位。通常,每次新的 CRC 数据 有效载荷传输,SEQN 位将交替变化。而在重传中,SEQN 位不发生变化。这样,通过辨 认 SEQN 位是否发生变化,收方即可辨别出是重复帧还是新帧。(二)蓝牙纠错编码实验指导一、 教学目标 充分掌握蓝牙差错控制原理,并由此引申,掌握各种通信系统的差错控制原理和方 法。 二、 预备知识 1.通信原理的差错控制,检错、纠错原理。 2.循环码,分组码的编解码原理和实现电路。 3.蓝牙比特流差错控制原理和方法。 三、 实验内容 1.学习蓝牙分组头和负载的比特流处理流程,以及各种纠检错的方法。 2.学习 HEC 的原理,编解码方法和编解码电路,会进行迭代运算。 3.学习 CRC 的

我要回帖

更多关于 增量型编码器读取方法 的文章

 

随机推荐