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 的攻擊方式千變萬化,但還是可以大致...