在学习 BLUENRG-LP 的过程中,及时地把碰到的问题记录下来,并作解答,形成本文档。

该文档会时时更新,并且当某些章节内容过多时,会独立出来,形成新的文章。

BLUENRG-LP 的特性

芯片内部有哪些存储介质,各的功能是什么?
  • FLASH 存放固件和用户数据。支持读、写保护

  • OTP (1KB) 存放用户数据,支持读、写保护

  • ROM (7KB) 不对用户开放。存放 UART BOOTLOADER 固件和一些芯片的配置信息,如ADC校准值

BLE 5.0 的新特性及其作用:

2Mbps:更高数据吞吐率

LE 2M PHY,比特率为 2Mb/s,不支持 ECC;减少冗余度以提高传输吞吐率。

关于 1M PHY:

蓝牙 4.2 采用 LE 1M PHY,即比特率为 1Mb/s 的 PHY;必选。

支持 ECC (error correcting coding,可选)

根据编码方式的不同,支持 3 种比特率:1Mb/s,500Mb/s (LE Coded),125Kb/s (LE Coded),其实就是冗余度的增加导致了比特率的下降,带来的好处就是能对空中的数据进行纠错从而可以传的更远

Long range:更远的通讯距离

Channel selection algorithm #2:,通道选择算法 2,可避免干扰和多路径衰落效应

参考文章:https://blog.51cto.com/11134889/2317010

GATT caching:

以下是网友总结:

新增功能 协议层 描述
Slot Availability Mask (SAM) 物理层 标记设备的收发时间块。其他蓝牙设备获取该信息即可避免在该设备忙碌时争抢信道资源,这有利于在信道资源有限的情况下维持多设备同时工作,这个特性仅适用于经典蓝牙。
2 Mbit/s PHY for LE 物理层 2Mbit/s比特率的物理层。以前的物理层都是1Mbit/s比特率,这个特性从物理层提升了传输速率。
LE Long Range 物理层 该特性由多个方面共同实现。最高20dBm的发射功率(以前是10dBm),编码型物理层最低-82dBm接收灵敏度(以前是-70dBm),8位前向纠错编码FEC(以前没有),这些新特性共同实现了更远的通信距离,官方宣称能比过去提高4倍传输距离,实际测试高达750米。
High Duty Cycle Non-Connectable Advertising 链路层 在协议文档中未找到针对该特性的描述,从网络上也未获取有用信息。根据一个已有的类似概念“High Duty Cycle Connectable Advertising”,可以推测这个广播事件类型就是广播间隔更短,并且限制广播总时间,超时后将停止广播。
LE Advertising Extensions 链路层 扩展广播。以前广播仅仅使用37/38/39三个广播信道,现在可以使用扩展广播包,在0-36数据信道上传输,以前广播数据最大为31字节,现在扩展广播的数据长度最大可达255字节,所以官方宣称广播数据容量扩展8倍。
LE Channel Selection Algorithm #2 物理层 一种新的跳频算法。以前的算法仅用于连接数据的跳频,现在数据信道支持传输广播数据,以前的跳频算会产生性能问题,新的跳频算法可以用于连接数据通信的跳频和周期广播数据的跳频。
BLE 128kbps 的 long rang 模式,有效数据的最大数据吞吐率是?
BLE 协议栈的版本能否更新?
协议栈存储在芯片的什么位置?

硬件设计

IO 口的选择注意事项
RF 设计注意事项
晶振选型、Layout 注意事项,对信号的影响,系统稳定性(高频干扰)等
电感选型、Layout 注意事项,能源转换效率?哪一个供电电压效率最高?
电容选型、Layout 注意事项
低功耗控制:通过通、断电控制?通过使能脚控制?有哪些影响?

开发环境

快速上手 Windows Keil 固件开发环境
有哪些开发工具?

选型(电流评估、资源评估、成本评估)

开发(编译工具、调试工具)

生产(烧录工具、测试工具)

第一次使用 Keil 开发环境的配置?

SDK

