Lan9252-FPGA調試筆記


1.接口完成以后先去讀,0x64寄存器。如果值為0x87654321,則時序okay;否,則修改時序
2.訪問Lan9252接口的時候
  Byte1 Byte2 Byte3 Byte4
數據線 add[0+:16] add[16+:16] data[0+:16] data[16+:16]
地址線1組 00000 00010 00100 00110
地址線2組 01000   01100 01110
3.DMA流程
1)CPU做狀態機初始化
2) DMA寫數據初始化
a) 讀地址0x314;判斷data[31]==1;是則跳轉到狀態b;否則跳轉到狀態c【這一步是為了判斷當前是不是在寫過程數據】
b) 寫地址0x314,data[30]<= 1;【這一步是為了停止當前寫過程數據】
c) 寫地址0x310,data<={length,address};【address <= 0x1400,這是Lan9252寫過程數據區的起始地址;Length <= 待搬運的數據長度,單位為byte】
d) 寫地址0x314,data[31]<=1;【啟動寫操作】
e) 讀地址0x314,判斷data[0]==0?是,則開始DMA數據搬運;否,則停留在這個操作等待可用。【判斷是否有可用空間,如果有,則Fifocnt <= data[8+:5]】
3)DMA數據搬運狀態
a)發送第一個數據,fifocnt <= fifocnt - 1'b1;跳至b
b)判斷Fificnt ==0?是,則跳轉到c;否,則跳轉到d
c) 讀地址0x314,取Fifocnt <= data[8+:5],跳轉到d
d)發送下一個數據,fifocnt <= fifocnt - 1'b1;跳轉到e
e)判斷是否發送完成;是,則跳轉到f;否則跳轉到b)
f)讀0x310,判斷當前數據是否寫入【僅供測試】
g)讀0x314,data[31]==0?是,則跳轉到h;否,則等到
h)結束發送
 
4.DMA如果遇到問題排查的順序
a)時序問題;(讀寄存器0x64)
b)流程問題:
i. 確保DMA開始的時候,CPU已經完成初始化,從站狀態機==8(僅適合當前工程)
ii.如果DMA不成功,DMA完成后,讀0x310,看數據寫入狀態
 
 
5.調試Lan9252碰到的問題:
a)時序太快(CS持續時間太短;CS間隔時間太短)
b)DMA的時候,寫入0x310的數據,地址和長度弄反了
c)DMA的時候,用兩個cs寫數據,三個cs讀fifocnt;繼續搬運數據的時候地址沒有改回來
d)搬運長度不夠
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM