woff 發表於 2020-9-20 22:09:16

玩轉nrfjprog

開發Nordic nRF51和nRF52芯片,我一般都使用nrfjprog.exe進行燒錄。本文記錄一些使用技巧。1. 安裝nrfjprog在nordic官網搜索下載命令行工具,安裝後即獲得最新版的nrfjprog工具,同時就會自動安裝jLink驅動軟件。默認的安裝目錄為:C:\ Program Files(x86)\ Nordic Semiconductor \ nrf5x \ bin,請將該目錄添加到系統環境變量中。在命令行窗口中測試:nrfjprog -v
期望輸出為:nrfjprog version: 9.7.2
JLinkARM.dll version: 6.20i2.配置硬件如果使用開發板(PCA100xx),無需做任何配置。如果使用自己的電路板,需要將SWD接口連接到JLink調試器,PC通過JLink調試器執行nrfjprog命令。開發主板的JLink可以對外使用,即將開發板認為一個JLink Lite Debugger。連線圖為:
當按照圖中所示連接一個外部電路板,PC上執行燒錄hex命令,那該hex到底燒錄到開發主板的芯片還是外部電路呢?在上圖的接線圖中,找到橙色標註的管腳VTG,有如下規則:
[*]VTG == HIGH,燒錄外部電路
[*]VTG == LOW,燒錄開發板

3. nrfjprog使用3.1燒錄nrfjprog--program <hex_path> [-f UNKNOWN]
UNKNOWN參數可以自動適應nRF51,nRF52和nRF52840各種芯片,而無需手動指定。nrfjprog v9.5以後的版本,在nrfjprog.ini中指定替代的芯片類型為UNKNOWN,所以命令行中可以省略–系列UNKNOWN參數。如果目標機器上的nrfjprog版本更高,或者沒有該ini文件,則仍然要加上該參數。3.2 擦除
nrfjprog -e [-f UNKNOWN]

3.3 讀寫指定地址的內存數據
nrfjprog --memrd 0x08C78790 [-f UNKNOWN] [--n 4]
nrfjprog --memwr 0x08C78790 [-f UNKNOWN] --val 0x11

3.4 重啟芯片
nrfjprog --reset [-f UNKNOWN]

3.5 恢復錯誤狀態
nrfjprog --recover -f NRF52/NRF51/NRF52840


有時芯片在特殊情況下會會鎖住(讀回保護),導致無法下載程序,需要使用–recover公認的讀保護。3.6 命令列表
nrfjprog
如果沒有任何參數,將列出全部的參數,裡面有很多有用的參數。3.7 連續執行
nrfjprog --e && nrfjprog --program <hex path> && nrfjprog --reset
使用&&或&可以依次執行多個命令。4. 命令行窗口
4.1 基本用法
cd <hex path>
nrfjprog --program <hex path>

4.2 在當前目錄打開cmd在資源管理器地址欄輸入cmd,即可在當前目錄打開cmd,省略cd的過程。快捷鍵:Ctrl +L。
4.3 在當前目錄打開PowerShellWindows 10推薦用戶使用PowerShell替代傳統的CMD窗口。在文件夾空白處,Shift +快捷鍵,將顯示如下菜單項:(可以通過修改註冊表恢復CMD)
4.4 為命令加註釋
nrfjprog -e &:: Erase the chip
nrfjprog --program <hex path> &:: Program the hex
nrfjprog --reset &:: Reset the chip

&::符號及後面的部分註釋註釋,不執行,這樣在輸入許多命令後,通過上下方向鍵查找歷史記錄時,比較方便。參考鏈接。5. 批處理5.1基礎新建文件,後綴名為.bat,用編輯器打開,添加代碼:@echo off
:: This is a line comment
echo This line will be printed
:: Below is a blank line
echo.
set name=ISYQ
echo The author is %name%
pause
保存後,雙擊運行,將打開CMD窗口並輸出:This line will be printed

The author is ISYQ
Press any key to continue . .


