零. 概述

主要介绍下蓝牙协议栈(bluetooth stack) 串口协议(bluetooth SPP)Serial Port Profile 协议概念介绍。

一. 声明

本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等

第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等

第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。

第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)

第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等

第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展

第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。

另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。

-------------------------------------------------------------------------------------------------------------------------

CSDN学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

蓝牙交流扣扣群:970324688

Github代码:https://github.com/sj15712795029/bluetooth_stack

入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

蓝牙学习目录:https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900

--------------------------------------------------------------------------------------------------------------------------

二. 蓝牙串口SPP(Serial Port Profile)协议介绍

2.1 概念介绍

SPP是Serial Port Profile(串口协议)的缩写,其定义了使用蓝牙进行RS232(或类似)串行电缆仿真的设备应使用的协议和过程。简单来说就是在蓝牙设备之间建立虚拟的串口进行数据通信。说白了就是可以两个设备对端发送自定义数据,NOTED:苹果不支持SPP协议。

目前SIG最新的版本是V1.2,之前更早的版本在官网只有V1.1可以下载到,但是这两份文档没有功能上的差别,所以不做介绍

2.2 SPP协议在整个蓝牙中的架构图如下

2.3 角色介绍

Device A (DevA) – This is the device that takes initiative to form a connection to another device

Device B (DevB) – This is the device that waits for another device to take initiative to connect.

说白了就是就是两台设备连接,谁发起的连接角色就是Device A,被连接的就是Device B,但是这个和其他协议不同,两台设备之前的code基本都是一样,角色只是区分两台设备。

2.4 SPP特性

Device A是发起连接的主动房,所以Device A要至少支持Establish link and set up virtual serial connection.,Device B是被连接的乙方,所以要至少支持Accept link and establish virtual serial connection和Register Service record for application in local SDP database.以便Device A查询服务并且连接,但是此协议漏掉最主要的两个功能,发送数据,接收数据,或者SIG是觉得rfcomm做到了这个功能,所以不写在SPP协议中吧,但是我还是决定要在SPP介绍收发功能。

2.4.1 Establish link and set up virtual serial connection.

This procedure refers to performing the steps necessary to establish a connection to an emulated serial port (or equivalent) in a remote device. The steps in this procedure are:

1)Submit a query using SDP to find out the RFCOMM Server channel number of the desired application in the remote device. This might include a browsing capability to let the user select among available ports (or services) in the peer device. Alternatively, if it is known exactly which service to contact, it is sufficient look up the necessary parameters using the Service Class ID associated with the desired service.

2)Optionally, require authentication of the remote device to be performed. Also optionally, require encryption to be turned on.

3)  Request a new L2CAP channel to the remote RFCOMM entity.

4)  Initiate an RFCOMM session on the L2CAP channel.

5)  Start a new data link connection on the RFCOMM session, using the aforementioned server channel number.After step 5, the virtual serial cable connection is ready to be used for communication between applications on both sides.

2.4.2 Accept link and establish virtual serial connection.

This procedure refers to taking part in the following steps:

1)If requested by the remote device, take part in authentication  procedure and, upon

further request, turn on encryption.

2)  Accept a new channel establishment indication from L2CAP.

3)  Accept an RFCOMM session establishment on that channel.

4)  Accept a new data link connection on the RFCOMM session. This may trigger a local request to authenticate the remote device and turn on  encryption, if the user has required that for the emulated serial port being connected to (and authentication/encryption procedures have not already been carried out).

2.4.3 Register Service record for application in local SDP database.

This procedure refers to registration of a service record for an emulated serial port (or equivalent) in the SDP database. This implies the existence of a Service Database, and the ability to respond to SDP queries.

NOTED:SPP只有安卓手机支持,并且部分安卓手机必须有SPP APP才可以连接,iphone手机不能直接SPP,但是又一个替代协议IAP,此协议需要买MFI chip才能用

2.5 SDP相关的注册

