原创 摘抄一组SATA转接卡异常问题的调试记录

2010-3-5 20:44 4415 7 8 分类: FPGA/CPLD
        昨天回顾了一下两年前离职时保存的工作日志,读到其中一段调试工作的记录时,仿佛又亲历了三年前那段艰辛的调试经历。解决这个问题用了近两个月的时间,一个个假设被提出来,相应的解决方案又被进一步的测试否定。到了调试后期,大老板每天都要询问两到三次工作进展,压力可想而知。现在想想,当时的韧劲和抗压能力真是没得说。
        所幸问题最终解决了,这才有了FPGA时序问题一例——电磁干扰和引脚驱动电流约束 这篇文章。
        经验是实践出来的。半年后又遇到类似问题,这一次用了一周的时间就定位并解决了。
        在工程中心的工作是艰苦的,收获也是不菲的。


恢复了sata转接卡的测试环境,由于服务器故障,用时将近一天。当前最新版本在915上可以启动grub;在c51上,由于无法设置为兼容模式,grub不能登陆。2006-11-21 18:49:50
针对sata转接卡传输过程中停止的现象进行了测试,发现停止在udma读操作时,sata转接卡处于udma读协议的主机暂停状态,而此时数据并没有传输完毕,fpga一直发出请求,等待sata卡恢复传输。此过程一直持续,直到手动复位或主机发出复位操作。2006-11-22 18:37:11
交叉测试了两组nhd卡和sata卡,发现其中一块sata卡很不稳定,与两块nhd卡组合时经常出现udma读暂停的情况;另一块sata卡较稳定,很少出现暂停情况。没有发现不出问题的sata卡。2006-11-23 17:57:05
针对sata小卡出现的问题,设计了设备在主机暂停超时后主动发起udma读中止的操作。2006-11-23 17:58:10

用主机暂停超时后设备主动发送传输中止协议的方式进行了测试。发现启动系统过程中仍然存在sata卡死锁的现象,设备主动发送中止协议仍然不能使sata
卡退出死锁状态。采用winthrax和IO
meter进行测试均不能引发死锁现象,采用hd_speed进行测试,在64k读模式下很快出现死锁现象。引发死锁现象的原因仍然没有找到。
2006-11-24 18:13:57
添加了超时复位功能,可以有效复位,但是几次后仍然出现蓝屏现象。2006-11-27 17:56:05

测试,超时复位功能起到作用。数据传输可以恢复。但是多次超时复位后,windows会降低传输模式,或蓝屏。替换了小板上的20330芯片(0631
版),udma传输暂停超时现象出现概率明显减小,但是运行hd_speed平均30分钟后,仍然出现类似现象。通过IDE接口对udma版本进行测试,
没有出现类似现象。
2006-11-28 17:40:09
初步验证,sata小卡死锁现象与后端所连接的数据块的性质有关:模板数据块不出错,快照数据块出错。2006-11-30 19:09:13
对快照数据块进行了多次测试,比较了测试数据。发现对被测数据块的特定位置进行读操作会引发sata小卡出错。针对udma读出错的情况,降低了udma读操作的传输速度,采用udma1的速度进行传输,测试中未发现停止现象。2006-12-01 18:29:06

理了周末测得的nhd卡响应时间数据。编写了nhd卡udma读操作响应时间控制的代码。经测试,在windows下,进行udma2读操作,第一次响应
时间(尚未传输数据)超过9.1s时,windows把传输模式降为PIO,此时sata转接卡没有出现死锁现象。下一步,还需要测试响应时间在数据传输
过程中的变化对sata转接卡的影响。
2006-12-04 19:40:56
用逻辑分析仪记录了多次sata死锁的数据。数据传输过程中的延时也可以加大到9.1s。2006-12-05 18:31:10

上午参加硬件组例会,下午用2小时协助整理工作环境。通过逻辑分析仪测得的数据,发现一处FPGA对时序处理不当的地方:设备发起dmarq请求后不能立
即传输数据。修改后仍然出现sata转接卡死锁的现象。捕获的数据中有一次是暂停20us后恢复传输,很快又发生死锁。
2006-12-06 19:37:29
加大了fifo的半空信号的滞回间隔,现象有所缓解。2006-12-07 17:56:32

fifo的起始传输门限加大到64个16bit,经过18小时测试,没有出现死锁现象。现在初步确认是一个数据burst中的短暂延时引发了sata转接
卡的死锁现象,而不是两个数据burst之间的长时间延时导致死锁现象。现在针对sata转接卡和IDE硬盘的组合进行长时间的测试,确定转接卡的稳定
性。
2006-12-08 14:53:41
修改了ultra datain模块中对data burst的处理,缓冲区在两次data burst之间不清空。2006-12-11 18:17:53
搭建了硬盘和nhd卡的测试环境。调试了不清空fifo的版本。2006-12-12 17:48:47
加大了缓冲区大小,传输模式相当于udma1。短时间测试效果尚可。2006-12-13 18:40:54
设计了传输中插入不规则延时的逻辑,模仿服务器缓存不命中时响应时间不规则变化的情况。2006-12-15 18:06:54
捕获了一组异常之前240条命令的响应时间的统计数据。可以看到,异常并没有发生在响应时间最差的时刻;异常发生之前,响应时间整体增大到3ms左右;读取源数据块时,响应时间整体都在1ms以下。通过手动加入响应延时至3ms,对源数据块读取时并没有引发异常。2006-12-19 18:06:59
调试了udma不优化版本。进行了测试。2006-12-20 18:18:17
继续测试sata转接卡。开始了对服务器上的ramdisk的测试。2006-12-22 18:03:17
测试中通过逻辑分析仪发现,数据的建立时间处于临界状态。这可能是造成部分线缆传输出错的原因。
另外,发现在逻辑分析仪的一个探头上的全部通道都被占用时,一些通道较快速的变化会在其他通道上引发毛刺。这可能和一个探头上只有一个通道用作地线有关:过快的信号变化造成参考电平变化,在其他通道上的信号就会测不准。把变化较快的信号设置到第二个探头上现象消失。
2006-12-24 17:03:29
测试了上述版本,仍然存在停止现象。测试中发现当前版本的PIO命令存在问题。2006-12-25 19:18:03

