1 .接口
完成后先去读。0x64寄存器。 值为0x87654321时,按时间顺序okay; 不,更改时机
访问Lan9252接口时
字节1字节2字节3字节4
数据线add [ 0:16 ] add [ 16:16 ] data [ 0:16 ] data [ 16:16 ]
地址线1组00000010001001000000000110
地址线2组010000110001110
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 .调试局域网9252遇到的问题:
a )时机太快) CS持续时间太短; CS间隔过短)
b )对于DMA,写入0x310的数据,地址和长度相反
c )对于DMA,连续用两个cs写入数据,用三个cs读取fifocnt,然后运送数据时,地址没有变化
d )搬运长度不够