日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

RISC-V JTAG:開啟MCU 芯片調(diào)試之旅

安芯 ? 來源:jf_29981791 ? 作者:jf_29981791 ? 2025-05-07 17:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在當今電子科技飛速發(fā)展的時代, MCU 芯片成為眾多企業(yè)追求技術突破與創(chuàng)新的關鍵領域。而芯片的調(diào)試過程則是確保其性能與可靠性的重要環(huán)節(jié)。本文以國科安芯自研 AS32A601為例,旨在詳細記錄基于 RISC-V 架構的 MCU 芯片JTAG 調(diào)試過程及操作,為后續(xù)類似調(diào)試工作提供詳實參考的依據(jù),助力研發(fā)團隊高效推進芯片研發(fā)進程。

RISC-V 架構以其開源、模塊化等優(yōu)勢在 MCU 芯片領域嶄露頭角。JTAG(Joint Test Action Group)調(diào)試技術作為芯片調(diào)試的主流手段之一,為我們深入芯片內(nèi)部、精準定位問題提供了有力支持。

我們將深入記錄 MCU 芯片AS32A601在 JTAG 調(diào)試過程中的具體操作步驟。從硬件連接的細節(jié),包括如何正確設置 JTAG 接口仿真器的連接,確保信號傳輸?shù)姆€(wěn)定與準確;到軟件調(diào)試工具的配置與使用技巧,如調(diào)試環(huán)境的搭建、調(diào)試指令的編寫與執(zhí)行等,都將一一呈現(xiàn)。同時,針對調(diào)試過程中可能遇到的常見問題,如通信故障、數(shù)據(jù)讀取錯誤等,也會詳細分析原因并提供相應的解決方法。

通過這份詳盡的記錄,我們期望為后續(xù)的芯片研發(fā)與調(diào)試工作積累寶貴經(jīng)驗,幫助研發(fā)團隊更加高效、精準地完成自研 MCU 芯片的開發(fā)與優(yōu)化任務。這不僅有助于提升芯片產(chǎn)品的質(zhì)量和性能,也對推動整個團隊在 RISC-V 架構領域的技術進步具有重要意義,為未來在復雜芯片設計與調(diào)試領域的深入探索奠定堅實基礎。

JTAG簡介

接口

TCK 應接下拉電阻,按照 IEEE 1149.1 的要求,被測芯片在 TCK 保持低電平的情況下將保持原有的狀態(tài),所以 TCK 應該拉低,確保在沒有接仿真器時 TCK 是低電平狀態(tài)。

TMS 應接上拉電阻,根據(jù) TAP 狀態(tài)機,任意狀態(tài)下,只要 TMS 保持高電平 5 個時鐘,那么就會進入復位狀態(tài),所以 TMS 拉高是安全的。

TAP狀態(tài)機

所有JTAG操作的源頭都是由一個具有16個狀態(tài)的同步狀態(tài)機控制。該控制器使用TCK作為時鐘,使用TMS作為輸入。如果需要復位時使用TRSTN。狀態(tài)的跳轉(zhuǎn)是由TMS輸入1或0決定。 JTAG的TAP狀態(tài)機

狀態(tài)機介紹: 寄存器可以分為兩大類,數(shù)據(jù)寄存器和指令寄存器。 標識有DR的這些狀態(tài)是用來訪問數(shù)據(jù)寄存器的,標識有IR的這些狀態(tài)是用來訪問指令寄存器的。

