自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

彼尔的博客

技术心得

  • 博客(70)
  • 资源 (3)
  • 收藏
  • 关注

翻译 蓝牙低功耗音频技术 -- 1 背景和遗产

LE Audio技术发展的背景

2022-03-13 11:40:04 1974 2

翻译 蓝牙低功耗音频技术 -- 0 前言介绍

前言介绍

2022-03-12 22:33:00 352

原创 蓝牙低功耗音频技术--目录大纲

翻译尼克.胡恩的书,全面介绍LE Audio技术

2022-03-12 22:20:47 648 1

原创 蓝牙5.3 Core Spec演进与功能变化

core spec 5.3 showing changes from 5.2Core spec 5.3 在2021/7/13号正式发布,我23号在SIG官网发现了协议的更新。看蓝牙SIG的介绍,5.3协议主要是一些特性的增强(Feature Enhancements),主要包含5个方面。1、Periodic Advertising Enhancement 周期性广播的增强2、Encryption Key Size Control Enhancement 加密密钥大小控制增强功能3、Connect.

2021-08-01 22:05:52 2761

原创 蓝牙mesh(二)

2 Mesh网络补充介绍2.1 承载层介绍2.1.1 Advertising bearerMesh消息的任何广播数据都应是不可连接和不可扫描的无定向广播事件。如果一个节点收到了一个可连接或者可扫描的广播事件,这个消息应该被忽略。一个只支持广播载体的设备应该执行被动扫描,其工作周期应尽可能接近100%,以避免丢失任何传入的Mesh消息。所有设备应同时支持GAP观察者角色和GAP广播者角色。...

2019-07-22 17:15:30 1642

原创 蓝牙mesh(一)

Mesh系统介绍。本文主要对Mesh的profile文档进行翻译与解读,促进对mesh主要协议的理解。1 Mesh系统架构1.1分层的架构Model Layer:定义了用于标准化典型用户场景操作的模型以及蓝牙网络模型规范或其他更高层规范中定义的,比如灯光和传感器这种更高层模型定义。Foundation Model Layer:定义用于配置和管理一个mesh网络的状态、消息和模块。...

2019-07-22 17:05:45 7293

原创 BLE-SMP详解

1、 基本概念1.1 加密是要做什么?加密认证的整个过程几乎都是围绕怎么将两个设备使用到的秘钥安全的共享,也就是当一方把密码告诉另一方时,始终要提防第三方也可能听得到这个密钥。注意:数据包的报头和长度字段不会被加密的,这有个好处是,当接收到包时可以直接分析报头判断 SN 和 NESN 标志。所以对于加密来说并不是加密数据有多难,而是把需要共享的密钥安全的送到正确的设备才是难点,这就引入了配...

2019-03-15 15:26:42 4685 2

原创 win10将python脚本生成exe文件

1、安装python,这一步是开发必要的了,典型安装时就会自动安装pip等工具,记得勾选加入系统环境变量即可。2、安装pipinstallerpip install pyinstaller如果出现如下界面,就说明是安装成功了C:\Users\carl>pyinstaller -v3.43、安装pywin32pip install pywin324、打包成exe在 *....

2019-02-20 14:19:29 1040

原创 BLE HID设备的连接过程

通过HCI log进行分析,了解每个层次对应的主要事件,特此记录一下,ATT层目前没有完全搞明白,等后续再进行补充。HCI主要command交互: 1 Command 0x200d Low Energy HCI_LE_Create_Connection 2 Command 0x2016 Low Energy HCI_LE_Read_Remote_Used_Features 3 Comman...

2019-02-19 15:01:21 5019

原创 BLE--GATT服务构成

GATT基本构成最上层协议为profile,profile 中由多个 Server 组成,而 Server 由0 或多个《Include》和至少一个《Characteristic》 组成。服务是指一系列由数据和相关行为组成的集合,为了去完成某个特定的功能或者特性。而一个服务可以包含引用服务即《Include》、强制性和可选的特征即《Characteristic》。服务是一种或多种特性的组合;特...

2019-02-18 14:21:40 3377

原创 BLE数据报文格式解析

1、数据链路层报文结构报文的基础是数据链路层的报文,其它报文都是从此展开的,BLE数据链路层数据格式如下:2、 广播通道与数据通道 PDU 区别:(1) 广播通道的 PDU 格式:字段解析:报文类型(低 4 个 bit):ADV_IND(0000) ——通用广播ADV_DIRECT_IND(0001) ——定向连接广播ADV_NONCONN_IND(0010) ——不可连接...

2019-02-12 19:51:53 9026

原创 经典蓝牙(BR/EDR)设备连接过程分析