timer module 是什么?有什么作用?

timer module 是一个软件模块。

该软件模块管理了芯片内部链路控制器硬件的各个定时器,关于这些定时器的详细介绍,可在射频控制器参考手册里找到。

timer module 根据抽象程度的不同分为了两个层次 (HAL, LL)。可为设备的唤醒、用户超时触发和预配置的射频事务触发关联一个事件;举个例子,用户可编程一个事件,实现:

  • 定时唤醒休眠的系统
  • 或产生一个超时事件
  • 或为蓝牙事件提供时间依据

timer module 的源码实现包含以下文件:

bluenrg_lp_hal_vtimer.h

bluenrg_lp_hal_vtimer.c

bluenrg_lp_ll_timer.h

bluenrg_lp_ll_timer.c

ll 层比较靠近硬件,主要实现了对硬件定时器的编程、低频时钟的管理和定时时间的转换(将 hal 的时间值转化为硬件定时器寄存器的值)

hal 层是对 ll 层的进一步抽象,封装了硬件的细节。主要实现了虚拟定时器序列,回调管理,校准调度,射频事件调度等。

虚拟定时器

链路控制器计数器。链路控制器中有一个计数器,定时器模块可利用该硬件计数器来虚拟出多个软件定时器。

时间基准。虚拟定时器的有一个特定的单位,称为系统时间单位(STU system time unit)。一个 STU = 625/256 us。在对真正的计数器进行编程之前,需要将用 STUs 表示的时间转换到硬件计时器计数单元中。

校准间隔。是一个参数,可以在初始化阶段设置,以决定该设备需要多长时间对内部振荡器的频率进行测量;当计数器使用的时钟源是外部晶振时,则不需要该参数。

射频计数器

BLUENRG-LP 提供了另外一个定时器专门用于触发射频事务(transaction)。该事务可以是一次射频发送、或射频接收。

休眠管理

定时器模块可避免系统在以下条件下进入休眠:

  • 虚拟定时器已经触发但回调函数还在执行
  • 低频时钟检测流程正在进行
  • 下一个射频事务已经很接近要触发了
  • The device is in a back-to-back communication

多连

ST 的芯片在多连(一拖多,主从一体)特性的支持上有优化,达到行业领先水平。BLUENRG-1/-2 关于此的实现相关资料如下:

https://www.st.com/resource/en/design_tip/dm00518102-slot-allocation-and-multiple-connection-timing-strategy-for-bluenrg-bluenrgms-bluenrg1-and-bluenrg2-stmicroelectronics.pdf

休眠流程

休眠具体流程是?
休眠时,IO口的电平状态是?
唤醒源有哪些,分别是什么?

DEEPSTOP 模式下,唤醒源可能是:

  • 通过运行在低频时钟的内部唤醒定时器,射频模块能产生两种事件来唤醒系统:

    • Radio wake-up time is reached
    • CPU host wake-up time is reached
  • RTC 事件
  • IWDG 产生的复位事件
  • 多达 28 个的 GPIO 事件(PA0~15, PB0~11)

SHUTDOWN 模式下,只能通过拉高拉低复位引脚来唤醒系统

休眠时,是否所有的 IO 口都唤醒系统?

在大多数口(非全部)上可以:PA0~15, PB0~11

启动流程

启动流程是?支持哪些接口启动?

芯片上电(或复位)后,芯片内部的 ROM 代码会先运行,

当检测到 PA10 脚为低电平时,会直接跑进 FLASH 开始运行 用户固件(运行失败会停在 while(1) )。

当检测到 PA10 脚为高电平时,会运行 UART BOOTLOADER 流程。

UART BOOTLOADER 可通过串口接收用户指令,执行一系列的操作。其特性为:

  • 自动检测波特率,范围:500 – 460800
  • 只能在指定的引脚:UART RX = PA8,UART TX = PA9
  • 用户需要先以某个波特率给 BLUENRG-LP 发送 0x7F,当接收到 0x79 的回复时,说明成功进入 UART BOOTLOADER 流程,可开始发送指令