常用的狀態(tài)說明如下所示:

  • Test-Logic-Select(TLS):系統(tǒng)上電后,TAP Controller 自動進入該狀態(tài)。在該狀態(tài)下,測試部分的邏輯電路全部被禁用,以保證芯片核心邏輯電路的正常工作。通過 TRST 信號也可以對測試邏輯電路進行復位,使得 TAP Controller 進入 Test-Logic Reset 狀態(tài)。TRST 是可選的一個信號接口,這是因為在 TMS 上連續(xù)加 5 個 TCK 脈沖寬度的“1”信號也可以對測試邏輯電路進行復位,使得 TAP Controller 進入 Test-Logic Reset 狀態(tài)。所以,在不提供 TRST信號的情況下,也不會產(chǎn)生影響。在該狀態(tài)下,如果 TMS 一直保持為“1”,TAP Controller將保持在 Test-Logic Reset 狀態(tài)下;如果 TMS 由“1”變?yōu)椤?”(在 TCK 的上升沿觸發(fā)), 將使 TAP Controller 進入 Run-Test/Idle 狀態(tài)。
  • Run-Test/Idle:這個是 TAP Controller 在不同操作間的一個中間狀態(tài)。這個狀態(tài)下的動作取決于當前指令寄存器中的指令。有些指令會在該狀態(tài)下執(zhí)行一定的操作,而有些指令在該狀態(tài)下不需要執(zhí)行任何操作。在該狀態(tài)下,如果 TMS 一直保持為“0”,TAP Controller 將一直保持在 Run-Test/Idle 狀態(tài)下;如果 TMS 由“0”變?yōu)椤?”(在 TCK 的上升沿觸發(fā)),將使 TAPController 進入 Select-DR-Scan 狀態(tài)。
  • Select-DR-Scan:這是一個臨時的中間狀態(tài)。如果 TMS 為“0” (在 TCK 的上升沿觸發(fā)),TAP Controller進入 Capture-DR 狀態(tài),后續(xù)的系列動作都將以數(shù)據(jù)寄存器作為操作對象;如果 TMS 為“1” (在 TCK 的上升沿觸發(fā)),TAP Controller 進入 Select-IR-Scan 狀態(tài)。
  • Capture-DR:當 TAP Controller 在這個狀態(tài)中,且當前指令是SAMPLE/PRELOAD指令,那么邊界掃描寄存器BSR在TCK信號的上升沿捕 獲輸入管腳的數(shù)據(jù)。如果此時不是SAMPLE/PRELOAD指令,那么BSR保持它們先前的值,另外BSR的值被放入連接在TDI和TDO管腳之間的移 位寄存器中。如果 TMS 為“0” (在 TCK 的上升沿觸發(fā)),TAP Controller 進入 Shift-DR 狀態(tài);如果 TMS 為“1” (在 TCK 的上升沿觸發(fā)),TAPController 進入 Exit1-DR 狀態(tài)。
  • Shift-DR:在這個狀態(tài)中,由 TCK 驅(qū)動,每一個時鐘周期,被連接在 TDI 和 TDO 之間的數(shù)據(jù)寄存器將從 TDI 接收一位數(shù)據(jù),同時通過 TDO 輸出一位數(shù)據(jù)。如果 TMS 為“0” (在 TCK的上升沿觸發(fā)),TAP Controller 保持在 Shift-DR 狀態(tài); 如果 TMS 為“1” (在 TCK 的上升沿觸發(fā)),TAP Controller 進入到 Exit1-DR 狀態(tài)。假設當前的數(shù)據(jù)寄存器的長度為 4。如果 TMS 保持為 0,那在 4 個 TCK 時鐘周期后,該數(shù)據(jù)寄存器中原來的 4 位數(shù)據(jù)(一般是在 Capture-DR 狀態(tài)中捕獲的數(shù)據(jù))將從 TDO 輸出來;同時該數(shù)據(jù)寄存器中的每個寄存器單元中將分別獲得從 TDI 輸入的 4 位新數(shù)據(jù)。
  • Exit1-DR:Exit1-DR是TAP控制器的一個臨時狀態(tài),如果TMS信號在下一個TCK上升沿處于高電平,TAP進入Update-DR狀態(tài);如果TMS信號在下一個TCK上升沿處于低電平,則TAP進入Pause-DR狀態(tài)。處于Exit1-DR狀態(tài)時,指令不會被改變。
  • Pause-DR: Pause-DR狀態(tài)允許TAP控制器暫時停止TDI-移位寄存器-TDO串行通道的移位操作。處于Pause-DR狀態(tài)時,指令不會被改變。如果TMS信號在下一個TCK上升沿處于高電平,TAP進入Exit2-DR狀態(tài);如果TMS信號處于低電平,則TAP一直保持暫停狀態(tài)。
  • Exit2-DR:Exit2-DR也是TAP控制器的臨時狀態(tài),如果TMS信號在下一個TCK上升沿處于高電平,TAP進入Update-DR狀態(tài),結(jié)束掃描操作;如果TMS信號在下一個TCK上升沿處于低電平,則TAP重新進入Shift-DR狀態(tài)。處于Exit2-D狀態(tài)時,指令不會被改變。
  • Update-DR:在 Update-DR 狀態(tài)下,由 TCK 上升沿驅(qū)動,數(shù)據(jù)寄存器當中的數(shù)據(jù)將被加載到相應的芯片管腳上去,用以驅(qū)動芯片。在該狀態(tài)下,如果 TMS 為“0”,TAP Controller 將回到Run-Test/Idle 狀態(tài);如果 TMS 為“1”,TAP Controller 將進入 Select-DR-Scan 狀態(tài)。
  • Select-IR-Scan:這是一個臨時的中間狀態(tài)。如果 TMS 為“0” (在 TCK 的上升沿觸發(fā)),TAP Controller進入 Capture-IR 狀態(tài),后續(xù)的系列動作都將以指令寄存器作為操作對象;如果 TMS 為“1” (在 TCK 的上升沿觸發(fā)),TAP Controller 進入 Test-Logic Reset 狀態(tài)。
  • Capture-IR:當 TAP Controller 在這個狀態(tài)中,在 TCK 的上升沿,一個特定的邏輯序列將被裝載到指令寄存器中去。如果 TMS 為“0” (在 TCK 的上升沿觸發(fā)),TAP Controller 進入 Shift-IR狀態(tài);如果 TMS 為“1” (在 TCK 的上升沿觸發(fā)),TAP Controller 進入 Exit1-IR 狀態(tài)。
  • Shift-IR:在這個狀態(tài)中,由 TCK 驅(qū)動,每一個時鐘周期,被連接在 TDI 和 TDO 之間的指令寄存器將從 TDI 接收一位數(shù)據(jù),同時通過 TDO 輸出一位數(shù)據(jù)。如果 TMS 為“0” (在 TCK的上升沿觸發(fā)),TAP Controller 保持在 Shift-IR 狀態(tài); 如果 TMS 為“1” (在 TCK 的上升沿觸發(fā)),TAP Controller 進入到 Exit1-IR 狀態(tài)。假設指令寄存器的長度為 4。如果TMS 保持為 0,那在 4 個 TCK 時鐘周期后,指令寄存器中原來的 4bit 長的特定邏輯序列(在 Capture-IR 狀態(tài)中捕獲的特定邏輯序列)將從 TDO 輸出來,該特定的邏輯序列可以用來判斷操作是否正確;同時指令寄存器將獲得從 TDI 輸入的一個 4bit 長的新指令。
  • Exit1-IR:Exit1-IR是TAP控制器的一個臨時狀態(tài),如果TMS信號在下一個TCK上升沿處于高電平,TAP進入Update-IR狀態(tài);如果TMS信號在下一個TCK上升沿處于低電平,則TAP進入Pause-IR狀態(tài)。處于Exit1-IR狀態(tài)時,指令不會被改變。
  • Pause-IR:Pause-IR狀態(tài)允許TAP控制器暫時停止TDI-移位寄存器-TDO串行通道的移位操作。處于Pause-IR狀態(tài)時,指令不會被改變。如果TMS信號在下一個TCK上升沿處于高電平,TAP進入Exit2-IR狀態(tài);如果TMS信號處于低電平,則TAP一直處于暫停狀態(tài)。
  • Exit2-IR:Exit2-IR也是TAP控制器的臨時狀態(tài),如果TMS信號在下一個TCK上升沿處于高電平,TAP進入Update-IR狀態(tài),結(jié)束掃描操作;如果TMS信號在下一個TCK上升沿處于低電平,則TAP重新進入Shift-IR狀態(tài)。處于Exit2-D狀態(tài)時,指令不會被改變。
  • Update-IR:在這個狀態(tài)中,在 Shift-IR 狀態(tài)下輸入的新指令將被用來更新指令寄存器。

