開發Nordic nRF51和nRF52芯片,我一般都使用nrfjprog.exe進行燒錄。 本文記錄一些使用技巧。 1. 安裝nrfjprog在nordic官網搜索下載命令行工具,安裝後即獲得最新版的nrfjprog工具,同時就會自動安裝jLink驅動軟件。 默認的安裝目錄為:C:\ Program Files(x86)\ Nordic Semiconductor \ nrf5x \ bin,請將該目錄添加到系統環境變量中。 在命令行窗口中測試:
期望輸出為: - nrfjprog version: 9.7.2
- JLinkARM.dll version: 6.20i
複製代碼 2.配置硬件如果使用開發板(PCA100xx),無需做任何配置。 如果使用自己的電路板,需要將SWD接口連接到JLink調試器,PC通過JLink調試器執行nrfjprog命令。 開發主板的JLink可以對外使用,即將開發板認為一個JLink Lite Debugger。 連線圖為:
nrfjprog nrf52 nrf53 nordic JLink
當按照圖中所示連接一個外部電路板,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 擦除
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 在當前目錄打開PowerShellWindows 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):
nrfjprog nrf52 nrf53 nordic JLink
5.7 示例:DFU生成公鑰和私鑰
- @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 更多示例許多與命令行工具相關的工作都可以寫成批處理,包括: - 下載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,在命令行窗口中運行:
將自動下載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安裝目錄建立自己的工程。
nrfjprog nrf52 nrf53 nordic JLink
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。
解釋:重啟並運行芯片。 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窗口,並定位到當前目錄:
nrfjprog nrf52 nrf53 nordic JLink
XYPlorer支持自定義工具,將在此5.6小節中寫好的bat文件,加入目錄面板,如下所示,只要使用hex文件,即可將該自動替換為hex。
nrfjprog nrf52 nrf53 nordic JLink
7.3 BandiZipBandiZip是一個免費的壓縮軟件,它可以在快捷菜單增加一項:在當前目錄打開CMD窗口。
nrfjprog nrf52 nrf53 nordic JLink
7.4 Quick ClipQuick Clip可以保存用戶程序命令,通過托盤圖標快速啟動程序。 我們可以將上面寫好的批處理文件都添加到Quick Clip中統一管理。效果如下:
nrfjprog nrf52 nrf53 nordic JLink
(完)
參考文章
文章出處:網頁設計,網站架設 ,網路行銷,網頁優化,SEO - NetYea 網頁設計
|