日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

如何实现蓝牙空中升级BLE OTA

發布時間:2025/7/25 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何实现蓝牙空中升级BLE OTA 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何實現BLE OTA?什么叫DFU?如何通過UART實現固件升級?又如何通過USB實現固件升級?怎么保證升級的安全性?什么叫雙備份(dual bank)DFU?什么叫單備份(single bank)DFU?什么叫后臺式(background)DFU?本文將對上述問題進行探討。

1.概述

所謂DFU(Device Firmware Update),就是設備固件升級的意思,而OTA是DFU的一種類型,準確說,OTA的全稱應該是OTA DFU,只不過大家為了方便起見,直接用OTA來指代固件空中升級(有時候大家也將OTA稱為FOTA)。DFU除了可以通過無線方式(OTA)進行升級,也可以通過有線方式進行升級,比如通過UART,USB或者SPI通信接口來升級設備固件。

不管采用OTA方式還是有線通信方式,DFU包括后臺式(background)和非后臺式兩種模式,目前的智能手機升級Android或者iOS系統都是采用background DFU方式,即新固件在后臺悄悄下載,下載成功后,再提示用戶升級,整個升級過程中對用戶手機使用沒有任何影響。而早先的功能機就是采用非后臺式 DFU來升級操作系統的,即用戶需要先長按某些按鍵進入bootloader模式,然后再進行升級,在升級過程中,手機的正常功能無法使用。Background DFU必須采用雙備份(dual bank)模式進行升級,即老系統(老固件)和新系統(新固件)各占一塊存儲區,只有當新系統下載完成并校驗成功后才會去升級老系統。而非后臺式DFU可以采用dual bank或者single bank模式,dual bank的做法是升級時系統先進入bootloader,然后把新系統(新固件)下載下來并校驗成功,然后再擦除老系統(老固件)并升級新系統,dual bank方式雖然犧牲了很多存儲空間,但是換來了更好的升級體驗。Single bank的做法是升級時系統也是先進入bootloader,然后立馬把老系統擦除,然后直接把新系統下載到老系統區域,跟dual bank相比,single bank將大大節省Flash存儲區域,在系統資源比較緊張的時候,推薦使用single bank方式。不管是single bank還是dual bank,升級過程出現問題后,都可以進行二次升級,都不會出現“變磚”情況。不過dual bank有一個好處,如果升級過程中出現問題或者新固件有問題,它還可以選擇之前的老系統繼續執行而不受其影響。而single bank碰到這種情況就只能一直待在bootloader中,然后等待二次或者多次升級,此時設備的正常功能就無法使用了,從用戶使用這個角度來說,你也可以認為此時設備已經“變磚”了。可參考下面三個圖來理解上述過程。

??

?

如果你是第一次接觸Nordic nRF5 SDK,那么建議你先看一下這篇文章:開發你的第一個BLE應用程序—Blinky,或者看一下這一篇文章:手把手教你開發BLE數據透傳應用程序,以建立Nordic nRF5 SDK的一些基本知識,然后再往下看以下章節。

2. Nordic nRF5 SDK DFU例程

Nordic 原生態SDK就提供了OTA(BLE)DFU,UART DFU,以及USB DFU例程,大家可以直接參考Nordic例程來實現自己的DFU。由于Nordic SDK版本很多,而且每個版本之間都或多或少有些差異,下面將分SDK版本來闡述Nordic每個版本SDK中如何實現OTA,至于UART DFU和USB DFU,這里就不再闡述了。感興趣的同學可以參考Nordic nRF5 SDK v15.0.0如下目錄:

UART serial DFU目錄(nRF52832):nRF5_SDK_15.0.0_a53641a\examples\dfu\secure_bootloader\pca10040_uart\arm5_no_packs

USB serial DFU目錄(nRF52840):

nRF5_SDK_15.0.0_a53641a\examples\dfu\secure_bootloader\pca10056_usb\arm5_no_packs

這里說明一下,目前Nordic只提供非后臺式DFU例子,SDK中還沒有后臺式DFU例子(不過這個實現起來并不難,只要大家搞明白了里面的原理,自己開發起來會很快的),所以下面的論述都是基于非后臺式DFU。另外,SDK9/10/11,Nordic只有明文DFU。從SDK12開始,Nordic 開始支持安全DFU(secure DFU)。所謂secure DFU,不是指升級時固件是加密的,而是指升級之前bootloader會先驗證新固件的簽名,只有驗簽通過后,才允許后續升級,此時的升級方式仍然是明文;驗簽失敗,則拒絕后續升級。Secure DFU將杜絕黑客的惡意攻擊,大大提高系統的安全性。

Nordic nRF5 SDK軟件架構跟其他家有點不一樣,程序存儲區最開始部分放得不是bootloader,而是藍牙協議棧softdevice,bootloader則被nRF5 SDK放在程序存儲區的最上面,整個存儲區結構圖如下所示:

?

根據升級時如何跳轉到Bootloader,nRF5 SDK又將DFU分為按鍵式DFU和非按鍵式(Buttonless)DFU,所謂按鍵式DFU,就是上電時長按某個按鍵以進入bootloader模式。而buttonless DFU,就是整個DFU過程中設備端無任何人工干預,通過BLE指令方式讓設備進入bootloader模式。

按鍵式DFU比較簡單,你只需將softdevice和bootloader image燒入到設備中(application可燒可不燒),按住button4然后上電,設備就會自動進入bootloader模式,然后就可以通過nRF Connect或者nRF Toolbox對設備進行OTA了。一旦buttonless DFU例子從app跳到了bootloader,后續DFU升級過程就跟按鍵式DFU一模一樣,所以如果你對按鍵式DFU操作過程中有什么不明白的地方,可以參考后面的buttonless DFU的說明,這里就不單獨對按鍵式DFU操作過程進行說明了。

下面將對buttonless DFU實現過程按照SDK版本一一進行闡述,請選擇你感興趣的SDK版本進行閱讀。下文的所有操作步驟所對應的腳本都放在百度云盤上,云盤鏈接如下所示

  • 鏈接:?https://pan.baidu.com/s/1FKTfY3Q_zBVvviO7KC7Gyg#list/path=%2Fblog???密碼: y8fb

建議大家先把對應的腳本下下來,然后對著操作步驟去實現自己的DFU過程。

2.1 nRF5 SDK v15.0.0 OTA

SDK15既支持明文DFU又支持安全DFU(實際上是簽名DFU),而且SDK15既可以實現OTA DFU,也可以實現基于UART或者USB通信的DFU。所謂簽名DFU,就是bootloader中預先裝載一個公鑰,升級時,主機先發一個簽名給bootloader,bootloader會對這個簽名進行驗簽,驗簽通過才能繼續DFU,否則拒絕DFU。SDK15 OTA DFU是基于例程ble_app_buttonless_dfu來實現的,而且SDK15只支持nRF52系列產品,它不支持nRF51系列產品,下面我們以nRF52832(開發板編號:PCA10040)為例,來闡述SDK15是如何實現OTA的。

nRF52832 OTA

請大家先到百度云盤下載壓縮包:DFU/SDK15_0/ Script_SDK15_S132_nRF52832.rar”并解壓,然后對照以下步驟進行操作:

1)???? 準備。請先執行如下的“build_all.bat”腳本(Windows系統),以生成相應的micro-ecc庫(micro-ecc會用來對簽名進行驗簽等安全功能)。請注意,欲成功執行build_all.bat,大家必須先安裝好git和gcc編譯器。如果你嫌麻煩,可以到百度云盤下載: micro-ecc_sdk14_15_newer.rar,然后覆蓋相關文件,效果也是一樣的。

?

?

然后請按照http://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.tools%2Fdita%2Ftools%2Fnrfutil%2Fnrfutil_installing.html&cp=5_5_1安裝最新版nrfutil,nrfutil安裝有兩種方式,一種是直接下載exe文件,一種是以Python的方式進行安裝。

nrfutil.exe直接下載鏈接為:(注:如果大家不熟悉Python,推薦使用這種方式)

https://github.com/NordicSemiconductor/pc-nrfutil/releases,記得把nrfutil.exe所在目錄放在Windows環境變量中。

或者你按照如下步驟去安裝nrfutil:

  • 下載安裝Python2.7(2.7.6 or later, but not Python 3),下載地址:https://www.python.org/downloads/

