1. 程式人生 > >NRF52840 nrfjprog 擦寫問題

NRF52840 nrfjprog 擦寫問題

1 問題描述

1)在用到nrfjprog對hex檔案進行升級時,發現第一次升級後無法跳到app中,進入updater,要再次進行升級才可以跳到app

2)如果將板子的flash清空,即全部擦除,再用nrfjprog對hex檔案進行升級,則可跳到app中

2 問題解決

1)懷疑我們燒進去的bin檔案,在往板子裡燒的過程中被篡改,導致燒錄前及燒進板子裡的bin有差異

用J-Flash將板子內的bin讀出來,與燒錄前的bin進行對比,發現確實有出入,如下圖中,左邊為燒進去後又通過J_Flash讀出來的bin,右邊為燒錄前的bin檔案,在地址20002和20003處燒進去後被篡改。

讀取板子內的flash方法如下:

開啟J-Flash,Target——>connect

Target——>Manual Programming——>Read back——>Range    輸入起始地址即可讀出bin

2)懷疑使用sectorerase並不能將想要擦除的區域(比如updater區)全部擦除掉,只是在擦的時候,會先計算下你給的hex檔案有多大區域,根據這個hex檔案的大小去擦除相應的區域,而不是整個區域全部擦除,這樣,如果這一次升級的hex檔案比板子離已有的hex檔案小的話,就會有一部分沒有被擦除,導致hex檔案會遺留上次的一部分,執行起來就會出問題

3)在nordic的論壇上發現一個帖子,也是講的Flashing issue with nrfjprog

大致意思是講使用sectorerase+hex檔案進行擦除flash會出現崩潰nrfjprog -f nrf52 --sectorerase --program application.hex,但改為 erasepage+擦除地址進行擦除操作nrfjprog -f nrf52 --erasepage 0x20000-0x30000就能解決此問題

看論壇上nordic給了相應的回覆:說在某些情況下sectorerase是無法擦除整個區域,在nrfjprog9.7.0版本得到修復

4)在此網頁下下載了nrfjprog9.7.3版本,安裝後,進行驗證,發現還是會出現無法跳到app的情況,燒錄前後的bin檔案依舊不一致,最後,我們採用更改makefile的形式,強制使用--erasepage對flash區域進行擦除,再使用--program進行寫操作

原makefile中使用--program+sectorerase的擦除再寫的程式碼為:

# Provide the ability to support time/date stamped images, or alternative paths.
BUILD_DIR ?= build
PROJECT_FLASH_IMAGE_NAME ?= $(abspath $(BUILD_DIR)/out/$(PROJECT).hex)
flash:: $(PROJECT_FLASH_IMAGE_NAME)
	@echo Flashing: $<
	nrfjprog --program $< -f nrf52 --sectorerase --reset

更改後為:使用--erasepage進行擦除,再使用--program進行寫操作
 

ifeq (bootloader,$(PROJECT)))
   START_ADDR := 0x00000000
   END_ADDR   := 0x00001000
else ifeq (updater,$(PROJECT)))
   START_ADDR := 0x00001000
   END_ADDR   := 0x00010000
else ifeq (app,$(PROJECT)))
   START_ADDR := 0x00020000
   END_ADDR   := 0x00060000
else
   START_ADDR := 0x00000000
   END_ADDR   := 0x00000000
endif

# Provide the ability to support time/date stamped images, or alternative paths.
BUILD_DIR ©= build
PROJECT_FLASH_IMAGE_NAME ©= $(abspath $(BUILD_DIR)/out/$(PROJECT).hex)
flash:: $(PROJECT_FLASH_IMAGE_NAME)
@echo Flashing: $<
nrfjprog --erasepage $(START_ADDR)-$(END_ADDR)
nrfjprog --program $< -f nrf52 --reset

更改後,程式一次燒錄,能夠跑完bootloader、upadter後跳到app中

相關推薦

NRF52840 nrfjprog 問題

1 問題描述 1)在用到nrfjprog對hex檔案進行升級時,發現第一次升級後無法跳到app中,進入updater,要再次進行升級才可以跳到app 2)如果將板子的flash清空,即全部擦除,再用nrfjprog對hex檔案進行升級,則可跳到app中 2 問題解決

freescale飛思卡爾 HC9S12 系列微控制器 Flash詳解(一)之時鐘設定

       Flash擦寫的內容,個人做HC9S12系列微控制器時覺得應該是各模組內容中最難而且是最麻煩的一步了。只有能夠對Flash進行擦寫以後,所做的Bootloader才有真正手段將串列埠或者其他通訊手段接收到的資料或者程式寫入Flash中進行程式或者資料的更新。當初做Flash的擦寫也遇到了很多問題

Microchip PIC24F dsPIC33E flash 自的尿性小結

最近摸了好久,發現這個東西真的難, MHCP 這套16bit  體系flash的擦寫操作,分為ICSP和RTSP兩種方式,前者就是常見的官方pickit/ICD程式設計燒寫操作時序。而後者是為bootload或者資料儲存自擦寫準備的,執行過程中的擦寫操作。 RTSP f

STM32 Flash操作()過程中器件復位導致資料丟失問題

1.問題描述 產品在執行過程中需要儲存一些斷電不丟失的資料,為此將資料儲存在STM32內部的flash中。但是測試人員在測試的過程中,修改了資料引數,直接斷電重啟機器,並沒有等待flash的操作時間,導致原有的資料丟失。 2. 原理分析 本產品硬體平臺是基於STM32F429

STM8L151 在IAR中實現Flash/EEPROM的

