前言
剛開始玩織女星開發板的時候,想先從熟悉的ARM核入手,連上Jlink,打開MDK版本的Demo程序,編譯OK,卻檢測不到芯片,仔細看了一下文檔,原來RV32M1芯片默認從RISC-V核啟動,如果想要調試下載ARM核程序,需要切換為ARM核啟動,然后按照文檔操作步驟,完成了啟動模式的修改,現在分享給大家。
RV32M1芯片內核簡介
織女星開發板主控芯片RV32M1,片上集成了四個核。
兩個RISC-V內核:
- RISC-V RI5CY Core
- RISC-V ZERO_RISCY Core
兩個ARM內核:
- ARM Cortex-M4F Core(CM4)
- ARM Cortex-M0+ Core(CM0+)
兩個ARM核共用一個JTAG調試口,兩個RISC-V核共用一個JTAG調試口,每個核都可以運行在48MHz頻率,但在高速模式(HSRUN)時,可達72MHz,如果要查看系統當前的運行頻率,可以在主程序中使用如下函數來獲取系統時鍾頻率:
uint32_t SysClk;
SystemCoreClockUpdate();
SysClk = SystemCoreClock;
PRINTF("系統時鍾: %d \r\n", SysClk);
4個核被分為兩個子系統,大核CM4F/RI5CY和小核CM0+/ZERO-RISCY,片上集成1.25 MB Flash 、384 KB SRAM,其中1 MB的Flash被大核所使用,起始地址0x0000_0000,另外的256 KB Flash被小核所使用,起始地址0x0100_0000。
Flash地址示意
為了支持多核運行模式,RV32M1片上集成了多核管理系統(Multi_Core Unit),包括消息傳遞單元(Messaging Unit)、信號量2(SEMA42)、系統控制模塊 (MSCM)、 擴展資源控制器 (XRDC)等模塊,用於多核間的通信和控制。
內部整體框圖
關於RV32M1多核開發的詳細介紹,可以參考官方文檔:Develop_Multicore_Application_on_RV32M1.pdf
啟動模式的配置
通過配置RV32M1片上的FOPT寄存器(Flash Option Register),可以支持上電時從不同的核來啟動,默認從RISC-V RI5CY內核啟動,如果要進行ARM核開發,如M4開發,則必須切換為從ARM核啟動,否則當使用調試器進行程序下載時,根本不能識別到ARM芯片,這一點要特別注意。關於FOPT寄存器各位的描述,可以查看RV32M1參考手冊P450,為了便於切換啟動模式,官方已經為我們寫好了配置文件,直接通過openocd和telnet軟件就可以完成對FOPT寄存器的配置。
安裝openocd調試軟件
-
解壓Toolchain_Windows.zip中的openocd.zip,解壓路徑可任意,建議解壓到Eclipse安裝目錄下的
[DISK:]\eclipse\GNU MCU Eclipse\openocd\bin
-
為了能在cmd命令端直接使用
openocd
命令,我們需要在環境變量PATH中添加一條,值為openocd下bin文件夾的路徑,我的是在:F:\VEGA_Board\IDE\eclipse\GNU MCU Eclipse\openocd\bin
-
測試是否安裝成功。在cmd命令窗口輸入
openocd
回車,彈出如下命令,說明安裝成功。C:\Users\LAPTOP>openocd Open On-Chip Debugger 0.10.0+dev-00433-g849f49ca (2019-01-04-07:48) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html
安裝 telnet 客戶端應用
Windows系統可以通過如下命令安裝使用:
-
cmd命令窗口輸入如下命令來安裝telnet:
pkgmgr /iu:"TelnetClient"
-
測試是否安裝成功。cmd命令窗口輸入
telnet
命令,彈出如下窗口,說明安裝成功。歡迎使用 Microsoft Telnet Client Escape 字符為 'CTRL+]' Microsoft Telnet>
-
輸入
help
查看幫助信息:Microsoft Telnet> help 命令可能是縮寫。支持的命令為: c - close 關閉當前連接 d - display 顯示操作參數 o - open hostname [port] 連接到主機(默認端口 23)。 q - quit 退出 telnet set - set 設置選項(鍵入 'set ?' 獲得列表) sen - send 將字符串發送到服務器 st - status 打印狀態信息 u - unset 解除設置選項(鍵入 'set ?' 獲得列表) ?/h - help 打印幫助信息
升級Jlink固件
修改啟動模式,只能通過RISC-V內核來修改啟動模式,即通過RISC-V JTAG調試口,
- 板載調試器升級為Jlink固件,具體操作:織女星開發板調試器升級為jlink固件,升級完成后,連接RISC-V調試口和JLink調試口。
- 升級當前Jlink驅動程序為支持RISC-V調試的驅動程序,即設備管理器里為
- 確保openocd已經添加到環境變量
- 打開SDK目錄下的
\rv32m1_sdk_riscv\boards\rv32m1_vega
目錄
- 在當前窗口打開cmd命令窗口,在路徑欄輸入cmd即可在當前路徑下打開cmd命令窗口
- 在打開的命令窗口輸入
openocd -f rv32m1_ri5cy.cfg
,彈出如下窗口說明連接成功。
-
按Win+R快捷鍵,輸入cmd,再打開一個cmd命令窗口,輸入
telnet localhost 4444
命令C:\Users\LAPTOP>telnet localhost 4444 正在連接localhost....
彈出telnet窗口,輸入cm4_boot
,選擇從CM4核啟動
Open On-Chip Debugger
>cm4_boot
先按住板子上的復位按鍵SW1,然后按回車執行命令。
>cm4_boot
>
稍等1秒鍾,成功執行。然后重新上電,此時就是從ARM CM4核啟動的。
如果想直接使用板載調試器來調試ARM核,Jlink驅動程序需要恢復為原來的J-link driver
,操作步驟可以參考:織女星開發板調試器升級為Jlink固件,打開ARM SDK目錄下的點燈程序,目錄為:rv32m1_sdk_arm\boards\rv32m1_vega\driver_examples\gpio\led_output\cm4\mdk
,編譯,下載,調試,均正常。
使用批處理文件來簡化操作
為了更方便的來修改啟動模式,可以把上述的兩條命令寫成批處理文件:
- 在rv32m1_ri5cy.cfg所在的路徑,新建一個1_openocd.txt文件,以記事本方式打開,輸入命令
openocd -f rv32m1_ri5cy.cfg
,文件擴展名修改為bat,即成為批處理文件。 - 在rv32m1_ri5cy.cfg所在的路徑,新建一個2_telnet.txt文件,輸入命令
telnet localhost 4444
,修改擴展名為abt
- 在以后需要更改啟動配置時,只需要雙擊1_openocd.bat文件,然后雙擊2_telnet.bat文件,然后輸入對應的啟動命令。如
ri5cy_boot
、cm4_boot
、zero_boot
、cm0_boot
,然后重新上電,芯片就會從配置的核啟動。
一些奇怪的事情
- 當配置為從ARM CM4核啟動時,上電之后,執行程序會延時幾秒鍾。
- 配置成CM0啟動時,能檢測到芯片,但是程序下載不進去,不知道這是為什么。
而配置成RI5CY和ZERO_RISCY核啟動時,下載調試均正常。
參考資料
歷史精選
- 織女星開發板調試器升級為Jlink固件
- NXP恩智浦VEGA織女星開發板免費申請!
- 國產處理器的逆襲機會——RISC-V
- 手把手教你制作Jlink-OB調試器(含原理圖、PCB、外殼、固件)
- Jlink使用技巧系列教程索引
- Qt實現軟件自動更新的一種簡單方法
歡迎關注我的個人博客:www.wangchaochao.top
或微信掃碼關注我的公眾號