注:安裝完Python2.7后,需要修改Windows path變量值,如果你安裝了老版本nrfutil,請先把老版本所在的目錄C:\Program Files (x86)\Nordic Semiconductor\nRFgo Studio從path變量中刪除,然后添加這2個目錄:C:\Python27;C:\Python27\Scripts;

  • 通過pip安裝最新版的nrfutil,即打開Windows命令行工具CMD,輸入如下命令:pip install nrfutil,即可以完成nrfutil的安裝。
  • 安裝完成后,在Windows命令行工具輸入:nrfutil version,其版本應該在3.2.0以上。
  • 對于Windows用戶,nrfutil運行需要幾個特殊的DLL庫,而這幾個庫有些Windows機器是沒有的,如此,可往:https://www.microsoft.com/en-us/download/details.aspx?id=40784下載。

2)???? 通過nrfutil生成公私鑰對。大家可以直接雙擊“key_generate.bat”以生成相應的私鑰(priv.pem)和公鑰(dfu_public_key.c)。大家務必要保存好私鑰priv.pem,以后每個新image要升級時,都會先通過這個私鑰對它進行簽名,一旦priv.pem丟失或者被暴露,DFU將無法進行或者變得不安全。

3)???? 編譯bootloader代碼。將剛才的dfu_public_key.c取代目錄nRF5_SDK_15.0.0_a53641a\examples\dfu下的同名文件,然后編譯如下目錄中的工程:

nRF5_SDK_15.0.0_a53641a\examples\dfu\secure_bootloader\pca10040_ble\arm5_no_packs,將hex改為:bootloader.hex

4)???? 編譯application代碼。請編譯工程:nRF5_SDK_15.0.0_a53641a\examples\ble_peripheral\ble_app_buttonless_dfu\pca10040\s132\arm5_no_packs,將hex修改為:app.hex

5)???? 生成bootloader settings page。Bootloader settings存儲在Flash最后一個page,它將決定復位后芯片的行為,比如是進入DFU模式還是應用模式,同時它還包含image的CRC值和版本等信息。如果要求芯片復位后進入application,必須正確生成該bootloader settings hex,生成腳本見“settings_page_generate.bat”

6)???? 燒寫softdevice,app和bootloader。請雙擊“mass_program.bat”來完成整個燒寫過程

7)???? 生成新image對應的zip包。請雙擊“zip_generate.bat”,以生成SDK15_app_s132.zip,升級時,該zip包將會由云端下發到手機app中。

8)???? 將“SDK15_app_s132.zip”拷貝到手機上。安卓和蘋果手機都可以通過微信的‘文件傳輸助手’拷過去,非常方便。請注意,手機nRF Connect和nRF Toolbox都支持DFU功能,蘋果手機拷貝的時候可以隨便選擇其中一個app。

9)???? 使用nRF Connect或者nRF Toolbox來完成DFU過程。這里以nRF Connect為例來闡述整個升級過程

  • DK廣播為Nordic_Buttonless,如下

?

  • 連接該設備,使能CCCD,并選擇“DFU”

?

?

?

  • 選擇升級用的zip包。有些安卓系統自帶的文件瀏覽器會有問題,建議使用ES explorer來選擇zip,如下:

?

?

?

?

  • 開始升級

?

??

  • 升級成功,設備將自動啟動,此時你會看到新image已經在運行,廣播名字也變成Nordic_new,如下:

?

?

后面我會以SDK15.0.0 ble_app_uart為例,詳細闡述如何把ble_app_buttonless_dfu的DFU功能移植到ble_app_uart上,從而讓ble_app_uart也具有DFU功能,有興趣的的讀者請參考第3章。

nRF52840 OTA

nRF52840 OTA過程與nRF52832非常相似,唯一不同的是選擇pca10056目錄,請下載百度云盤腳本“DFU/SDK15_0/ Script_SDK15_S140_nRF52840.rar”,然后按照上述52832的步驟來實現52840的OTA DFU。

?

2.2 nRF5 SDK v14.2.0 OTA

SDK14目前只支持安全DFU(實際上是簽名DFU),所謂簽名DFU,就是bootloader中預先裝載一個公鑰,升級時,主機先發一個簽名給bootloader,bootloader會對這個簽名進行驗簽,驗簽通過后才能繼續DFU,否則拒絕DFU。SDK14既可以實現OTA DFU,也可以實現基于UART或者USB通信的DFU。SDK14 OTA DFU是基于例程ble_app_buttonless_dfu來實現的,而且SDK14只支持nRF52系列產品,它不支持nRF51系列產品,下面我們以nRF52832(開發板編號:PCA10040)為例,來闡述SDK14是如何實現OTA的。

nRF52832 OTA

請大家先到百度云盤下載壓縮包:DFU/SDK14_2/ Script_SDK14_S132_nRF52832.rar”并解壓,然后對照以下步驟進行操作:

1)???? 準備。請先執行如下的“build_all.bat”腳本(Windows系統),以生成相應的micro-ecc庫(micro-ecc會用來對簽名進行驗簽等安全功能)。請注意,欲成功執行build_all.bat,大家必須先安裝好git和gcc編譯器。如果你嫌麻煩,可以到百度云盤下載: micro-ecc_sdk14_15_newer.rar,然后覆蓋相關文件,效果也是一樣的。

然后請按照http://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.tools%2Fdita%2Ftools%2Fnrfutil%2Fnrfutil_installing.html&cp=5_5_1安裝最新版nrfutil,nrfutil安裝有兩種方式,一種是直接下載exe文件,一種是以Python的方式進行安裝。

nrfutil.exe直接下載鏈接為:(注:如果大家不熟悉Python,推薦使用這種方式)

https://github.com/NordicSemiconductor/pc-nrfutil/releases,記得把nrfutil.exe所在目錄放在Windows環境變量中。

或者你按照如下步驟去安裝nrfutil:

  • 下載安裝Python2.7(2.7.6 or later, but not Python 3),下載地址:https://www.python.org/downloads/

注:安裝完Python2.7后,需要修改Windows path變量值,如果你安裝了老版本nrfutil,請先把老版本所在的目錄C:\Program Files (x86)\Nordic Semiconductor\nRFgo Studio從path變量中刪除,然后添加這2個目錄:C:\Python27;C:\Python27\Scripts;

  • 通過pip安裝最新版的nrfutil,即打開Windows命令行工具CMD,輸入如下命令:pip install nrfutil,即可以完成nrfutil的安裝。
  • 安裝完成后,在Windows命令行工具輸入:nrfutil version,其版本應該在3.2.0以上。
  • 對于Windows用戶,nrfutil運行需要幾個特殊的DLL庫,而這幾個庫有些Windows機器是沒有的,如此,可往:https://www.microsoft.com/en-us/download/details.aspx?id=40784下載。

2)???? 通過nrfutil生成公私鑰對。大家可以直接雙擊“key_generate.bat”以生成相應的私鑰(priv.pem)和公鑰(dfu_public_key.c)。大家務必要保存好私鑰priv.pem,以后每個新image要升級時,都會先通過這個私鑰對它進行簽名,一旦priv.pem丟失或者被暴露DFU將無法進行或者變得不安全

3)???? 編譯bootloader代碼。將剛才的dfu_public_key.c取代目錄nRF5_SDK_14.2.0_17b948a\examples\dfu\dfu_req_handling下的同名文件,然后編譯如下目錄中的工程:

nRF5_SDK_14.2.0_17b948a\examples\dfu\bootloader_secure_ble\pca10040\arm5_no_packs,將hex改為:bootloader.hex

4)???? 編譯application代碼。請編譯工程:nRF5_SDK_14.2.0_17b948a\examples\ble_peripheral\ble_app_buttonless_dfu\pca10040\s132\arm5_no_packs,將hex修改為:app.hex

5)???? 生成bootloader settings page。Bootloader settings存儲在Flash最后一個page,它將決定復位后芯片的行為,比如是進入DFU模式還是應用模式,同時它還包含image的CRC值和版本等信息。如果要求芯片復位后進入application,必須正確生成該bootloader settings hex,生成腳本見“settings_page_generate.bat”

6)???? 燒寫softdevice,app和bootloader。請雙擊“mass_program.bat”來完成整個燒寫過程

7)???? 生成新image對應的zip包。請雙擊“zip_generate.bat”,以生成SDK14_app_s132.zip,升級時,該zip包將會由云端下發到手機app中。