我看下我们的SDP注册:

static const uint8_t spp_service_record[] =
{/* 1.ServiceClassIDList */SDP_DES_SIZE8, 0x8,SDP_UINT16, BT_ATTRIBUTE_SERVICE_CLASS_ID_LIST>>8&0xff, BT_ATTRIBUTE_SERVICE_CLASS_ID_LIST&0xff, /* Service class ID list attribute */SDP_DES_SIZE8, 3,SDP_UUID16, BT_SERVICE_CLASS_SERIAL_PORT>>8&0xff, BT_SERVICE_CLASS_SERIAL_PORT&0xff,/* 2.ProtocolDescriptorList */SDP_DES_SIZE8, 0x11,SDP_UINT16, BT_ATTRIBUTE_PROTOCOL_DESCRIPTOR_LIST>>8&0xff, BT_ATTRIBUTE_PROTOCOL_DESCRIPTOR_LIST&0xff,/* Protocol descriptor list attribute */SDP_DES_SIZE8, 0xc,SDP_DES_SIZE8, 0x3,SDP_UUID16, BT_PROTOCOL_L2CAP>>8&0xff, BT_PROTOCOL_L2CAP&0xff, /*L2CAP*/SDP_DES_SIZE8, 0x5,SDP_UUID16, BT_PROTOCOL_RFCOMM>>8&0xff, BT_PROTOCOL_RFCOMM&0xff, /*RFCOMM*/SDP_UINT8, RFCOMM_SPP_SERVER_CHNL, /*RFCOMM channel*//* BluetoothProfileDescriptorList */SDP_DES_SIZE8, 0xd,SDP_UINT16, BT_ATTRIBUTE_BLUETOOTH_PROFILE_DESCRIPTOR_LIST>>8&0xff, BT_ATTRIBUTE_BLUETOOTH_PROFILE_DESCRIPTOR_LIST&0xff, /* profile descriptor List */SDP_DES_SIZE8, 0x8,SDP_DES_SIZE8,0x06,SDP_UUID16,BT_SERVICE_CLASS_SERIAL_PORT>>8&0xff, BT_SERVICE_CLASS_SERIAL_PORT&0xff,SDP_UINT16,0x01,0x02,     /* V1.2 */
};

