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