8)???? 將“SDK14_app_s132.zip”拷貝到手機上。安卓和蘋果手機都可以通過微信的‘文件傳輸助手’拷過去,非常方便。請注意,手機nRF Connect和nRF Toolbox都支持DFU功能,蘋果手機拷貝的時候可以隨便選擇其中一個app。

9)???? 使用nRF Connect或者nRF Toolbox來完成DFU過程。這里以nRF Connect為例來闡述整個升級過程

  • DK廣播為Nordic_Buttonless,如下

?

  • 連接該設備,使能CCCD,并選擇“DFU”

?

?

?

  • 選擇升級用的zip包。有些安卓系統自帶的文件瀏覽器會有問題,建議使用ES explorer來選擇zip,如下:?

?

?

?

  • 開始升級

?

?

?

  • 升級成功,設備將自動啟動,此時你會看到新image已經在運行,廣播名字也變成Nordic_new,如下:

?

?

后面我們會以SDK15.0.0 ble_app_uart為例,詳細闡述如何把ble_app_buttonless_dfu的DFU功能移植到ble_app_uart上,從而讓ble_app_uart也具有DFU功能,有興趣的的讀者請參考第3章。注意:SDK14.2.0 DFU原理跟SDK15.0.0一模一樣,大家可以依葫蘆畫瓢,完成SDK14.2.0的DFU移植工作。

?

2.3 nRF5 SDK v12.3.0 OTA

SDK12目前只支持安全DFU(實際上是簽名DFU),所謂簽名DFU,就是bootloader中預先裝載一個公鑰,升級時,主機先發一個簽名給bootloader,bootloader會對這個簽名進行驗簽,驗簽通過后才能繼續DFU,否則拒絕DFU。SDK12只有OTA DFU例子,而沒有基于串口的DFU例程。SDK12 OTA DFU是基于例程ble_app_buttonless_dfu來實現的,而且SDK12同時支持nRF52832以及nRF51系列產品,下面我們以nRF52832(開發板編號:PCA10040)為例,來詳細闡述SDK12是如何實現OTA的。

nRF52832 OTA

請大家先到百度云盤下載壓縮包:DFU/SDK12_3/ Script_SDK12_S132_nRF52832.rar”并解壓,然后對照以下步驟進行操作:

1)???? 準備。請先到百度云盤下載: micro-ecc_sdk12.rar,然后覆蓋如下目錄:

?

然后請按照http://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.tools%2Fdita%2Ftools%2Fnrfutil%2Fnrfutil_installing.html&cp=5_5_1安裝最新版nrfutil,nrfutil安裝有兩種方式,一種是直接下載exe文件,一種是以Python的方式進行安裝。

nrfutil.exe直接下載鏈接為:(注:如果大家不熟悉Python,推薦使用這種方式)

https://github.com/NordicSemiconductor/pc-nrfutil/releases,記得把nrfutil.exe所在目錄放在Windows環境變量中。

或者你按照如下步驟去安裝nrfutil:

  • 下載安裝Python2.7(2.7.6 or later, but not Python 3),下載地址:https://www.python.org/downloads/

注:安裝完Python2.7后,需要修改Windows path變量值,如果你安裝了老版本nrfutil,請先把老版本所在的目錄C:\Program Files (x86)\Nordic Semiconductor\nRFgo Studio從path變量中刪除,然后添加這2個目錄:C:\Python27;C:\Python27\Scripts;

  • 通過pip安裝最新版的nrfutil,即打開Windows命令行工具CMD,輸入如下命令:pip install nrfutil,即可以完成nrfutil的安裝。
  • 安裝完成后,在Windows命令行工具輸入:nrfutil version,其版本應該在3.2.0以上。
  • 對于Windows用戶,nrfutil運行需要幾個特殊的DLL庫,而這幾個庫有些Windows機器是沒有的,如此,可往:https://www.microsoft.com/en-us/download/details.aspx?id=40784下載。

2)???? 通過nrfutil生成公私鑰對。大家可以直接雙擊“key_generate.bat”以生成相應的私鑰(priv.pem)和公鑰(dfu_public_key.c)。大家務必要保存好私鑰priv.pem,以后每個新image要升級時,都會先通過這個私鑰對它進行簽名,一旦priv.pem丟失或者被暴露DFU將無法進行或者變得不安全

3)???? 編譯bootloader代碼。將剛才的dfu_public_key.c取代目錄nRF5_SDK_12.3.0_d7731ad\examples\dfu\bootloader_secure下的同名文件,然后編譯如下目錄中的工程:

nRF5_SDK_12.3.0_d7731ad\examples\dfu\bootloader_secure\pca10040\arm5_no_packs,將hex改為:bootloader.hex

4)???? 編譯application代碼。請編譯工程:nRF5_SDK_12.3.0_d7731ad\examples\ble_peripheral\experimental_ble_app_buttonless_dfu\pca10040\s132\arm5_no_packs,將hex修改為:app.hex

5)???? 生成bootloader settings page。Bootloader settings存儲在Flash最后一個page,它將決定復位后芯片的行為,比如是進入DFU模式還是應用模式,同時它還包含image的CRC值和版本等信息。如果要求芯片復位后進入application,必須正確生成該bootloader settings hex,生成腳本見“settings_page_generate.bat”

6)???? 燒寫softdevice,app和bootloader。請雙擊“mass_program.bat”來完成整個燒寫過程。請注意,在燒寫前,請把app.hex倒數第3行和倒數第4行刪除,因為bootloader.hex也包含一模一樣的內容,會導致merge的時候hex定義沖突,如下:

?

或者編譯application的時候,把如下語句注掉:

?

7)???? 生成新image對應的zip包。請雙擊“zip_generate.bat”,以生成SDK12_app_s132.zip,升級時,該zip包將會由云端下發到手機app中。

8)???? 將“SDK12_app_s132.zip”拷貝到手機上。安卓和蘋果手機都可以通過微信的‘文件傳輸助手’拷過去,非常方便。請注意,手機nRF Connect和nRF Toolbox都支持DFU功能,蘋果手機拷貝的時候可以隨便選擇其中一個app。

9)???? 使用nRF Connect或者nRF Toolbox來完成DFU過程。這里以nRF Connect為例來闡述整個升級過程

  • DK廣播為Nordic_Buttonless,如下

?

  • 連接該設備,使能CCCD,并選擇“DFU”

?

?

?

  • 選擇升級用的zip包。有些安卓系統自帶的文件瀏覽器會有問題,建議使用ES explorer來選擇zip,如下:

?

?

?

  • 開始升級

?

?

?

  • 升級成功,設備將自動啟動,此時你會看到新image已經在運行,廣播名字也變成Nordic_new,如下:

?

?

nRF51系列 OTA

nRF51822 OTA過程與nRF52832非常相似,唯一不同的是選擇pca10028目錄,請下載百度云盤腳本“DFU/SDK12_3/ Script_SDK12_S130_nRF51.rar”,然后按照上述52832的步驟來實現51822的OTA DFU。

后面我們會以SDK15.0.0 ble_app_uart為例,詳細闡述如何把ble_app_buttonless_dfu的DFU功能移植到ble_app_uart上,從而讓ble_app_uart也具有DFU功能,有興趣的的讀者請參考第3章。注意:SDK12.3.0 DFU原理跟SDK15.0.0非常相似,大家可以依葫蘆畫瓢,完成SDK12.3.0的DFU移植工作。

?

2.4 nRF5 SDK v11.0.0 OTA

SDK11使用的是明文OTA DFU,其DFU是基于例程ble_app_hrs來實現的,并同時支持nRF52832和nRF51系列。下面以nRF52832為例來闡述DFU過程。

nRF52832 OTA

請大家先到百度云盤下載壓縮包:DFU/SDK11_0/ Script_SDK11_S132_nRF52.rar”并解壓,然后對照以下步驟進行操作:

1)?????? 編譯bootloader代碼,請編譯目錄“nRF5_SDK_11.0.0_89a8197\examples\dfu\bootloader\pca10040\dual_bank_ble_s132\arm5_no_packs”中的工程,將hex改為bootloader.hex

2)?????? 編譯app,請編譯目錄“nRF5_SDK_11.0.0_89a8197\examples\ble_peripheral\ble_app_hrs\pca10040\s132_with_dfu\arm5_no_packs”中的工程,將hex改為app.hex

3)?????? 將softdevice,bootloader和app三者同時下載到設備中,另外我們還需要在Flash中寫一個app有效標志位,從而上電后程序直接跑到app執行,而不是停留在bootloader中不出來。我已經把相關燒寫腳本:mass_program.bat放在百度云盤中,大家直接雙擊就可以完成本步操作。