JTAG訪問的一般過程:

  • 系統(tǒng)上電,TAP Controller 進入 Test-Logic Reset 狀態(tài),然后依次進入:Run-Test/Idle → Select-DR-Scan → Select-IR-Scan →Capture-IR →Shift-IR →Exit1-IR→Update-IR,最后回到 Run-Test/Idle 狀態(tài)。在 Capture-IR 狀態(tài)中,一個特定的邏輯序列被加載到指令寄存器當中;然后進入到 Shift-IR 狀態(tài)。在 Shift-IR 狀態(tài)下,通過 TCK 的驅(qū)動,可以將一條特定的指令送到指令寄存器當中去。每條指令都將確定一條相關的數(shù)據(jù)寄存器。然后從 Shift-IR →Exit1-IR → Update-IR。在 Update-IR 狀態(tài),剛才輸入到指令寄存器中的指令將用來更新指令寄存器。最后,進入到 Run-Test/Idle 狀態(tài),指令生效,完成對指令寄存器的訪問。
  • 當前可以訪問的數(shù)據(jù)寄存器由指令寄存器中的當前指令決定。要訪問由剛才的指令選定的數(shù)據(jù)寄存器,需要以 Run-Test/Idle 為起點,依次進入 Select-DR-Scan →Capture-DR →Shift-DR →Exit1-DR →Update-DR,最后回到 Run-Test/Idle 狀態(tài)。在這個過程當中,被當前指令選定的數(shù)據(jù)寄存器會被連接在 TDI 和 TDO 之間。通過TDI 和 TDO,就可以將新的數(shù)據(jù)加載到數(shù)據(jù)寄存器當中去,同時,也可以捕獲數(shù)據(jù)寄存器中的數(shù)據(jù)。具體過程如下。在 Capture-DR 狀態(tài)中,由 TCK 的驅(qū)動,芯片管腳上的輸出信號會被“捕獲”到相應的邊界掃描寄存器單元中去。這樣,當前的數(shù)據(jù)寄存器當中就記錄了芯片相應管腳上的輸出信號。接下來從 Capture-DR 進入到Shift-DR 狀態(tài)中去。在 Shift-DR 狀態(tài)中,由 TCK 驅(qū)動,在每一個時鐘周期內(nèi),一位新的數(shù)據(jù)可以通過 TDI 串行輸入到數(shù)據(jù)寄存器當中去,同時,數(shù)據(jù)寄存器可以通過TDO 串行輸出一位先前捕獲的數(shù)據(jù)。在經(jīng)過與數(shù)據(jù)寄存器長度相同的時鐘周期后,就可以完成新信號的輸入和捕獲數(shù)據(jù)的輸出。接下來通過 Exit1-DR 狀態(tài)進入到Update-DR 狀態(tài)。在 Update-DR 狀態(tài)中,數(shù)據(jù)寄存器中的新數(shù)據(jù)被加載到與數(shù)據(jù)寄存器的每個寄存器單元相連的芯片管腳上去。最后,回到 Run-Test/Idle 狀態(tài),完成對數(shù)據(jù)寄存器的訪問。

