• 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)搬运长度不够
     
     
  • 相关阅读:
    Sphere AABB Collision Detaction
    左右手坐标系的差别
    php 利用 soap调用.Net的WebService asmx文件
    NewLife.XCode 上手指南(五) 复杂查询
    NewLife.Xcode 上手指南(三) 扩展属性的使用
    JS获取URL参数
    [转]模态窗口使用总结
    Jquerysimplemodal的使用,弹出窗口,弹出页面
    NewLife.XCode 上手指南(四) 级联操作
    NewLife.XCode 上手指南
  • 原文地址:https://www.cnblogs.com/xiz-cheng/p/6899510.html
Copyright © 2020-2023  润新知