• 資料介紹
    • 引言
    • 問題描述
    • 解決辦法
    • 將上述方案加入客戶工程的步驟示例
    • 小結(jié)
  • 資料預(yù)覽
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

LAT1216 BlueNRG系列芯片F(xiàn)lash操作與BLE事件的互斥處理

03/26 10:33
597
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

LAT1216 BlueNRG系列芯片F(xiàn)lash操作與BLE事件的互斥處理

910.91 KB

引言

在許多基于 BlueNRG-1/2 系列芯片低功耗藍(lán)牙的設(shè)計(jì)項(xiàng)目時(shí),客戶通常會(huì)在 Flash的特定區(qū)域存儲(chǔ)定制的數(shù)據(jù)。然而需要特別注意的是,在 BlueNRG-1/2 方案中,用戶對(duì)Flash 的讀寫操作必須在射頻空閑的情況下進(jìn)行,兩者是互斥的關(guān)系。

問題描述

客戶經(jīng)常反饋類似問題,諸如:當(dāng)用戶程序嘗試將用戶定制數(shù)據(jù)寫入 Flash 中特定區(qū)域時(shí),發(fā)現(xiàn) BLE 射頻部分停止工作,或芯片直接死機(jī)了。

解決辦法

使用一個(gè)雙向鏈表來管理 Flash 操作(Flash 擦除或者是 Flash 寫,F(xiàn)lash 讀無需和BLE 相關(guān)事件互斥),并使用一個(gè)雙向鏈表來管理空余時(shí)間狀態(tài)。在空余的時(shí)間執(zhí)行Flash 操作。從芯片手冊(cè)可以知道,操作 Flash,特別是擦除時(shí),會(huì)占用比較多的時(shí)間。為了避免操作 Flash 占用過多的時(shí)間片,把每次寫或者擦除 Flash,用一個(gè)列表來管理,每次寫或者擦除操作,插入 Flash 操作鏈表的最后。 在主循環(huán)中檢測(cè)是否有足夠的時(shí)間寫,如果當(dāng)前空閑的時(shí)間足夠,取出 Flash 操作鏈表中最前的一個(gè)節(jié)點(diǎn),執(zhí)行 Flash 操作,然后將節(jié)點(diǎn)移除。對(duì)于如何檢測(cè)空閑時(shí)刻,也用一個(gè)鏈表來管理空閑時(shí)刻。

將上述方案加入客戶工程的步驟示例

小結(jié)

  1. 如果使用此方法中的 Flash 擦除,沒有任何 BLE 事件時(shí),直接調(diào)用此方法不會(huì)執(zhí)行任何 Flash 的操作。所以當(dāng)沒有藍(lán)牙事件時(shí),可以使用 SDK 默認(rèn)的 Flash 訪問接口或者是手工調(diào)度函數(shù),類似這樣:flash_list_tick(~0u)
  1. 工程測(cè)試源碼參考附件壓縮包:BlueNRG Flash vs BLE event handle source code.7z
  1. 工程路徑為:BlueNRG_Demo/BlueNRG-1_2 DK 3.1.0/Project/Supply/BLE_Chat_Master_Slave_WithFlashAccess/

資料預(yù)覽

相關(guān)推薦