debug寄存器

目前RISC-V的官方調(diào)試上位機是openocd,調(diào)試工具可以是JLink或者CMSIS-DAP,RISCV調(diào)試框架如圖所示。 RISC-V調(diào)試系統(tǒng)框架

DTM模塊

作為DTM使用的JTAG tap必須具有至少5位的IR。當TAP時,IR必須默認為00001,選擇IDCODE指令。DTM模塊的寄存器定義如圖所示。 DTM寄存器

IDCODE寄存器(0x01)

當TAP狀態(tài)機復位時,IR寄存器的值默認為0x01,即選擇的是IDCODE寄存器。IDCODE寄存器的每一位含義如圖5所示。IDCODE是只讀寄存器。 IDCODE寄存器

Version:只讀,版本號,可為任意值。 PartNumber:只讀,可為任意值。 Manufld:只讀,廠商號,遵循JEP106標準分配,實際中可為任意值,只要不與已分配的廠商號沖突即可。

DTM控制和狀態(tài)寄存器(dtmcs,0x10)

dtmcs寄存器

dmihardreset:DTM模塊硬復位,寫1有效。 dmireset:清除出錯,寫1有效。 idle:只讀,JTAG 主機在Run-Test-Idle狀態(tài)停留的時鐘周期數(shù),0表示不需要進入Run-Test-Idle狀態(tài),1表示進入 Run-Test-Idle狀態(tài)后可以馬上進入下一個狀態(tài),以此類推。 dmistat:只讀,上一次操作的狀態(tài)。0表示無出錯,1或者2表示操作出錯,3表示操作還未完成。 abits:只讀,dmi寄存器中address域的大小(位數(shù))。 version:只讀,實現(xiàn)所對應的spec版本,0表示0.11版本,1表示0.13版本。

DM模塊接口訪問寄存器(dmi,0x11)

dmi寄存器

address:可讀可寫,DM寄存器的長度(位數(shù))。 data:可讀可寫,往DM寄存器讀、寫的數(shù)據(jù),固定為32位。 op:可讀可寫,讀或者寫這個域時有不同的含義。當寫這個域時,寫0表示忽略address和data的值,相當于nop操作;寫1表示從address指定的寄存器讀數(shù)據(jù);寫2表示把data的數(shù)據(jù)寫到address指定的寄存器。寫3為保留值。當讀這個域時,0表示上一個操作正確完成;1為保留值;2表示上一個操作失敗,這個狀態(tài)是會被記住的,因此需要往dtmcs寄存器的dmireset域?qū)?才能清除這個狀態(tài)。3表示上一個操作還未完成。

在Update-DR狀態(tài)時,DTM開始執(zhí)行op指定的操作。在Capture-DR狀態(tài)時,DTM更新data域。

BYPASS寄存器(0x1f)

只讀,長度為1,值固定為0。

DM模塊

DM模塊的寄存器都為32位,定義如圖所示(只描述主要寄存器)。

data0寄存器(0x04)

此寄存器是用于abstract command的數(shù)據(jù)寄存器,長度為32位,可讀可寫。

dmcontrol寄存器(0x10)

dmcontrol寄存器

haltreq:只寫,寫1表示halt(暫停)當前hart(hart表示CPU核,存在多核的情況)。 resumereq:只能寫1,寫1表示resume(恢復)當前hart,即go。 hartreset:可讀可寫,寫1表示復位DM模塊,寫0表示撤銷復位,這是一個可選的位。 ackhavereset:只能寫1,寫1表示清除當前hart的havereset狀態(tài)。 hasel:可讀可寫,0表示當前只有一個已經(jīng)被選擇了的hart,1表示當前可能有多個已經(jīng)被選擇了的hart。 hartsello:可讀可寫,當前選擇的hart的低10位。1位表示一個hart。 hartselhi:可讀可寫,當前選擇的hart的高10位。1位表示一個hart。如果只有一個hart,那么hasel的值為0, hartsello的值為1,hartselhi的值為0。 setresethaltreq:只能寫1,寫1表示當前選擇的hart復位后處于harted狀態(tài)。 clrresethaltreq:只能寫1,寫1表示清除setresethaltreq的值。 ndmreset:可讀可寫,寫1表示復位整個系統(tǒng),寫0表示撤銷復位。 dmactive:可讀可寫,寫0表示復位DM模塊,寫1表示讓DM模塊正常工作。正常調(diào)試時,此位必須為1。

dmstatus寄存器(0x11)

dmstatus寄存器

