免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

基于NRF Connect SDK開(kāi)發(fā)XIAO nRF54LM20A Sense:從環(huán)境搭建到低功耗藍(lán)牙傳感器應(yīng)用

基于NRF Connect SDK開(kāi)發(fā)XIAO nRF54LM20A Sense:從環(huán)境搭建到低功耗藍(lán)牙傳感器應(yīng)用 1. 項(xiàng)目概述為什么選擇 XIAO nRF54LM20A Sense如果你最近在關(guān)注嵌入式開(kāi)發(fā)特別是低功耗藍(lán)牙和傳感器融合應(yīng)用那么“XIAO nRF54LM20A Sense”這個(gè)名字一定不會(huì)陌生。它不再是那個(gè)簡(jiǎn)單的、需要自己焊接傳感器的原型板而是直接集成了高精度六軸IMULSM6DSV16X和麥克風(fēng)MP34DT06JTR的“Sense”版本。這意味著拿到手你就能立刻開(kāi)始做姿態(tài)識(shí)別、語(yǔ)音喚醒、運(yùn)動(dòng)追蹤這些項(xiàng)目省去了大量外圍電路設(shè)計(jì)和調(diào)試的麻煩。但硬件只是基礎(chǔ)真正讓它“活”起來(lái)的是軟件。這就是NRF Connect SDKNCS登場(chǎng)的時(shí)候。NCS是Nordic Semiconductor官方推出的、基于Zephyr RTOS的軟件開(kāi)發(fā)套件。它不是一個(gè)簡(jiǎn)單的庫(kù)而是一個(gè)完整的、面向現(xiàn)代物聯(lián)網(wǎng)設(shè)備開(kāi)發(fā)的生態(tài)系統(tǒng)。選擇NCS來(lái)開(kāi)發(fā)XIAO nRF54LM20A Sense意味著你直接站在了Nordic官方支持的肩膀上能夠獲得最穩(wěn)定、最持續(xù)更新的藍(lán)牙協(xié)議棧、電源管理、外設(shè)驅(qū)動(dòng)和豐富的中間件如傳感器框架、DFU空中升級(jí)。對(duì)于“Sense”版來(lái)說(shuō)NCS內(nèi)置的傳感器驅(qū)動(dòng)和算法庫(kù)如Sensor API能讓你用幾行代碼就讀到經(jīng)過(guò)校準(zhǔn)和濾波的傳感器數(shù)據(jù)而不是去啃寄存器手冊(cè)。所以這個(gè)項(xiàng)目的核心就是利用NCS這套強(qiáng)大的工具鏈去充分釋放XIAO nRF54LM20A Sense這塊硬件的潛力。無(wú)論你是想做一個(gè)通過(guò)手勢(shì)控制智能家居的遙控器還是一個(gè)記錄運(yùn)動(dòng)數(shù)據(jù)的可穿戴設(shè)備或者是進(jìn)行一些AI Agent在邊緣端的初步探索比如用板載麥克風(fēng)做關(guān)鍵詞識(shí)別這個(gè)組合都能提供一個(gè)非常扎實(shí)的起點(diǎn)。它適合有一定嵌入式基礎(chǔ)想從傳統(tǒng)裸機(jī)或簡(jiǎn)單RTOS轉(zhuǎn)向更復(fù)雜、更現(xiàn)代的物聯(lián)網(wǎng)開(kāi)發(fā)框架的開(kāi)發(fā)者也適合那些想快速驗(yàn)證傳感器應(yīng)用創(chuàng)意的Maker。2. 開(kāi)發(fā)環(huán)境搭建與項(xiàng)目初始化上手的第一步就是把“廚房”準(zhǔn)備好。NCS的開(kāi)發(fā)環(huán)境搭建是很多新手遇到的第一個(gè)門(mén)檻。它不像Arduino那樣點(diǎn)幾下鼠標(biāo)就能完成但一旦配置好其效率和規(guī)范性是無(wú)可比擬的。2.1 工具鏈安裝告別手動(dòng)配置的煩惱早期搭建NCS環(huán)境需要手動(dòng)安裝ARM GCC、CMake、Python依賴等一堆工具版本沖突是家常便飯。現(xiàn)在Nordic官方強(qiáng)烈推薦使用nRF Connect for Desktop中的Toolchain Manager。這是一個(gè)一站式的管理工具它會(huì)自動(dòng)為你下載并管理指定版本的NCS、對(duì)應(yīng)的編譯器、Python環(huán)境以及所有必要的依賴并將它們封裝在一個(gè)獨(dú)立的“工具鏈目錄”中。這徹底解決了環(huán)境污染和版本管理的問(wèn)題。具體操作是先去Nordic官網(wǎng)下載并安裝nRF Connect for Desktop。打開(kāi)后在“Toolchain Manager”里你可以看到各個(gè)版本的NCS。對(duì)于XIAO nRF54LM20A基于nRF54L15建議選擇最新的長(zhǎng)期支持LTS版本比如當(dāng)前的v2.6.x LTS它在穩(wěn)定性和對(duì)nRF54系列的支持上是最佳的。點(diǎn)擊安裝剩下的就交給工具。安裝完成后Toolchain Manager會(huì)提供一個(gè)命令行窗口的快捷入口這個(gè)窗口已經(jīng)配置好了所有環(huán)境變量。注意務(wù)必使用Toolchain Manager提供的命令行窗口進(jìn)行后續(xù)所有操作。如果你習(xí)慣用VS Code可以在這個(gè)命令行里啟動(dòng)code .這樣VS Code繼承的環(huán)境也是正確的。自己系統(tǒng)里的終端很可能會(huì)因?yàn)檎也坏秸_的工具鏈而編譯失敗。2.2 獲取SDK與創(chuàng)建項(xiàng)目環(huán)境準(zhǔn)備好后我們需要獲取NCS的源代碼并創(chuàng)建一個(gè)針對(duì)XIAO板子的項(xiàng)目。NCS使用WestZephyr的多倉(cāng)庫(kù)管理工具來(lái)管理其由數(shù)十個(gè)Git倉(cāng)庫(kù)組成的代碼樹(shù)。首先在你喜歡的工作目錄下打開(kāi)Toolchain Manager的命令行使用West命令初始化并獲取SDKwest init -m https://github.com/nrfconnect/sdk-nrf --mr main-v2.6 ncs-workspace cd ncs-workspace west update這條命令會(huì)創(chuàng)建一個(gè)名為ncs-workspace的目錄并將NCS v2.6分支的代碼克隆到其中。west update會(huì)同步所有子模塊。接下來(lái)我們基于一個(gè)示例項(xiàng)目來(lái)創(chuàng)建自己的應(yīng)用。NCS提供了海量的示例nrf/samples。對(duì)于XIAO nRF54LM20A Sense一個(gè)很好的起點(diǎn)是blinky點(diǎn)燈和sensor傳感器示例的結(jié)合。但更規(guī)范的做法是使用Zephyr的模板。我們可以直接復(fù)制一個(gè)接近的示例并修改。例如復(fù)制一個(gè)簡(jiǎn)單的藍(lán)牙外設(shè)示例并為其添加傳感器支持cp -r nrf/samples/bluetooth/peripheral_uart my_xiao_sense_project cd my_xiao_sense_project現(xiàn)在你需要修改項(xiàng)目最關(guān)鍵的兩個(gè)文件prj.conf和CMakeLists.txt以及板級(jí)定義。2.3 板級(jí)配置與設(shè)備樹(shù)DTS適配XIAO nRF54LM20A Sense使用的是Seeed Studio的板子其核心是nRF54L15芯片。NCS原生支持nRF54L15芯片但不一定直接支持“XIAO nRF54LM20A Sense”這個(gè)具體的板型。我們需要進(jìn)行板級(jí)配置。1. 創(chuàng)建或指定板級(jí)定義在NCS中板級(jí)定義位于zephyr/boards/arm目錄下。如果Seeed提供了官方的板級(jí)支持包BSP那最好不過(guò)。如果沒(méi)有我們可以基于最接近的板子進(jìn)行修改通常是Nordic的nRF54L15開(kāi)發(fā)板nrf54l15dk_nrf54l15。一個(gè)更簡(jiǎn)單實(shí)用的方法是在項(xiàng)目目錄下創(chuàng)建一個(gè)boards文件夾然后放置一個(gè)自定義的板級(jí)定義。但更常見(jiàn)的做法是直接在你的應(yīng)用CMakeLists.txt中指定芯片型號(hào)并通過(guò)設(shè)備樹(shù)Device Tree覆蓋文件來(lái)配置板載外設(shè)。2. 使用設(shè)備樹(shù)覆蓋文件設(shè)備樹(shù)是Zephyr描述硬件的神器。我們創(chuàng)建一個(gè)boards目錄在里面為XIAO板子創(chuàng)建一個(gè)設(shè)備樹(shù)覆蓋文件例如seeed_xiao_nrf54lm20a_sense.overlay// boards/seeed_xiao_nrf54lm20a_sense.overlay / { aliases { led0 blue_led; sw0 user_button; }; leds { compatible gpio-leds; blue_led: led_0 { gpios gpio1 12 GPIO_ACTIVE_LOW; // 假設(shè)藍(lán)色LED在P1.12低電平點(diǎn)亮 label Blue LED; }; }; buttons { compatible gpio-keys; user_button: button_0 { gpios gpio0 29 (GPIO_PULL_UP | GPIO_ACTIVE_LOW); // 假設(shè)按鈕在P0.29上拉低有效 label User Button; zephyr,code INPUT_KEY_0; }; }; // 配置I2C1接口用于連接IMU和麥克風(fēng)假設(shè)它們共用I2C i2c1 { compatible nordic,nrf-twim; status okay; pinctrl-0 i2c1_default; pinctrl-1 i2c1_sleep; pinctrl-names default, sleep; clock-frequency I2C_BITRATE_FAST; // LSM6DSV16X 六軸IMU lsm6dsv16x: lsm6dsv16x6a { compatible st,lsm6dsv16x; reg 0x6a; label LSM6DSV16X; // 可以配置中斷引腳等 // drdy-gpios gpio0 30 GPIO_ACTIVE_HIGH; }; // MP34DT06JTR 麥克風(fēng)數(shù)字麥克風(fēng)通常走I2S或PDM此處僅為示例實(shí)際需查手冊(cè) // 注意數(shù)字麥克風(fēng)通常不走I2C這里需要根據(jù)實(shí)際硬件連接調(diào)整。 // 如果麥克風(fēng)是I2S接口則需要配置i2s節(jié)點(diǎn)。 }; }; // 配置引腳控制pinctrl pinctrl { i2c1_default: i2c1_default { group1 { psels NRF_PSEL(TWIM_SDA, 1, 02), // P1.02 作為 SDA NRF_PSEL(TWIM_SCL, 1, 03); // P1.03 作為 SCL }; }; i2c1_sleep: i2c1_sleep { group1 { psels NRF_PSEL(TWIM_SDA, 1, 02), NRF_PSEL(TWIM_SCL, 1, 03); low-power-enable; }; }; };這個(gè)覆蓋文件做了幾件事定義了LED和按鈕的GPIO引腳你需要根據(jù)XIAO的實(shí)際原理圖修改引腳號(hào)、啟用了I2C1外設(shè)并配置了引腳、在I2C總線上添加了IMU傳感器節(jié)點(diǎn)。麥克風(fēng)的配置需要根據(jù)其實(shí)際接口I2S/PDM來(lái)這里只是一個(gè)占位。3. 在CMake中指定板型和覆蓋文件在你的項(xiàng)目CMakeLists.txt中你需要告訴構(gòu)建系統(tǒng)使用哪個(gè)板子和覆蓋文件。# CMakeLists.txt cmake_minimum_required(VERSION 3.20.0) find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) project(my_xiao_sense_project) # 指定目標(biāo)板為nRF54L15的芯片并應(yīng)用我們的覆蓋文件 set(BOARD nrf54l15dk_nrf54l15) # 先使用DK的板定義作為基礎(chǔ) set(DTC_OVERLAY_FILE ${CMAKE_CURRENT_SOURCE_DIR}/boards/seeed_xiao_nrf54lm20a_sense.overlay) target_sources(app PRIVATE src/main.c)這樣編譯時(shí)就會(huì)使用nRF54L15芯片的通用配置并用我們的覆蓋文件“打補(bǔ)丁”適配XIAO Sense的具體硬件。3. 核心功能實(shí)現(xiàn)從點(diǎn)燈到讀取傳感器數(shù)據(jù)環(huán)境搭好項(xiàng)目架子立起來(lái)接下來(lái)就是實(shí)現(xiàn)具體功能。我們從最簡(jiǎn)單的開(kāi)始逐步深入到傳感器數(shù)據(jù)讀取。3.1 GPIO控制讓LED閃爍起來(lái)雖然簡(jiǎn)單但點(diǎn)燈是驗(yàn)證編譯、燒錄流程是否暢通的最佳方式。在Zephyr中操作GPIO有標(biāo)準(zhǔn)的設(shè)備模型API。首先在prj.conf中確保GPIO驅(qū)動(dòng)被啟用# prj.conf CONFIG_GPIOy然后在src/main.c中編寫(xiě)代碼#include zephyr/kernel.h #include zephyr/drivers/gpio.h // 從設(shè)備樹(shù)中獲取LED0的設(shè)備指針 #define LED0_NODE DT_ALIAS(led0) static const struct gpio_dt_spec led GPIO_DT_SPEC_GET(LED0_NODE, gpios); void main(void) { int ret; // 檢查設(shè)備是否就緒 if (!device_is_ready(led.port)) { printk(Error: LED device is not ready\n); return; } // 配置LED引腳為輸出模式初始為關(guān)閉狀態(tài)假設(shè)低電平點(diǎn)亮 ret gpio_pin_configure_dt(led, GPIO_OUTPUT_INACTIVE); if (ret 0) { printk(Error configuring LED pin: %d\n, ret); return; } printk(Blinky example started on XIAO nRF54LM20A Sense\n); while (1) { // 翻轉(zhuǎn)LED狀態(tài) ret gpio_pin_toggle_dt(led); if (ret 0) { printk(Error toggling LED: %d\n, ret); return; } // 延時(shí)500毫秒 k_msleep(500); } }這段代碼的關(guān)鍵在于GPIO_DT_SPEC_GET宏它從我們之前在設(shè)備樹(shù)覆蓋文件中定義的led0別名獲取到了具體的引腳配置比如P1.12。這就是設(shè)備樹(shù)的威力——硬件配置與代碼分離。修改硬件引腳時(shí)只需改.overlay文件無(wú)需碰C代碼。編譯和燒錄# 在項(xiàng)目目錄下 west build -b nrf54l15dk_nrf54l15 west flashwest flash命令會(huì)自動(dòng)調(diào)用nrfjprog或pyocd等工具將固件燒錄到板子。如果看到藍(lán)色LED開(kāi)始規(guī)律閃爍恭喜你第一步成功了。3.2 傳感器數(shù)據(jù)讀取與IMU對(duì)話XIAO Sense的核心是傳感器。我們以LSM6DSV16X IMU為例展示如何通過(guò)NCS的傳感器子系統(tǒng)讀取數(shù)據(jù)。首先需要在prj.conf中啟用傳感器驅(qū)動(dòng)和必要的子系統(tǒng)# prj.conf CONFIG_I2Cy CONFIG_SENSORy CONFIG_LSM6DSV16Xy # 啟用特定驅(qū)動(dòng) CONFIG_LSM6DSV16X_TRIGGER_NONEy # 先不使用中斷觸發(fā)模式然后修改main.c#include zephyr/kernel.h #include zephyr/drivers/sensor.h #include stdio.h // 從設(shè)備樹(shù)中獲取IMU傳感器設(shè)備指針 #define LSM6DSV16X_NODE DT_ALIAS(lsm6dsv16x) static const struct device *imu_dev DEVICE_DT_GET(LSM6DSV16X_NODE); void main(void) { struct sensor_value accel[3], gyro[3], temp; // 檢查傳感器設(shè)備是否就緒 if (!device_is_ready(imu_dev)) { printk(Error: IMU device is not ready\n); return; } printk(LSM6DSV16X IMU ready on XIAO Sense\n); while (1) { // 1. 獲取加速度計(jì)數(shù)據(jù) if (sensor_sample_fetch_chan(imu_dev, SENSOR_CHAN_ACCEL_XYZ) 0) { sensor_channel_get(imu_dev, SENSOR_CHAN_ACCEL_X, accel[0]); sensor_channel_get(imu_dev, SENSOR_CHAN_ACCEL_Y, accel[1]); sensor_channel_get(imu_dev, SENSOR_CHAN_ACCEL_Z, accel[2]); printf(Accel: X%.2f m/s^2, Y%.2f m/s^2, Z%.2f m/s^2\n, sensor_value_to_double(accel[0]), sensor_value_to_double(accel[1]), sensor_value_to_double(accel[2])); } // 2. 獲取陀螺儀數(shù)據(jù) if (sensor_sample_fetch_chan(imu_dev, SENSOR_CHAN_GYRO_XYZ) 0) { sensor_channel_get(imu_dev, SENSOR_CHAN_GYRO_X, gyro[0]); sensor_channel_get(imu_dev, SENSOR_CHAN_GYRO_Y, gyro[1]); sensor_channel_get(imu_dev, SENSOR_CHAN_GYRO_Z, gyro[2]); printf(Gyro: X%.2f dps, Y%.2f dps, Z%.2f dps\n, sensor_value_to_double(gyro[0]), sensor_value_to_double(gyro[1]), sensor_value_to_double(gyro[2])); } // 3. 獲取溫度數(shù)據(jù) if (sensor_sample_fetch_chan(imu_dev, SENSOR_CHAN_DIE_TEMP) 0) { sensor_channel_get(imu_dev, SENSOR_CHAN_DIE_TEMP, temp); printf(Temperature: %.2f C\n, sensor_value_to_double(temp)); } printf(---\n); k_msleep(100); // 100ms采樣間隔 } }Zephyr的傳感器API設(shè)計(jì)得非常統(tǒng)一。無(wú)論是什么型號(hào)的傳感器只要驅(qū)動(dòng)實(shí)現(xiàn)了標(biāo)準(zhǔn)的sensor_driver_api你都可以用sensor_sample_fetch和sensor_channel_get這兩個(gè)核心函數(shù)來(lái)獲取數(shù)據(jù)。sensor_value結(jié)構(gòu)體能智能地處理整數(shù)和小數(shù)值的轉(zhuǎn)換sensor_value_to_double則方便我們打印。實(shí)操心得在讀取數(shù)據(jù)前務(wù)必檢查device_is_ready。傳感器上電后可能需要幾毫秒的初始化時(shí)間如果立即讀取可能會(huì)失敗。另外sensor_sample_fetch是實(shí)際發(fā)起I2C讀取操作的函數(shù)比較耗時(shí)。在低功耗應(yīng)用中應(yīng)避免在循環(huán)中頻繁調(diào)用而應(yīng)使用傳感器的觸發(fā)模式如利用其內(nèi)置的FIFO或配置DRDY中斷引腳在數(shù)據(jù)就緒時(shí)才去讀取。3.3 藍(lán)牙連接與數(shù)據(jù)廣播作為一款nRF54系列芯片藍(lán)牙低功耗是其看家本領(lǐng)。我們實(shí)現(xiàn)一個(gè)簡(jiǎn)單的藍(lán)牙外設(shè)廣播設(shè)備名稱并提供一個(gè)包含傳感器數(shù)據(jù)的自定義服務(wù)。首先在prj.conf中配置藍(lán)牙# prj.conf CONFIG_BTy CONFIG_BT_PERIPHERALy CONFIG_BT_DEVICE_NAMEXIAO_Sense_Demo CONFIG_BT_DEVICE_APPEARANCE833 # 通用傳感器的外觀值 CONFIG_BT_SMPy CONFIG_BT_GATT_DYNAMIC_DBy然后我們創(chuàng)建一個(gè)自定義服務(wù)。在Zephyr中通常使用bt_gatt_service來(lái)靜態(tài)定義服務(wù)但更靈活的方式是使用BT_GATT_SERVICE_DEFINE宏。我們?cè)趍ain.c中添加以下代碼#include zephyr/bluetooth/bluetooth.h #include zephyr/bluetooth/uuid.h #include zephyr/bluetooth/gatt.h #include zephyr/bluetooth/services/bas.h // 電池服務(wù)可選 // 自定義傳感器服務(wù)UUID可以隨機(jī)生成但確保唯一性 #define BT_UUID_SENSOR_SERVICE_VAL \ BT_UUID_128_ENCODE(0x12345678, 0x1234, 0x1234, 0x1234, 0x123456789abc) static struct bt_uuid_128 sensor_service_uuid BT_UUID_INIT_128(BT_UUID_SENSOR_SERVICE_VAL); // 定義特征加速度計(jì)數(shù)據(jù) #define BT_UUID_ACCEL_CHAR_VAL \ BT_UUID_128_ENCODE(0x23456789, 0x2345, 0x2345, 0x2345, 0x23456789abcd) static struct bt_uuid_128 accel_char_uuid BT_UUID_INIT_128(BT_UUID_ACCEL_CHAR_VAL); static uint8_t accel_data[12]; // 3個(gè)float每個(gè)4字節(jié) static float accel_x, accel_y, accel_z; // 讀取加速度計(jì)特征的回調(diào)函數(shù) static ssize_t read_accel(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset) { // 在實(shí)際應(yīng)用中這里應(yīng)該去獲取最新的傳感器數(shù)據(jù) // 我們這里用一個(gè)靜態(tài)變量示例 memcpy(accel_data, accel_x, 4); memcpy(accel_data4, accel_y, 4); memcpy(accel_data8, accel_z, 4); return bt_gatt_attr_read(conn, attr, buf, len, offset, accel_data, sizeof(accel_data)); } // 定義GATT服務(wù)、特征和屬性 BT_GATT_SERVICE_DEFINE(sensor_svc, BT_GATT_PRIMARY_SERVICE(sensor_service_uuid), BT_GATT_CHARACTERISTIC(accel_char_uuid.uuid, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_accel, NULL, NULL), ); // 藍(lán)牙連接回調(diào) static void connected(struct bt_conn *conn, uint8_t err) { if (err) { printk(Connection failed (err %u)\n, err); } else { printk(Connected\n); } } static void disconnected(struct bt_conn *conn, uint8_t reason) { printk(Disconnected (reason %u)\n, reason); } BT_CONN_CB_DEFINE(conn_callbacks) { .connected connected, .disconnected disconnected, }; void main(void) { int err; // 初始化藍(lán)牙 err bt_enable(NULL); if (err) { printk(Bluetooth init failed (err %d)\n, err); return; } printk(Bluetooth initialized\n); // 開(kāi)始廣播 err bt_le_adv_start(BT_LE_ADV_CONN_NAME, NULL, 0, NULL, 0); if (err) { printk(Advertising failed to start (err %d)\n, err); return; } printk(Advertising successfully started\n); // 主循環(huán)更新傳感器數(shù)據(jù)此處簡(jiǎn)化實(shí)際應(yīng)從傳感器讀取 while (1) { // 模擬更新傳感器數(shù)據(jù) // accel_x, accel_y, accel_z ... (從IMU讀取) k_msleep(1000); } }這段代碼做了幾件事定義了自定義的128位UUID服務(wù)和特征。實(shí)現(xiàn)了特征的讀回調(diào)read_accel當(dāng)中心設(shè)備如手機(jī)讀取該特征時(shí)會(huì)觸發(fā)這個(gè)函數(shù)返回最新的加速度數(shù)據(jù)。定義了連接事件回調(diào)。在main函數(shù)中初始化藍(lán)牙并開(kāi)始可連接廣播。編譯燒錄后用手機(jī)上的藍(lán)牙調(diào)試App如nRF Connect就能搜索到名為“XIAO_Sense_Demo”的設(shè)備連接后可以看到我們自定義的服務(wù)和特征并讀取加速度數(shù)據(jù)。注意事項(xiàng)藍(lán)牙協(xié)議棧和傳感器驅(qū)動(dòng)可能會(huì)競(jìng)爭(zhēng)I2C總線或產(chǎn)生中斷沖突。在復(fù)雜的應(yīng)用中建議使用Zephyr的線程k_thread來(lái)分離不同任務(wù)并使用信號(hào)量k_sem或消息隊(duì)列k_msgq進(jìn)行線程間通信。例如創(chuàng)建一個(gè)高優(yōu)先級(jí)的線程專門(mén)以固定頻率讀取傳感器數(shù)據(jù)并更新全局變量藍(lán)牙線程在收到讀請(qǐng)求時(shí)直接讀取這些全局變量避免在GATT回調(diào)中進(jìn)行可能阻塞的I2C操作。4. 電源管理與低功耗優(yōu)化對(duì)于電池供電的“Sense”設(shè)備功耗是生命線。nRF54L15和NCS提供了強(qiáng)大的電源管理工具但需要正確配置才能發(fā)揮其優(yōu)勢(shì)。4.1 系統(tǒng)功耗模式配置在prj.conf中我們可以進(jìn)行基礎(chǔ)的功耗配置# prj.conf CONFIG_PMy # 啟用電源管理 CONFIG_PM_DEVICEy # 啟用設(shè)備級(jí)電源管理 CONFIG_SENSORy CONFIG_SENSOR_INFOy # 對(duì)于不需要一直工作的傳感器可以配置為按需上電 CONFIG_LSM6DSV16X_POWER_MODE1 # 假設(shè)1代表低功耗模式需查驅(qū)動(dòng)源碼更關(guān)鍵的是應(yīng)用邏輯的設(shè)計(jì)。我們的主循環(huán)在無(wú)事可做時(shí)應(yīng)該讓系統(tǒng)進(jìn)入低功耗狀態(tài)。void main(void) { // ... 初始化藍(lán)牙、傳感器等 ... // 配置一個(gè)周期性定時(shí)器用于喚醒系統(tǒng)并采樣 static struct k_timer sensor_timer; k_timer_init(sensor_timer, NULL, NULL); k_timer_start(sensor_timer, K_SECONDS(10), K_SECONDS(10)); // 每10秒采樣一次 while (1) { // 1. 進(jìn)入系統(tǒng)空閑狀態(tài)等待被中斷喚醒定時(shí)器、藍(lán)牙事件、按鈕等 k_sleep(K_FOREVER); // 2. 被喚醒后檢查喚醒源 if (k_timer_status_get(sensor_timer) 0) { // 定時(shí)器喚醒執(zhí)行傳感器采樣 read_sensor_data(); // 處理數(shù)據(jù)例如判斷是否超過(guò)閾值決定是否通過(guò)藍(lán)牙上報(bào) process_data_and_notify(); // 重置定時(shí)器狀態(tài) k_timer_status_sync(sensor_timer); } // 可以添加其他喚醒源的處理如藍(lán)牙連接事件 } }這里使用了k_sleep(K_FOREVER)讓主線程掛起系統(tǒng)在沒(méi)有任務(wù)時(shí)會(huì)自動(dòng)進(jìn)入最深的、允許的空閑狀態(tài)如System On Sleep。定時(shí)器到期會(huì)產(chǎn)生中斷將系統(tǒng)喚醒執(zhí)行完采樣任務(wù)后又繼續(xù)睡眠。4.2 外設(shè)電源動(dòng)態(tài)管理NCS的設(shè)備模型支持運(yùn)行時(shí)電源管理。對(duì)于傳感器這類(lèi)外設(shè)我們可以在不需要時(shí)將其掛起suspend。// 假設(shè) imu_dev 是之前獲取的傳感器設(shè)備指針 int ret; // 在進(jìn)入長(zhǎng)時(shí)間睡眠前掛起傳感器 ret pm_device_action_run(imu_dev, PM_DEVICE_ACTION_SUSPEND); if (ret 0 ret ! -ENOSYS) { // ENOSYS表示設(shè)備不支持此操作 printk(Failed to suspend IMU: %d\n, ret); } // 在需要采樣前恢復(fù)傳感器 ret pm_device_action_run(imu_dev, PM_DEVICE_ACTION_RESUME); if (ret 0 ret ! -ENOSYS) { printk(Failed to resume IMU: %d\n, ret); } k_msleep(5); // 給傳感器一點(diǎn)啟動(dòng)穩(wěn)定時(shí)間 read_sensor_data();對(duì)于藍(lán)牙在廣播或連接間隔期間射頻部分會(huì)自動(dòng)進(jìn)入低功耗狀態(tài)。你可以通過(guò)調(diào)整廣播間隔和連接參數(shù)來(lái)平衡功耗和響應(yīng)速度。// 更省電的廣播參數(shù) static struct bt_le_adv_param *adv_param BT_LE_ADV_PARAM( (BT_LE_ADV_OPT_CONNECTABLE | BT_LE_ADV_OPT_USE_IDENTITY), 800, // 最小廣播間隔 800*0.625ms 500ms 1200, // 最大廣播間隔 1200*0.625ms 750ms NULL);避坑技巧測(cè)量功耗時(shí)不要只看代碼邏輯。一定要用電流表或Nordic的Power Profiler Kit IIPPK2進(jìn)行實(shí)際測(cè)量。有時(shí)一個(gè)忘記關(guān)閉的GPIO上拉、一個(gè)配置錯(cuò)誤的時(shí)鐘源都會(huì)導(dǎo)致功耗飆升。使用NCS的CONFIG_PM_DEVICE_RUNTIME_LOGy等調(diào)試選項(xiàng)可以在串口日志中看到設(shè)備的電源狀態(tài)切換幫助定位問(wèn)題。5. 調(diào)試、燒錄與問(wèn)題排查實(shí)錄開(kāi)發(fā)過(guò)程中遇到問(wèn)題是常態(tài)。一套高效的調(diào)試和問(wèn)題排查方法至關(guān)重要。5.1 串口日志與RTT輸出最基礎(chǔ)的調(diào)試手段是串口日志。在prj.conf中啟用并配置日志CONFIG_LOGy CONFIG_LOG_MODE_IMMEDIATEy # 立即模式不緩沖方便調(diào)試崩潰問(wèn)題 CONFIG_LOG_BACKEND_UARTy CONFIG_LOG_BUFFER_SIZE2048 CONFIG_PRINTKy CONFIG_CONSOLEy CONFIG_UART_CONSOLEy CONFIG_SERIALy連接X(jué)IAO的UART引腳通常是P0.28/TX, P0.29/RX到USB轉(zhuǎn)串口工具用終端軟件如PuTTY, screen, minicom打開(kāi)對(duì)應(yīng)端口波特率通常為115200即可看到printk和日志輸出。對(duì)于更實(shí)時(shí)、不影響系統(tǒng)時(shí)序的調(diào)試Segger RTTReal Time Transfer是更好的選擇。它通過(guò)J-Link調(diào)試器直接在內(nèi)存中讀寫(xiě)日志沒(méi)有串口的速度限制和時(shí)序干擾。CONFIG_LOG_BACKEND_RTTy CONFIG_LOG_BACKEND_UARTn # 如果使用RTT可以關(guān)閉UART后端 CONFIG_RTT_CONSOLEy CONFIG_USE_SEGGER_RTTy使用J-Link連接X(jué)IAO的SWD接口然后在主機(jī)上使用J-Link RTT Viewer或pyocd rtt命令即可查看日志。5.2 使用調(diào)試器進(jìn)行單步調(diào)試當(dāng)代碼行為異?;虮罎r(shí)單步調(diào)試是終極武器。你需要一個(gè)支持CMSIS-DAP或J-Link的調(diào)試器如J-Link EDU或者XIAO板載的DAPLink。配置調(diào)試環(huán)境在VS Code中安裝Cortex-Debug擴(kuò)展。創(chuàng)建調(diào)試配置在項(xiàng)目.vscode/launch.json中添加配置。對(duì)于pyocd如果板載是DAPLink{ version: 0.2.0, configurations: [ { name: Cortex Debug (pyocd), cwd: ${workspaceFolder}, executable: ${command:cmake.launchTargetPath}, request: launch, type: cortex-debug, servertype: pyocd, serverpath: pyocd, device: nRF54L15, runToEntryPoint: main, svdFile: ${env:ZEPHYR_BASE}/../nrf/scripts/debug_svd/nrf54l15.svd } ] }編譯并調(diào)試確保項(xiàng)目已用west build編譯。在VS Code中設(shè)置斷點(diǎn)然后啟動(dòng)調(diào)試。你可以查看變量、寄存器、內(nèi)存一步步執(zhí)行代碼。5.3 常見(jiàn)問(wèn)題與解決方案速查表以下是我在開(kāi)發(fā)中遇到的一些典型問(wèn)題及解決方法問(wèn)題現(xiàn)象可能原因排查步驟與解決方案編譯失敗找不到板型/芯片1. 未正確設(shè)置BOARD變量。2. NCS版本不支持該芯片。3. 工具鏈環(huán)境變量錯(cuò)誤。1. 確認(rèn)west build -b board中的板型名稱正確可用west boards列出所有支持的板型。2. 檢查NCS版本說(shuō)明確認(rèn)支持nRF54L15。3. 確保在Toolchain Manager的命令行中操作。燒錄失敗無(wú)法連接設(shè)備1. 板子未進(jìn)入Bootloader模式如需。2. 調(diào)試器驅(qū)動(dòng)問(wèn)題。3. 端口被占用。1. 對(duì)于XIAO可能需要雙擊復(fù)位按鈕進(jìn)入U(xiǎn)F2 Bootloader模式再進(jìn)行燒錄。參考Seeed Wiki。2. 重新插拔USB或重啟IDE。檢查設(shè)備管理器是否有未知設(shè)備。3. 關(guān)閉可能占用串口或調(diào)試端口的其他軟件。程序運(yùn)行無(wú)輸出LED不亮1. 程序未運(yùn)行到主函數(shù)。2. 硬件連接錯(cuò)誤如LED引腳號(hào)錯(cuò)。3. 時(shí)鐘配置錯(cuò)誤。1. 使用調(diào)試器連接看PC指針是否停在main函數(shù)。檢查啟動(dòng)文件或.ld鏈接腳本。2. 用萬(wàn)用表測(cè)量LED引腳在程序運(yùn)行時(shí)的電平變化。核對(duì)原理圖與設(shè)備樹(shù)中的GPIO引腳號(hào)。3. 檢查prj.conf中是否有錯(cuò)誤的時(shí)鐘配置如CONFIG_CLOCK_CONTROL_NRF_K32SRC_*。傳感器讀取返回錯(cuò)誤或全零1. I2C總線通信失敗。2. 設(shè)備樹(shù)I2C引腳配置錯(cuò)誤。3. 傳感器供電或初始化失敗。4. 驅(qū)動(dòng)未正確啟用或版本不匹配。1. 用邏輯分析儀抓取I2C波形看是否有起始信號(hào)、地址ACK。2. 仔細(xì)核對(duì).overlay文件中psels的端口和引腳號(hào)與原理圖完全一致。3. 測(cè)量傳感器VDD電壓。在代碼中增加初始化后的延時(shí)。4. 確認(rèn)prj.conf中打開(kāi)了正確的驅(qū)動(dòng)如CONFIG_LSM6DSV16Xy并查看驅(qū)動(dòng)源碼的Kconfig選項(xiàng)。藍(lán)牙無(wú)法廣播或搜索不到1. 藍(lán)牙協(xié)議棧初始化失敗。2. 天線或射頻電路問(wèn)題。3. 廣播參數(shù)或名稱配置錯(cuò)誤。4. 其他無(wú)線電服務(wù)如Wi-Fi沖突雖本板無(wú)Wi-Fi。1. 檢查bt_enable()的返回值查看串口日志是否有藍(lán)牙相關(guān)的錯(cuò)誤。2. 檢查板載天線是否焊接良好對(duì)于外置天線。3. 確認(rèn)設(shè)備名稱CONFIG_BT_DEVICE_NAME不是NULL廣播參數(shù)合理。4. 確保沒(méi)有其他線程在長(zhǎng)時(shí)間關(guān)閉中斷或占用射頻資源。功耗過(guò)高1. 有外設(shè)未進(jìn)入低功耗模式。2. 日志輸出如UART持續(xù)工作。3. 主循環(huán)未調(diào)用k_sleep。4. 調(diào)試器未斷開(kāi)。1. 使用pm_device_action_run掛起不用的外設(shè)。檢查所有GPIO引腳狀態(tài)。2. 在最終產(chǎn)品固件中減少或關(guān)閉日志CONFIG_LOGn。3. 確保主線程在空閑時(shí)調(diào)用k_sleep、k_msleep或等待信號(hào)量。4. 燒錄后拔掉調(diào)試器單獨(dú)用電流表測(cè)量。系統(tǒng)隨機(jī)重啟看門(mén)狗觸發(fā)1. 主線程阻塞時(shí)間過(guò)長(zhǎng)。2. 中斷服務(wù)程序ISR執(zhí)行時(shí)間太長(zhǎng)。3. 棧溢出。1. 檢查是否有while(1)死循環(huán)或長(zhǎng)時(shí)間忙等待。將耗時(shí)操作移到工作隊(duì)列線程。2. ISR中只做標(biāo)記快進(jìn)快出。復(fù)雜處理放到線程中。3. 使用CONFIG_THREAD_ANALYZERy和CONFIG_STACK_SENTINELy來(lái)分析和監(jiān)控棧使用情況。5.4 固件升級(jí)DFU產(chǎn)品化離不開(kāi)固件升級(jí)。NCS支持多種DFU方式最常用的是通過(guò)藍(lán)牙的空中升級(jí)OTA DFU和通過(guò)串口的MCUboot。基于MCUboot和串口的DFU編譯引導(dǎo)程序BootloaderNCS提供了集成的MCUboot支持。你需要先編譯一個(gè)包含MCUboot的引導(dǎo)程序鏡像。west build -b nrf54l15dk_nrf54l15 -- -DCONF_FILEprj.conf path/to/mcuboot.conf west flash編譯應(yīng)用并生成可升級(jí)鏡像在應(yīng)用項(xiàng)目的prj.conf中啟用MCUboot支持CONFIG_BOOTLOADER_MCUBOOTy并使用west sign命令對(duì)編譯出的zephyr.bin進(jìn)行簽名生成zephyr.signed.bin。升級(jí)將signed.bin文件通過(guò)串口工具如nRF Connect for Desktop的Programmer燒錄到MCUboot規(guī)定的次級(jí)Slot中復(fù)位后MCUboot會(huì)驗(yàn)證并跳轉(zhuǎn)?;谒{(lán)牙的OTA DFU這更復(fù)雜需要集成Nordic的DFU服務(wù)CONFIG_BT_DFU_SMPy和相應(yīng)的手機(jī)App如nRF Connect或網(wǎng)關(guān)來(lái)發(fā)起升級(jí)。其流程是BootloaderMCUboot 包含DFU服務(wù)的應(yīng)用程序 新的應(yīng)用程序鏡像。手機(jī)App通過(guò)藍(lán)牙將新鏡像傳輸?shù)皆O(shè)備設(shè)備將其存入Flash的升級(jí)區(qū)然后重啟由MCUboot完成驗(yàn)證和覆蓋升級(jí)。我個(gè)人在開(kāi)發(fā)中的體會(huì)是在原型階段先用好日志和調(diào)試器快速定位問(wèn)題。進(jìn)入功耗優(yōu)化階段必須依賴實(shí)際的電流測(cè)量工具。而在規(guī)劃產(chǎn)品功能時(shí)一定要把DFU方案考慮進(jìn)去哪怕最初只是預(yù)留一個(gè)串口升級(jí)接口也能為后續(xù)迭代省去大量麻煩。對(duì)于XIAO nRF54LM20A Sense這樣資源相對(duì)豐富的板子在項(xiàng)目早期就啟用CONFIG_BOOTLOADER_MCUBOOT并規(guī)劃好Flash分區(qū)是一個(gè)非常好的習(xí)慣。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
精品人妻一区| 1024亚洲| 色噜噜婷婷| 操人妻AV| 人人草人| 欧美久久婷婷| 色婷婷丁香五月| 丁香五月第九色| 免费看欧美成人A片无码| 操操操www.com| 99综合视频一体| caobi四区| 激情五月天婷婷| www.夜夜操.con| 日本三级日本三级99| 成人av免费观看| 激情99| 色五月婷婷大香蕉| 色综合伊人网| 久久色五月天综合网| 97婷婷丁香五月综合| 久热这里只有精品在线| 色婷婷欧美| 99热这里只有精品8| 日韩黄黄| 9超碰在线| 啪啪婷婷五月天激情| 激情五月天啪啪| 久久久91| 久久这里只有欧美| 丁香婷婷五月综合色情| 超碰2021| 九九色逼| 99热日韩| 九九热这里只有精品23| 色欲色香,www,com| 九九综合久久| 色99在线观看| 天天舔天天摸天天射| 丁香六月婷婷操逼网| 玖玖热视频| 婷婷九月综合| 丁香六月成人| 99热婷婷| 五月丁香六月婷婷国产视频| 色五月天天在线观看资源站| 久久九九re热| 嫩草AV久久伊人妇女超级A| 99爱在线观看视频| 五月天婷五月天综合网在线观| 久久久91精品| 亚洲激情综合| 五月丁香亭亭操逼| 婷婷五月天a| 91好好热日本在线| 丁香婷婷九月在线| 激情亚洲网| 天天干天天干天天干天天干天天| 九九热a| 91在线资源| 久久精品4| 婷婷五月色影视先锋| 久久一级免费黄色片| 成人精品在线观看| 九九视频在线| 日日激情网| 综合性爱网| 天天综合网站| 久草婷婷| 免费97碰碰| 丰满人妻一区三区三区| 色五月xxx| 国产人人操| 无码任你操| 2025色婷婷| 亚洲精品网站色视频| 五月婷婷久久爱| 天天插天天插天天插天天插 | 成人短视频免费观看| 99色色网| 91viP在线看| 激情五月天色爱| 久久色婷婷| 激情综合另类| 久久99草五月婷婷| WWW色五月| 六月婷婷色综合| 婷婷激情视频欧美视频自拍视频欧美剧| 狠狠做六月爱婷婷综合aⅴ| 色护士综合| 99精品偷自拍| 青青草国产亚洲精品久久| 久婷| 在线天堂9| 玖玖资源天天无码| 俺也去综合| 色区久久| www.99在线| 午夜日韩久久久网站| ..真实国产乱子伦对白在线_欧 | xxx.色婷婷| 久久99最新| 先锋五月婷婷丁香草草| 91碰在线| 超碰成人电影| 日韩婷婷| 99精品久久| 五月天婷婷狠狠| 婷婷的五月天另类视频| 美女婷婷激情亚洲| 九色综合网| 99性爱| 91九色视频| 偷拍五月丁香| 91se在线观看| 五月婷婷亚洲| 久操大香蕉| 久婷五月| 99热精品观看| 人妻av在线| 五月婷婷六月情| 婷婷狠狠色| 伊人午夜综合色啪| 欧美色色色色色色色| 日99网站| 久热精彩视频98| 精品少妇人妻AV无码专区偷人| 五月天开心网| 色五月在线观看| 91视频精品99| 婷婷丁香六月| 91啪啪视频| 九九色99| 五月激情小说| 丁香六月婷婷缴情欧美| 亚洲人成播放网站| 影音先锋男人资源站一区二区| 久热爱大香蕉在线蜜臀悦色 | 国产9色在线/日韩| 九色无码| 激情欧美婷五月| 99操| 久久五月婷婷电影| 91九色网| 五月丁香啪啪激情| 日本激情五月天‘| 日日操天天操| 久草热在线视频| 六月婷婷色综合| 狠狠操狠狠操| 亚洲网综合在线| 波多婷婷久久| 久热黄色| 天天做天天爱天天爽在| 97丁香五月| 欧洲亚洲精品| 五月婷啪啪| 亚洲色夜| 亚州色婷婷| 天天日夜夜夜操操操操| 99热这里只有精品3| 丁香六月激情国产| 五月婷婷色五月| 9久久精品| 蜜桃五月天| 99视频热99| 久久久久久久久久久久63| 亚洲成AV人片在线观看| 五月天伊人综合| 97啪啪| 久久9久| 婷婷 久综合| 狠狠擼综合| 天天爽综合| 26uuu精品一区二区| 狠狠爱婷婷爱| 蜜乳久AV| 激情性爱五月天| 99re这里只有精品免费| 亚洲热综合| 狠狠色综合网| 欧美A A A A A| 五月婷婷丁香六月| 婷婷 激情 五月| 婷婷五月天激情综合深爱激情 | 婷婷丁香五另类网站| 色综合天天网| 久久综合影院| 95精品区一区二| 99re免费在线视频| 啪啪五月天啪啪| 夜夜操天天干| 疯狂做受XXXX高潮A片动画| 久久精彩视频99| 91久久婷婷| 思思99re这里只有| 五月丁香久久| 五月天久久激情| 天天激情5月天亚洲| 色丁香婷婷美女视频网站| 久久久免费精彩视频| 99热在线观看精品| 色婷婷五月影视| 亚洲激情网| 这里只有国产精品在线| 99热在线观看精品| 日本99视频精品免费播放| 日韩人妻无码一区二区| 伊人久久大香线蕉av一区| 欧美成人精品三区综合A片| 大香人妻| 色婷婷五月亚洲| 91一起操| 色色九九五月天 | 亚洲色爱综合| 国外亚洲成AV人片在线观看| 综合大香蕉| 色五月婷婷天天操夜夜操| 五月丁香大香蕉| 日韩啪啪视品| 六月婷婷狠狠做| av在线资源| 成人视频免费观看高清完整版在线观看| 五月丁欧美| 日本妈妈乱| 婷婷五月丁香伊人| 中文字幕婷婷9月天| 激情五月天视频| 色婷婷狠狠18| 婷婷五月天亚洲综合网| 天天干天天干天天干天天干天天干天天| 婷婷激情视频| 日韩在线一级| 天天色视频| 最新无毒无码AV| 俺来也综合网精品一区| 色丁香在线视频| 日本久久性| 久久女人九九| 99成人免费热视频| 伊人爱爱日本| 五月天婷婷乱| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 婷婷五月在线| 懂色AⅤ| 五月天婷婷综合网| 侠女刀之记忆电影在线看免费| 九九热99免费视频| 色人久夂| 91成人电影| 人人操人人添人人摸97| 涩五月色婷婷| 97超碰99热99| 色婷婷综合视频| 久久久亚洲成人无码A片| 日韩一66精品| 夜夜谢天天干| 丁香五月黄色| 91视频综合网| 五月婷婷色影院| 婷婷娌伦网| 激情五月天婷婷色色色色色色色色色色色| 五月激情天天干| 色啦啦视频| 狠狠狠狠狠狠狠狠草| 天天爽天天| 一夜福利不卡| 国产精品成人AV在线观看春天| WWW.五月天9999| 丁香五月偷拍| 五月色情网| 超碰v| 91艹人| 97精品综合| 五月色婷婷综合色| 亚洲妇女熟BBW| 全国最新疫情| 在线观看日韩12345区| 99热在线这里只有精品| 99精品综合在线| 色婷婷视频综合| 9色资源在线| http://www.sd-xiangsu.com/| 色婷婷精| 天天综合网91| 玖玖伦理电影| 久久久久激情网| 全高清无码视頻| 色五月综合激情| 九九熱最新視頻| 91色久| 色97综合婷婷天天色| 最近中文字幕大全免费版在线 | 久久亚洲婷婷| 色婷婷久久综| 公的粗大挺进了我的密道| 五月人人丁香婷婷五月人人丁香| 日本韩国视频在线观看社区免费的9| www.色五月.com| 色月丁| 99免费热视频在线| 五月天婷婷午夜丁香| 夜夜穞天天穞狠狠穞AV美女按摩| 狠狠五月天激情| 九九热99久久99| 99丁香五月婷| 五月 丁香 欧美| 五月天社区婷婷| 日日夜夜久| 91肏| 三年高清大片免费观看国语| 丁五月激情视频免费| 婷婷久久丁香五月| 日本猛少妇色XXXXX猛叫| 99热777| 99热综合色图| 国产精品18久久久| 四月婷婷五月丁香| 99激| 91日韩美女被插视频| 99人妻碰碰碰久久久久禁片| 初夜av| 69精品人妻不卡视频| 色丁香久久| 色天天久婷婷| 91丁香五月| 色婷婷五月天| 久久婷五月综合| 五月丁香综合网色欲| 91av色色乱视频| 99热免费精品| 五月天激情国产综合婷婷| 久热9| 成人做爰黄A片免费看直播室男男| 99在热线免费视频| 久久亚洲色导航| 狠狠色噜噜狠狠亚洲A∨| 亚洲精品亚洲人成人网| 婷婷婷婷色| 99热r| a免费在线| 亭亭色色五月天| 综合六月激情婷婷| 99爱在线| 91九色国产| 超碰97在线观看免费| 五月婷婷黄色| 五月婷婷在线播放| 天天爽人人爽| 久久色在线视频| 超碰京东热av男人的天堂| 久久婷婷精品| 亚洲综合婷婷| 直接看的av| 99这里只有精品8| 欧美日韩成人在线免费| 婷婷成人基地| 99热只有这里有精品| 婷婷五月天激情基地| 99热在线资源| 久久33视频| 色婷婷激情| 九九色综合网| 五月丁香六月婷婷色日| 五月天婷a| 五月五婷婷网| 综合婷婷久久| 久热超碰91| 日韩一级| 日本强伦片中文字幕免费看| 五月天成人在线视频网站| www.婷婷五月天| 97色婷婷五月天| 成人五月天在线观看| 97碰人人操| 以及AA大片看看| 99∨VTV| 超碰九九热| 亚洲婷婷免费| 国产成人+亚洲+欧洲| 袁子仪视频观看| 99啪啪视频| www.久久9| 亚洲图片 丁香婷婷| 精品一区二区三区四区五区六区| 久久99热这里只有精品| 99在线观看| 日日夜夜天天| 亚洲无码色| 五月婷婷激情综合拍| 这里只有精品日韩精品| 婷婷五月丁香久久| 91日本在线| 婷婷丁香五月色偷偷| 婷婷狠狠爱| 99re资源在线视频导航| 婷婷五月天综合久久日美女| 亚洲永远av在线播放| 亚洲乱码日产精品BD| 俺去也婷婷| 欧美婷婷| 五月天伊人网| 色婷婷影院| 五月丁香综合网| 热99这就是精品视频| 97干在线| 久久99网站| www.夜夜| 少妇人妻丰满做爰XXX| 国产精品18久久久| 在线看九一V图片| 国产毛片精品一区二区色欲黄A片 国产人妻777人伦精品HD | 色五月天.con| 五月天婷婷久久日| 婷婷 激情 五月| 亚洲天堂亚洲色色色| eeuus五月婷| 综合欧美五月婷婷| 五月婷无码| 欧美极品999| 五月天狠狠色| 五月丁香婷婷色| 婷婷激情小说网| 欧洲永久精品| 97干婷婷五月天| 天天拍久久| 久久久久久丁香五月| 五月婷导航| 久久这里都是精品| 伊人久久大香线蕉av最新| 婷婷射丁香| 久久538| 天天日日夜夜| 先锋影音男人的天堂AV| 99热色婷婷| 99热久草| 安息电影在线观看完整版| 婷婷5月开心6月| 丁香五月,激情五月,深爱五月| 人人人舔人人人操人人人摸人人人97 | 玖玖在线视频| 香蕉久久av一区二区三区| 激情 久久 婷婷| 综合精品99| 五月天开心色情网| 五月丁香激情婷婷综合字幕| 丁香五月激情在线| 高清不卡一区| 丁香五月五月婷婷欧美大香蕉| 三日本无码| 91精品久久久久久久久 | 国内外色色色色色成人视频| 狠狠狠狠狠狠草| 四月婷婷五月丁香| 韩国情人在线电视剧免费观看高清版全集 | 五月婷婷激情综合网 | 丁香五月天成人| 五月丁香久久| 丰满老熟妇BBBBB搡BBB| 婷婷五月六月| 激情久久四色| 色 色 色综合com| 色九区| 无码 av电影| 97碰成超视频免费视频| 99超在线| 91人操| 三男玩一女三A片| 亚洲成人综合网在线免费观看| 久久作爱| 天天综合天综合| 婷婷五月天激情综合| 中字幕视频在线永久在线观看免费| 久九男女天堂| 日韩九区| 日屌日日操日日色| 婷婷五月av| 青青999| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 婷婷五月花| 天啪天啪天啪天啪| 丁香六月狠狠| 欧美大道不卡| 热99玖玖99玖玖99九九| 99热99网| 九热免费视频| 天天肏天天舔AV| 日韩成人网址| 婷婷99狠狠| 久草热8精品视频在线观看| 婷婷性爱视频在线| 26UUU精品一区二区c〇m| 日本超碰在线| 中文字幕天天干| 5月色亭亭视频| 日本3级片一区2区| 五月丁香婷婷狠狠操| 人人操97| 99精品色| 大香蕉五月婷婷丁香| 狼人久草| 色综合天天| 五月激情丁香啪啪| 五月婷婷播| 五月丁香婷婷综合久久| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 婷婷5月天激情综合| 玖玖婷婷五月| 色婷婷文字幕| www.五月天社区| 国产精品VIDEOSSEX久久发布| 国产激情av| 色五月在线观看| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 色五月成人| 五月婷婷婷色| wwccc久久久| 玖玖资源在线视频| 亚洲成人av在线| 五月丁香性| 五月婷A V在线| 99操99| 成功精品影院| 激情丁香五月综合| 99精品大片| 色婷插| 五月激情网五月综合网| 成人精品在线| 婷婷国产综合| 无码操B| 五月婷精品| 九九色中文| 免费啪啪亚州视频| 日本成人综合| 亚洲啪啪网| 成人啪啪色婷婷久| 婷婷九月丁香| 91 九色 入口| 婷婷娌伦网| 桃色五月婷婷| ...婷婷国产成人亚洲日韩| 色五月天婷婷| 久久机热这里只有精品免费视频| 激情五月天婷婷五月天| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 婷婷丁香五月婷婷| 五月开心久久| 伊人玖玖婷婷| 爱操人妻| 婷婷性爱无码视频| 国产乱子轮XXX农村| 五月天婷婷自拍图片在线观看| 丁香色五月 97干| 欧美群妇大交乱婬网| 久久五月天婷婷| 精品五月视频婷婷在线观看| 欧洲色色| 思思99re这里只有| 丁香五月天日韩无码| 婷婷瑟瑟五月天| 婷婷六月天| 九九成人视频| WWW.久久久久久久久久久久久| 天天舔天天爽| 91精品综合久久久久久五月丁香| 在线播放成人网站| 亚州视频九九99| 五月天色小说| 思思国产99| 97艹| 成人在线精品| 五月天色狠狠| 欧美97超碰| 互月天综合| 停停六月 综合| 91九色无码日韩| 亚洲九区| ..真实国产乱子伦对白在线_欧| 99综合一区| 在线不卡中文字幕| 丁香五月在线观看| 天堂婷婷丁香六月网| 99热99日天天干| 99热6色| 日本高清久| 四色女婷婷| 婷色视频| 丁香激情网| 天天模,夜夜模夜夜爽| 久9热插入| 天堂在线9| 9九热视频| 韩国中文字幕91| 激情噜噜噜| 久久久人妻不卡| 96自拍视频九色在线观看| 99免费| 婷婷色在线视频| 能看的av| 五月婷婷官网色| 五月丁香六月婷| 久久性爱网| 99这里有精品视频| 婷婷伊在线| 人人操人| 中文激情网| 婷婷五月天激情网站| 91九色国产| 青青草青青草五月天| 五月婷婷影| 五月天久久婷婷婷| 丁香久久激情俄| 亚洲激情av| 另类综合国产| 超碰人人草| 91婷婷视频| 九九激情网| 亚洲成人va| 精品乱码视频| 日本三级片片| 中文字幕欧美日韩VA免费视频| 99九九视频| 亚洲精品乱码久久久久久综合| CAOBIBI| 日本三级中国三级99人妇网站| 五月丁香激情婷婷综合| 丁香五月激情婷婷| 日本123区日韩欧美不卡在线看| 五月色网| 激情99| 爱婷婷五月| 久久这里只有精彩| 9婷婷内射| 国产性av| 欧美日韩91| 婷婷丁香九月| 婷婷涩涩五月天| 亚洲Va成人| 97干在线看| 96自拍视频九色在线观看| 日本色婷婷| 丁香五月激情婷婷婷婷在线观看| RenRenSe在线视频网站| 色婷婷AV在线| 啪啪色激情五月天| 熟惀91九色在线| 天天综合色| 婷婷狠狠18禁久久| 天天爱夜夜爽| 天天综合亚洲综合| 99热国产国产| 五月开心婷婷网| 综合色影| 殴美日韩成人| 激情文学 综合 九月| 国产精产国品一二三在观看| 久久综合婷婷| 亚洲精品影视| 亚洲精品视频电影| 亚洲最大激情无码| 热久视频| 五月丁香花婷婷玉莉AV| 激情综合网 激情五月天| 99在线爽| 五月天色婷婷激情综合| 九九九九国产| 色色色国产| 秋霞AV美国| ...婷婷五月综合不卡,国产在线手机| 国产偷人爽久久久久久老妇APP| 99热精品在线观看| 亚洲欧美婷婷五月色综合| 狠狠操狠狠| 久久久噜噜噜久久人妻| 婷婷狠狠色| 激情五月丁香六月| 激情五月,色播五月| 99热在线观看这里只有精品| 欧美激情五月| 日本成人噜噜| 九九性视频| AV五月婷婷露脸| Www.狠狠| 激情婷婷六月天| 丁香六月情| 26UUU精品一区二区| 五月天婷婷在线播放| 噜噜色婷婷| 这里只有精品在线视频在线观看| 丰满熟女人妻一区二区三| 5月婷婷激情在线| 热99热9| 六月丁香成人网| 常久最新免费的色吊丝| 婷婷色五月色| 可以看的av| 一起草无码| 97干欧美| 天天爱天天爽| 成人无码精品1区2区3区免费看| 国产做A爰片毛片A片美国| 九九视频在线观看视频6| 变态 另类 在线| 日本综合99| 91大神在线免费看视频全集男男一起操| 爆乳熟女-区二区三区| 九草性爱| 婷婷久久五月| 99热这里只有精品国产免费| 五月丁香婷中文字幕| 五月色俺婷婷| 五月精品| 人人摸人人| 激情久久综合| www.色五月| 五月丁香婷婷色啪| 亚洲无码激情| 久久五月丁香| 一本道综合网| 色爱亚洲| www.99热| 大香蕉AV电影在线| 久久玖玖综合| WWW,激情五月天,COM| 天天爽天天爽天天爽天天爽天天爽天天爽天天 | 久久成人人妻| 97碰碰视频在线观看| 六月激情婷婷| 91男人资源站| 五月婷婷激情久久| 婷婷五月天Av| 色中色综合| 欧美日综合| 蜜臀AV在线观看| 欧洲区自拍| 伊人久久五月天| 五月丁香婷婷婷婷综合网| 五月丁花六月丁香综合| 色99视频| 色婷婷香蕉在线| 色婷六月| 丁六月激情| 久久久久人妻精品| 日本久久99| 99在线综合视频| 婷婷五月天堂网| 五月婷婷开心亚州在线| 色色免费网站| 久久五月婷天天干| 九九热婷婷| 亚洲精品99| 天天免费日日夜夜夜夜| 亚洲精品国产成人AV在线| 99热99艹在线观看| 99视频35精品视频在线观看| 狠狠干狠狠干狠狠干狠狠干| 91视频一起草| 色青青电影色五月| 丁香婷婷黄网站| 色五月婷婷五月丁香五月| 九九激情| 香蕉AV777XXX色综合一区| www.sebowuyue| 精品色色网| 婷婷五月天影院| 亚洲日比视频| 婷婷激情五月天7| 日本色五月婷婷| 精品影院| 成人在线日韩欧美| 狠狠操天天日| 99精品视频免费观看| 五月丁香婷婷激情四射迷人| 五月综合激情图片| 九九色99| 六月色婷婷综合影视| 激情婷婷五六月天| 黄色片区子| 久久天堂女人| 色色综合成人网| 色五月婷婷五月天| 激情五月天久久| 天天摸.天天mo| 五月婷婷,狠狠操| 一本到不卡高清DVD| 激情综合播播| 亚洲综合五月天婷婷丁香| 国产特黄色精品一区二区三区精品无广告| 激情com| 丁香六月激情| 天堂网色婷婷| 婷婷十月丁香| 亚洲国产精品VA在线看黑人| 超碰91在线| 99精彩视频| 大香蕉视频99| 精品九九视频| 色综合天天| jiujiu热在线视频| 天堂色婷婷| 91操屁股| 五月丁香六月婷婷操操操| 碰碰人人人| 啪啪五月天啪啪| 六月婷婷激情| 日韩美女羞羞网站在线观看| 伊人久久五月天| 超碰色热| 9人人操人人看| 九九久久污| 五月天婷婷五月| 8090在线影视少妇| 婷婷色五月天第7色| 天天做天天爱| 丁香五月婷婷狠狠色| av久热| 超级碰碰碰97免费| 欧美丁香五月| 九九Y精品热播| 五月婷婷开心亚州在线| 九色在线五月婷婷网址| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 99自拍视频在线观看| 激情五月开心五月丁香五月| ztEJj| 婷婷丁香五月天中文字幕| 香蕉AV777XXX色综合一区| 亚洲五月天天| 国产精品18久久久| \\五月天婷婷激情| 男妓跪趴把舌头伸进我的嘴巴| 色婷婷久久综合久色| 色五月婷婷老师| 永久的网站AAAA| 九九成人视频| 婷婷丁香77777| 婷婷五月天基地| 丁香五月六月婷婷自拍| 99原创自拍视频在线观看| 色婷婷五月天亚洲| 国外亚洲成AV人片在线观看| 婷婷丁香第一页| 91九九九九| 开心五月深爱激情| 婷婷综合干| 九九热精品| 国产av基地| 色九九九九| 欧美六月| 天天爽夜夜操| 六月婷婷网站| 大香蕉太香蕉视频97| 久久久久人妻网址| 色吧婷婷| 26uuu日韩| 久久综合丁香五月| 五月天婷婷基地| 天天擼久久擼在线| 婷婷久久图片| 91操人| 狠狠五月丁香色婷| 99久99久| 超碰不卡在线| 99色色热| 亚洲国产精品成人午夜| 九九热思思| 美女黄频aⅴ视频| 九九热在线视频| 99热99这里有免费的精品| 色婷婷影视99| 色婷婷大香蕉| 日日干综合| 狠狠爱深色婷婷综合| 深爱开心激情| 黄网网站在线播放| 欧美槡BBBB槡BBB少妇| 日日舔夜夜操| 久久婷婷啪啪视频| 99爱精品| 丁香五月综合网亚洲综合欧美狠狠| 97婷婷在线| 天天操综合网| 99热成人在线观看| -91九色大屁股| 99热国品| 亚洲乱码w在线观看| 婷香五月网在线| 任你弄在线视频免费| 欧美性爱中文字幕| 欧美精品久久久久久视频观看| 久久99精品久| 久久机热/这里只有精品| 色六月天| 色婷久九| 91操人| 激情深爱综合网| 婷婷九月| 九九99偷拍视频| 久久香蕉影院| 这里只有精彩视| 色婷婷综合网站| 成人五月天综合网| 婷婷丁香成人| 这里只有精品视频一区| 中文字幕在线播放视频| 大香蕉AV电影在线| 综合色图区| 欧美狠狠地| 婷婷人人操| 色五月婷婷777| www.五月婷婷久久.com| 中文不卡一二区| 99精品国产热久久91色欲| 婷婷五月丁香第四色超碰在线| 超碰操网| 五月天天天色| 噜噜噜噜噜日本视频| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 欧美色小说婷婷| 久久久大香蕉| 九九精品丁香花| 日本欧美成人片AAAA| 色婷婷五月天偷拍| 五月婷丁香在线视频在线| 婷婷丁香九月| 国产无套精品一区二区| 九色视频91疯狂| 丁香婷婷婷五月| 国产精品在线视频| 日韩色五月| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 色色婷婷五月| 久久久久九九九九视屏小说88| 99成人| 激情久久久久久久久| 婷婷五月天另类网站| 伍月婷婷免费视频| 99久久亚洲国产| 97在线观视频免费观看| 丁香五月Av| www.婷婷,com| 婷婷五月激情视频| 五月婷婷这里都是精品| 操操碰| 综合色网站| 啪啪视频99| 色色无码| 九九热精品| 97狠狠色| 六月丁香网| 五月天成人小说网| 日在线V视频在线播放| 思思久久99热| 97干免费视频| 玖玖爱导航| 97亚洲精品| 高清资源站日A美A欧亚…| 色五月婷婷色| 婷婷五月色综合| 久热只有精品| 色色综合色| 久热a| 大香蕉av在线| 色色色婷婷五月天| 色婷婷啪啪啪啪啪啪| 免费超碰在线| 亚洲中文字幕在线电影| 丁香婷婷天堂| 99国产精品久久久久久久久久久| 丁香五月天色婷婷| 综合激情站| 久久婷婷五月综合| 99re免费精品视频| 99热综合在线| 日韩精品999| 五月天婷婷无码| 九九久热| 看久久性爱99视频| 婷婷色五月在线视频| 综合五月丁香六月婷婷| 色综合射婷婷| 国产婷婷色综合AV蜜臀AV| 色人妻五月| 婷婷五月天免费视频在线观看| 婷婷色无码| 五月婷婷这里都是精品| 色激情综合狠狠婷婷| 秋霞电影一级黄| 天天色天天爽| 黄色精品五月婷婷| 欧美激情综合色综合啪啪五月| 丁香五月天堂网AV| 丁香五月色情av| 婷婷狠狠爱| 99人人操| www.黄色片-久久成人国产精品在线播放-999AV| 丁香五月网| 五月丁香琪琪| 99久久婷婷国产综合精品草原| 香蕉久久国产AV一区二区| www.久久99| 久青青久| 天天操天天操综合| 婷婷日日天天| 伊人五月天在线| 98色花堂98t.R| www.91九色| 日日杆天天| 色色热| 天堂伊人干| 五月婷婷先锋| 五月婷婷,狠狠操| 婷婷丁香花五月天| 久久激情视频99| 婷婷黄色五月天在线视频| A A色色| 激情www| 精品99在线| www.99热| 风流少妇A片一区二区蜜桃 | 六月激情婷婷色| 森林影视大全,最好看的2019年视频 | 99思思在线视频| 99热这里只有精品33| www,26uuu,c0m,色情| 五月婷婷AV| 五月天综合视频| 亚洲熟妇AV乱码在线观看| 丁香九月激情在线视频| 久久9热| 丁香九月综合| 精久久色| 六月婷婷色色色| 五月激情天| 操大屄五月天视频| 99日精品视频| 另类激情五月| 五月婷婷就去色| 综合一本道| aa久久| 国产这里只有精品| 操日本99| 九洲一级A片| 丁香婷五月天| 色综合久久五月天| 99视频在线精品| 成人久碰| 丁香五月123| 久久婷婷丁香五月一二三| 色综合色综合网| 另类精品视频在线观看| 少妇高潮呻吟A片免费看软件 | 4399精品一区二区| 超碰免费人人| 就去涩涩丁香五月天| 九九热视频99| 五月激情在线| 草久私拍| 婷婷爱在线观看| 日本噜噜色网| 久久伦乱| 亚洲妇女熟BBW| 97色啪| 久久婷婷五月综合激情国产| 99热国产免费| 精品一二三区久久AAA片| 日韩美女在线视频19| 五月丁香久久综合| 丁香婷婷色五月激情综合| 色色激情五月天| 99re在线视频| 男人的天堂五月丁香| 大香蕉五月天婷婷| 天堂综合久久| 91人妻视频| 79精品视频在线观看,| 国产婷婷久久| 五月综合激情综合久| 色婷婷丁香五月| 亚洲AV永久无码影院黑人| 五月婷婷久久激情| 天天肏视频| 欧美日本高清视频99| 国产美女精品| 99爱在线精品视频免费观看| 久9草在线观看视频| 77799热| 97人人操| 大香伊人婷婷影院| 99热在线免费观看精品| 婷婷淫淫狠狠六月| 五月天网址在线刘玥| 超碰人人草| 丁香婷婷色六月| 伊人婷婷五月天| 亚洲旡码| 五月天最新网| 99久久婷婷| 久久精典| 久久久免费精彩视频| 丁香五月婷婷激情97| 91九色国产| 久色五月丁香视频| 超碰97在线观看免费| 国产精品五月丁香| 婷婷啪啪| 国产成人AV在线播放| av性爱在线| 国产精品99久久久久久久女警| 亚洲成人综合在线| 夜色综合网| 精品动漫 无码av| 婷婷五月天首页| 大学生高潮无套内谢视频| 色色吧综合| 夜夜大香蕉婷婷丁香| 97热超碰| 操日挥操日日| 国产精品天天狠天天看| 色情五月天小说| 婷婷99狠狠躁天天| 99热亚州综合| 天堂草在线观| 黄色片久久| 狠狠色丁香综合| 欧美日韩成人| 亚洲五月婷| 9999三级片| 91精品国产日韩91久久久久久国模| se99视频| 97五月婷| 婷婷四色五月| 风流少妇A片一区二区蜜桃| WWW色五月天| 丁香婷婷色五月激情综合| 婷婷五月色情天| 九玖欧洲亚洲| 色五月色综合| 操老逼综合网| 婷婷色情小说| 性爱技巧五月| 婷婷日日夜夜| 色色丁香五月天社区| 精品久久久人妻| 七月激情六月婷婷综合在线播放| 狠狠色噜噜狠狠狠狠综合| av操一操| 熟女网站久久| www.五月婷婷| 99精品色| 五月视频日本免费观看| 国产精品色情AAAAA片软件| 丁香五月激情视频在线| 天天插操| 日婷婷久久开心| 久热超碰91| 婷婷激情综合| 免费视频舔| 亚洲第一成人无码A片| 婷婷五月久久| 久久久色情| 色婷婷五月天成人网| 婷婷综合色| www久| 深爱激情网婷婷| 欧美在线ee日韩| 特级西西4444www无码| 97五月久久丁香婷婷| 丁香五月电影| 五月在在观看| www网站在线观看| XX久久| 亚洲精品va| 日本久久激情| 性爱视频久久| 99热网站| 亚洲愉拍99热成人精品| 99久久久| xxxx久| 99综合| 99爱无码| 日本婷久久| 99综合网| 日本va欧美va欧美va| 五月丁香欧美综合| 99久久综合| 天天摸色吧天天摸色吧| 五月天天堂久久| 婷婷五月天激情小说| 99亚洲色色| 中文AV在线播放| 久久9热好| 色五月五月天色婷婷色五月| 婷婷在线播放av| 68热超碰在线| 婷婷五月天Av| 色噜噜狠狠色综合日日免费| 9热久久在线| 丁香五月天堂| 五月丁香无码视频| 亚洲在线操| 思思re最新视频| 狠狠爱婷婷丁香| 开心久久爱五月天| www.久9| 91碰碰碰| 噜噜吧天天爱| 梁铮版《蜘蛛女侠》在线| 99玖玖精品| 久久综合激情| 婷婷免费视频| Av性爱网| 丁香五月天婷婷91| 天天天天干| 婷婷色综合av| 日日操夜夜爽天天天| 99精品高潮| 亚洲精品一区中文字幕乱码| 亭亭玉月丁香| 婷婷综合五月天激情| 91人人操| 国产欧美日韩综合精品一区二区| 视频一二区| 蜜臀九九九九| 一本久道综合色婷婷五月| 日本美女97在线视频| 色综合色综合网| 综合五月天完整| 六月婷婷网| 成人网站av免费网站推荐| 欧美三级巜人妻互换| 日韩人妻无码精品| 岛国av电影网站| 丁香五月天偷拍| 丁香五月大香蕉AV| 少妇高潮呻吟A片免费看软件| 武则天精品久久| 亚洲热久久| 色欲丁香久久| 狠狠丁香| 亚洲热久| 666555。COm毛片| 无码操B| 婷婷综合成人| 丁香六月亚洲综合| 五月综合亚洲色| 手机旧版看人妻1025| 欧美一级a | 丁香六月欧美| AA丁香综合激情| 婷婷五月色亚洲| 思思久ren热| av在线免费播放| 日韩成人电影av| av免费在线看不卡无毒| 亚洲国产99| 91色噜噜狠狠狠狠色综合| 欧美va在线| 99热在线这里只有精品| 久久五月婷婷电影| 婷婷内射视频在线| 久热天堂| 97操资源婷婷| 成人国产欧美大片一区| 久99久视频| 亚洲综合色色|