Risc-v/ARM mcu OpenOCD 調(diào)試架構(gòu)解析
最近有使用到risc-v的單片機(jī),所以了解了下risc-v單片機(jī)的編譯與調(diào)試環(huán)境的搭建,面試時(shí)問(wèn)到risc-v的調(diào)試可參看以下內(nèi)容。
risc-v根據(jù)官方的推薦,調(diào)試器服務(wù)是選擇OpenOCD,DopenOCD(開(kāi)放片上調(diào)試器)是一個(gè)開(kāi)源的片上調(diào)試器,旨在提供針對(duì)嵌入式設(shè)備的調(diào)試、系統(tǒng)編程和邊界掃描功能。OpenOCD的功能需要調(diào)試仿真器來(lái)輔助完成,調(diào)試仿真器是一個(gè)提供調(diào)試目標(biāo)電信號(hào)的小型硬件單元。常用的有JLINK、STLink等一些開(kāi)發(fā)板直接集成了調(diào)試仿真器.
基于openOCD的調(diào)試架構(gòu)如下圖所示:
PC端可以是GDB編譯調(diào)試端或者是一個(gè)集成的IDE開(kāi)發(fā)環(huán)境,它包含了一個(gè)OpenOCD的驅(qū)動(dòng),這個(gè)驅(qū)動(dòng)是根據(jù)具體芯片有所差別的,OpenOCD提供了一系列調(diào)試的接口,芯片廠生產(chǎn)的芯片要支持OpenOCD就需要做自己家的驅(qū)動(dòng)軟件,還有一部分的配置文件(xx.cfg)是用來(lái)在上層配置具體芯片型號(hào)和調(diào)試器硬件類型以及flash編程信息的。cfg文件分幾種類型如下:
interface :這些用于調(diào)試適配器。指定要使用的配置的文件 特定的JTAG,SWD和其他適配器在這里。
board :關(guān)于電路板,PWA,PCB,他們有很多名字。主板文件 包含特定于板的初始化項(xiàng)。
target :關(guān)于芯片?!皌arget ”目錄代表JTAG TAP。在芯片上 OpenOCD應(yīng)該控制哪個(gè),而不是一個(gè)板子。兩種常見(jiàn)的目標(biāo)類型 是ARM芯片和FPGA或CPLD芯片。當(dāng)一個(gè)芯片有多個(gè)TAP(也許它同時(shí)具有ARM和DSP內(nèi)核)時(shí), 目標(biāo)配置文件定義了所有這些。
可見(jiàn)OpenOCD的github: https://github.com/openocd-org/openocd
對(duì)比基于ARM內(nèi)核的調(diào)試架構(gòu),可以看到基本結(jié)構(gòu)類似,JLINK定義了一個(gè)軟件調(diào)試層面的RDI接口標(biāo)準(zhǔn),即Remote debug interface. Keil、IAR、ADS這些開(kāi)發(fā)環(huán)境按照RDI標(biāo)準(zhǔn)進(jìn)行定制,即可以支持JLINK調(diào)試。RDI底層使用USB傳輸,當(dāng)然,其他硬件接口也是可以的。ARM體系原先是支持JTAG硬件調(diào)試接口的,隨著cortex系列增加SWD調(diào)試規(guī)范,現(xiàn)在越來(lái)越多的調(diào)試器選擇SWD接口。其接線少,速率高,也比較穩(wěn)定。JTAG 20個(gè)口太占用pin資源了。JLINK V6開(kāi)始支持SWD,現(xiàn)在V8支持已經(jīng)足夠好了。
兩種內(nèi)核的調(diào)試架構(gòu)基本換湯不換藥,都SEGGER和OpenOCD都提供了標(biāo)準(zhǔn)結(jié)構(gòu)給芯片廠,芯片廠基于自家的芯片實(shí)現(xiàn)接口,底層都是通過(guò)USB驅(qū)動(dòng)實(shí)現(xiàn)PC和調(diào)試器的通信,都包含下載算法的思路設(shè)計(jì)flash 編程方法。
下面就先看看,OpenOCD中的cfg文件配置方法吧,以stm32f4為例:
啟動(dòng)openocd服務(wù),需要指定interface和target(target和board可以選擇,最小系統(tǒng)板選target, 板載DRAM, 外部Flash的可以帶上board的cfg文件)
openocd -f D:\OpenOCD\share\openocd\scripts\interface\stlink-v2.cfg -f D:\OpenOCD\share\openocd\scripts\board\stm32f4discovery.cfg
配置risc-v內(nèi)核:
# script for stm32f4x family
#
# stm32 devices support both JTAG and SWD transports.
#
source [find target/swj-dp.tcl]
source [find mem_helper.tcl]
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME stm32f4x
}
set _ENDIAN little
# Work-area is a space in RAM used for flash programming
# By default use 32kB (Available RAM in smallest device STM32F410)
if { [info exists WORKAREASIZE] } {
set _WORKAREASIZE $WORKAREASIZE
} else {
set _WORKAREASIZE 0x8000
}
#jtag scan chain
if { [info exists CPUTAPID] } {
set _CPUTAPID $CPUTAPID
} else {
if { [using_jtag] } {
# See STM Document RM0090
# Section 38.6.3 - corresponds to Cortex-M4 r0p1
set _CPUTAPID 0x4ba00477
} {
set _CPUTAPID 0x2ba01477
}
}
swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
tpiu create $_CHIPNAME.tpiu -dap $_CHIPNAME.dap -ap-num 0 -baseaddr 0xE0040000
if {[using_jtag]} {
jtag newtap $_CHIPNAME bs -irlen 5
}
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME stm32f2x 0 0 0 0 $_TARGETNAME
flash bank $_CHIPNAME.otp stm32f2x 0x1fff7800 0 0 0 $_TARGETNAME
flash bank $_CHIPNAME.otp stm32f2x 0x1fff7800 0 0 0 $_TARGETNAME
_WORKAREASIZE 是OpenOcd調(diào)試使用的ram空間,一般把flash的編程程序放在這里,然后需要編程的數(shù)據(jù)也放在這里面。
flash bank $_FLASHNAME stm32f2x 指定flash的名稱和驅(qū)動(dòng),這里如果需要適配自己廠家的芯片的話,flash驅(qū)動(dòng)是需要自己實(shí)現(xiàn)的,如果各位小伙伴,以后進(jìn)入MCU廠,這個(gè)flash驅(qū)動(dòng)時(shí)?必須要會(huì)的。關(guān)于驅(qū)動(dòng)的寫(xiě)法,阿目?有時(shí)間再介紹一篇文章,內(nèi)容比較多。
interface文件中?簡(jiǎn)單配置:
echo "WARNING: interface/stlink-v2.cfg is deprecated, please switch to interface/stlink.cfg"
source [find interface/stlink.cfg]
只需要配置自己使用是哪個(gè)調(diào)試硬件平臺(tái)就好,這是使用的是stlink?。
windows ?powershell 運(yùn)行界面:
出現(xiàn)上述代表運(yùn)行正常。其中第一個(gè)cfg文件為stlink接口文件 因?yàn)橛玫挠布閟tlink,第二個(gè)cfg文件為板子對(duì)于芯片文件。stm32f407打開(kāi)另一個(gè)cmd或者powershell arm-none-eabi-gdb .\rt-thread.elf
這個(gè)時(shí)候第一個(gè)窗口會(huì)顯示:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-861313.html
這里的調(diào)試截圖?來(lái)源,親測(cè)可用,感謝博主:利用openocd 在windows環(huán)境下GDB調(diào)試(調(diào)試器 stlinkv2)STM32_xpack-openocd 調(diào)試stlink-CSDN博客文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-861313.html
到了這里,關(guān)于RISC-V/ARM mcu OpenOCD 調(diào)試架構(gòu)解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!