impebreak:1表示執(zhí)行完progbuf的指令后自動插入一條ebreak指令,這樣就可以節(jié)省一個progbuf。當progbufsize的 值為1時,此值必須為1。 allhavereset:1表示當前選擇的hart已經(jīng)復位。 anyhavereset:1表示當前選擇的hart至少有一個已經(jīng)復位。 allresumeack:1表示當前選擇的所有hart已經(jīng)應答上一次的resume請求。 anyresumeack:1表示當前選擇的hart至少有一個已經(jīng)應答上一次的resume請求。 allnonexistent:1表示當前選擇的hart不存在于當前平臺。 anynonexistent:1表示至少有一個選擇了的hart不存在于當前平臺。 allunavail:1表示當前選擇的hart都不可用。 anyunavail:1表示至少有一個選擇了的hart不可用。 allrunning:1表示當前選擇的hart都處于running狀態(tài)。 anyrunning:1表示至少有一個選擇了的hart處于running狀態(tài)。 allhalted:1表示當前選擇的hart都處于halted狀態(tài)。 anyhalted:1表示至少有一個選擇了的hart處于halted狀態(tài)。 authenticated:0表示使用DM模塊之前需要進行認證,1表示已經(jīng)通過認證。 authbusy:0表示可以進行正常的認證,1表示認證處于忙狀態(tài)。 hasresethaltreq:1表示DM模塊支持復位后處于halted狀態(tài),0表示不支持。 confstrptrvalid:1表示confstrptr0~3寄存器保存了配置字符串的地址。 version:0表示DM模塊不存在,1表示DM模塊的版本為0.11,2表示DM模塊的版本為0.13。

abstractcs寄存器(0x16)

abstractcs寄存器

progbufsize:只讀,program buffer的個數(shù),取值范圍為0~16,每一個的大小為32位。 busy:只讀,1表示abstract命令正在執(zhí)行,當寫command寄存器后該位應該馬上被置位直到命令執(zhí)行完成。 cmderr:可讀、只能寫1,cmderr的值僅當busy位為0時有效。0表示無錯誤,1表示正在操作command、abstractcs、 data或者progbuf寄存器,2表示不支持當前命令,3表示執(zhí)行命令時出現(xiàn)異常,4表示由于當前hart不可用,或者不是處 于halted/running狀態(tài)而不能被執(zhí)行,5表示由于總線出錯(對齊、訪問大小、超時)導致的錯誤,7表示其他錯誤。寫1清 零cmderr。 datacount:只讀,所實現(xiàn)的data寄存器的個數(shù)。

command寄存器(0x17)

當寫這個寄存器時,相應的操作就會被執(zhí)行,command寄存器只能寫。 command寄存器

cmdtype:只寫,命令類型,0為表示訪問寄存器,1表示快速訪問,2表示訪問內(nèi)存。 control:只寫,不同的命令類型有不同的含義,說明如下。

當cmdtype為0時,control定義下圖所示。

cmdtype:值為0。 aarsize:2表示訪問寄存器的最低32位,3表示訪問寄存器的最低64位,4表示訪問寄存器的最低128位。如果大于實際寄存器的大小則此次訪問是失敗的。 aarpostincrement:1表示成功訪問寄存器后自動增加regno的值。 postexec:1表示執(zhí)行progbuf里的內(nèi)容(指令)。 transfer:0表示不執(zhí)行write指定的操作,1表示執(zhí)行write指定的操作。 write:0表示從指定的寄存器拷貝數(shù)據(jù)到arg0指定的data寄存器。1表示從arg0指定的data寄存器拷貝數(shù)據(jù)到指定的寄存器。 regno:要訪問的寄存器。

綜上,可知:

  1. 當write=0,transfer=1時,從regno指定的寄存器拷貝數(shù)據(jù)到arg0對應的data寄存器。
  2. 當write=1,transfer=1時,從arg0對應的data寄存器拷貝數(shù)據(jù)到regno指定的寄存器。
  3. 當aarpostincrement=1時,將regno的值加1。
  4. 當postexec=1時,執(zhí)行progbuf寄存器里的指令。

當cmdtype為1時,control定義下圖所示。

cmdtyte:值為1。

此命令會執(zhí)行以下操作:

  1. halt住當前hart。
  2. 執(zhí)行progbuf寄存器里的指令。
  3. resume當前hart。

當cmdtype為2時,control定義下圖所示。

cmdtype:值為2。 aamvirtual:0表示訪問的是物理地址,1表示訪問的是虛擬地址。 aamsize:0表示訪問內(nèi)存的低8位,1表示訪問內(nèi)存的低16位,2表示訪問內(nèi)存的低32位,3表示訪問內(nèi)存的低64位,4表示訪問內(nèi)存的低128位。 aampostincrement:1表示訪問成功后,將arg1對應的data寄存器的值加上aamsize對應的字節(jié)數(shù)。 write:0表示從arg1指定的地址拷貝數(shù)據(jù)到arg0指定的data寄存器,1表示從arg0指定的data寄存器拷貝數(shù)據(jù)到arg1指 定的地址。 target-specific:保留。