5.2 預設參數添加代碼::: Drag a hex file on the bat file, and get the valid path string
set hex_path_with_quotation=%1
set hex_path=%hex_path_with_quotation:~1,-1%
echo The hex path is %hex_path%
保存後,將一個文件壓縮到該bat文件上,將打印出該文件的路徑。5.3 用戶輸入添加代碼:set /p user_input=Input your name:
echo Your input is: %user_input%
保存運行,將提示用戶輸入。用戶輸入以回車鍵為結束,如果直接回車,則輸入為空。注意set語句中有/ p參數。5.4 判斷和選擇添加代碼:set part_family=0
echo nRF51 series
echo nRF52 series
echo.
set /p user_input=Select 1/2/Enter:
if "%user_input%" == "1" (
set part_family=NRF51
goto GET_PART_FAMILY
)
if "%user_input%" == "2" (
set part_family=NRF52
goto GET_PART_FAMILY
)
if "%user_input%" == "" (
set part_family=NRF52
goto GET_PART_FAMILY
)
:GET_PART_FAMILY
echo The part family is %part_family%
保存運行,用戶輸入1,將選擇NRF51,輸入2或者直接回車,將選擇NRF52。注意,批處理的if語句要進行輕度使用,它與C語言的if差異很大。如果運行結果異常,請註釋掉開頭的@echo off語句,定位錯誤位置。%user_input%兩邊的引號不可省略,因為如果直接輸入Enter,會導致代碼被解析成if == 3(,這個語法錯誤會使程序直接崩潰退出。批處理的goto關鍵字使用非常重複,它要配合索引語法一起使用。5.5 示例:正極芯片
@echo off
nrfjprog -e -f UNKNOWN

當開發板連接到電腦,直接運行這個批處理即可重置芯片。5.6 示例:下載hex
@echo off
if {%1} == {} (
echo No input hex file
echo.
goto END
)
set hex_path_with_quotation=%1
set hex_path=%hex_path_with_quotation:~1,-1%
echo Erase the chip
echo.
nrfjprog -e -f UNKNOWN
echo.
echo Program the hex: %hex_path%
echo.
nrfjprog --program "%hex_path%" -f UNKNOWN
echo.
echo Reset the chip
echo.
nrfjprog --reset -f UNKNOWN
echo.
echo Success
echo.
:END
pause
運行效果模仿(gif):5.7 示例:DFU生成公鑰和私鑰
@echo off
title Generate DFU Keys
set PRIVATE_KEY=private_key.pem
set PUBLIC_KEY=dfu_public_key.c
echo Gen private key: %PRIVATE_KEY%
echo.
nrfutil keys generate %PRIVATE_KEY%
echo.
echo Gen private key: %PUBLIC_KEY%
nrfutil keys display --key pk --format code %PRIVATE_KEY% --out_file %PUBLIC_KEY%
echo Success
echo.
pause

運行後將在當前文件夾中生成private_key.pem和dfu_public_key.c兩個文件。5.8 更多示例許多與命令行工具相關的工作都可以寫成批處理,包括:
[*]下載softdevice
將不同版本的softdevice.hex路徑整理出來,然後放到批處理,通過選擇SDK版本和nRF型號,自動下載對應的協議棧。
[*]生成DFU的zip
通過手動輸入一些列參數,自動生成DFU需要的zip文件。
[*]生成DFU的Bootloader-Settings.hex

6. pynrfjprognrfjprog提供了C / C ++和Python的庫,可以在代碼中執行nrfjprog全部的功能。這裡介紹Python庫(pynrfjprog)的使用。6.1 閱讀文檔原始倉庫:地址使用文檔:地址6.2 下載庫該庫支持Python 2和Python3。這裡用Python 3進行測試。在Windows上安裝Python 3,在命令行窗口中運行:pip install pynrfjprog
將自動下載pynrfjprog需要的庫文件。庫文件與二進制倉庫中的內容一致。默認保存地址為:<python dir>\Lib\site-packages\pynrfjprog
進入示例目錄:<python dir>\Lib\site-packages\pynrfjprog\examples\program_hex.py在cmd中執行:python program_hex.py
會自動下載blinky.hex到開發板中。也可以直接運行program_hex.pyc。
6.4 IDE使用PyCharm會自動識別pip下載的模塊,因此可以脫離python 3安裝目錄建立自己的工程。6.5 API介紹
api.connect_to_emu_without_snr()

解釋:連接外部芯片,不指定序列號SNR。hex_content = Hex.Hex(hex_path)
print("Write hex: %s" % hex_path)
for segment in hex_content:
api.write(segment.address, segment.data, True)
解釋:將Hex文件內容解析成段,分段寫入Flash。api.sys_reset()
api.go()
解釋:重啟並運行芯片。7. 輔助工具
7.1 clinkclink可以增強Windows命令預設的功能,包括:
[*]Tab鍵自動完成
[*]永久記錄歷史輸入
[*]Ctrl + C / Ctrl + V粘貼複製
[*]Bash編輯快捷鍵,按Ctrl + A返回行首,Ctrl + K刪除剩餘字符等
[*]額外的Bash命令,包括ls,rm等。

7.2 XYPlorerXYPlorer是增強型資源管理器,快捷鍵Ctrl + Alt + P可以快速打開cmd窗口,並定位到當前目錄:
XYPlorer支持自定義工具,將在此5.6小節中寫好的bat文件,加入目錄面板,如下所示,只要使用hex文件,即可將該自動替換為hex。
7.3 BandiZipBandiZip是一個免費的壓縮軟件,它可以在快捷菜單增加一項:在當前目錄打開CMD窗口。
7.4 Quick ClipQuick Clip可以保存用戶程序命令,通過托盤圖標快速啟動程序。我們可以將上面寫好的批處理文件都添加到Quick Clip中統一管理。效果如下:(完)
參考文章
文章出處:網頁設計,網站架設 ,網路行銷,網頁優化,SEO - NetYea 網頁設計
頁: [1]
查看完整版本: 玩轉nrfjprog