Perface
coresight的寄存器
coresight對于每個coresight組件,規定了一些寄存器,這些寄存器的偏移是固定的,這些寄存器,是必須存在的。但是有的,可以不實現該寄存器功能。
1、寄存器一覽
coresight架構,對于coresight的組件,定義了若干個固定的寄存器。第一個寄存器的偏移從0xf00開始,直到0xffc。以下是寄存器列表:
以上的寄存器的地址,在coresight的組件中,是不能當作其他功能使用的。如果該寄存器,在該組件沒有實現,那么該寄存器地址要保留,讀取要返回0,寫被忽略(read must return zero, and writes must be ignored),而不能當作其他功能使用。
對于coresight的組件,占用1個4k或者整數倍的4k空間的memory空間。
而coresight的寄存器,處于組件占用空間的最后一個4K空間的最后一部分。
以下是一個coresight組件占用的memory空間。占用一個4k空間。
寄存器分為兩部分:
- device-specific registers:組件自定義寄存器,從0x000-0xeff。 coresight組件利用這些寄存器,實現該組件的功能 。
- coresight management registers:coresight固定的寄存器,從0xf00-0xfff。這部分寄存器的功能是固定的。
以下是包含了多個coresight組件memory分布,每個組件,占用4K空間的整數倍空間。
對于第2個組件,占用了16k的空間,但是coresight寄存器,是在最后一個空間的最后位置。
而其他3個組件,都只占用了1個4K空間。因此coresight寄存器,在這一個空間的最后位置。
2、ITCTRL,integration mode control register 工作模式寄存器。
對于每個coresight組件,可以工作在兩種模式下:
- functional mode
- integration mode
兩種模式的區別,在于對coresight組件的寄存器的訪問,是否會引發寄存器相應的功能。
integration mode是用來topology detection的。當一個debugger連接到一個soc后,此時debugger是不知道soc內部有哪些coresight組件的。因此就需要通過查詢,來得知soc中有哪些coresight組件的。
而查詢,就是通過訪問coresight組件的寄存器來實現的。此時soc還不知道組件是什么組件,因此也就不知道組件的寄存器是有什么功能。因此此時是不能隨意對組件的寄存器進行訪問的。
為了使訪問的過程中,不影響組件的功能,就可以讓組件工作在integration mode下,此時訪問組件的寄存器,不會引發寄存器相應的功能。
待debugger查詢完畢后,獲取到soc中各個coresight組件的信息后,再將組件的模式切換為functional mode。
復位后,組件必須工作在functional mode下。因此外部debugger對組件查詢完畢后,可以直接對組件進行復位,這樣所有的組件就恢復到了function mode了。
3、CLAIM寄存器
這個寄存器是一個32位的不可見寄存器。只能通過訪問CLAIMCLR和CLAIMSET這兩個寄存器,來設置或者獲取該寄存器的值。
該寄存器,可以用來表示該組件的狀態。這個是由實現來定義的 ,比如可以規定,該寄存器的最低位,表示最近該寄存器被讀取過,第1位,表示最近該寄存器被寫過。
CLAIMCLR寄存器:
CLAIMSET寄存器
4、DEVAFF
device affinity register 組件關聯功能寄存器 。有時候,組件需要和其他組件,聯合起來工作,這樣,就需要指示該組件是和另外的什么組件進行關聯,就可以用這寄存器。
比如一個ETM,追蹤一個core的trace信息,那么這個寄存器,就保存core的MPIDR寄存器信息, 這樣debugger就可以通過DEVAFF寄存器,得知這個ETM是關聯的哪一個core 。
我還以為是和別的CIT組件這些配合
DEVAFF0寄存器:
DEVAFF1寄存器:
5、lock 寄存器
對于coresight組件的寄存器,ARM定義了如下的一些訪問方式:
可以分為兩類訪問:
- 系統寄存器訪問:通過MSR,MRS指令(aarch64),MCR,MRC指令(aarch32)
- external debug接口訪問:DAP訪問,或者是memory-mapped訪問,也就是軟件通過load store訪問
對coresight組件寄存器的訪問,是有權限要求的 。
對于系統寄存器訪問和memory-mapped訪問,ARM 定義了software lock這個權限限制 。當software lock有效的時候,軟件是不能訪問coresight組件寄存器的。
software lock的目的, 是為了防止軟件意外的修改coresight組件的寄存器 ,從而修改當前系統狀態,或者獲取一些不該獲取的信息。可以用來防黑客。
software lock提供了兩個寄存器,一個是LAR,一個是LSR。
- LAR是用來設置software lock狀態,
- 而LSR是保存當前的software lock的狀態。
往LAR寫入0xc5acce55,software lock狀態切換為unlock, software可以正常訪問coresight組件的寄存器,寫入其他值,software lock狀態切換為lock,software不可以正常訪問coresight組件的寄存器(實現自定義)。
對于DAP訪問,software lock是沒有用的。因為要通過DAP訪問,是必須要debugger連接芯片的。所以coresight組件要能夠區分,當前的訪問是DAP訪問,還是非DAP訪問。
在DAP訪問中,需要使用debugger工具來連接芯片,并執行一些特定的操作,例如讀取或者修改芯片的寄存器或者內存。在這個過程中,軟件鎖(software lock)是沒有用的,因為軟件鎖主要用于防止未經授權的軟件訪問coresight組件的寄存器,而在DAP訪問中,debugger工具需要獲得特定的授權才能進行訪問。
另一方面,非DAP訪問通常是由軟件直接進行的,例如通過串口或者USB接口進行數據傳輸。在這個過程中,就需要使用軟件鎖來防止未經授權的軟件訪問coresight組件的寄存器,以保護系統的安全和穩定。
非DAP訪問場景:
- 開發人員使用IDE(集成開發環境)編寫代碼,并通過編譯器將其編譯為可執行文件。
- 開發人員使用串口或者USB接口將可執行文件下載到目標嵌入式系統中。
- 開發人員使用串口調試器或者類似的工具來連接到目標嵌入式系統,并通過發送特定的命令來執行調試操作,例如設置斷點、單步執行等。
- 在這個過程中,開發人員不需要獲得特定的授權才能進行訪問,但是需要+ 對目標嵌入式系統的硬件和軟件有一定的了解,以便正確地發送命令和解析調試信息。
DAP訪問場景:
- 開發人員使用專門的調試工具(例如GDB)來連接目標嵌入式系統。
- 開發人員使用調試工具來設置斷點、單步執行等操作,并通過調試器來查看和修改目標嵌入式系統的寄存器和內存。
- 在這個過程中,開發人員需要獲得特定的授權才能進行訪問,因為調試工具需要連接到目標嵌入式系統的核心寄存器或者內存中。
- DAP訪問通常需要更高的技術要求和更復雜的設置,但是它可以提供更高級別的調試功能和更靈活的控制方式。例如,開發人員可以在不重新編譯代碼的情況下對目標嵌入式系統進行實時調試,查看和修改寄存器和內存的值,以及進行多線程和多進程的調試等操作。
關鍵在于想訪問的一個是程序本身,還有一個是系統平臺更底層的東西
6、AUTHSTATUS
authentication status register debug功能的認證接口。
debug可以分為non-invasive和invasive。
- non-invasive就是self-hosted
- invasive就是external debug。
non-invasive debug(非侵入性調試): 非侵入性調試通常指的是self-hosted(自托管)調試。在這種方法中,開發人員使用同一臺計算機來執行程序和監視程序的執行過程。這通常是通過在開發人員機器上運行一個模擬器或虛擬機來模擬目標系統或設備的行為。非侵入性調試不需要直接訪問目標系統的硬件或底層資源,因此它不會干擾目標系統的正常操作。這種方法的優點是簡單、安全且易于使用。然而,它可能無法提供與實際硬件完全一致的仿真體驗,因此可能會遺漏一些特定于硬件的錯誤或問題。
invasive debug(侵入性調試): 侵入性調試通常指的是external debug(外部調試)。在這種方法中,開發人員需要將調試器連接到目標系統或設備的硬件上,以便直接監視和控制其執行過程。這種方法需要侵入目標系統,可能會對目標系統的正常操作產生干擾或影響。因此,在進行外部調試之前,通常需要先備份目標系統的狀態或創建一個測試版本來保護原始數據。外部調試的優點是可以提供更準確和詳細的調試信息,特別是在處理硬件相關的問題時。然而,它需要更高的技術要求和更復雜的設置,并且可能會對目標系統的穩定性或性能產生負面影響。
實際中,可以根據不同的應用需求,可能會需要支持debug,但是也可能需要支持debug中的一種,也有可能不需要支持debug功能。
因此考慮到這些需求,ARM定義了認證接口。認證接口總共包括4個。這4個接口是每個ARM的core要實現的。這些接口是debug功能的總開關。
- DBGEN:invasive debug enable
- SPIDEN: secure invasive debug enable
- SPNIDEN:secure non-invasive debug enable
- NIDEN: non-invasive debug enable
DBGEN:這是invasive debug enable(調試使能)的縮寫,這個接口可能用于開啟或關閉侵入性的調試功能。在調試過程中,通過這個接口,可以控制調試器的接入和運行,從而實現對ARM核心的調試。
SPIDEN:這是secure invasive debug enable(安全侵入性調試使能)的縮寫,這個接口可能用于在安全環境下啟動侵入性的調試功能。在需要保證安全性的情況下,例如在處理敏感數據或在進行關鍵任務的操作時,這個接口可以控制調試器的安全接入和運行。
SPNIDEN:這是secure non-invasive debug enable(安全非侵入性調試使能)的縮寫,這個接口可能用于在安全環境下啟動非侵入性的調試功能。與SPIDEN類似,這個接口可以控制調試器的安全接入和運行,但是不會對目標系統或數據產生干擾或損害。
NIDEN:這是non-invasive debug enable(非侵入性調試使能)的縮寫,這個接口可能用于開啟或關閉非侵入性的調試功能。與DBGEN類似,這個接口可以控制調試器的接入和運行,但是不會對目標系統或數據產生干擾或損害。
而這個authentication status寄存器,就是保存了這4個接口信號的狀態。DBGEN使能的時候,NIDEN被忽略,即NIDEN被認為是使能。SPIDEN使能的時候,SPNIDEN被忽略,即SPNIDEN被認為是使能。
7、DEVARCH
device architecture register 這個寄存器,標識了coresight組件的架構信息。
這里主要關心ARCHID這個位域。
8、DEVID
device configuration register 這個寄存器的功能,由實現進行定義,總共包括3個寄存器,DEVID,DEVID1,DEVID2,每個寄存器32位,只讀。
DEVID寄存器:
DEVID1寄存器:
DEVID2寄存器:
9、DEVTYPE
device type identifier register 組件的具體類型信息。依靠MAJOR位域和SUB位域來表示。
以下是組合情況:
可以看出,arm對組件分成了7大類:
- miscellaneous: 雜散類,
- trace sink: 最終接收trace信息的組件,包括有TPIU,ETB,router。
- trace link:trace信息傳遞過程中需要的中間組件,包括有router, filter, FIFO
- trace source: 產生trace信息的master
- debug control:debug的控制器
- debug logic:具有debug功能的master
- performance monitor:性能的檢測器檢測的master
舉一個例子,假設有一個基于Cortex-A處理器的嵌入式系統,該系統使用Coresight進行調試和跟蹤。在Coresight中,可能存在一個Trace Sink組件,用于收集和處理跟蹤數據。該組件的MAJOR位域可能被設置為0x1,以表示它屬于Trace Sink類別。而它的SUB位域可能被設置為0x100,以表示它是該類別中的一個特定組件。
通過讀取該組件的DEVTYPE寄存器值,可以確定它的類型和身份。如果DEVTYPE的值為0x101(即MAJOR位域為0x1,SUB位域為0x100),則可以知道該組件是一個Trace Sink,并且它是該類別中的一個特定組件。
通過DEVTYPE寄存器的值,開發人員可以更好地理解系統的運行狀況并進行適當的調試操作。例如,如果開發人員知道該組件的功能和行為,則可以通過修改該組件的代碼或配置來改善系統的性能或穩定性。
總之,DEVTYPE寄存器的作用是提供組件的類型信息,以便在Coresight中進行調試和跟蹤。它是開發人員了解系統運行狀況和進行適當調試操作的重要工具之一。
10、PIDR0-PIDR7
peripheral identification registers 外設識別寄存器。
這里面,我們關心的是SIZE,和Part number。因為其他的值在一個soc中,所有的組件的值是固定的。
- SIZE:表示這個組件,占用4k空間的塊數。如果只占用一個塊,那么值是0,如果占用兩個塊,值是1。占用的塊數為 2^SIZE。以下是SIZE對應的組件占用的大小。以及需要訪問這個組件需要的地址寬度。
part number:組件的唯一編號。soc中有多個coresight的組件,為了較好方便的管理這些組件,給每個組件分配了唯一的編號。這個編號就保存在part number中。
對于JEP106,這個是JEDEC標準,可以查閱以下網站; www.jedec.org
Coresight寄存器PIDR0-PIDR7以及peripheral identification registers外設識別寄存器的作用是識別和分類不同的外設組件。這些寄存器提供了關于ARM核心上組件的詳細信息,例如組件的名稱、類型、大小以及它們在ARM核心上的位置。通過讀取這些寄存器的值,可以識別和區分不同的組件,以便進行調試、性能監控等操作。
11、CIDR0-CIDR3
component identification registers 這四個寄存器,每個寄存器只有最低8位有效。 這四個寄存器的組合,用來標識組件的類型 。
對于ARM的組件,CIDR寄存器的有些位是固定的。比如對于CIDR0,CIDR1[3:0],CIDR2,CIDR3,是有固定值的。
CIDR1寄存器中有一個CLASS位域,用來表示組件屬于哪一個類 。ARM對自己的組件,也劃分了若個的類。
CIDR0-CIDR3寄存器是ARM核心上的一部分,每個寄存器只有最低8位有效。這些寄存器的組合被用來標識組件的類型,以便進行調試和優化。
這里,我們關心如下的class:
- 0x1:rom table
- 0x9:coresight組件。
- 0xf: corelink組件
讀取組件的CIDR寄存器,即可知道這個組件是屬于哪一類。
- 對于rom table, 固定為 0xb105_100d 對于
- coresight組件,固定為 0xb105_900d 對于
- corelink組件, 固定為 0xb105_f00d
假設我們有一個ARM核心,我們想要識別其上的所有組件。首先,我們可以使用Coresight寄存器PIDR0-PIDR7以及外設識別寄存器來讀取每個組件的標識信息。這些寄存器的值將提供關于組件的名稱、類型、大小以及它們在ARM核心上的位置等信息。
然后,我們可以使用CIDR0-CIDR3寄存器來進一步確定每個組件的類型。通過讀取這些寄存器的值,我們可以確定哪些類型的組件存在于ARM核心上。例如,如果CIDR0-CIDR3寄存器的值組合表示某個組件是一個內存管理單元(MMU),那么我們就可以將該組件歸類為MMU類型。
ARM核心就像是一本書的章節,每個章節都是一個組件。Coresight的寄存器PIDR0-PIDR7以及外設識別寄存器就像是一本目錄,告訴我們每個章節的名稱和頁碼。而CIDR0-CIDR3寄存器就像是每個章節里面的標題,通過它們我們可以知道每個章節的標題是什么。
通過查看目錄(Coresight的寄存器),我們可以知道這本書有哪些章節,它們分別在哪些頁碼(頁數)。然后,通過閱讀每個章節的標題(CIDR0-CIDR3寄存器),我們可以了解每個章節的內容大致是什么。
這樣,我們就能夠更好地了解這本書的結構和內容,以便進行閱讀、理解或參考。同樣的,通過使用Coresight的寄存器,我們可以更好地了解ARM核心的組件結構和功能,以便進行調試和優化等操作。
rom table, coresight組件,corelink組件
ROM TABLE
ROM TABLE是ARM系列SOC(System on a Chip)必須有的一個組件,它主要用于識別和調試組件。
ROM TABLE包含了用于調試的多種信息,例如調試寄存器的基地址、調試指令、版本信息等。 這些信息被存儲在芯片出廠前,并在系統啟動時被加載到芯片中。
- Debug ROM表:它包含了在調試過程中用到的指令,比如讀取寄存器的指令、設置斷點的指令等。這些指令在系統啟動時會被加載到芯片中。
- Vector Table:它包含了異常向量表,即當系統發生異常時,程序會跳轉到這個表中對應的異常處理程序。
- Breakpoint Table:它包含了斷點地址表,即可以設置斷點的地址列表。在調試過程中,當程序執行到斷點地址時,程序會被暫停,從而幫助開發人員檢查程序狀態。
- Symbol Table:它包含了程序中定義的全局變量和函數地址列表。這些信息對于調試過程中進行變量訪問和函數調用非常有用。
- Other Debug Information:除了上述提到的信息,ROM TABLE還可能包含其他調試信息,例如版本信息、調試寄存器的基地址等。
Coresight組件
Coresight組件是一種用于調試和追蹤SOC芯片的工具,它可以幫助開發人員檢查程序運行時的狀態和數據,例如查看寄存器的值、設置斷點、跟蹤程序的執行路徑等。通過Coresight組件,開發人員可以更好地了解程序運行時的情況,找到并解決問題。
CoreLink組件
CoreLink組件是ARM公司提供的一套IP核,用于實現片上通信和共享資源管理。它提供了一組通信和同步機制,以及一個統一的接口,使得多個處理核心可以相互通信并共享系統資源,從而形成一個完整的片上系統。CoreLink還包含了一系列用于調試和跟蹤的組件,例如ETM(Embedded Trace Macrocell)和STIM(Serial Trace Injector),這些組件可以用于收集和分析系統運行時的數據,幫助開發人員調試和優化系統性能。
Coresight組件和CoreLink組件是不同的技術,它們的功能和用途也不同。Coresight主要用于實現SOC的調試和追蹤功能,而CoreLink主要用于實現片上通信和共享資源管理。
-
寄存器
+關注
關注
31文章
5424瀏覽量
123509 -
ARM芯片
+關注
關注
1文章
128瀏覽量
21968 -
調試器
+關注
關注
1文章
312瀏覽量
24195 -
CoreSight
+關注
關注
0文章
6瀏覽量
8075 -
DFx
+關注
關注
0文章
35瀏覽量
10806
發布評論請先 登錄
DMA通道一覽
安川伺服輔助功能參數一覽表
51單片機寄存器功能一覽表

單片機怎么通過按鍵控制計時器的開始和停止_超詳細!51單片機寄存器功能一覽表...

為調試寄存器 DBGDRAR 設置的值錯誤
車載芯片安全寄存器的布局設計

評論