2023年12月問題記錄與總結 PCIE除錯心得

2021-07-26 06:41:20 字數 3051 閱讀 3182

1.tms320c6678 pcie模組除錯總結

1.所謂outbound一般來說是

rc發起的向

ep的寫操作。

inbound是ep

接收來自

rc的寫操作。

2.pcie中rc和

ep的初始化在

pcie

的datasheet

中有詳細的步驟,但是實際使用的時候,需要按照如下的過程去配置:

第一步:配置rc端和

ep端的時鐘,電源使能,

serdes

,pll

,以及模式(

rc或者

ep)等,這些配置好了,才能

linkup

上,在除錯通訊的時候,使得你的兩個端點能夠

linkup

是第一步。

第二步:ep設定自己的

ob_size

,然後對自己的

bar_mask

暫存器的初始化,這裡

bar_mask

暫存器最大的作用是告訴

rc我需要申請多大的視窗,

rc根據這個申請從本端

0x60000000

開始的256m

大小的位址視窗中分配一段給

ep。這裡需要用幾個

bar,每個

bar的屬性需要具體設定。

第三步:ep設定自己的

msi_cap

暫存器,表明需要申請的中斷向量個數。

第四步:這時候ep開始

link training

,並開始

poll

自己的bar

暫存器,等待

rc對其設定了有效的

bar的值的時候,才開始進行下一步。

第五步:rc端在

linkup

後,首先需要配置自己的

base

和limit

暫存器,這個作用主要是

type

型別的rc

用來判斷位址型別,從而決定是否對進來的

tlp進行過濾。

第六步:rc開始

link training

,並且等待

link up

第七步:如果是多個裝置的話,有pcie交換機,

rc需要列舉,判斷系統中有多少個

ep,這裡以兩端直連為例,

rc先往ep的

bar暫存器寫,然後再讀出來,進行對比,就可以知道

ep申請的視窗有多大。

第八步:rc根據

ep申請的視窗大小,來配置本端的

outbound

相關的暫存器,這裡需要制定乙個

pcie

空間的位址,這個位址一般解除安裝

ob_offset_index

中,這個位址需要跟接著寫到

ep端的

bar暫存器裡面的

base addr

一致。第九步:前面第四步ep link up之後,一直在

poll

自己的bar

暫存器,等待

rc來配置自己,一旦讀到有效的

bar之後,

ep開始根據

rc設定的

bar來設定自己的

inbound

相關的暫存器。

第十步:rc讀取ep的

msi_cap

暫存器,分配中斷向量,並且把寫事物的位址和

data給ep

。至此,完成。

3.為什麼ep端的

bar暫存器是由

rc來配置的?這是因為,

rc下面有多個

ep,如果每乙個都自己配置位址空間,在

rc端就會形成位址衝突。

4.有幾個位址概念:內部匯流排位址,inbound位址,

outbound

位址,pcie

位址cpu的32

位匯流排位址。

inbound位址

:這個位址是經過

pciess

由outbound

轉換過的位址,該位址需要和

bar暫存器的乙個位址匹配才會被接收。

pcie

空間的位址,需要和對端的

bar暫存器中的乙個匹配。

pcie

有自己的位址空間約束。

5.關於cfg_setup暫存器的作用

當你需要訪問遠端的裝置,這個暫存器是必須要設定的,假設你的列舉結束,你在交換機的下面有乙個ep,假設在

rc段需要

bus=2,dev=0,fun=0

才能訪問到它,那在你

rc讀寫該

ep裝置的時候,需要把這三個號設定到

cfg_setup

暫存器。當直連的時候,這個暫存器不用管,預設

0,0,0

就是可以訪問的,這是因為

rc相當於乙個主橋,

cpu出來以後,會虛擬乙個

bus號為

0。當接交換機的時候,最為重要的就是

type

型別,手冊上說訪問

type1

型別的,需要設定為

1,訪問

type0

型別的需要設定為

0.根據實際測試結果,從第二個

bus開始,訪問遠端裝置需要使用

type為1

,當使用第乙個

bus號的時候,

type為0.

比如,bus從0

開始,則訪問

bus>=1

的時候,就需要用

type1了。

6.pcie交換機的列舉過程

這是乙個深度遞迴的過程,從bus:device:func為

0:0:0

開始,每過乙個橋都要更新一下已經有的裝置的這三個號,一般的交換機的埠視為乙個虛擬橋。要區別每乙個橋下面是否掛有

ep裝置,有些交換機的埠是作特殊用途的。 在列舉過程中,需要分配設定交換的

memory accesss

和mem base limit

暫存器,以分配

pcie

空間的位址。將列舉結果存放到乙個結構體煉表中,方便查詢使用。

2023年1月問題記錄與總結

1.中斷沒有觸發的可能原因 1.從cpu這一端看,本身的中斷開關沒有開啟 2.cpu這一級中斷被其他原因關閉,例如 arm中 cpsr的i 和f位都被遮蔽了 3.從外設的角度,檢查外設的中斷有沒有發出來,發出來了會不會還沒有到達cpu之前就被遮蔽了,這個往往可以檢視 mask 是否設定正確 4.軟體...

2023年11月12日學習總結

今日彙總 gdb偵錯程式 除錯命令 例 gcc g test.c o test 開啟 gdb tes其中tes為可執行檔案 指令 run執行程式 list 行數 顯示 至指定行數 break 行數 執行到指定行數 next 單步執行 print 變數名 顯示指定變數在當前步驟的值 continue ...

常見Web安全問題記錄與總結

xss cross site script 跨站指令碼攻擊。xss 的原理是惡意攻擊者往 web 頁面裡插入惡意可執行網頁指令碼 當使用者瀏覽該頁之時,嵌入其中 web 裡面的指令碼 會被執行,從而可以達到攻擊者盜取使用者資訊或其他侵犯使用者安全隱私的目的。xss 的攻擊方式千變萬化,但還是可以大致...