一、Inquiry过程Host发送HCI Inquiry命令,等控制器收到远程设备的Inquiry Response之后,发送HCI Event给Host。Host对Event数据进行分析,待Host 收到Inquiry Complete响应后,整个Inquiry过程结束。Host收到应答后可以发送HCI inquiry cancel取消Inquiry或等待Inquiry时间到达自动结束。I...

2019-01-15 22:07:50 10549

原创 蓝牙如何区分Master与Slave

BR/EDR:主动搜索一方处于Discover状态,以较快的速度进行跳频,是发起方,为Master,负责维护Hopping Pattern;被搜索一方处于Discoverable状态,以较慢的速度跳频,是接收方,为Slave。LE:发送广播的一方:发送advertising packets,为Slave;接收广播的一方:收到广播–>发起connection request,是Ini...

2019-01-14 17:49:53 8026

原创 蓝牙基础概念

本篇文章很多内容摘抄自蜗窝科技的蓝牙协议分析,1. 蓝牙发展过程自1994年由爱立信推出至今,蓝牙技术已经走过了20多个岁月。从最初的Bluetooth V1.0,到Bluetooth V5.0,经历了近10多个版本的修订后,发展为当前的状况。如今的蓝牙,像一个大杂烩:BR/EDR沿用旧的蓝牙规范;LE抄袭802.15.4;AMP直接使用802.11。而这一切的目的,就是以兼容性和易用性为基...

2019-01-14 15:33:18 2811 2

原创 2019

关于2019的我工作四年多,一路走来,学过不少东西。零零碎碎,产品从智能家居到智能硬件到电视,技术路线也从单片机开发转到Linux/Android开发。最近正式开始从事蓝牙驱动开发,在关注蓝牙技术,协议栈,蓝牙的使用流程。虽然以前做过蓝牙产品,但基本是局限于应用场景的逻辑编程。今年,在这里会成为我记录基本蓝牙知识,学习疑问 和心得的地方,欢迎大家一块讨论。目前看到很多好的博客或者技术文章,也...

2019-01-13 13:40:25 264

原创 Linux下proc文件系统介绍与应用

proc文件系统的作用(1) 内核项目太庞大,调试困难,引入新的调试方法。(2) proc文件系统的思路是:在内核中构建一个虚拟文件系统/proc,内核运行时将内核中一些关键的数据结构以文件的方式呈现在/proc目录下的一些特定文件中, 这样相当于将不可见的内核中的数据结构以可视化的方式呈现给内核开发者。(3) proc文件系统给了开发者一种调试内核的方法:我们通过实时的观察/proc/xx...

2018-12-15 21:32:20 735

原创 字符设备驱动注册与设备节点创建----函数讲解与代码示例

1、字符设备编号注册内核提供了三个函数来注册一组字符设备编号,这三个函数分别是 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()。(1)register_chrdev 比较老的内核注册的形式,早期的驱动使用。(2)register_chrdev_region/alloc_chrdev_region + cd...

2018-12-13 22:19:22 1140

原创 记一次系统安装---将Ubuntu 18.04安装到U盘,并设置为UEFI启动

最近想把Ubuntu 18.04安装到U盘,实现即插即用的功能,中间道路比较曲折,由此记下正确安装的方式。由于中间主要是过程错误,在此省略了截图。步骤如下:购买了一个高速U盘,闪迪的CZ880;将U盘重新分区;因为需要UEFI启动,所以需要重新划分分区。任意选取熟悉的分区工具即可,在U盘初始位置划分出一个300M以上的FAT32分区,此分区为后续安装UEFI的引导文件。剩余大小做...

2018-12-06 15:25:40 10126 1

原创 用户空间与内核空间驱动编程的异同

用户空间与内核空间驱动编程的异同在驱动编程时,常涉及两种驱动编写模式,一种在内核空间编写,一种在用户空间编写,但这两种编写方式各有什么优劣呢?在《Linux设备驱动程序》一书中看到总结的比较全,现总结如下:用户空间驱动程序的优点可以归纳如下:1.可以和整个C库链接。驱动程序不用借助外部程序(如Linux内核程序)就可以完成许多非常规任务。2.可以使用通常的调试器调试驱动程序代码,而不用费力...

2018-09-23 21:42:22 1316

原创 Python 简单读取配置文件

configparser 是 Pyhton 标准库中用来解析配置文件的模块,并且内置方法和字典非常接近。Python2.x 中名为 ConfigParser,3.x 已更名小写,并加入了一些新功能。本文使用configparser模块简单读取配置文件,如字符串、列表、字典值的读取:源码示例,使用python2.x:import ConfigParserimport astconf...

2018-08-29 11:32:08 1545

原创 Python3 类

类的定义 Python中定义使用class关键字,class后面紧接着类名,类名一般使用大写字母开头,紧接着就是object,表示该类是从哪个类继承下来的,通常,如果没有合适的继承类,就使用object类,这是所有类都会继承的类。 类包含属性(相当于函数中的语句)和方法(相当于函数)。类的实例化 实例化类时调用了__init__()方法,此方法一般称为构造方法。在定义类时,若不显示的定义...

