TShopping

 找回密碼
 註冊
搜索
查看: 424|回復: 0

[教學] 玩轉nrfjprog

[複製鏈接]
發表於 2020-9-20 22:09:16 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk  
開發Nordic nRF51和nRF52芯片,我一般都使用nrfjprog.exe進行燒錄。
本文記錄一些使用技巧。
1. 安裝nrfjprog
nordic官網搜索下載命令行工具,安裝後即獲得最新版的nrfjprog工具,同時就會自動安裝jLink驅動軟件。
默認的安裝目錄為:C:\ Program Files(x86)\ Nordic Semiconductor \ nrf5x \ bin,請將該目錄添加到系統環境變量中。
在命令行窗口中測試:
  1. nrfjprog -v
複製代碼

期望輸出為:
  1. nrfjprog version: 9.7.2
  2. JLinkARM.dll version: 6.20i
複製代碼
2.配置硬件
如果使用開發板(PCA100xx),無需做任何配置。
如果使用自己的電路板,需要將SWD接口連接到JLink調試器,PC通過JLink調試器執行nrfjprog命令。
開發主板的JLink可以對外使用,即將開發板認為一個JLink Lite Debugger。
連線圖為:

nrfjprog nrf52 nrf53 nordic JLink

nrfjprog nrf52 nrf53 nordic JLink

當按照圖中所示連接一個外部電路板,PC上執行燒錄hex命令,那該hex到底燒錄到開發主板的芯片還是外部電路呢?
在上圖的接線圖中,找到橙色標註的管腳VTG,有如下規則:
  • VTG == HIGH,燒錄外部電路
  • VTG == LOW,燒錄開發板

3. nrfjprog使用3.1燒錄
  1. nrfjprog--program <hex_path> [-f UNKNOWN]
複製代碼

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


3.3 讀寫指定地址的內存數據
  1. nrfjprog --memrd 0x08C78790 [-f UNKNOWN] [--n 4]
  2. nrfjprog --memwr 0x08C78790 [-f UNKNOWN] --val 0x11
複製代碼


3.4 重啟芯片
  1. nrfjprog --reset [-f UNKNOWN]
複製代碼


3.5 恢復錯誤狀態
  1. nrfjprog --recover -f NRF52/NRF51/NRF52840
複製代碼



有時芯片在特殊情況下會會鎖住(讀回保護),導致無法下載程序,需要使用–recover公認的讀保護。
3.6 命令列表
  1. nrfjprog
複製代碼

如果沒有任何參數,將列出全部的參數,裡面有很多有用的參數。
3.7 連續執行
  1. nrfjprog --e && nrfjprog --program <hex path> && nrfjprog --reset
複製代碼

使用&&或&可以依次執行多個命令。
4. 命令行窗口
4.1 基本用法
  1. cd <hex path>
  2. nrfjprog --program <hex path>
複製代碼


4.2 在當前目錄打開cmd
在資源管理器地址欄輸入cmd,即可在當前目錄打開cmd,省略cd的過程。快捷鍵:Ctrl +L。

nrfjprog nrf52 nrf53 nordic JLink

nrfjprog nrf52 nrf53 nordic JLink

4.3 在當前目錄打開PowerShell
Windows 10推薦用戶使用PowerShell替代傳統的CMD窗口。
在文件夾空白處,Shift +快捷鍵,將顯示如下菜單項:

nrfjprog nrf52 nrf53 nordic JLink

nrfjprog nrf52 nrf53 nordic JLink

4.4 為命令加註釋
  1. nrfjprog -e &:: Erase the chip
  2. nrfjprog --program <hex path> &:: Program the hex
  3. nrfjprog --reset &:: Reset the chip
複製代碼


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

保存後,雙擊運行,將打開CMD窗口並輸出:
  1. This line will be printed

  2. The author is ISYQ
  3. Press any key to continue . .
複製代碼



5.2 預設參數
添加代碼:
  1. :: Drag a hex file on the bat file, and get the valid path string
  2. set hex_path_with_quotation=%1
  3. set hex_path=%hex_path_with_quotation:~1,-1%
  4. echo The hex path is %hex_path%
複製代碼

保存後,將一個文件壓縮到該bat文件上,將打印出該文件的路徑。
5.3 用戶輸入
添加代碼:
  1. set /p user_input=Input your name:
  2. echo Your input is: %user_input%
複製代碼

保存運行,將提示用戶輸入。用戶輸入以回車鍵為結束,如果直接回車,則輸入為空。
注意set語句中有/ p參數。
5.4 判斷和選擇
添加代碼:
  1. set part_family=0
  2. echo [1] nRF51 series
  3. echo [2, Enter] nRF52 series
  4. echo.
  5. set /p user_input=Select 1/2/Enter:
  6. if "%user_input%" == "1" (
  7. set part_family=NRF51
  8. goto GET_PART_FAMILY
  9. )
  10. if "%user_input%" == "2" (
  11. set part_family=NRF52
  12. goto GET_PART_FAMILY
  13. )
  14. if "%user_input%" == "" (
  15. set part_family=NRF52
  16. goto GET_PART_FAMILY
  17. )
  18. :GET_PART_FAMILY
  19. echo The part family is %part_family%
複製代碼

