在學習 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 關於此的實現相關資料如下:
休眠流程
休眠具體流程是?
休眠時,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