2018-08-29 11:10:04 347

原创 步入Python3编程

1、import语句,导入python中的标准模块 2、assert语句格式:>>> x=3>>> assert x>3, "x is error"Traceback (most recent call last): File "<stdin>", line 1, in <module>Asser

2018-08-15 09:29:44 168

原创 Python3 字典

字典字典由多个键及其对应的值构成的对组成。(把键值对称为项,字典的每个键值对用冒号:分割,每个项之间用逗号,分割,整个字典包含在花括号{}中)。键必须是唯一的,但是值不必,值可以取任何数据类型,键必须是不变的,如字符串、数字或元组。1、字典的创建:>>> dict = {"carl":1001, "ida":1002, "clin":1003}>>&..

2018-08-15 09:23:35 229

原创 Python3 字符串简单介绍

1、字符串的基本操作字符串和列表一样,支持列表的基本操作。 只是字符串是固定的,不支持切片赋值。2、简单格式化操作>>> print("hello %s %d"%("world",2018))hello world 2018>>> print("pi is %0.2f"%3.14)pi is 3.14>>&

2018-08-15 09:19:00 192

原创 Python3 列表与元组

列表与元组1、索引,类似于C语言中的数组操作,但是多了反向索引,最后一个字符的索引号为-1. 2、切片:索引用来对单个元素进行访问,分片可以对一定范围内的元素进行访问,分片通过冒号分割的两个索引实现。>>> number = [0,1,2,3,4,5,6,7,8]>>> number[2:4][2, 3]分片操作的实现需要提供两个索引作为边...

2018-08-14 16:46:33 383

原创 Python3 基本数据类型