綜上,可知:

  1. 當write=0時,從arg1指定的地址拷貝數(shù)據(jù)到arg0指定的data寄存器。
  2. 當write=1時,從arg0指定的data寄存器拷貝數(shù)據(jù)到arg1指定的地址。
  3. 當aampostincrement=1時,增加arg1對應的data寄存器的值。

abstractauto寄存器(0x18)

abstractauto寄存器

autoexecprogbuf:當該字段中的一個位為1時,對對應進程單詞的讀寫訪問會導致DM在進程訪問完成后將命令中的當前值再次寫入其中。 autoexecdata:當該字段中的一個位為1時,對相應數(shù)據(jù)字的讀寫訪問會導致DM在數(shù)據(jù)訪問完成后將命令中的當前值再次寫入那里。

progbuf0寄存器(0x20)

progbuf0寄存器

progbuf寄存器必須提供program buffer的寫訪問權限,debugger可通過這些寄存器對program buffer讀訪問,讀不支持時返回0。 progbufsize 表示從progbuf0開始實現(xiàn)多少progbuf寄存器。 在執(zhí)行抽象命令時訪問這些寄存器時,如果cmderr為0,則會將其設置為1(busy)。 在busy時嘗試編寫它們不會改變它們的值。

操作流程

debug讀寫內(nèi)存和寄存器步驟

Reading Memory

使用 Program Buffer 從內(nèi)存中讀取數(shù)據(jù)

program buffer 方式讀取單字

program buffer 方式讀取塊

Writing Memory

使用 Program Buffer 往內(nèi)存中寫入數(shù)據(jù)

program buffer 方式寫單字

program buffer方式寫塊

debug實際運行狀態(tài)

邏輯分析儀解析JTAG協(xié)議配置

注:下圖TDI為仿真器輸入信號,TDO為仿真器輸出信號。

讀取內(nèi)存步驟

本例:讀取0x20000000地址的數(shù)據(jù),以openocd指令操作為例(指令操作為mdw 0x20000000),返回數(shù)據(jù)為0x100002bc。

  1. 此波形為操作dmi(0x11)寄存器,向progbuf0寄存器寫入lw s0, 0(s0)指令(以gcc/openocd操作為例)。

2.此波形為nop操作。

3.此波形為操作dmi(0x11)寄存器,向progbuf1寄存器寫入ebreak指令(以gcc/openocd操作為例)。

  1. 此波形為nop操作。

  1. 此波形為操作dmi(0x11)寄存器,向data0寄存器寫數(shù)據(jù)0x20000000,表示要寫入要讀取的地址。

  1. 此波形為nop操作。

  1. 此波形為操作dmi(0x11)寄存器,從而操作command(0x17)寄存器,從而進行執(zhí)行progbuf寄存器里的指令、data0數(shù)據(jù)寫入s0的操作。

  1. 此波形為操作dmi(0x11)寄存器,發(fā)送讀取abstractcs(0x16)寄存器操作。

  1. 此波形為nop操作,通過TDO線數(shù)據(jù)獲取狀態(tài)正常。

  1. 此波形為操作dmi(0x11)寄存器,從而操作command(0x17)寄存器,從而進行將s0的數(shù)據(jù)拷貝到data0的操作。

  1. 此波形為操作dmi(0x11)寄存器,發(fā)送讀取abstractcs(0x16)寄存器操作。

  1. 此波形為nop操作,通過TDO線數(shù)據(jù)獲取狀態(tài)正常。

  1. 此波形為操作dmi(0x11)寄存器,進行讀取data0寄存器的操作。

  1. 此波形為nop操作,通過TDO線數(shù)據(jù)獲取要讀取內(nèi)存地址的數(shù)據(jù):0x100002bc。

上述流程描述了通過Program Buffer方式讀內(nèi)存操作,實際操作中會加入讀取狀態(tài)寄存器等操作,確保操作正常。mdw實際操作還會加入保存恢復s0寄存器,執(zhí)行fence指令等,這里不進行過多描述。

寫內(nèi)存步驟

本例:向0x20000000地址寫入數(shù)據(jù)0x12345678,以openocd指令操作為例(指令操作為mww 0x20000000 0x12345678)。

  1. 此波形為操作dmi(0x11)寄存器,向progbuf0寄存器寫入sw s1,0(s0)指令(以gcc/openocd操作為例)。

  1. 此波形為nop操作