传统蓝牙协议栈 串口协议SPP(Serial Port Profile)概念介绍相关推荐

  1. 【转载】传统蓝牙协议栈 串口协议SPP

    零. 概述 主要介绍下蓝牙协议栈(bluetooth stack) 串口协议(bluetooth SPP)Serial Port Profile 协议概念介绍. 一. 声明 本专栏文章我们会以连载的方 ...

  2. SPP(SERIAL PORT PROFILE)

    一.介绍 1. spp是什么 串行端口配置文件(SPP)定义了使用蓝牙进行RS232(或类似)串行电缆仿真的设备应使用的协议和过程. 此配置文件涵盖的方案通过虚拟串行端口抽象(本身取决于操作系统)来处 ...

  3. 蓝牙协议栈开发板 STM32F1 跑蓝牙协议栈 --传统蓝牙串口协议SPP演示以及实现原理

    零. 概述 主要介绍下蓝牙协议栈开发板跑传统蓝牙串口协议SPP AT指令以及上位机操作步骤,以及原理 一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ...

  4. 传统蓝牙服务问询协议SDP概念

    零.概述 本文主要介绍传统蓝牙SDP的概念,SDP在整个协议栈中的架构,SDP的UUID,服务类,以及服务类属性介绍. 服务发现协议(SDP)为应用程序提供了一种方法来发现哪些服务可用,并确定这些可用 ...

  5. 虚拟串口工具Virtual Serial Port Driver(VSPD)

    注意事项:使用虚拟串口 文最后附下载 (也已上传115网盘) 这几天在win7下测试一个串口通讯软件,我笔记本没有串口,只好找个虚拟串口软件做测试,找了好几个都不是很理想.在这上传一个以备日后使用,这 ...

  6. linux 串口 中断方式,设置在linux下串口中断(setting serial port interruption in

    我想设置中断了在Ubuntu串行端口(在C语言编写的程序),但它不工作. 我已经检查串行通讯正常工作没有中断,所以我可能会设置一些错误. 代码如下: #include #include #includ ...

  7. 一篇文章足够你学习蓝牙技术,提供史上最全的蓝牙技术(传统蓝牙/低功耗蓝牙)文章总结,文档下载总结(2020/12/11更新)

    本文章目的: 1)给广大蓝牙爱好者提供蓝牙资料下载渠道 2)给广大蓝牙爱好者增加一个蓝牙学习文章导读 我们的蓝牙书以及CSDN蓝牙系列的书籍以及视频有以下计划,大家可以根据兴趣爱好或者工作需要挑选特定 ...

  8. 传统蓝牙RFCOMM协议(Bluetooth rfcomm)流程介绍

    零. 概述 本文章主要讲下蓝牙协议栈RFCOMM协议部分流控介绍 一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景, ...

  9. win7虚拟串口服务器软件,Virtual Serial Port Driver Pro(虚拟串口驱动程序) V9.0.270 官方版...

    Virtual Serial Port Driver Pro是一款功能全面的虚拟串口辅助软件.软件能通过互联网络的形式实现数据传输,具备安全高效.不易中病毒.兼容性好等等特点.并且还可以添加无限个虚拟 ...

  10. 吐血推荐历史最全的蓝牙协议栈介绍

    本文主要介绍蓝牙5.2协议栈,Bluetooth stack, 蓝牙5.2的架构,包含传统蓝牙/低功耗蓝牙的协议概述以及作用 一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: ...

最新文章

  1. web应用程序和web网站_Web应用程序和移动应用程序的基本启动清单
  2. 百度绝对控股,小度科技独立融资,投后估值200亿元
  3. 新书上市 | 新视角来了:《用户体验四维度》
  4. 5G服务可以解决的4个企业WAN挑战 - vecloud
  5. 全国计算机等级考试题库二级C操作题100套(第04套)
  6. SCRUM 12.03
  7. 比特币 源代码_GitHub遭黑客攻击:窃取数百源码并勒索比特币,数量惊人!
  8. :https web服务器ssl认证项目,Https自定义证书引入问题(2)
  9. 1. SVN (1)
  10. Centos yum 命令行 安装KDE Desktop
  11. kali2018安装教程_Kali更新安装firefox教程
  12. 关于尚硅谷视频p135配置完yarn-site.xml的硬件资源配置后
  13. 学术会议html模板,学术会议的常用模板
  14. PSPnet网络结构搭建
  15. Git学习笔记(基础操作+分支操作+PR)
  16. 家庭网络拓扑结构示意图
  17. Java程序员“金三银四“就一定要出去面试吗?
  18. 对称算法与非对称算法
  19. 为Latex生成的PDF设置背景色
  20. Windows 去除我的电脑页面多余的设备和驱动器图标

热门文章

  1. 【C++】模板(函数模板,类模板,模板的特化,模板的分离编译)
  2. 最新 行政区划 省市区 历史版 2022 年
  3. mysql tddl_TDDL思考总结
  4. ADAS常见缩略词(FCW/LKA/LCA/LDW...)
  5. python爬虫天猫商品数据及分析(1)
  6. mysql5.7 64位下载_MySQL5.7下载-MySQL数据库5.7下载 v5.7.22.1官方版(32位/64位)--pc6下载站...
  7. android 蓝牙打印乱码,蓝牙打印机打印中文乱码
  8. 一台电脑中,如何使 git 同时配置Github、Gitee等多种版本控制工具
  9. 乐高机器人纲要_乐高机器人校本课程纲要
  10. 卡诺模型案例分析_KANO模型案例分析---来自58学车