4)?????? 將新image打包成一個zip包。除了包含新image,該zip包還包含一些配置信息。升級時,zip包會通過云端下發到手機端app,手機端app再把zip包傳給藍牙設備以進行固件升級。請使用老版本nrfutil(版本號0.3.0)來生成該升級包(注:老版本nrfutil在目錄“C:\Program Files (x86)\Nordic Semiconductor\nRFgo Studio”中)。我已經把相關生成腳本zip_generate.bat放在百度云盤上,大家直接雙擊就可以完成本步操作,并生成SDK11_app_s132.zip。

5)?????? 把上述的‘SDK11_app_s132.zip’拷到手機中,安卓和蘋果手機都可以通過微信的‘文件傳輸助手’拷過去,非常方便。注:手機nRF Connect和nRF Toolbox都支持DFU功能,蘋果手機拷貝的時候可以隨便選擇其中一個app。

6)?????? 使用nRF Connect或者nRF Toolbox來完成DFU過程。這里以nRF Connect為例來闡述整個升級過程。

  • DK廣播為Nordic_HRM

?

  • 連接該設備,并使能CCCD,然后選擇“DFU”

?

?

  • 選擇升級用的zip包。有些安卓系統自帶的文件瀏覽器會有問題,建議使用ES explorer來選擇zip,如下:

?

?

?

?

  • 開始升級

?

?

  • 升級成功,設備將自動啟動,此時你會看到新image已經在運行,廣播名字也變成Nordic_HRM_new,如下:

?

?

?

nRF51系列OTA

nRF51822 OTA DFU實現過程跟上述的nRF52832基本上一模一樣,唯一不同的是選擇pca10028目錄,我已把相關腳本打包并放在百度云盤中,請直接下載“DFU/SDK11_0/ Script_SDK11_S130_nRF51.rar”,來實現nRF51系列 OTA。

如果你的應用是基于SDK11開發的,并且需要集成DFU功能,請參考上述例子ble_app_hrs來移植DFU功能,主要工作包括兩部分:一把BLE_DFU_APP_SUPPORT這個宏包括的所有代碼拷到你的工程中,二如果你的設備支持bonding的話,還需把Device manager相關代碼也拷到你的工程中,如此即可完成DFU功能的移植。

3. 給ble_app_uart加上OTA功能

為了讓ble_app_uart具有DFU功能,有2種做法,一是把NUS服務移植到ble_app_buttonless_dfu中,這種方法相對來說更簡單,但不利于理解DFU的移植原理;二是把DFU服務移植到ble_app_uart中,我們現以第2種做法來詳細闡述如何在SDK15.0.0中把DFU服務移植到ble_app_uart中。

3.1 正常連接OTA(無bonding)

1)???? 打開如下工程:nRF5_SDK_15.0.0_a53641a\examples\ble_peripheral\ble_app_uart\pca10040\s132\arm5_no_packs

2)???? 添加DFU服務。代碼如下:

#ifdef DFU_SUPPORTble_dfu_buttonless_init_t dfus_init = {0};// Initialize the async SVCI interface to bootloader. err_code = ble_dfu_buttonless_async_svci_init();APP_ERROR_CHECK(err_code); dfus_init.evt_handler = ble_dfu_evt_handler; err_code = ble_dfu_buttonless_init(&dfus_init);APP_ERROR_CHECK(err_code);#endif

?

定義ble_dfu_evt_handler,大家只要按照要求來,就沒問題,這里就不貼代碼了。

Nordic對每一個模塊都有一個編譯總開關,因此還需到sdk_config.h中使能DFU模塊,如下:

#ifndef BLE_DFU_ENABLED#define BLE_DFU_ENABLED 1#endif// <q> NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS - Buttonless DFU supports bonds. #ifndef NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS#define NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS 0#endif

?

3)???? 修改softdevice配置。現在整個應用包括2個vs_uuid:NUS和DFU,相應地ATT table size也要變大,然后應用程序RAM起始地址也需要跟著變,如下(注:這里的attr_tab_size設置得稍稍偏大):

// <o> NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. #ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE#define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1600#endif// <o> NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. #ifndef NRF_SDH_BLE_VS_UUID_COUNT#define NRF_SDH_BLE_VS_UUID_COUNT 2#endif

?

修改應用程序RAM起始地址,如下:

?

4)???? 添加上述函數涉及到的文件,宏定義及包含相關目錄。首先添加如下DFU目錄及相關文件:

?

在define中添加這些宏:DEBUG DFU_SUPPORT BL_SETTINGS_ACCESS_ONLY NRF_DFU_SVCI_ENABLED NRF_DFU_TRANSPORT_BLE=1,其中DEBUG宏只是為了調試方便而設置的,跟DFU本身無關。DFU_SUPPORT是我用來控制我添加的DFU代碼的,刪掉DFU_SUPPORT,將不編譯所有DFU有關代碼。其余的宏都是系統自帶的,如果要支持DFU,也是必須要定義的。

?

然后包含如下目錄:

?

?

5)???? 在main.c中添加如下頭文件定義:

#ifdef DFU_SUPPORT#include "ble_dfu.h"#endif

?

6)???? 在跳轉到bootloader之前,如果你想做一些專門的代碼處理,比如完成pending的Flash操作,比如關閉某些模塊,那么你可以注冊一個app_shutdown_handler來做這些工作。(注:這一步不是必須的,是可選的!)

NRF_PWR_MGMT_HANDLER_REGISTER(app_shutdown_handler, 0);

?

7)???? 編譯工程,將hex改為“app.hex”

8)???? 按照2.1節“nRF5 SDK v15.0.0 OTA”步驟來執行OTA過程,你會發現ble_app_uart已經具備DFU功能了。我已把OTA過程所有步驟打成一個包:Script_SDK15_S132_NUS_NoBonding.rar,大家可以到百度云盤去下載。

3.2 bonding連接OTA

我們在3.1節基礎上,再加上bonding功能,以讓ble_app_uart同時支持DFU和bonding。

1)???? 打開3.1節的工程

2)???? 添加如下文件:

?

3)???? 在main函數中添加peer_manager_init,定義如下:

static void peer_manager_init(){ble_gap_sec_params_t sec_param;ret_code_t err_code;err_code = pm_init();APP_ERROR_CHECK(err_code);memset(&sec_param, 0, sizeof(ble_gap_sec_params_t));// Security parameters to be used for all security procedures. sec_param.bond = SEC_PARAM_BOND;sec_param.mitm = SEC_PARAM_MITM;sec_param.lesc = SEC_PARAM_LESC;sec_param.keypress = SEC_PARAM_KEYPRESS;sec_param.io_caps = SEC_PARAM_IO_CAPABILITIES;sec_param.oob = SEC_PARAM_OOB;sec_param.min_key_size = SEC_PARAM_MIN_KEY_SIZE;sec_param.max_key_size = SEC_PARAM_MAX_KEY_SIZE;sec_param.kdist_own.enc = 1;sec_param.kdist_own.id = 1;sec_param.kdist_peer.enc = 1;sec_param.kdist_peer.id = 1;err_code = pm_sec_params_set(&sec_param);APP_ERROR_CHECK(err_code);err_code = pm_register(pm_evt_handler);APP_ERROR_CHECK(err_code);}

?

然后將上面新出現的符號定義一一拷貝過來,這里不再贅述

4)???? 修改advertising_start定義,增加刪除bonding信息功能(如果你不需要這個功能,也可以不改)

static void advertising_start(bool erase_bonds) {if (erase_bonds == true){delete_bonds();// Advertising is started by PM_EVT_PEERS_DELETE_SUCCEEDED event. }else{uint32_t err_code = ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);APP_ERROR_CHECK(err_code);NRF_LOG_DEBUG("advertising is started");} }

?

5)???? 修改allow_repairing = true,這一步也是可選的。allow_repairing = true的好處是,當手機端的bonding信息被用戶誤刪掉了,設備會允許這臺手機的第二次配對bonding請求。如果allow_repairing = false,在這種情況下,就會拒絕手機的第二次配對請求,以提高安全性。

6)???? 在main.c文件開頭,包含如下頭文件:

#include "peer_manager.h"

?

7)???? 在ble_evt_handler中刪除BLE_GAP_EVT_SEC_PARAMS_REQUEST分支,因為這個分支在peer_manager模塊中已經進行處理了,這里再處理一次,會產生異常:

// case BLE_GAP_EVT_SEC_PARAMS_REQUEST:// // Pairing not supported// err_code = sd_ble_gap_sec_params_reply(m_conn_handle, BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP, NULL, NULL);// APP_ERROR_CHECK(err_code);// break;

?

8)???? 將ble_nus.c文件從\components目錄中拷出來,放在自己工程目錄下,因為我們接下來需要對它進行修改,后續項目直接引用自己的ble_nus,而不要再引用components目錄下的原始文件了。將TX characteristic的CCCD寫屬性從open改為加密,這樣將自動觸發手機端的bonding請求,修改代碼如下:

BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(&cccd_md.write_perm);

?

9)???? 修改sdk_config.h文件,需要修改多個地方,如下:

#define PEER_MANAGER_ENABLED 1#define FDS_ENABLED 1#define NRF_SDH_BLE_SERVICE_CHANGED 1#define NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS 0

?

請注意NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS可以為0,也可以為1,兩種情況下,DFU成功后,bonding信息都可以保持。兩者的區別是,當NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS為0,進入DFU模式后,bootloader將用普通模式跟手機相連,這種方式兼容性好,可靠性高,但安全等級稍低;當NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS為1時,bootloader將共享application的bonding信息,也就是說,哪怕進入bootloader模式,設備還是跟手機處于bonding狀態,這種方式安全級別比較高,但容易產生兼容性問題,極端情況下,如果DFU過程中用戶把手機端的bonding信息刪除,系統將會變磚,而且無法恢復。推薦將NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS設為0,以獲得最好的兼容性和可靠性。

?

如果你在應用中把NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS設為1,那么還需要添加ble_dfu_bonded.c文件,如下:

?

?

而且,如果NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS設為1,那么bootloader代碼也就不能采用默認配置,請修改bootloader工程中的sdk_config.h如下宏定義,然后重新編譯生成新的bootloader hex。

#define NRF_DFU_BLE_REQUIRES_BONDS 1#define NRF_SDH_BLE_SERVICE_CHANGED 1

?

10)? 在C/C++ define里面定義“BONDING_SUPPORT”宏。

11)? 編譯工程,將hex改為app.hex

12)? 按照2.1節“nRF5 SDK v15.0.0 OTA”步驟來執行OTA過程,不過如下幾點需要注意:

    • 在nRF Connect中勾選“keep bond information”選項,如下:

?

?

    • 當你使能CCCD的時候,手機將會自動與設備進行bonding,如下

?

?

    • DFU升級成功后,設備將會與手機自動重連,此時需點擊“Refresh services”,以獲得設備最新服務列表,如下:

?

?

上述代碼工程我已打包成:OTA_ble_app_uart_SDK15_0_0.rar,另外三種DFU模式對應的腳本,我也打成了包,其中沒有bonding對應Script_SDK15_S132_NUS_NoBonding.rar,application單獨bonding對應Script_SDK15_S132_NUS_Bonding_SUPPORTS_BONDS_0.rar,application和bootloader同時bonding對應Script_SDK15_S132_NUS_Bonding_SUPPORTS_BONDS_1.rar,請大家到百度云盤目錄DFU\ble_app_uart中下載。代碼工程解壓縮到nRF5_SDK_15.0.0_a53641a\examples\ble_peripheral這個目錄下,就可以直接編譯和運行。

轉載于:https://www.cnblogs.com/iini/p/9314246.html

總結