3.此波形為操作dmi(0x11)寄存器,向progbuf1寄存器寫入addi s0, s0, 4指令(以gcc/openocd操作為例)。

  1. 此波形為nop操作

  1. 此波形為操作dmi(0x11)寄存器,向data0寄存器寫數(shù)據(jù)0x20000000,表示要寫入要操作的地址。

  1. 此波形為nop操作

  1. 此波形為操作dmi(0x11)寄存器,從而操作command(0x17)寄存器,從而進行data0數(shù)據(jù)寫入s0的操作。

  1. 此波形為操作dmi(0x11)寄存器,發(fā)送讀取abstractcs(0x16)寄存器操作。

  1. 此波形為nop操作,通過TDO線數(shù)據(jù)獲取狀態(tài)正常。

  1. 此波形為操作dmi(0x11)寄存器,向data0寄存器寫數(shù)據(jù)0x12345678,表示要寫入0x20000000地址的數(shù)據(jù)。

  1. 此波形為nop操作

  1. 此波形為操作dmi(0x11)寄存器,從而操作command(0x17)寄存器,從而進行執(zhí)行progbuf寄存器里的指令,data0數(shù)據(jù)寫入s1的操作。

  1. 此波形為操作dmi(0x11)寄存器,發(fā)送讀取abstractcs(0x16)寄存器操作。

  1. 此波形為nop操作,通過TDO線數(shù)據(jù)獲取狀態(tài)正常。

上述流程描述了通過Program Buffer方式寫內(nèi)存操作,實際操作中會加入讀取狀態(tài)寄存器等操作,確保操作正常。mww實際操作還會加入保存恢復s0寄存器,執(zhí)行fence指令等,這里不進行過多描述。

此流程為可以連續(xù)操作內(nèi)存的一個步驟,下面將進行操作的講解:

  1. sw s1,0(s0)指令為將s1的值寫入到s0地址。
  2. addi s0, s0, 4指令為執(zhí)行一次操作后地址增加4字節(jié)。
  3. 此步驟沒有ebreak指令,能正常運行的原因是debug支持執(zhí)行完progbuf指令自動添加ebreak指令,此設置可以查看dmstatus(0x11)寄存器impebreak位。
  4. 連續(xù)操作步驟為編程abstractauto(0x18)寄存器,可以在寫完data0寄存器后自動執(zhí)行progbuf的指令。

