---
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