UART BOOTLOADER 详细的介绍,参照文档:AN5471: The BlueNRG-LP UART bootloader protocol

安全启动、固件加密?

空中升级

OTA具体流程?

BLUENRG-LP 学习笔记的更多相关文章

  1. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  2. Android学习笔记(十七)——数据库操作(下)

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 这一次我们来试一试升级数据库,并进行数据库的CRUD操作,其中, C 代表添加(Create) ,R 代表查询 ...

  3. Android学习笔记(十二)——实战:制作一个聊天界面

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...

  4. shell学习笔记

    shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...

  5. Matplotlib学习笔记(一)

    原   matplotlib学习笔记 参考:Python数据科学入门教程 Python3.6.1 jupyter notebook .caret, .dropup > .btn > .ca ...

  6. lfs(systemd版本)学习笔记-第2页

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemd)学习笔记-第1页 的地址:https://www.cnblogs.com/renren-study-no ...

  7. lfs(systemv版本)学习笔记-第2页

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemv)学习笔记-第1页 的地址:https://www.cnblogs.com/renren-study-no ...

  8. Linux 学习笔记之超详细基础linux命令 Part 5

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 4----------------- ...

  9. Deep learning with Python 学习笔记(1)

    深度学习基础 Python 的 Keras 库来学习手写数字分类,将手写数字的灰度图像(28 像素 ×28 像素)划分到 10 个类别 中(0~9) 神经网络的核心组件是层(layer),它是一种数据 ...

  10. Day 4 学习笔记 各种图论

    Day 4 学习笔记 各种图论 图是什么???? 不是我上传的图床上的那些垃圾解释... 一.图: 1.定义 由顶点和边组成的集合叫做图. 2.分类: 边如果是有向边,就是有向图:否则,就是无向图. ...

随机推荐

  1. mysql锁——innodb的行级锁

    [前言]数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则.MySQL数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应 ...

  2. Hexo一键部署到阿里云OSS并设置浏览器缓存

    自建博客地址:https://bytelife.net,欢迎访问! 本文为博客自动同步文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://bytel ...

  3. Mac电脑管理员密码丢失解决办法

    1.重新启动电脑,并长按 Command (Win)+ S,并进入命令终端. 2.进入命令终端输入一下命令 /sbin/mount -uaw rm var/db/ .applesetupdone re ...

  4. HDOJ-6681(离散化+线段树)

    Rikka With Cake HDOJ-6681 最终的答案为射线的交点数加一.当然,我们也可以证明.证明需要用到欧拉公式 V−E+F=2 V-E+F=2V−E+F=2 .设射线的交点共 c cc ...

  5. AI数学基础之:概率和上帝视角

    目录 简介 蒙题霍尔问题 上帝视角解决概率问题 上帝视角的好处 简介 天要下雨,娘要嫁人.虽然我们不能控制未来的走向,但是可以一定程度上预测为来事情发生的可能性.而这种可能性就叫做概率.什么是概率呢? ...

  6. 简单的webRTC连接测试

    webRTC WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-P ...

  7. Linux安全模型中的3A

    3A Authentication : 认证 验证用户身份 Authorization : 授权 不同用户设置不同权限 Accouting | Audition : 审计 Linux 验证用户身份 U ...

  8. Python中OS对目录的操作以及引用

    路径的获取 对当前目录的获取 1 path = os.getcwd() 2 print("获取到的当前目录是:({})".format(path)) 获取当前文件所在的绝对路径 i ...

  9. python3中post和get请求处理

    post 请求处理 def url(): url = "www.xxx.com.cn" data = { "csrfmiddlewaretoken":" ...

  10. python基础(9)增强型赋值与使用普通赋值的区别

    前言 增强型赋值语句是经常被使用到的,因为从各种学习渠道中,我们能够得知i += 1的效率往往要比 i = i + 1 更高一些(这里以 += 为例,实际上增强型赋值语句不仅限于此).所以我们会乐此不 ...