在 STM8L151G6U6中可支援位元組擦寫和塊擦寫,塊擦寫可一次擦寫很所位元組。位元組擦寫比較簡單,需要注意的是塊擦寫,在塊擦寫中,需要配置一個地方。 對於IAR來說, Uncomment the line “#define RAM_EXECUTION (1)” in the

[原始碼和文件分享]程式設計實現對硬碟全盤資料進行讀資料

背景 在 XP 系統下下,我們可以直接呼叫 WirteFile 函式對磁碟寫入資料,但到了 Windows 7 以及 Windows 7 版本以上的系統,就已經開始變得不那麼簡單了。 在 Windows 7 及以上版本中,對檔案系統和儲存堆疊進行的更改,限制對磁碟和卷的直接訪問,但是,在以下

NAND Flash 讀、除原理

以Micron公司的MT29F2G08為例介紹NAND Flash原理和使用。 1. 概述         MT29F2G08使用一個高度複用的8-bit匯流排(I/O[7:0])來傳輸資料、地址、指令。5個命令腳(CLE、ALE、CE#、WE#)實現NAND命令匯流排介面

flash的讀

這兩天在做norflash,sd的讀寫操作,記錄一下。 flash的特性是,寫資料只能將1寫為0,0不能寫為1.擦除資料是將所有資料都寫為1.因此如果想在已經資料的flash上寫入新的資料,則必須先擦除。sdcard則沒有這個特性,就直接可以寫入新的資料。 例: 只列出每個

嵌入式bootloader開發之八----NAND Flash讀除操作實現(Tiny 6410)

概要:          本節主要記錄開發Tiny6410自帶的NAND FLASH的過程,實現了NAND FLASH的擦除,讀寫資料功能,但都只是簡單的實現而已,並沒有做精細而完整的實現,畢竟只是想學原理。 前言:    工欲善其事,必先利其器。在做開發之前,必須保證良

今天不順暢啊, 連續了兩個core, 我!------ /var/log/messages中會有segment fault提示!

        早上接到一個新需求, 開搞。         下午了, 還在塞程式碼, 塞著塞著, 搞出一個core, 該打的log沒有打出來。當時猜測是core了(因為程序號變了), 但沒有core檔案產生, 於是在root下看/var/log/messages資訊, 果

NAND Flash的基本操作——讀、

轉載地址:http://blog.sina.com.cn/s/blog_5c401a150101d7hi.html 基本操作 這裡將會簡要介紹一下NAND Flash的基本操作在NAND Flash內部是如何進行的,基本操作包括:讀、寫和擦除。 讀:     當我

nanomsg 如何數據到PipelineDB

esql pos pan images opd row stream mes -1 nanomsg:https://github.com/nanomsg/nanomsg PipelineDB:https://github.com/pipelinedb/pipelinedb

CSRF攻擊與防禦(得非常好)

得到 cookie信息 req ret 沒有 不同的 sof 協議 表單 轉載地址:http://www.phpddt.com/reprint/csrf.html CSRF概念:CSRF跨站點請求偽造(Cross—Site Request Forger

小程序初體驗:手把手教你出第一個小程序(一)

輸入框 個人 創建 公測 快速 nsh 成功 too 調用 本文筆者將根據quick start中的範例代碼,帶大家簡單地剖析一下小程序的運行方式,並介紹小程序開發中一些通用的特性,帶著大家一步步寫出自己的小程序。 適用對象:前端初學者,對小程序開發感興趣者 tip

每天堅持不懈的軟文,得到的幾點心得感悟

特侖蘇牛奶 互聯網 文章 朋友 手機 夜深了,我喜歡這樣寧靜的夜,它能讓人不用去想更多的事情,專註於做自己想做的事情,我認為是一種幸福的事情,拿著手機播放了今晚的《半夜聽》節目,聽這個節目已經有一段時間了,雖然每天只有那麽短短的幾分鐘,但是那些字眼確實令我欲罷不能,聽完幾分鐘的半夜聽後,順

程序猿詩4

碧波 宋體 family top ont color 程序 便是 col ?? 雨開半頃 曉來疏雨拭梧桐 半聲浮萍半聲鶯 十二闌幹人初等 霞蔭蓮塘虹已暝 嫋嫋香篆籠草清 淡淡花陰蝶影重 石徑苔翠疑浥露 延客東風掩扉聲 一汀煙雨縱 春酎醉尤濃

開始博客,學習Linq(1)

設計 查詢 lin 數據源 任務 集成 部分 程序 編程   摘自《linq實戰》原文:   軟件很簡單。它可以歸結為兩件事情:代碼和數據。   開發軟件卻並非那麽簡單,其中很重要的一項任務就是編寫處理數據的代碼。   無論選擇了哪種語言,在程序開發得某個時候你將不得不開始

Android NFC近場通信02----讀卡的準備工作

是否 即將 oid win wrap img pac 適配器 style Android NFC近場通信02----讀寫卡的準備工作 因為公司接了一個聽上去感覺比較NB的項目。給某油田做派工系統 。並由

Java泛型

類型信息 png ive over tool 創建 edit sid 註意點 Java泛型擦除: 什麽是泛型擦除? 首先了解一下什麽是泛型?我個人的理解:因為集合中能夠存儲隨意類型的對象。可是集合中最先存儲的對象類型一旦確定後,就不能在存儲其它類型的

BCB的簡單的EXCEL合並

blog exc enum gin num read http 民族 .cn config.ini配置文件 //導出excel格式設置 ColumnNumber 列的數量 ColumnName 列的名稱,ColumnLen 列的長度, BeNumber 是否是數字,1是數字