保存運行,用戶輸入1,將選擇NRF51,輸入2或者直接回車,將選擇NRF52。
注意,批處理的if語句要進行輕度使用,它與C語言的if差異很大。如果運行結果異常,請註釋掉開頭的@echo off語句,定位錯誤位置。
%user_input%兩邊的引號不可省略,因為如果直接輸入Enter,會導致代碼被解析成if == 3(,這個語法錯誤會使程序直接崩潰退出。
批處理的goto關鍵字使用非常重複,它要配合索引語法一起使用。
5.5 示例:正極芯片
  1. @echo off
  2. nrfjprog -e -f UNKNOWN
複製代碼


當開發板連接到電腦,直接運行這個批處理即可重置芯片。
5.6 示例:下載hex
  1. @echo off
  2. if {%1} == {} (
  3. echo [ERR] No input hex file
  4. echo.
  5. goto END
  6. )
  7. set hex_path_with_quotation=%1
  8. set hex_path=%hex_path_with_quotation:~1,-1%
  9. echo [INFO] Erase the chip
  10. echo.
  11. nrfjprog -e -f UNKNOWN
  12. echo.
  13. echo [INFO] Program the hex: %hex_path%
  14. echo.
  15. nrfjprog --program "%hex_path%" -f UNKNOWN
  16. echo.
  17. echo [INFO] Reset the chip
  18. echo.
  19. nrfjprog --reset -f UNKNOWN
  20. echo.
  21. echo [INFO] Success
  22. echo.
  23. :END
  24. pause
複製代碼

運行效果模仿(gif):

nrfjprog nrf52 nrf53 nordic JLink

nrfjprog nrf52 nrf53 nordic JLink
5.7 示例:DFU生成公鑰和私鑰
  1. @echo off
  2. title Generate DFU Keys
  3. set PRIVATE_KEY=private_key.pem
  4. set PUBLIC_KEY=dfu_public_key.c
  5. echo [INFO] Gen private key: %PRIVATE_KEY%
  6. echo.
  7. nrfutil keys generate %PRIVATE_KEY%
  8. echo.
  9. echo [INFO] Gen private key: %PUBLIC_KEY%
  10. nrfutil keys display --key pk --format code %PRIVATE_KEY% --out_file %PUBLIC_KEY%
  11. echo [INFO] Success
  12. echo.
  13. pause
複製代碼


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

6. pynrfjprog
nrfjprog提供了C / C ++和Python的庫,可以在代碼中執行nrfjprog全部的功能。
這裡介紹Python庫(pynrfjprog)的使用。
6.1 閱讀文檔
原始倉庫:地址
使用文檔:地址
6.2 下載庫
該庫支持Python 2和Python3。這裡用Python 3進行測試。
在Windows上安裝Python 3,在命令行窗口中運行:
  1. pip install pynrfjprog
複製代碼

將自動下載pynrfjprog需要的庫文件。庫文件與二進制倉庫中的內容一致。
默認保存地址為:<python dir>\Lib\site-packages\pynrfjprog

進入示例目錄:<python dir>\Lib\site-packages\pynrfjprog\examples\program_hex.py
在cmd中執行:
  1. python program_hex.py
複製代碼

會自動下載blinky.hex到開發板中。
也可以直接運行program_hex.pyc。

6.4 IDE
使用PyCharm會自動識別pip下載的模塊,因此可以脫離python 3安裝目錄建立自己的工程。

nrfjprog nrf52 nrf53 nordic JLink

nrfjprog nrf52 nrf53 nordic JLink
6.5 API介紹
  1. api.connect_to_emu_without_snr()
複製代碼


解釋:連接外部芯片,不指定序列號SNR。
  1. hex_content = Hex.Hex(hex_path)
  2. print("Write hex: %s" % hex_path)
  3. for segment in hex_content:
  4. api.write(segment.address, segment.data, True)
複製代碼

解釋:將Hex文件內容解析成段,分段寫入Flash。
  1. api.sys_reset()
  2. api.go()
複製代碼

解釋:重啟並運行芯片。
7. 輔助工具
7.1 clink
clink可以增強Windows命令預設的功能,包括:
  • Tab鍵自動完成
  • 永久記錄歷史輸入
  • Ctrl + C / Ctrl + V粘貼複製
  • Bash編輯快捷鍵,按Ctrl + A返回行首,Ctrl + K刪除剩餘字符等
  • 額外的Bash命令,包括ls,rm等。

7.2 XYPlorer
XYPlorer是增強型資源管理器,快捷鍵Ctrl + Alt + P可以快速打開cmd窗口,並定位到當前目錄:

nrfjprog nrf52 nrf53 nordic JLink

nrfjprog nrf52 nrf53 nordic JLink

XYPlorer支持自定義工具,將在此5.6小節中寫好的bat文件,加入目錄面板,如下所示,只要使用hex文件,即可將該自動替換為hex。

nrfjprog nrf52 nrf53 nordic JLink

nrfjprog nrf52 nrf53 nordic JLink

7.3 BandiZip
BandiZip是一個免費的壓縮軟件,它可以在快捷菜單增加一項:在當前目錄打開CMD窗口。

nrfjprog nrf52 nrf53 nordic JLink

nrfjprog nrf52 nrf53 nordic JLink

7.4 Quick Clip
Quick Clip可以保存用戶程序命令,通過托盤圖標快速啟動程序。
我們可以將上面寫好的批處理文件都添加到Quick Clip中統一管理。效果如下:

nrfjprog nrf52 nrf53 nordic JLink

nrfjprog nrf52 nrf53 nordic JLink
(完)

參考文章
文章出處:網頁設計,網站架設 ,網路行銷,網頁優化,SEO - NetYea 網頁設計

 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2020-10-23 01:19 , Processed in 0.066907 second(s), 24 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表