| 開發Nordic nRF51和nRF52芯片,我一般都使用nrfjprog.exe進行燒錄。 本文記錄一些使用技巧。1. 安裝nrfjprog 在nordic官網搜索下載命令行工具,安裝後即獲得最新版的nrfjprog工具,同時就會自動安裝jLink驅動軟件。 默認的安裝目錄為:C:\ Program Files(x86)\ Nordic Semiconductor \ nrf5x \ bin,請將該目錄添加到系統環境變量中。 在命令行窗口中測試: 
 期望輸出為: 2.配置硬件複製代碼nrfjprog version: 9.7.2
JLinkARM.dll version: 6.20i
如果使用開發板(PCA100xx),無需做任何配置。 如果使用自己的電路板,需要將SWD接口連接到JLink調試器,PC通過JLink調試器執行nrfjprog命令。 開發主板的JLink可以對外使用,即將開發板認為一個JLink Lite Debugger。 連線圖為: 
nrfjprog nrf52 nrf53 nordic JLink   
 當按照圖中所示連接一個外部電路板,PC上執行燒錄hex命令,那該hex到底燒錄到開發主板的芯片還是外部電路呢? 在上圖的接線圖中,找到橙色標註的管腳VTG,有如下規則: 3. nrfjprog使用3.1燒錄VTG == HIGH,燒錄外部電路VTG == LOW,燒錄開發板
 
 複製代碼nrfjprog--program <hex_path> [-f UNKNOWN]
 UNKNOWN參數可以自動適應nRF51,nRF52和nRF52840各種芯片,而無需手動指定。 nrfjprog v9.5以後的版本,在nrfjprog.ini中指定替代的芯片類型為UNKNOWN,所以命令行中可以省略–系列UNKNOWN參數。 如果目標機器上的nrfjprog版本更高,或者沒有該ini文件,則仍然要加上該參數。3.2 擦除 
 
 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 命令列表 
 
 如果沒有任何參數,將列出全部的參數,裡面有很多有用的參數。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。 
nrfjprog nrf52 nrf53 nordic JLink   4.3 在當前目錄打開PowerShell
 Windows 10推薦用戶使用PowerShell替代傳統的CMD窗口。 在文件夾空白處,Shift +快捷鍵,將顯示如下菜單項: 
nrfjprog nrf52 nrf53 nordic JLink   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 [1] nRF51 series
echo [2, Enter] 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 [ERR] No input hex file
echo.
goto END
)
set hex_path_with_quotation=%1
set hex_path=%hex_path_with_quotation:~1,-1%
echo [INFO] Erase the chip
echo.
nrfjprog -e -f UNKNOWN
echo.
echo [INFO] Program the hex: %hex_path%
echo.
nrfjprog --program "%hex_path%" -f UNKNOWN
echo.
echo [INFO] Reset the chip
echo.
nrfjprog --reset -f UNKNOWN
echo.
echo [INFO] Success
echo.
:END
pause
 運行效果模仿(gif): 
5.7 示例:DFU生成公鑰和私鑰nrfjprog nrf52 nrf53 nordic JLink   
 複製代碼@echo off
title Generate DFU Keys
set PRIVATE_KEY=private_key.pem
set PUBLIC_KEY=dfu_public_key.c
echo [INFO] Gen private key: %PRIVATE_KEY%
echo.
nrfutil keys generate %PRIVATE_KEY%
echo.
echo [INFO] Gen private key: %PUBLIC_KEY%
nrfutil keys display --key pk --format code %PRIVATE_KEY% --out_file %PUBLIC_KEY%
echo [INFO] Success
echo.
pause
 
 運行後將在當前文件夾中生成private_key.pem和dfu_public_key.c兩個文件。5.8 更多示例 許多與命令行工具相關的工作都可以寫成批處理,包括: 6. pynrfjprog下載softdevice 將不同版本的softdevice.hex路徑整理出來,然後放到批處理,通過選擇SDK版本和nRF型號,自動下載對應的協議棧。
生成DFU的zip 通過手動輸入一些列參數,自動生成DFU需要的zip文件。
生成DFU的Bootloader-Settings.hex
 
 nrfjprog提供了C / C ++和Python的庫,可以在代碼中執行nrfjprog全部的功能。 這裡介紹Python庫(pynrfjprog)的使用。6.1 閱讀文檔6.2 下載庫 該庫支持Python 2和Python3。這裡用Python 3進行測試。 在Windows上安裝Python 3,在命令行窗口中運行: 
 將自動下載pynrfjprog需要的庫文件。庫文件與二進制倉庫中的內容一致。 默認保存地址為:<python dir>\Lib\site-packages\pynrfjprog 
 進入示例目錄:<python dir>\Lib\site-packages\pynrfjprog\examples\program_hex.py 在cmd中執行: 
 會自動下載blinky.hex到開發板中。 也可以直接運行program_hex.pyc。 6.4 IDE
 使用PyCharm會自動識別pip下載的模塊,因此可以脫離python 3安裝目錄建立自己的工程。 
6.5 API介紹nrfjprog nrf52 nrf53 nordic JLink   
 複製代碼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。 
 解釋:重啟並運行芯片。7. 輔助工具 7.1 clink
 clink可以增強Windows命令預設的功能,包括: 7.2 XYPlorerTab鍵自動完成永久記錄歷史輸入Ctrl + C / Ctrl + V粘貼複製Bash編輯快捷鍵,按Ctrl + A返回行首,Ctrl + K刪除剩餘字符等額外的Bash命令,包括ls,rm等。
 
 XYPlorer是增強型資源管理器,快捷鍵Ctrl + Alt + P可以快速打開cmd窗口,並定位到當前目錄: 
nrfjprog nrf52 nrf53 nordic JLink   
 XYPlorer支持自定義工具,將在此5.6小節中寫好的bat文件,加入目錄面板,如下所示,只要使用hex文件,即可將該自動替換為hex。 
nrfjprog nrf52 nrf53 nordic JLink   7.3 BandiZip
 BandiZip是一個免費的壓縮軟件,它可以在快捷菜單增加一項:在當前目錄打開CMD窗口。 
nrfjprog nrf52 nrf53 nordic JLink   7.4 Quick Clip
 Quick Clip可以保存用戶程序命令,通過托盤圖標快速啟動程序。 我們可以將上面寫好的批處理文件都添加到Quick Clip中統一管理。效果如下: 
nrfjprog nrf52 nrf53 nordic JLink   (完) 參考文章
 文章出處:網頁設計,網站架設 ,網路行銷,網頁優化,SEO - NetYea 網頁設計
 
 |