测试框图:
图中未画出/EN2,/DR2,RXB+,RXB-的连接,/EN2一直维持为高电平,/DR2、RXB+、RXB-悬空;
测试步骤:
- 系统上点;
- 可编程器件向DEI1016发送复位信号(/MR低电平持续400ns)
- 可编程器件向DEI1016发送控制信息 (/LDCW电平持续400ns,控制信息为0x0020)
- 可编程器件向DEI1016加载数据;字1 为0x0666,字2数据为0x5555或0xAAAA(0x5555和0xAAAA交替加载),加载数据的频率为1Hz
- 当DR1为低电平时,可编程器件从DEI1016读取数据。
问题如下:当可编程器件从DEI1016成功读取几个数据以后,DR1会持续为低电平(即使已经没有向DEI1016写发送数据,且DEI1016已经没有再发送数据),DR1无法自动变为高电平;从芯片手册中得知,当从DEI1016完成读取Word1和Word2后,DR1会自动复位(变为高电平),实际情况与此不符,实际情况是DR1会持续为低电平,此时会认为DEI1016接受缓冲器一直存在有效数据,所以会一直做读取数据的动作。
经过测试后发现SEL,/OE1,数据总线数据波形如下图1或图2所示(此时DEI1016和BD429已经没有发送数据)
解决步骤:
首先怀疑时程序出现了问题,但是经过仔细研究芯片手册的读写时序,发现程序设计出的读写时序完全符合芯片手册的要求;
然后怀疑是硬件电路设计的问题,但是检查原理图和硬件图很久,各种测试后认为没有问题;因为如果硬件或程序有问题的话,那么一次数据收发应该都不会成功的,实际情况时正常收发20多次数据后才出问题;此时整个人就懵逼了。
接下来我打算使出杀手锏,问度娘;但是这次度娘让我失望了,百度压根就没有此种问题的描述或解决办法,整个人已经心灰意冷,地球太残酷了!
然后我使出了终究杀招,寻求芯片厂家的技术支持;联系到中国区技术支持后将问题发送过去,在忐忑中等待了一天;得到的回复是他们也不知道为什么,没有解决办法;此时我绝望了
最后鄙人一狠心,将DEI1016所有未用到的引脚(其实也就只有/DR2,RXB+,RXB-)全都做了处理——/DR2上拉至高电平,RXB+、RXB-下拉至地;再做收发测试的时候居然成功了,此时鄙人整个人激动的快要盆骨涨裂了
问题原因:应为当时在进行硬件设计时只需要一路收发通道,设计选择DEI1016接收通道1进行数据接受;所以只是将DEI1016的/DR1引脚连接至可编程器件,/DR2未用(悬空);当将DEI1016的/DR2上拉至高电平后,对接收通道1的数据读取动作后,/DR1能正常复位。至于为什么至今未明;
教训:以后用新器件的时候没有使用到的,不明确的的芯片引脚尽量还是做处理,该上拉的上拉,该下拉的下拉;
本文属原创,如引用请注明出处!
DEI1016&BD429使用遇到的问题及解决