午和fs、yy讨论了sata桥接卡故障定位的方案,收获很大:空的源读取的数据都是0,不进行硬盘操作,直接从内存返回。下午在sqt和ly的帮助下,
建立了ram0块设备和zero块设备。ram0设备是可以进行读写操作的。在测试中发现,空的ram0读操作不停,格式化后不停,写入部分数据后就出现
停滞现象。可以初步确认停止现象和服务器的响应时间无关,和数据的传输有关。
2006-12-26 19:13:51
根据讨论结果作了修改和测试,未改善。2006-12-27 18:42:47
昨天测试了从FPGA直接给出各种模式的数据,发现在fifo的输出端口没有问题,在fifo输入端口存在问题。在fifo输入端口给出连续递增的数据会确定引发问题。2006-12-29 09:16:38

过比较,发现在fifo输出端的一组数据切换逻辑是引发停止的可疑之处。在这组逻辑之后的计数器值输出到主机端的总线上不会引发问题;在这组逻辑之前的计
数器值输出到主机端的总线上就会引发问题。通过对这组逻辑重新设计,通过这组逻辑输出到总线上的计数器值不会引发问题。可以初步定位在这组逻辑上。可能的
修改方法有两种:规范这组逻辑及其前面的逻辑;重新设计数据通路,消除这组逻辑,把数据宽度变换的逻辑提前到fifo之前。
2006-12-29 18:06:48
修改了主机读通道的数据宽度变换逻辑,提前至cpu端口。
下午sqt测试中发现PIO读操作也有停止现象,可以多次重现,并且连接至另一服务器仍然重现。而且现象和udma一致,全部写入0后读取不停止。
2006-12-30 18:27:56
12.31
定位问题在数据线输出产生的干扰上,通过修改FPGA输出引脚的斜率,初步解决了问题。经过元旦期间的测试,仍然出现了停滞现象。1.4日根据
cyclone器件手册,进一步修改了输出引脚的电流驱动能力,并针对不同的输出斜率和电流驱动能力进行了比较测试,记录了测试结果。
2007-01-05 10:52:54
整理了测试结果文档,发布了长时间测试的版本,开始测试。2007-01-05 18:13:39
未优化版本在36小时的测试中未出现异常。把改动合并到了主干上。开始测试优化的版本。开始调试2510的UDMA。2007-01-08 18:21:26
本年度任务结束2007-01-09 21:50:26




PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1265970 2013-3-27 23:57

楼主你好,我最近在调试UDMA时发现,当刚刚启动UDMA传输时,仅仅传递20个数据时,硬盘DDMARDY-变高(发起UDMA暂停),而且每次都是这样,感觉不正常啊。并且,分析存储的数据,前16个字没有保存上,数据从0x0020开始的(我是从0x0000开始写的)。不知什么原因
相关推荐阅读
ash_riple_768180695 2015-12-18 11:06
学习示例程序:FPGA快速系统原型设计--敏捷实践
        学习与开发板配套的示例程序,是敏捷实践的起点。示例程序是厂商针对开发板上提供的硬件资源和接口量身定做的工程,可以展示其FPGA芯片的功能和性能特点。从示例程序入手最大的好处就是:示...
ash_riple_768180695 2015-11-03 16:46
开发板选取:FPGA快速系统原型设计--敏捷实践
    既然是“实践”,就不能只谈编码和仿真,必须要上板运行、调试。这个虚拟项目的目标是实现一块兼容Intel82574L以太网控制器的千兆网卡,需要运行在一块具备PCIe接口和10/100/10...
ash_riple_768180695 2015-10-22 12:41
开篇:FPGA快速系统原型设计--敏捷实践
    虽然借用了 “系统原型开发”的标题,本系列文章将围绕FPGA IP级别的开发这个主题展开,如果可能的话,将扩展至FPGA System级别的开发。     先上一篇PPT:RSPwFP...
ash_riple_768180695 2013-08-26 10:21
学习SystemVerilog(二)——学习它的理由
    学习SystemVerilog的理由也很多,我在阅读SystemVerilog for Design 和 SystemVerilog for Verification两本书前言的过程中,总...
ash_riple_768180695 2013-08-26 10:19
学习SystemVerilog(一)——不学习它的理由
    想要学习SystemVerilog已经很久了。曾经尝试通过Accellera网站上给出的LRM学习,怎奈内容众多,找不出入手点和重点,只能望而却步。虽然手头有三本SystemVerilog...
ash_riple_768180695 2011-06-26 23:20
Hardware-Assisted IEEE1588 Implementation Analysis
06/18/11 11:00:05 PM         最近一段时间在研究IEEE1588-2008精确时间同步协议(PTP)。该协议可以在软件中实现,如果需要提高时间同步...
EE直播间
更多
我要评论
1
7
关闭 站长推荐上一条 /3 下一条