以上是生活随笔為你收集整理的如何实现蓝牙空中升级BLE OTA的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品欧美 | 成年人免费电影 | 国产伦精品一区二区三区在线 | 伊人www22综合色 | 国产精品视频免费观看 | 麻豆视频在线免费 | 91资源在线观看 | a视频免费看 | 天天射天天操天天干 | 久久成人高清视频 | 久草久草视频 | 日韩免费中文字幕 | 狠狠色伊人亚洲综合成人 | 激情欧美一区二区免费视频 | 成人在线免费小视频 | 久碰视频在线观看 | 91视频啊啊啊 | 9在线观看免费高清完整 | 中文字幕av最新更新 | www.午夜视频 | 欧美亚洲成人免费 | 成人av在线网 | 九色福利视频 | 日韩剧| 日韩免费一区二区三区 | 永久免费的av电影 | 成人av影视观看 | 日日夜夜91 | 亚洲第一区精品 | 天天躁日日| 日韩精品视频一二三 | 色天天中文 | 正在播放国产91 | 天天爽夜夜爽精品视频婷婷 | 久久99国产精品二区护士 | 日韩在观看线 | 不卡的av电影 | 亚洲精品视频大全 | 九九免费观看全部免费视频 | 中文字幕亚洲在线观看 | 黄色成人在线 | 免费人人干 | 美女一二三区 | 日韩av电影一区 | 97在线看| 久久久久国产精品一区二区 | 亚洲欧美国产精品久久久久 | 98超碰人人 | 精品国精品自拍自在线 | 日日操网 | 奇米网网址 | 久久视频这里有精品 | av视屏在线 | 91免费看片黄| 黄色三级免费片 | 麻豆免费看片 | 久久天天综合网 | 国产麻豆果冻传媒在线观看 | 99久久久国产精品免费观看 | 成人九九视频 | 久久大片网站 | 91精品国产欧美一区二区成人 | 国产免费叼嘿网站免费 | 亚洲日韩欧美一区二区在线 | 久久久久久不卡 | 91超在线 | 97在线资源| 天天操夜夜逼 | 中文在线8资源库 | 日韩a在线播放 | www.福利视频 | 亚洲影院色| 久久久国产精品人人片99精片欧美一 | 婷婷激情站 | 婷婷色伊人 | 婷婷深爱激情 | 亚洲成av人片一区二区梦乃 | 91视频国产免费 | 成人一级在线 | 日本久久综合视频 | 欧美日韩精品在线观看视频 | 日本激情中文字幕 | 午夜av电影院| 国产精品高清一区二区三区 | 日韩精品久久久久久久电影99爱 | av电影免费看 | 黄色三级网站在线观看 | 久久国产精品99国产精 | 免费人成网ww44kk44 | 久久久久一区二区三区 | 日韩久久精品一区 | 摸bbb搡bbb搡bbbb | 曰韩精品| 99视频免费在线观看 | 在线电影播放 | 中文字幕大全 | 美女一区网站 | 精品久久网站 | 国产精品99精品 | 欧美亚洲成人xxx | 一级欧美日韩 | 国产视频色 | 激情狠狠干 | 中文字幕二区在线观看 | 午夜精品视频免费在线观看 | 麻豆传媒视频观看 | 欧美亚洲精品在线观看 | 九九三级毛片 | 97超在线视频 | 国产精品久久久久久久久久妇女 | 夜夜操综合网 | 欧美精品xxx | 久久电影网站中文字幕 | 天天综合导航 | 成 人 黄 色 免费播放 | 激情自拍av| 天天爽人人爽 | 一区三区视频在线观看 | 一区二区三区四区五区在线 | 久久午夜视频 | 在线免费观看涩涩 | 亚洲精欧美一区二区精品 | 97视频在线 | 精品久久久国产 | 新版资源中文在线观看 | 天天干天天操av | 欧美怡红院视频 | 激情黄色一级片 | 91tv国产成人福利 | 欧美精品中文字幕亚洲专区 | 亚洲欧美视频一区二区三区 | 欧美色图狠狠干 | 亚洲国产欧美一区二区三区丁香婷 | 人人爱在线视频 | 日本在线观看中文字幕无线观看 | 6080yy精品一区二区三区 | 天天躁日日躁狠狠躁av中文 | 人人躁 | a天堂中文在线 | 亚洲国产精品500在线观看 | 婷婷视频在线播放 | 久久午夜网 | 国产午夜剧场 | 国产一区在线视频观看 | 免费视频一二三 | 国产精品久久久久久久久久久久午夜 | 激情图片久久 | 人人玩人人添人人澡超碰 | 欧美在线观看视频一区二区三区 | 人人插人人搞 | 瑞典xxxx性hd极品 | 在线观看免费版高清版 | 91在线小视频 | 国产精品免费一区二区三区 | 一区二区伦理电影 | 欧美精品一二三 | 天天操天天色天天射 | 日韩欧美国产成人 | 国产91粉嫩白浆在线观看 | 成人av.com| 精品国产一区二区三区久久久蜜月 | 四虎伊人 | 日韩毛片在线一区二区毛片 | 高清中文字幕 | 国产91对白在线播 | 久久 在线 | 国产成人在线一区 | 人人插人人澡 | 日韩在线视频免费观看 | 亚洲伦理一区二区 | 99免费在线视频 | 日本三级在线观看中文字 | 香蕉精品视频在线观看 | 日韩超碰 | 玖玖在线播放 | 99国产精品免费网站 | 久久这里| 在线91精品 | 国产亚洲婷婷 | 日韩欧美一区二区三区黑寡妇 | 亚洲精品在线观看不卡 | 日韩精品免费在线观看 | 日日夜日日干 | 国产成人精品久久亚洲高清不卡 | 久久久久久久久久国产精品 | 天天干夜夜操视频 | 丁香婷婷综合五月 | 综合色狠狠 | 黄色片视频在线观看 | 色在线国产 | 黄色软件网站在线观看 | 久久在线观看 | 久久这里只精品 | 91.精品高清在线观看 | 中文在线a在线 | 国内成人精品视频 | 精品欧美一区二区精品久久 | 亚洲精品综合一区二区 | 日韩精品一区二区三区在线播放 | 97在线精品国自产拍中文 | 麻豆91在线看| 免费网站v | 天天爽夜夜爽人人爽一区二区 | 日韩午夜一级片 | 欧美日韩啪啪 | 成人精品一区二区三区中文字幕 | 久草网站在线 | 中文字幕国产在线 | 色插综合| www.com久久| 亚洲精品美女视频 | 黄色一级大片在线免费看产 | 丁香六月天婷婷 | 欧美午夜精品久久久久久孕妇 | 久久香蕉国产精品麻豆粉嫩av | 日韩精品免费在线播放 | 日韩国产欧美视频 | 超碰免费在线公开 | 亚洲情影院 | 日韩在线中文字幕 | 成人在线一区二区三区 | 91成人蝌蚪| 中国一级片在线观看 | 国产美女视频网站 | 精品久久久久免费极品大片 | 久久久午夜精品福利内容 | 丁香六月伊人 | 国产精品久久网站 | 9色在线视频 | 色婷婷久久久 | 涩涩在线| 九九在线视频 | 成人免费观看网站 | 欧美成人h版 | 美女网站久久 | 99精品国产兔费观看久久99 | 激情av在线资源 | 中日韩免费视频 | 亚洲精品久久久久中文字幕m男 | 中文国产成人精品久久一 | 五月激情丁香婷婷 | 久久国产一区二区三区 | 欧洲不卡av| 国产品久精国精产拍 | 中文字幕a∨在线乱码免费看 | 欧美国产日韩一区二区三区 | 九九视频精品免费 | 波多野结衣最新 | 97天天综合网 | 欧美日本在线观看视频 | 91av资源网| www.香蕉视频| 亚洲国产高清在线观看视频 | 国产拍在线 | 粉嫩高清一区二区三区 | av看片在线| 午夜精品久久久久 | 亚洲精品国精品久久99热 | 国产理论免费 | 99这里有精品| 最新日韩在线观看视频 | 99视频在线看 | 999久久| 97超碰在线久草超碰在线观看 | 成人av一区二区兰花在线播放 | 在线免费看黄色 | www视频在线播放 | 丁香花五月| 久久1区| 国内精品久久影院 | 27xxoo无遮挡动态视频 | 色丁香综合 | 久久国产欧美日韩 | 91在线区 | 日韩一区二区三区在线看 | 久草观看视频 | 国产精品国产三级国产不产一地 | 在线小视频国产 | 国产精品久久久久久一二三四五 | 91在线免费播放 | www91在线观看| 欧美国产不卡 | 91福利视频免费观看 | 色婷婷视频网 | av在线播放国产 | 日韩免费电影一区二区 | 99久久久久久国产精品 | 97精品国产手机 | 国产精品资源网 | 日韩欧美精品一区二区 | 黄色免费视频在线观看 | 综合五月| 91在线免费观看网站 | 欧美一性一交一乱 | 国内偷拍精品视频 | 91精品办公室少妇高潮对白 | 国产精品一区二区免费 | 不卡的av在线 | 精品在线观 | 久久视频网址 | 日本精品久久 | 日日射av | 69人人| 中文区中文字幕免费看 | 久久影视一区 | 国产美女精品人人做人人爽 | 欧美综合在线视频 | 欧美黄色软件 | 午夜狠狠干| 五月婷婷毛片 | 日韩大片在线播放 | 啪啪免费视频网站 | 久草在线在线视频 | 精品久久久久国产免费第一页 | 亚洲a免费 | 久久精品五月 | 国产精品theporn | 亚洲人成人在线 | 国产精品久久久久久久久久免费看 | 在线观看一区二区精品 | 99热最新网址 | 一区二区影院 | 色久五月| 91探花国产综合在线精品 | 中文字幕在线免费看线人 | 亚洲精品在线网站 | 中文字幕乱码电影 | www.久久视频 | 天天干天天摸 | 深爱激情五月综合 | 美女av免费 | 欧美污污视频 | 97爱爱爱| 一本一道久久a久久精品 | 精品一区电影国产 | 久久综合国产伦精品免费 | 亚洲午夜精品一区二区三区电影院 | 天天激情天天干 | 91免费看片黄 | 91av电影| 操处女逼 | 黄网站色 | 亚洲精品资源在线 | 国产福利一区二区在线 | 亚洲国产精品视频 | 亚洲精品资源在线观看 | 韩国av免费在线 | 一区二精品 | 五月天亚洲婷婷 | 六月丁香伊人 | 久草久草在线观看 | 99久久精品国产一区二区成人 | 婷婷成人亚洲综合国产xv88 | 久久成人午夜 | 国产精品毛片一区二区在线 | 国产专区视频 | 精品不卡av | 五月天激情视频在线观看 | 亚洲片在线观看 | 欧美色图视频一区 | 久久五月婷婷丁香 | 久久国产精品区 | 国产精品女同一区二区三区久久夜 | 国产精品精品国产婷婷这里av | 97**国产露脸精品国产 | 超碰官网 | 国产在线欧美日韩 | 麻豆 videos | 99av在线视频| 久久久久久久久艹 | av黄色在线观看 | 99国产精品久久久久久久久久 | www.亚洲精品在线 | 中文字幕高清免费日韩视频在线 | 九九热视频在线播放 | 狠狠色丁香婷婷综合橹88 | 日韩一区精品 | 一区二区三区免费在线播放 | 午夜久久福利 | 免费网站v| 天天综合中文 | 久久精品屋 | 人人艹视频 | 国产精品欧美一区二区三区不卡 | 黄色毛片观看 | 九九免费精品视频 | 日韩久久精品 | 亚洲国产免费看 | 五月天电影免费在线观看一区 | 日韩久久一区二区 | 午夜成人影视 | 一区二区三区电影在线播 | 久久综合网色—综合色88 | 天天射天| 国产精品免费一区二区三区 | 日韩精品国产一区 | 97激情影院 | 日韩精品欧美视频 | 亚洲精品乱码久久 | 国产视频 亚洲精品 | 欧美国产日韩激情 | 欧美大片aaa | 成人久久18免费网站图片 | 精品视频久久久 | 国产在线观看91 | 久久久www免费电影网 | 手机av电影在线 | 免费三级骚 | 97av精品 | 成人四虎影院 | 伊甸园av在线 | 99夜色| 亚洲综合小说电影qvod | 日韩中文在线字幕 | 国产精品免费在线播放 | 久久久久亚洲精品 | 国产一级免费视频 | 1024手机在线看 | 一区二区三区四区在线 | 激情视频免费在线观看 | 一区二区欧美激情 | 久精品视频在线观看 | 91视频免费看 | 久久手机在线视频 | 中文在线中文a | 久久综合亚洲鲁鲁五月久久 | 黄色影院在线免费观看 | 日本视频不卡 | www国产一区| 亚洲激情久久 | 在线观看精品一区 | 亚洲精品www久久久久久 | www.91国产| 中文av在线免费观看 | 亚洲综合视频在线 | 色婷婷中文| 久久免费国产电影 | 黄色电影网站在线观看 | 日韩中文字幕免费看 | 天天干天天操天天操 | 欧美一区二区三区在线看 | 五月天电影免费在线观看一区 | av解说在线观看 | 99久久精品国产亚洲 | 在线观看深夜视频 | 激情视频一区 | 国产一区在线看 | 国产二区精品 | 激情五月六月婷婷 | 亚洲理论电影 | 97av色| 久久国产精品一区二区三区四区 | 色中色资源站 | 欧美日韩一区二区在线观看 | 97超视频 | 久草视频在线免费播放 | 久草在线综合网 | av在线网站大全 | 九九99 | 久久精品国产一区二区三区 | 91av视频免费在线观看 | 成年人视频在线观看免费 | 97免费视频在线 | 国产色视频一区 | 国产不卡一二三区 | 亚洲成人av电影 | 日本午夜在线亚洲.国产 | 日韩在线视频观看免费 | 91精品高清 | 国产成人久久精品77777综合 | 日本在线观看一区二区 | 久久久亚洲网站 | av在线电影播放 | 91成人精品视频 | 国内三级在线观看 | 中文字幕一区二区三区久久蜜桃 | 国产精品一区二区62 | 欧美片网站yy | 99热精品久久 | 国产69精品久久99不卡的观看体验 | 国产在线 一区二区三区 | 18久久久久久 | 91免费在线视频 | 国产高清免费观看 | 亚洲伦理一区二区 | 久久久精品免费看 | 精品视频久久 | av亚洲产国偷v产偷v自拍小说 | 麻豆一级视频 | 国产激情小视频在线观看 | 国产精品嫩草影院99网站 | 亚洲综合爱 | 国产精品va在线观看入 | 日本一区二区不卡高清 | 天天干夜夜夜操天 | 久色婷婷| 国产视频资源 | 九九在线视频 | 国产一级片毛片 | 天天天综合 | 国内精品久久久久影院一蜜桃 | 国产日韩精品一区二区三区在线 | 97人人看 | 国产偷v国产偷∨精品视频 在线草 | 欧美日韩中文字幕综合视频 | 国产精品爽爽爽 | 亚洲黄色在线观看 | 精品自拍sae8—视频 | 91中文在线视频 | 久久久精品成人 | 99久久婷婷国产一区二区三区 | 日韩精品免费在线播放 | 国产视频网站在线观看 | 九九九视频在线 | 天天干一干 | 国产精品美女免费看 | 成人黄色电影在线播放 | 中文字幕高清在线播放 | 成人电影毛片 | 国产一级黄色电影 | 综合婷婷丁香 | 在线亚洲免费视频 | 婷婷中文字幕在线观看 | 在线免费观看不卡av | 天天操夜| 91porny九色在线播放 | 天天干天天操天天搞 | 日本特黄特色aaa大片免费 | 91在线播放国产 | 欧美影片| 亚洲高清av在线 | 久久久精品国产免费观看一区二区 | 国产一二区免费视频 | 激情久久综合网 | 精品视频999 | 狠狠狠狠狠狠操 | 成人精品一区二区三区中文字幕 | 欧美精品久久久久久久久免 | 成人毛片a | 日韩av区| 黄色大片中国 | 视频国产在线 | 久久精品一区二区三区国产主播 | 在线免费中文字幕 | 国产免费观看久久 | 欧美巨乳波霸 | 午夜在线免费视频 | 精品一区二区在线免费观看 | 欧美日韩精品综合 | 四虎5151久久欧美毛片 | 国产高清一级 | 国产日韩欧美在线观看视频 | 日日干天天插 | 午夜视频在线观看一区二区 | 国模一二三区 | 亚洲黄色一级视频 | 国产一区二区在线免费播放 | 国产精品欧美久久久久无广告 | 成人a视频在线观看 | www激情com| 欧美午夜剧场 | 亚洲综合色视频在线观看 | 国产欧美精品xxxx另类 | av再线观看 | 人成电影网 | 亚洲免费资源 | 国产视频欧美视频 | 日韩在线免费视频 | 久久精品在线视频 | 中文字幕国产一区 | 亚洲国产mv | 国产福利精品在线观看 | 免费在线激情电影 | 99热这里只有精品1 av中文字幕日韩 | 成人小视频在线播放 | 国内精品视频在线播放 | 激情久久影院 | av网站手机在线观看 | 中文在线最新版天堂 | 91中文字幕在线观看 | 国产999视频在线观看 | 青草视频在线 | 久久精品国产一区二区三区 | 久色网| 国产精品99久久久久的智能播放 | 国产精品视频线看 | 久久久国产精品人人片99精片欧美一 | 色99视频| 精品福利av | 天天干天天干天天 | 中文字字幕在线 | 欧美日韩国产一区 | 韩国精品一区二区三区六区色诱 | 国产精品久久久久久久av大片 | 搡bbbb搡bbb视频 | 国产成人黄色 | 国产精品久久久久久久久久妇女 | 三级黄色a | 五月婷久| 日韩中文字幕免费视频 | 中文字幕丝袜美腿 | 日韩精品一区二区三区视频播放 | 免费a v在线 | 亚洲一二视频 | 久久这里只有精品视频首页 | 国产女人18毛片水真多18精品 | 久草在线视频新 | 91精品国产成人观看 | 日韩高清在线一区二区三区 | 狠狠干婷婷 | 亚洲成人黄色 | 美女网站视频免费黄 | 成人精品视频 | 91亚洲精品乱码久久久久久蜜桃 | 欧美精品乱码久久久久久 | 免费看的黄色录像 | 92中文资源在线 | 久久不射影院 | 91探花国产综合在线精品 | 欧美坐爱视频 | 国产精品成人自产拍在线观看 | 久草在线看片 | av大片免费 | 久精品视频免费观看2 | 婷婷色网站 | 国产一卡久久电影永久 | 麻豆国产精品va在线观看不卡 | 中文字幕av有码 | 最近日本韩国中文字幕 | 亚洲精品美女久久17c | 亚洲成人av电影 | 日本午夜在线亚洲.国产 | 狠狠色丁香久久婷婷综合丁香 | 国产亚洲va综合人人澡精品 | 日韩精品一区二区三区电影 | 在线视频在线观看 | 亚洲激情网站免费观看 | 色欧美88888久久久久久影院 | 日韩不卡高清视频 | 欧美午夜剧场 | 亚洲欧美在线综合 | 波多野结衣视频一区 | 在线激情网 | 久久久www成人免费毛片麻豆 | 97电影在线观看 | 中文在线www | 国产成人av免费在线观看 | 久久99精品波多结衣一区 | 国产在线中文 | 精品久久久久久国产 | 免费人成在线观看网站 | 亚洲最新视频在线播放 | 精品久久久久久国产 | 久久影视中文字幕 | 欧美一区二区三区在线 | www在线观看视频 | 国产999视频在线观看 | 91九色最新地址 | 精品国产区在线 | 国产精品第一页在线 | 日韩精品一区二区三区在线视频 | 探花在线观看 | 在线天堂中文www视软件 | 91片黄在线观 | 欧美精品一区二区蜜臀亚洲 | 欧美久久久久久久久久久久 | 色视频在线免费 | 免费无遮挡动漫网站 | 日韩高清免费观看 | 69视频永久免费观看 | 色视频国产直接看 | 日日爱av| 天天操天天摸天天射 | 午夜精品一二三区 | www.久久久.com | 久久综合桃花 | 午夜免费在线观看 | 亚洲片在线观看 | av888.com| 亚洲va欧美va人人爽 | 8x成人在线 | 欧美 日韩精品 | 久久免费国产电影 | 国产偷v国产偷∨精品视频 在线草 | 黄色毛片电影 | 色婷婷综合久色 | 91在线永久 | 青青草国产精品 | 国产色视频123区 | 久久 亚洲视频 | 日韩a在线播放 | 91人人爽久久涩噜噜噜 | 不卡中文字幕av | 天天爱天天操 | 西西4444www大胆无视频 | 亚洲精品国产精品国自产在线 | 天天操天天干天天插 | 国产亚洲资源 | 日韩成人不卡 | 久久久噜噜噜久久久 | 亚洲视频电影在线 | 91成人精品国产刺激国语对白 | 91成人精品一区在线播放 | 久久久网站 | 国产精品成人久久久 | av片子在线观看 | 三三级黄色片之日韩 | 手机av在线网站 | 91成人免费观看视频 | 国产精品麻豆果冻传媒在线播放 | 91在线免费观看国产 | 97超碰在| 国产高清av | 国产99久久九九精品免费 | 午夜久久网站 | 国产成人精品一二三区 | 91精品国产自产在线观看 | 美女福利视频网 | 成人污视频在线观看 | 亚洲狠狠干 | 欧美三级免费 | 国产精品毛片一区二区 | 亚洲va欧美 | 欧美日韩亚洲在线观看 | 亚洲国产欧洲综合997久久, | 久久免费视频在线观看6 | 公与妇乱理三级xxx 在线观看视频在线观看 | 4438全国亚洲精品观看视频 | 波多野结衣视频一区二区三区 | 国产黄色一级片 | 91最新在线视频 | 国产精品久久久久四虎 | 免费一级特黄录像 | 日韩精品首页 | 中文字幕国产视频 | 亚洲视频免费 | 97爱| 久久高清av | 欧美二区视频 | 国产伦精品一区二区三区免费 | 国产在线观看你懂得 | 日本在线视频一区二区三区 | 日韩精品一区二区电影 | 特级西西www44高清大胆图片 | 国产午夜亚洲精品 | 九九九热精品 | 人人插人人草 | 亚洲国产中文字幕 | 欧美国产日韩一区二区 | 人人干在线 | 久久精品三级 | 亚洲美女视频在线 | 成人xxxx | 国产精品手机看片 | 日日夜日日干 | 亚洲电影影音先锋 | 欧美一级视频免费看 | 久久久久久久久久福利 | 97视频资源 | 国产99re| 日本久久成人 | a成人v | 国产一区在线精品 | 黄色小说网站在线 | 最新av中文字幕 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 色综合天 | 久久精品福利 | 毛片99 | 91福利影院在线观看 | 欧美中文字幕第一页 | 日三级在线 | 精品91在线| 丰满少妇在线观看网站 | 国内外成人免费在线视频 | av在线一二三区 | 午夜日b视频 | 亚洲黄色免费在线 | 99久久精品免费看国产麻豆 | a级国产乱理伦片在线观看 亚洲3级 | 欧美日韩成人 | 日韩视频一| 中文字幕一区二区三 | 狠狠色丁香久久婷婷综 | 亚洲一区网站 | 四季av综合网站 | 日韩特级毛片 | 91在线91拍拍在线91 | 国产色视频网站 | 麻花豆传媒mv在线观看 | 中文字幕黄色网 | 日韩av看片 | 成人h在线观看 | 91免费观看视频在线 | 中国精品一区二区 | 久久影视网 | 日韩中文在线电影 | www.伊人网 | 久久免费观看视频 | 国产无吗一区二区三区在线欢 | 日韩三级免费 | 激情网站| 手机在线看永久av片免费 | 中文字幕日韩免费视频 | 免费视频91蜜桃 | 国产精品18久久久久久久久 | 91av亚洲 | 国产亚洲精品无 | 亚洲精品永久免费视频 | 超碰在线日韩 | 久久伦理 | 日韩色区 | 亚洲精品合集 | 国产精品日韩精品 | 91福利区一区二区三区 | 色吧av色av| 欧美日韩在线播放一区 | 久草爱| 日本黄色大片免费 | 日韩视频免费 | 亚色视频在线观看 | 97成人在线观看 | 天天爱天天操 | 六月色婷婷 | 丁香婷婷激情国产高清秒播 | 91精品视频免费 | 五月天六月婷 | 欧美aa在线 | a级国产乱理伦片在线观看 亚洲3级 | 在线观看一区二区精品 | 日韩网站在线免费观看 | 91高清不卡 | 99视频精品 | 久久久久久久久久久综合 | 蜜桃麻豆www久久囤产精品 | 黄色大片日本免费大片 | 国产精品久久免费看 | 91 中文字幕 | 精品亚洲成人 | 欧美日韩中文字幕在线视频 | 911国产精品 | 中文字幕资源在线观看 | 精品福利视频在线 | 精品中文字幕在线播放 | 99亚洲精品在线 | 亚洲精品黄色片 | 日韩成人看片 | 天天艹 | 久久精品一二三区白丝高潮 | 亚洲资源在线网 | 国产成人免费观看久久久 | 在线免费观看国产 | 亚洲综合少妇 | 久久高清免费视频 | 久草视频看看 | 亚洲成人av电影 | 国产在线 一区二区三区 | 一区二区三区免费在线观看视频 | 91传媒在线 | 91精品日韩 | 蜜臀久久99精品久久久无需会员 | 日韩三级不卡 | 99精品国产99久久久久久福利 | 中文字幕丝袜美腿 | 成人一区二区三区中文字幕 | 在线观看免费一区 | 午夜av免费在线观看 | 91成年人在线观看 | 色婷婷骚婷婷 | 欧美精品一区二区三区一线天视频 | a√天堂中文在线 | 免费观看一级一片 | 男女日麻批 | 视频成人免费 | 香蕉视频在线免费 | 97精品国产91久久久久久久 | 色先锋av资源中文字幕 | 91视视频在线直接观看在线看网页在线看 | 亚洲片在线观看 | 午夜精品一区二区三区在线观看 | 97中文字幕 | 99视频在线免费播放 | 99国产精品一区二区 | 日韩两性视频 | 999视频精品| 成人在线视频观看 | 日韩欧美区 | 国产亚洲一区 | 免费人成在线观看网站 | 97成人在线观看 | 久久精品一二三区白丝高潮 | 亚洲天天干 | 青草视频在线免费 | 国产资源在线免费观看 | 精品xxx| 在线观看第一页 | 在线亚洲成人 | 国产在线观看午夜 | 91精品系列| 成人97视频 | av观看免费在线 | 中文av日韩 | 日日夜夜天天人人 | 97在线观看免费高清完整版在线观看 | 亚欧日韩av | 亚洲免费在线播放视频 | 国产精品毛片一区二区三区 | 欧美高清成人 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 日本福利视频在线 | 色综合久久久久综合体桃花网 | 波多野结衣久久精品 | 天天视频色| 精品福利视频在线观看 | av国产在线观看 | 国产精品午夜av | 综合久久久久久 | 97国产超碰| 91麻豆精品国产自产 | av在线精品 | 国产一区二区三区免费观看视频 | 天天久久夜夜 | 日韩精品久久久免费观看夜色 | 在线免费观看视频一区二区三区 | 91丨九色丨丝袜 | av九九| 国内精品视频在线播放 | 亚洲精品88欧美一区二区 | 国产精品女人久久久久久 | 国产第一页福利影院 | 国产一级一片免费播放放 | 午夜18视频在线观看 | 91丨九色丨高潮 | 国产一级电影在线 | 国产中文字幕三区 | 成人免费看黄 | 亚洲播放一区 | 国产视频亚洲精品 | 欧美国产日韩激情 | 黄色网在线免费观看 | 国产日本在线 | 天堂v中文 | 亚洲理论影院 | 99精品免费在线观看 | 亚洲一区网站 | 人人爱天天操 | 亚洲精品午夜久久久久久久久久久 | 91精品国产一区二区三区 | 国产一级片观看 | 日韩高清一 | 精品视频不卡 | 手机版av在线 | 一区二区三区四区在线 | 精品国产一区二区三区久久久蜜月 | 麻豆国产电影 | 丁香婷婷综合激情 | 欧美一级片在线观看视频 | 中文字幕一区二区三区在线播放 | 成人免费观看视频大全 | 蜜桃视频精品 | av在线网站观看 | 精品久久久久久亚洲综合网 | 69av视频在线 | 一区二区精品在线视频 | 国产96av| 91成人在线观看高潮 | 久久一二三四 | 最近中文字幕免费视频 | 久久精品视频在线看 | 成人免费看视频 | 国产中文字幕在线 | 婷婷5月色 | 午夜色大片在线观看 | 日本精品在线 | 亚洲一区二区三区在线看 | 日韩在线看片 | 人人看人人草 | 欧美日本啪啪无遮挡网站 | 国产在线一区二区 | 激情综合六月 | 日韩在线观看一区 | 国内精自线一二区永久 | 成人免费一区二区三区在线观看 | 久久99亚洲精品久久 | 久久综合免费视频 | 精品视频999 | 久久伊人综合 | 国产福利一区二区三区视频 | 成人动漫精品一区二区 | 国产一区黄色 | 国产精品99久久久久久武松影视 | 亚洲国产中文字幕在线观看 | 成人在线黄色电影 | 香蕉网在线播放 | 亚洲一一在线 | 男女拍拍免费视频 | 亚洲免费公开视频 | 在线免费观看国产 |