最近想學習PCIe的使用,手頭有一塊P2020RDB-PCA開發板,板上安裝了SiI3132 PCIe轉SATA控制器作為EP設備,P2020片上集成PCIe控制器作為RC。按照CodeWarrior向導建立的裸機工程,初始化的內容如下:
1、配置MMU,將0x80000000-0x9FFFFFFF劃分為PEX2空間
2、配置LAW,將0x80000000-0x9FFFFFFF劃分為PEX2空間
3、配置PCIe記憶體映射暫存器:
OUTBOUND ATMU的配置如下,每個ATMU分配了16MB的空間:
PEXOBAR1:對應地址0x81000000
PEXOBAR2:對應地址0x82000000
PEXOBAR3:對應地址0x83000000
PEXOBAR4:對應地址0x84000000
PEXOTAR0:對應地址0x00000000
PEXOTAR1:對應地址0x01000000
PEXOTAR2:對應地址0x02000000
PEXOTAR3:對應地址0x03000000
PEXOTAR4:對應地址0x04000000
PEXOTEAR0:對應地址0x00000000
PEXOTEAR1:對應地址0x00000000
PEXOTEAR2:對應地址0x00000000
PEXOTEAR3:對應地址0x00000000
PEXOTEAR4:對應地址0x00000000
INBOUND ATMU的配置略。
4、配置RC的type1配置空間暫存器,其中
PEXCSBAR:對應地址0x08000000
Memory Base:對應地址0x00000000
Memory Limit:對應地址0x03FFFFFF
Prefetchable Memory Base:對應地址0x04000000
Prefetchable Memory Limit:對應地址0x04FFFFFF
Prefetchable Base Upper 32:對應地址0x00000000
Prefetchable Limit Upper 32:對應地址0x00000000
初級總線號0,次級總線號1,下游總線號9
5、查詢LTSSM暫存器可發現鏈路狀態為0x16,已經進入L0態。
然后配置EP的type0配置空間暫存器,其中
BAR0:對應地址0x02000000
BAR1:對應地址0x03000000
BAR2:對應地址0x04000000
查詢P2020的手冊發現,軟體想發出TLP事物,應該是首先配置好OUTBOUND ATMU,然后將PEXOWAR的RTT或者WTT寫值來觸發往PCIe總線發送相應的記憶體/配置讀寫事務。
在嘗試訪問LAW分配的PCIE地址空間(如0x82000000)時,開發環境出現提示:Error Reading Memory并跑飛,我的問題如下:
1、在未初始化PCIe相關暫存器時,試圖訪問LAW分配的PCIE地址空間時也出現上述報錯,配置好了ATMU單元后仍然無發訪問,是否我的配置方式有誤?或者訪問上述地址的形式是錯誤的?
2、通過OUTBOUND ATMU發起一個PCIe記憶體讀/寫事務的程序是怎樣的?是否先向某個PEXOBAR中填寫資料,再通過寫PEXOWAR的RTT或者WTT域來觸發PCIe事務的發送?
3、剛開始懷疑是環境配置的問題,嘗試將LAW中對應PEX2的地址空間改為映射到NOR FLASH,結果發現可以讀取到這些地址中的資料,基本排除了該可能。
麻煩各位高手指導一下,小白對協議不太懂
uj5u.com熱心網友回復:
你好,你的P2020開發板還在么?想跟你交流一下,我也在除錯一塊P2020開發板。另外,如果可能的話,能否付費的方式,借用你的開發板用一下。謝謝。我的電話:135-2180-2157。謝謝。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/131693.html
標籤:硬件設計
上一篇:PCB
