打印
[51单片机]

振南的IDE硬盘调试记(2)

[复制链接]
2130|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
znmcu|  楼主 | 2015-11-17 07:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 znmcu 于 2015-11-17 08:31 编辑

http://www.znmcu.cn/zn_ide_debug2.html

振南的IDE硬盘调试记(2
3种模式的IDE硬盘读写模块PCB样板已经加工回来。
接下来就是历时1周的焊接调试,这是一个痛苦而纠结的过程:
1PCB上我采用了0402这种较小的元件封装,尤其是0402的阻排(16P8R),为的就是能够把模块作到最小。这是我第一次使用0402封装,以前我一直使用的是0603封装。这给焊接造成了不小的困难,不夸张地说,0402封装肉眼都难看清楚。我认为0402,乃至于0201,以及最新出来的01005封装根本就不是给人焊的,而是用于机器贴装的。应该说,第二版的3种模块的IDE硬盘读写模块在原理上没有大的问题,可以完成对IDE硬盘的读写,问题都出现在焊接上,一遍遍的补焊,浪费了大量时间和精力。
最终我放弃了手工焊接,开了SMT钢网找代工机器焊接。即使这样,还是没能保证焊接质量。不过这让我增长了更多知识。SMT刷锡后,出现了不脱锡的现象,焊锡膏都塞到了网孔中,粘不到下面的PCB焊盘上。究其原因主要是PCB0402封装的焊盘厚宽比不理想。所谓厚宽比是指SMT钢网铝片的厚度与网孔(网孔对应的是下面PCB上的焊盘)面积的比。比如封装设计得不合理,就会导致着锡不良。解决方法1、重新设计0402封装,加大焊盘的面积;2、将焊锡膏通过助焊液或稀释剂进行稀释。前者只能等下一版再改了。现在只能通过后者来解决。最终效果说明稀释焊锡膏确实使不脱锡的现象有所改善。
针对于IDE硬盘读写模块的设计,有人问为什么要有那么多的LED灯?模块上有20多个LED灯,他们对应于IDE接口上的D15-D0,即16位数据,以及相关的控制芯片,如CS0CS1DIORDIOW等。振南设计这些LED的用意:1、便于查看模块上IO的输入输出电平是否正确,有了LED,亮灭直接反应了IO的电平。这样就不用万用表或示波器去量了。信号有还是没有,一目了然;2、这个IDE硬盘读写模块还可以用作IO扩展实验板,比如用来学习8255芯片的用法、595+165的串并转换。3LED也可指示焊接是否有问题。
为了在有限的PCB面积上,放下20多个LED,振南在这一版的PCB上使用了0402封装的LED,这是一场噩梦。0402LED,很难用镊子夹起来,很容易损坏。加之焊盘设计比较小,焊接中出现了很多问题。这让我下定决定在下一版中放弃使用0402封装,电阻电容一律改回0603LED改回0805。因为我可以遇见到,使用0402在以后的批量化生产中所带来的严重问题,很可能导致次品率过高。
修改后的PCB,即第三版,已经送去加工:
可以看到已经把所有的0402元件都换成了06030805封装,代价就是牺牲了一些PCB面积,同时元件布局更加紧密。振南对模块电路进行了一些精简,以保证布线能够顺利进行。
2振南的IDE硬盘读写模块共有3种模式,但是在焊接的时候我一共焊了5个,模式1和模式2各焊了两个,焊法不同:一种焊法是保留单片机接口与IDE接口之间3V-5V的电平转换芯片(74LVC16T24574LVC4245),另一种是把电平转换芯片去掉,将单片机接口与IDE接口直接短接(使用一些0欧电阻或阻排),用于测试在3V-5V接口之间不作电平转换是否可作稳定的通信。因为82C55IDE接口,在数据手册中对电平的定义有所说明,最低可以将2V看作高电平。
模式3因为使用串转并方式扩展IO来连接IDE接口,所以不涉及IO3V-5V转换(5V供电的HC595HC165芯片的串行接口可直接兼容3.3V)。
实际测试的效果如下:
1、使用单片机的IO直接与IDE接口相连(3.3V IOIDE5V接口),对于体积比较小的笔记本硬盘是可以驱动的,实现读写功能,稳定与否尚需大量测试。但是对于体积较大的台式机硬盘却不能实现驱动。结论是对于IDE接口来说,5V电平是必须保证的,必须使用3V-5V的电平转换芯片。最终定型的模块模式1是保留HC24416T245芯片的。注:这个用单片机3.3V IO直接去驱动5V IDE硬盘的实验,让我付出了烧板芯片报废的代价,后面详说。
2、3.3VIO直接驱动82C55芯片是OK的,并且经过大量测试,比较稳定。因此,可以将模式282C55与单片机IO之间的电平转换芯片去掉(去掉芯片对于提高批量化生产的成品率以及降低模块加工成本有较大好处,不焊就不会出错,少焊就会少出错!)后期又在单片机IO82C55之间串一些电阻,阻值为300欧左右,起到限流作用,这种考虑跟上面提到的“烧板”代价出于同一个原因。
由于在新版模块的模式2去掉了单片机与82C55之间的3V-5V电平转换芯片,因此对于3.3V供电的旁路与退耦电容也可以去掉了,这样进一步简化了电路和降低了成本。
382C55芯片一个细节之处的忽略,导致了IDE接口时序上的紊乱。
我用8255PAPB端口组合起来做IDE16位数据,输入输出,要经常变换PAPB的方向,PC口作为控制信号,CS0 CS1 DIOW DIOR等。一旦**作命令寄存器,去设置PAPB的方向,PC口就会自动清零。
这一点在8255的手册上明确写了,但是我却忽略了!
译文:对模式选择的警告:在每次命令寄存器被写入数据之后,端口A与端口C的输出寄存器都会被清0(对应的82C55的引脚也会为低电平),同时端口的模式将发生改变,但是端口B的电平状态是不确定的。(这是针对82C55A-5的,对于82C55A-2来说,PB端口的电平也是清0的)。
这导致PC端口上的控制信号会产生误动作,导致驱动硬盘失败。
这是硬盘的DIOW信号,由8255的PC端口提供
那个粗一些的部分是写入512字节的数据
但是在前面,DIOW信号产生多次跳变,是因为设置PA和PB方向(转换PA和PB方向是为了向IDE写入控制命令以及读取状态),导致PC清零造成的。
针对这一点专门进行了测试
把PC端口固定设置为输出,并且写入0xff(即输出全高电平),然后不断切换PA和PB的方向,看看PC是否能保持一直为高电平,实验结果表明,PC口确实会产生清零。
在8255自动清零之后,程序又再次向PC端口写入0xff,最终就产生了这样的方波脉冲,而如果我不再次向pc写入0xff,那么pc一直为0。
附测代码:
C8255_RESET(); //82C55复位,此时PA PB PC均为输入,工作在模式0
IDE_DATA_DIR_OUT; //设置单片机IO方向为输出,向82C55写入命令字
C8255_PC_DIR_OUT(); //设置82C55 PC端口为输出
C8255_WRITE_PC(0XFF); //向PC端口写入0XFF
while(1) {C8255_PAB_DIR_IN();/*C8255_WRITE_PC(0XFF);*/C8255_PAB_DIR_OUT();/*C8255_WRITE_PC(0XFF);*/} //切换PA和PB的方向,PC将被清0,如果不再次向PC写入0XFF,PC将一直为低电平
这一细节导致IDE接口的DIOWDIOR这两个非常关键的信号上意外的产生低电平,这将可能导致一些未知的数据被写入到IDE硬盘中去,从而产生控制命令或数据的错误。实际是造成了扇区数据的错误,有一些无效的数据被提前写进了扇区(代码功能是向扇区写入0X00~0XFF 0X00~0XFF),整体数据被向后错开了4个字节。这说明在有效的DIOW信号之前,产生了几个多余的写使能信号!!
振南尝试使用STM323.3V IO,型号是STM32F103RBT6)直接与5VIDE接口相连,在接连测试了多次读写扇区之后,发现STM32芯片和板上的1117-3.3稳压芯片开始发烫。依经验判断是某部分电路有短路,在认真检查了连线和供电之后,最终定位到STM32芯片内部短路,初步判断是GPIO被烧了。因为与IDE接口相连GPIO没有FT标注,即5V电平兼容,只有带有FT标注的IO才可以容忍5V电平输入。当IDE16位数据端口向外全部输出高电平,即0XFFFF的时候,STM32整个16GPIO将被大量的5V电平“烘烤”,导致其电路被击穿。此时的现象是STM32仍然可以运行,但是却非常烫(因为GPIO烧了暂时还不会殃及CPU内核)。
所以,IDE硬盘读写模块的模式1,是绝对不可以将3V-5V电平转换芯片去掉的。而问题在于,如果使用5V单片机,电平转换芯片的3.3V输入端是否可以耐受5V的输出,而模块向外输出的3.3V信号,5V单片机是否可以正确的识别。为了解决这个问题,振南为74LVC16T245芯片设置了双边供电跳线,可以将3.3V端的供电跳成5V。这样,它就成了一个5V5V的“透明芯片”,或者说就是一根导线!!似乎有点画蛇添足,但是这样保留了电平的兼容性。
当然针对5V单片机,完成可以把电平转换芯片直接用风枪吹掉,然后将A16位与B端的16位用导线直接短起来,但是这样反而更麻烦了。
这也是我为什么要在模块的模式2中,在单片机的IO82C55之间加上限流电阻的原因,怕3.3V单片机抗不住82C555V IO输出,这个限流电阻又不能太大,否则单片机的3.3V IO信号82C55将不能正确识别,最终选定300欧,这也是常用的限流电阻阻值。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:振南的znFAT -- 单片机上上的FAT32文件系统 www.znmcu.cn

4474

主题

5195

帖子

33

粉丝