連接時循環(huán)查詢狀態(tài)

  1. 此波形為操作dmi(0x11)寄存器,發(fā)送讀取dmstatus(0x11)寄存器操作。

  1. 此波形為nop操作,通過TDO線數(shù)據(jù)獲取cpu狀態(tài)為halted狀態(tài)。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    463

    文章

    54463

    瀏覽量

    469640
  • mcu
    mcu
    +關注

    關注

    147

    文章

    19160

    瀏覽量

    404718
  • RISC-V
    +關注

    關注

    49

    文章

    2954

    瀏覽量

    53598
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    青稞RISC-V MCU芯片助力互聯(lián)應用高效落地

    青稞RISC-V互聯(lián)型MCU芯片CH32V407和CH32V467支持200MHz主頻零等待運行,雙高速USB和以太網(wǎng)均內(nèi)置PHY,支持向量
    的頭像 發(fā)表于 03-11 16:11 ?830次閱讀
    青稞<b class='flag-5'>RISC-V</b> <b class='flag-5'>MCU</b><b class='flag-5'>芯片</b>助力互聯(lián)應用高效落地

    RISC-V,正式崛起

    寡頭壟斷格局的終結(jié),開啟芯片設計不再是專有技術壟斷,而是全球共享資源的新時代。RISC-V最初只是加州大學伯克利分校的一個小眾學術項目,如今已發(fā)展成為計算領域強
    的頭像 發(fā)表于 01-16 15:17 ?905次閱讀
    <b class='flag-5'>RISC-V</b>,正式崛起

    Renesas R9A02G021:32位RISC-V MCU的全方位解析

    Renesas R9A02G021:32位RISC-V MCU的全方位解析 作為一名電子工程師,在日常的硬件設計開發(fā)中,選擇合適的微控制器(MCU)至關重要。今天,我們就來深入探討一下Renesas
    的頭像 發(fā)表于 12-29 09:50 ?550次閱讀

    芯源CW32 MCURISC-V架構的MCU嘛?性能如何?

    芯源CW32 MCURISC-V架構的MCU嘛?性能如何?
    發(fā)表于 12-10 06:16

    是德科技如何解決RISC-V芯片測試難題

    想理解 RISC-V,得先從“指令集架構”說起,這是芯片的“語言”。
    的頭像 發(fā)表于 11-14 09:44 ?1944次閱讀
    是德科技如何解決<b class='flag-5'>RISC-V</b><b class='flag-5'>芯片</b>測試難題

    FreeRTOS 在 AS32系列RISC-V 架構MCU電機驅(qū)動中的應用實踐與優(yōu)化

    一、AS32系列 RISC-V MCU與 FreeRTOS 融合的電機驅(qū)動架構解析 1.1 硬件層: AS32系列 架構的優(yōu)勢 在電機驅(qū)動系統(tǒng)中,硬件層的性能是決定整體控制精度與響應速度的核心
    的頭像 發(fā)表于 11-13 23:33 ?1046次閱讀

    銳能微RISC-V雙核MCU芯片在智能電表中的應用

    上海貝嶺股份有限公司全資子公司深圳市銳能微科技有限公司近日推出了電表行業(yè)首顆RISC-V雙核MCU芯片。該芯片主要面向出口電表市場,同時也為國網(wǎng)及南網(wǎng)下一步的國產(chǎn)化內(nèi)核
    的頭像 發(fā)表于 11-07 16:48 ?1676次閱讀
    銳能微<b class='flag-5'>RISC-V</b>雙核<b class='flag-5'>MCU</b><b class='flag-5'>芯片</b>在智能電表中的應用

    為什么RISC-V是嵌入式應用的最佳選擇

    最近RISC-V基金會在社交媒體上發(fā)文,文章說物聯(lián)網(wǎng)和嵌入式系統(tǒng)正在迅速發(fā)展,需要更高的計算性能、更低的功耗和人工智能。RISC-V是為未來而建的,包括超高效的MCU到高性能應用處理器,RIS
    的頭像 發(fā)表于 11-07 10:09 ?1860次閱讀

    瑞芯微RISC-V芯片已量產(chǎn),性能、功耗平衡更佳

    作為瑞芯微一款集成RISC-V模塊的智能視覺芯片,采用四核Arm Cortex-A7與RISC-V MCU的異構架構。該芯片內(nèi)置2.
    的頭像 發(fā)表于 10-23 09:13 ?1.2w次閱讀
    瑞芯微<b class='flag-5'>RISC-V</b><b class='flag-5'>芯片</b>已量產(chǎn),性能、功耗平衡更佳

    RISC-V 手冊

    年提出。其核心理念是開放性與模塊化設計,與x86(CISC)和ARM(RISC)形成差異化競爭,現(xiàn)已成為全球芯片創(chuàng)新的重要驅(qū)動力135。核心特點與優(yōu)勢開源開放RISC-V采用開放標準協(xié)議,無專利壁壘與授權費用,開發(fā)者可自由使用、
    發(fā)表于 07-28 16:27 ?11次下載

    2025新思科技RISC-V科技日活動圓滿結(jié)束

    新思科技深度參與2025 RISC-V中國峰會并于2025年7月16日舉辦同期活動“新思科技RISC-V科技日”技術論壇,聚焦“從芯片到系統(tǒng)重構RISC-V創(chuàng)新”主題,議題覆蓋當前最前
    的頭像 發(fā)表于 07-25 17:31 ?1625次閱讀

    智芯公司與華北電力大學RISC-V MCU聯(lián)合實踐教學基地成立

    近日智芯公司與華北電力大學共建的“RISC-V MCU聯(lián)合實踐教學基地”和“大學生實習實踐基地”雙基地揭牌儀式在華電隆重舉行,開啟RISC-V芯片
    的頭像 發(fā)表于 07-07 18:20 ?1301次閱讀

    同一水平的 RISC-V 架構的 MCU,和 ARM 架構的 MCU 相比,運行速度如何?

    ARM 架構與 RISC-V 架構的 MCU 在同一性能水平下的運行速度對比,需從架構設計原點、指令集特性及實際測試數(shù)據(jù)展開剖析。以 ARM Cortex-M33 這類 ARMv8M 架構核心與采用
    的頭像 發(fā)表于 07-02 10:29 ?1756次閱讀
    同一水平的 <b class='flag-5'>RISC-V</b> 架構的 <b class='flag-5'>MCU</b>,和 ARM 架構的 <b class='flag-5'>MCU</b> 相比,運行速度如何?

    沁恒微電子:從互連互通應用推動RISC-V落地發(fā)展

    沁恒微電子邀您共襄盛舉沁恒微電子專注于連接技術和微處理器內(nèi)核研究,基于多層次青稞RISC-V微處理器、多類型物理層收發(fā)器構建USB/藍牙/以太網(wǎng)接口芯片和青稞RISC-V系列MCU/S
    的頭像 發(fā)表于 06-26 09:52 ?1778次閱讀
    沁恒微電子:從互連互通應用推動<b class='flag-5'>RISC-V</b>落地發(fā)展

    RISC-V和ARM有何區(qū)別?

    RISC-VARM是一種精簡指令集(RISC),以該指令集為基礎的處理器通常被稱為ARM芯片,它在全球范圍內(nèi)得到了極為廣泛的應用。而RISC-V也是精簡指令集,是美國加
    的頭像 發(fā)表于 06-24 11:38 ?2290次閱讀
    <b class='flag-5'>RISC-V</b>和ARM有何區(qū)別?
    宁陵县| 福清市| 时尚| 临洮县| 万年县| 武功县| 澄迈县| 龙陵县| 治多县| 中方县| 咸丰县| 葫芦岛市| 旅游| 自贡市| 铁力市| 湟源县| 盘锦市| 遂昌县| 萨迦县| 锡林浩特市| 西华县| 健康| 巍山| 沂水县| 郁南县| 田林县| 科技| 且末县| 保德县| 昌平区| 渭源县| 临漳县| 阿巴嘎旗| 安国市| 蒲城县| 洛阳市| 张家口市| 汕尾市| 抚宁县| 乐陵市| 通江县|