DM9000CEP调试工作过程总结

原文链接:http://blog.sina.com.cn/s/blog_70ef2ee90100z7lr.html#cmt_3435851
转自 Detective_ALong的博客


一、 原理图设计阶段:


这个阶段有三个主要的思路:

1、收集通用的、正确的原理图,作为设计的可靠参考。我的主要参考为:《Davicom-DM9000A-Application-Notes》第18页中的schematic for 16-bit processor;迈冲提供的底板原理图。

2、学习DM9000CEP芯片的工作过程,既数据的读写时序和相关寄存器的配置读写。主要参考为:《DM9000A_datasheet》第42页funcation descriptiom和电子科大硕士论文《基于DM9000以太网控制器的网络家电控制系统》对于DM9000CEP基本功能和操作的介绍。

3、AT91SAM9G10的SMC,既SRAM控制器的使用方法,由于读写时序都是由本单元发起的,所以相关管脚的功能定义和程序是如何控制时序,这两部分非常重要,其中,前者的主要参考是《AT91SAM9G10_datasheet》中Static Memory Controller部分的相关介绍;后者的了解主要通过U-Boot中DM9000CEP芯片的读写函数。

二、 PCB设计阶段:

这个阶段主要有两个设计思路:

1、阅读DM9000CEP布线的相关注意事项:对于这方面的说明最详细的是《dm9000a_layoutguid》。另外,DM9000CEP和ARM之间数据、控制信号的布线也需要注意等长、尽量短和远离其它高速信号线的原则。

2、参考一些成功的PCB图。网上搜集一些已经成功的DM9000CEP及类似设计的PCB图,模仿、学习他们的走线技巧。我参考的设计有:基于2440和DM9000的鸿雁灯光控设计、基于9G10和DM9000的9G10评估板设计、基于DM9000的SKY2440开发板设计、基于9261和CS8900的SBC9261开发板设计。

三、 电路调试阶段:

1、问题的发现与初步判断:U-Boot下发现ping不同主机,但是可以读取DM9000CEP的ID号以及可以判断当前网络的工作模式(100M全双工)。通过驱动程序初步判断,ARM与DM9000CEP接口电路基本工作正常,ARM也可以正常读写DM9000CEP,ping不通问题可能存在于PHY层。

2、示波器测试芯片差分输出:利用示波器按照其说明书上关于差分信号的测试方法,观察到芯片有差分信号输出,并且差分现象明显。运用示波器数学功能对差分信号进行相减处理后,将得到的信号与开发板相关信号进行比对,未发现明显差异(因为以太网数据量比较大,所以单纯的示波器捕捉信号并比对的方法已经不适用)。

3、利用抓包工具进行数据比对:通过阅读U-Boot驱动源码,发现DM9000_DEBUG_CONFIG宏控制着以太网数据包的控制台打印,有了这样的条件,我就可以在PC端安装wireshark抓包软件对比ARM端发送的数据和PC端接收到的有何不同。通过学习《计算机网络》了解到,ping过程又分arp和icmp两个交互过程,通过抓包软件分析得知,icmp包数据段若连续出现零,再出现1时,就回丢bit位。

4、理论分析推断问题根源:实验获得的连零数据错误现象,根据《通信原理》课程中基带信号章节中相关描述,此类问题一般是会出现在串行数据的时钟错误上。而我们的信道存在串行数据的就是差分信号。另外,arm和dm9000cep的并行总线上,尽管#IOW和#IOR的上升沿控制着数据的读写触发,相当于存在同步时钟,但是,高速模式下的高低电平切换也会存在信号建立时间和保持时间的时序裕量问题,所以也不能排除问题出现在这里。我对dm9000cep芯片内部硬件编码深入了解(也是以太网phy层的规范),发现其中的4B5B编码、NRZI、扰码和MLT-3等技术处理,已经将建立在网线上的数据消除了连零隐患,所以,我感觉问题更可能出现在arm与dm9000cep的数据时序上。

5、Arm和dm9000cep时序问题的解决:这部分时序是由arm的sram控制器来实现的,信号建立时间和保持时间,以及读写触发时刻是编程实现的,具体函数在U-Boot的at91sam9g10ek.c中的函数static void at91sam9g10ek_dm9000_hw_init(void)中。具体的参数设置规则在《AT91SAM9G10_datasheet》中Static Memory Controller部分。但是,通过调节此处效果也并不明显。

6、部门经理指导阶段:经理的调试思路:对比原理图和布线与参考设计的不同之处,后发现数字电源和模拟电源104滤波电容应该尽量靠近管脚摆放,并且大电容应该选择220UF;rj45两个中间抽头应该分别滤波后再接在一起;47脚应该接模拟地;将模拟地和数字地的连接点用飞线拉远距离观察效果;为dm9000cep接ams1117供电观察效果;差分线用飞线拉出变换位置观察效果;拉大数字地和模拟地之间的距离。其它操作及得到的结论见附录。总之,经理思路的不同之处在于更多的是用飞线改变布线要点,来测试可能的情况,这点非常值得学习。

7、 深圳爱欣文FAE帮助:FAE帮助修改了U-Boot和linux下dm9000cep的驱动,以现在的分析来看,主要是加入了对于DM9000_NSR寄存器link status位的校验,改善了通信的质量。



附录:

Dm9000cep布线注意:(来自实验)

1、 数字VDD、模拟VDD和RJ45VDD各接一个220uF钽电容。

2、 芯片所有VDD脚104滤波电容尽量靠近摆放(不超过2.5mm),同样针对RJ45。

3、 芯片两个模拟VDD应该各自由104电容滤波后再短接在一起。

4、 RJ45两VDD管脚应该各自接104滤波电容后短接。

5、 47脚应该接模拟地。

6、 模拟地平面和数字地平面尽量不要进入彼此区域。

7、 复位按键接电容,形成上电复位。

8、 由AMS1117单独给DM9000CEP供电。

9、 ACT4060布线元件摆放位置要注意,学习瀚澜设计。

10、 DM9000CEP数据线等长布线。



以下是第二考虑事项:(大部分来自《layout guide》)

1、 差分对尽量靠近(不要超过2mm),差分线尽量等长。接收和发送差分对之间最好有模拟地屏蔽,之间最少相距3mm以上。

2、 25M晶振远离差分对、6.8k精度电阻和板子边缘,远离一切重要信号线,距离至少5mm以上。

3、 RJ45最好接近DM9000CEP放置。

4、 差分线上避免使用过孔。

5、 差分线、时钟线、电源线尽量短和宽。

6、 差分对远离其它信号线及RJ45外壳地。

7、 6.8k精度电阻靠近25和26管脚摆放(不要超过3mm),远离高速信号线。

8、 终端电阻及接地电容靠近DM9000CEP摆放(不超过10mm)。

9、 模拟地平面和数字地平面进行分割,两地平面的连接处远离芯片模拟管脚。

10、 模拟地管脚不应短接,应该各自接模拟地平面。

11、 模拟地平面尽量大。

12、 模拟和数字电源用磁珠隔离,此磁珠在100M且250mA以上时表现出100欧姆的阻抗,例如松下EXCCL4532U。在磁珠两端各接10uF、0.1uF和0.01uF电解旁路电容。

附:电容选型表格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值