各位老师好,我在musecard板卡上适配操作系统时候遇到一个网络驱动上的问题。
操作系统启动时需要重新初始化网络,我在重新设置了发送描述符基址寄存器(0x1c)后,发现当前发送描述符寄存器(0x30)和当前发送缓冲区寄存器(0x34)的值不对,分别变成了0x584b0和0x51430。
我在uboot下也能够复现此问题,使用tftpboot命令后,使用mm命令修改了0x1c寄存器,再使用tftpboot命令,打断后查看内存,发现0x30和0x34寄存器的值也变成了0x584b0和0x51430。
请问设置发送描述符基址寄存器前需要做什么额外的操作吗?
目前能够确认的是,我已经在重设0x1c寄存器之前,复位了DMA,并关闭设备的发送与接收进程(通过清除MAC GLOBAL寄存器与DMA控制寄存器的某些位)。除此之外,还有哪些操作是必须执行的?
上述问题已定位,在使能DMA控制寄存器的发送位时,如果当前发送描述符的own位不为1,就会出现这个现象。
但是我现在又有另外一个问题,当前发送描述符寄存器为什么会一次性跳64字节?DMA配置寄存器里我设置描述符是连续的,它应该一次性只跳16字节才合理。而且当前发送缓冲区寄存器指向的内存空间与我的发送描述符设置的buffer地址不一致。有哪些操作会影响当前发送缓冲区和描述符这两个寄存器的自动跳转哦
您好。这是使用官方驱动发现的现象还是个人开发驱动? DMA_CONFIGURATION(0x0000) 这个寄存器的bit 8-12 有设置值吗?另外可贴一下这个寄存器完整值不,软件上控制DMA行为主要是这个寄存器。
DMA Configuration寄存器的完整值是0x60002。我这个是移植官方网络驱动代码后个人开发的驱动。
我想知道当前发送缓冲区寄存器的值是由什么来控制的,这个值目前看下来与我在描述符中设置的值有所不同?
而且0x30和0x34这两个寄存器的值为什么会变成0x584b0和0x51430?在什么时机下它们会变成这样的值?