Python3 包含六种基本的数据类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Sets(集合)、Dictionary(字典)。本节为基本数据类型的常用基本概念。1、基本运算Number包含3种数据:整形、浮点型和复数 在整数除法中,除法(/)计算结果是浮点数,即使两个整数恰好整除,结果也是浮点数。如果只想得到整数的结果,可以使用整除(//...

2018-07-17 22:18:08 164

原创 Ubuntu 18.04使用vscode搭建python3.x开发环境

VSCODE安装python插件 新建一个test.py文件,使用VSCODE打开时如下显示 直接点击安装,由于缺少pip环境会导致安装失败。于是先安装pip:sudo apt-get install python-pip然后直接安装即可:pip install pylint此时可以直接编码进行测试了,点击调试按键输出结果如下 此时可以使用VScode直接玩耍了。...

2018-07-17 19:48:01 8260 1

原创 rsa算法介绍与移植

RSA算法是一种”公钥加密算法”。早期的加密模式,就是加密和解密都是用同一种规则(密钥)。这种加密模式,就要求加密规则需要在双方进行传递,信息是很不安全的。在这种加密模式下的算法,也叫”对称加密算法”。而我们今天的RSA算法,是一种”非对称加密算法”,加密和解密使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。一、 数学理论质数(素数) 在大于1的自然...

2018-05-07 17:06:08 1177 2

原创 ubuntu安装gcc-arm-none-eabi的几种方式

目前许多嵌入式软件软件开发在Linux平台下进行,编译效率高很多,如今天所述的gcc-arm-none-eabi常适用于 Arm Cortex-M & Cortex-R processors (Cortex-M0/M0+/M3/M4/M7/M23/M33, Cortex-R4/R5/R7/R8/R52)系列平台。Ubuntu 16.04之后的软件源是自带gcc-arm-none-ea...

2018-04-28 10:11:25 46845 4

原创 ubuntu 16.04安装go语言并配置VSCode使用环境

一、go语言安装1、下载安装文件 由于go语言为goole开发,官方网站被墙,我们可以到国内镜像网站进行下载。 https://www.golangtc.com/download 本次安装使用源码为:go1.9.2.linux-amd64.tar.gz 2、将安装文件解压到指定目录$sudo tar -xzvf go1.9.2.linux-amd64.tar.gz -C /usr/...

2018-04-20 16:17:02 7686 4

原创 内存管理--你的数据放在哪里

未初始化的全局变量(.bss) Bss段用来存放那些没有初始化和初始化为0的全局变量。此种类型只占运行时的内存空间,而不占用code代码的文件空间。作为全局变量,在整个程序的运行周期内,bss数据是一直存在的。初始化过的全局变量(.data) Data段用来存放那些初始化为非0的全局变量。Data类型的全局变量即占内存空间又占code代码的文件空间。同样作为全局变量,在整个程序的运行周期内...

2018-04-14 11:41:34 511

原创 ubuntu 16.04安装windows 7虚拟机

安装virtualbox sudo apt-get install virtualbox使用IOS文件安装Windows。 (1)在高级选项下可以自定义分配的硬盘大小。 (2)建立好运行环境之后,把IOS文件放入模拟的驱动盘,点击启动,即可自定安装。添加共享文件夹 (1)打开Windows 7系统,点击Virtualbox顶级菜单,设备->安装增强功能,进行安装。 (2)点击设备->共

2018-04-13 17:17:03 1444

原创 BLE基本状态与事件

1、 BLE广播事件:在一个广播事件中,广播包会分别在三个广播通道中被发送一次(37,38,39);2、BLE广播间隔:是指两次广播事件之间的最小时间间隔,一般取值范围在20ms-10.24S之间,链路层会在每次广播时间期间产生一个随机广播延时时间(0ms-10ms)3、BLE扫描事件:每次扫描设备打开Radio接收器去监听广播设备,这样称为一个扫描事件,扫描频宽比,Duty-Cycle,参数:

2018-04-02 19:43:27 2049

原创 BLE软件基本框架介绍

BLE设备本身分为Host与Controller,并不是对应两个设备,而是一个设备的层次区分。如下图(使用网络复制图片,侵权删):控制器部分(Controller):1、物理层(PHY):RF特性,运行在2.4GHz ISM band,40频道2MHz的通道间隙,3个广播通道,37个自适应自动调频通道;2、链路层(LL):RF控制层,控制芯片工作在如下五种状态: Standby

2018-04-02 19:33:23 1525

原创 Ubuntu 16.04下搭建samba服务器

一、Ubuntu下安装sudo apt-get install samba sudo apt-get install smbclient二、更改配置文件sudo gedit /etc/samba/smb.conf在最后添加如下信息:[share]comment = Share Folder require passwordbrowseable = yespath = /home/carl/w

2018-04-02 19:26:56 220

原创 BLE--地址类型

一、综述一个BLE设备,可以使用两种类型的地址(一个BLE设备可同时具备两种地址):Public Device Address和Random Device Address。而Random Device Address又分为Static Device Address和Private Device Address两类。其中Private Device Address又可以分为Non-resolvable

2018-03-21 13:52:21 4929 2

原创 面对即将到来的30岁--计划与感悟

看到很多人的每年总结,都对自己有一个规划,在此借鉴了一下博主xiaoyu966的格式,对自己进行一下反思与总结,看到他的文章觉得大家的生活何其相似!1. 前言看到很多人的每年总结,都对自己有一个规划,在此借鉴了一下博主xiaoyu966的格式,对自己进行一下反思与总结。2014年,研究生毕业,开始踏入嵌入式软件开发这个领域。从开始工作的第一天起,就听过无数软件行业是“青春饭”的言论。时至今...

2018-03-04 11:27:25 2906

转载 BLE中GATT介绍

本文转载自博客园GATT(Generic Attribute Profile),描述了一种使用ATT的服务框架 该框架定义了服务(Server)和服务属性(characteristic)的过程(Procedure)及格式 Procedure定义了characteristic的发现、读、写、通知(Notifing)、指示(Indicating) 及配置characteristic的广播GATT可以被

2018-02-26 20:24:24 3234

原创 FreeRTOS时间管理--两个延时列表分析

FreeRTOS的任务调度一般使用系统滴答时钟,每次系统节拍时钟发生中断后加1,用来记录系统节拍时钟中断的次数,内核会将所有阻塞的任务跟这个变量比较,以判断是否超时,若超时意味着等待时间到达,可以执行。变量xTickCount的数据类型跟具体硬件有关,32位架构硬件一般是无符号32位变量、8位或16位架构一般是无符号16位变量。即便是32位变量,xTickCount累加到0xFFFFFFFF后也会溢

2018-01-20 15:00:26 4460

原创 STM32时钟系统与时钟启动顺序详解

概念基础:STM32时钟系统基本一致,不同系列之间有细微差别。此文档主要针对STM32F446的时钟系统进行介绍。1. 时钟树概述为何不是采用一个系统时钟?如51 因为STM32本身非常复杂,外设非常多,但是并非所有外设都需要系统时钟这么高的频率,比如看门狗和RTC只需要几十K的时钟即可。同一个电路,时钟越快,功耗越大,同时抗电磁干扰能力也会越弱,所以对于较为复杂的MCU一般采用多时钟源的方法来

2018-01-20 10:55:56 4658

C#开发的HID、UART、文件操作Demo

通过C#开发的UI界面,包含HID通讯,UART历程,文件操作等Demo。

2017-03-13

Linux内核完全注释及源码

1、Linux内核完全注释赵炯版本 2、资源包含书本所需内核源码

2017-02-01

Linux内核完全注释

赵炯版本的linux内核完全注释,并附带内核源码。

2017-02-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除