---
# System prepended metadata

title: Ultra Low Power Tiny BLE
tags: [Project]

---

---
tags: Project
---

# Ultra Low Power Tiny BLE
[google drive](https://drive.google.com/drive/folders/14sxraDj1q6-XVCOqSq7LTlqTm9TgpbW2?usp=sharing)

### 2020/12/26
- 要問的問題
  - `main.c` 傳送的code?
  - `ble_app_template_ADC_TEST(High_SEND_TEST)` 0dB可以傳送不會斷線，-40dB無法連線
  - GAP, GATT

### 2020/12/02
- **目標**
  - (優先)BLE data擴增(BLE data through put extra)
  - BLE傳送，CPU永遠不用起床
- **TODO**
    - [name=琨霖] Code review, datasheet reading
    - [name=中倫] BLE Spec study
- 要問的問題
  - ADC的sample rate是不是不等於資料取得的速度? DMA還要再等一下下之類的
    對，比如說ADC sample rate是100ksps，但ADC轉換完成後要讓DMA去搬移，雖然CPU不用做，但還是會耗時間。
  - 為什麼學長說EasyDMA不是真的DMA
    - 論壇說的(架構不一樣, datasheet p.27, 一般的DMA不會有AHB Multilayer)
    - 需要另外開timer
    - 但還是不會占用CPU時間(current no rising)
  - 燒錄完後，手機連上、傳送資料的操作方式
    1. 手機下載App: [nRF Connect](https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp&hl=zh_TW&gl=US)
    2. 打開手機藍芽、地點，打開App
    3. 按右上角*SCAN*，找到*LPS_EMG_1*，這個名字定義在`main.c`的`DEVICE_NAME`
       如果附近藍芽裝置太多，搜尋的時候可以套用*filter*
    4. 按下*CONNECT*，等待5~20s連接
    5. 頁面由左向右滑可以看到log，左下角選*VERBOSE*
    6. 打開接收通道: 
       > *CLIENT*\==>*Nordic UART Service*==>*Unknown Charteristic*(三個下載箭頭)
    7. 傳送自訂開啟data dumping指令:
       > *CLIENT*\==>*Nordic UART Service*==>*Unknown Charteristic*(一個上傳箭頭)
       > ==>輸入*01*\==>*SEND*
    8. 應該可以在log看到連續傳送的資料，資料也是連續的(*00-01-02-03-04...*)
       *我手機測試:功率0db，手機接收資料的幾秒後就會斷開(Error: (0x8) GATT CONN TIMEOUT)*
  - main.c 原本的程式(example, unmodified): [BLE.zip\\](https://drive.google.com/file/d/1csFDolGvK4FANgZPWXJm-oDwxYRvJQfE/view?usp=sharing)`BLE\nRF52_SDK16_POWER703_V20201001_001\nRF5SDK160098a08e2\examples\ble_peripheral\ble_app_template\main.c`
  - BLE傳輸間隔最小7.5ms, 每次最大傳輸量(custum 251bytes + parity 4bytes)
  - 斷線原因
    - 可能是手機端等不到device端訊息，timeout，手機切斷connnection
    - 功率太小(更改功率API:`sd_ble_gap_tx_power_set()`)
    - 每隻手機BLE詳細spec不一樣(MTU, ect)
  - 切割資料: 不能自己切，不然要等7.5ms，而且是軟體做這件事情，CPU會很耗電(學長已經試過，資料傳送很穩但是很耗電)
- Keyword 科普
  - Advertising interval: 廣播區間(20ms~10s), 越短越耗電但容易連上該BLE
  - EZDMA: 參考[nRF52832 Datasheet](https://infocenter.nordicsemi.com/pdf/nRF52832_PS_v1.4.pdf), page 27.
- 16kword(32kbyte) / 4second
- 3cm*1.5cm
- [露天賣家](https://www.ruten.com.tw/user/index00.php?s=icstock): 比mouser快，有時候還比較便宜
- 拿了一片綠色小板子: BLEIoT42V([電路圖](https://www.ruten.com.tw/user/index00.php?s=icstock))
- 現有的專案: `nRF5SDK160098a08e2\examples\ble_peripheral`
  - `ble_app_template_ADC_TEST(NO_LOG)`: No log. (Others have log but only available on nordic nrf52832 dk)
  - `ble_app_template_ADC_TEST(UART ROW DATA)`
  - `ble_app_template_ADC_TEST(UART ROW DATA2)`: up to date
  - `ble_app_template_ADC_TEST(UART ROW DATA2) - 複製`: up to date
  - `ble_app_template_ADC_TEST(UART)`
  - `ble_app_template_ADC_TEST(UART)(Q15)`: fft 16bit, failed, no need
  - Project file: `\path_to_project\pca10040\s132\ses\xxxx.emProject`: fft 16bit, failed, no need
  - Modified from exmaple:
    - `\path_to_project\main.c`
    - `\path_to_project\pca10040\s132\config\sdk_config.h`
    - others remain untouched
- 學長提的3個方案
  1. **繼續沿用nRF52832**
      [nRF52832 Datasheet](https://infocenter.nordicsemi.com/pdf/nRF52832_PS_v1.4.pdf)
      優點: 目前看到最小的有SoC模組，12Bits ADC
      缺點: TX在 ==(-40dBm 2.7mA)== (-20dBm 3.2mA) (0dBm 5.4mA), datasheet page 230
  2. **改用DA14531**
      [DA14531 Datasheet](https://www.dialog-semiconductor.com/sites/default/files/da14531_datasheet_3v1.pdf)
      優點: TX在 ==(-40dBm 1.3mA)== (-20dBm 1.8mA) (0dBm 4mA)
      缺點: ADC為10bits，但看起來可用到11bits，體積比nRF52832大一倍
  3. **HJ-131IMH(4mm*4mm)+STM32L011**
      [STM32L011](https://www.st.com/resource/en/datasheet/stm32l011d4.pdf)
      [HJ-131IMH ref](https://drive.google.com/drive/folders/1NSljP5CbNs_EiwDD2JHuncpE5O-38XJK?usp=sharing)
      優點: 體積比nRF52832還小1倍
      缺點: TX ==(Typical 3.5mA)==。內建天線5~10m。只能下AT Command，所以配合STM32L011(Run mode, 8MHz, 1.1mA)做ADC。
      |                      | nRF52832             | DA14531     | HJ-131IMH                |
      | -------------------- | -------------------- | ----------- | ------------------------ |
      | TX, -40dBm           | 2.7mA                | 1.3mA       | 3.5mA(Typical)           |
      | extra                | N/A                  | N/A         | STM32L011, 8MHz, 1.1mA   |
      | Antenna              | Built-in             | No          | Built-in                 |
      | ADC                  | 1ch, 12bits          | 4ch, 10bits | 10ch, 12bits (STM32L011) |
      | ADC Sample Rate(sps) | 200k                 | 100k~1M     | STM32:10k~1.14M          |
      | Type                 | SoC                  | SoC         | STM32 <---> AT-Cmd       |
      | Mem(kb)<br>ROM / RAM | 512 / 64<br>256 / 32 | 144 / 48    | STM32: 16 / 2            |
- Tranciever Parameters
    - **MTU**: Maximum Transmission Unit
        - Our case: 185 Bytes (This number is diffrent on Android phones)
    - **dBm**=10*log(pf/1mw)
    - Sensitivity: around -100dBm, representing how small of a signal the tranciever can recieve
        - Our case: -80~90dBm
    - TX: usually around 10dBm, the power it can emit