打印
[STM32]

振南放弃IDE硬盘读写模块模式4方案(I2C扩展IO不适合高速应用)

[复制链接]
1963|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
znmcu|  楼主 | 2015-11-24 16:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 znmcu 于 2015-11-24 16:14 编辑

嵌入式存储设备与文件系统研究与技术支持群 198521880
----------------
--------------------------------------------------------------
振南放弃IDE硬盘读写模块 模式4
振南在完成了硬盘读写模块3种模式的设计之后,一直尝试设计第4种模式。
第3种模式使用了3片74HC595+2片74HC165级联方式,通过串行方式来扩展IO,进而驱动硬盘。这种模式是3种模式中使用IO最少的,最少只需要7个IO,最多需要10个IO。我一直在考虑如何能进一步减少IO数量,同时又不会使硬盘读写速度有太多损失。
一开始我认为最少可以只使用两个IO即可完成IO的扩展,实现对硬盘的读写。使用I2C接口的IO扩展芯片,比如使用三片PCF8574,其中两片拼在一起构成IDE接口的16位数据(或者直接使用PCF8575),第三片用于产生CS、ADDR、WR、RD等控制信号。同类的I2C接口的IO扩展芯片有几款比较典型的,PCF8574/75是其中一个,还有CAT9554/55、TCA6424A/08A/16A、PCA9532、MCP23008/09、MCP23017/18等等。I2C总线的好处就是可以把很多同类器件串起来,每一个器件有自己唯一的地址。
我甚至已经开始使用这些I2C接口的IO扩展芯片设计PCB,通过扩展IO来驱动硬盘,PCB都已经生产出来了。但是我发现了一些致命的问题,从而放弃了使用这种方案。
1、I2C总线是一种速度较低的总线,通常只有100kbps400kbps、最高1.7Mbps,我所见过的最高的I2C速度是3.4Mbps。这还是只是比特率,即位的速率,核算成字节速率的话,速率范围为20kbps~400kbps。(MCP23009MCP23018最高可以到3.4Mbps。)这将导致硬盘读写速度非常慢,失去了实用意义。这些芯片只适用于一些速度不高的应用场合。
2、这些芯片因为使用I2C接口,所以是没有片选CS信号的。对芯片的选中是通过I2C协议时序中的ADDR位段来实现的。在驱动硬盘的过程中,我需要在各个芯片之间频繁切换,比如我先选中第3片输出IDE的控制信号,再选中前两片,来完成16位数据的读写操作。每一次选中都需要向芯片写入控制字,繁琐而低效。有人说:“第3片输出控制信号之后,就不用管了,只需要使用前两片来读写16位数据了,为什么还要来回切换?”IDECSADDR等信号确实一旦设定,在以后的数据读写过程中就不用再管了。但是IDEIORDYWRRD呢?CPU需要检测IORDY来判断IDE接口的数据端口是否有效,WRRD用来作读写数据使能。如果把它们都放在第3片上,那在整个的数据读写过程中就要在前2片和第3片之间来回切换了。
所以有人建议“可以把IORDY WR RD放到CPUIO上去直接操作,不通过IO扩展芯片!”,这样当然OK,但是我们的目的就是为了减少IO的使用量,希望使用两个IO就可以完成硬盘的高速数据读写。看来,信号线数量与较高的读写速度之间是矛盾的!
如果把IORDYWRRD放到CPUIO上去,加上I2C的两个IO,一共需要5IO。而在我的前3种方案中,方案3(使用HC595+HC165)已经把IO的使用数量最低减少到了7IO。再加之,I2C接口速度瓶颈,因此我认为I2C接口扩展IO去驱动硬盘是没有意义的,故予以放弃!
有人产生疑虑:“同样都是串行接口,使用HC595+HC165的方案,速度能比I2C快多少?”这确实是我一直在考虑和评估的问题。前两种方案(全IO方式和使用8255扩展IO方式)归根结底都是并行接口,在速度上有所保障。
我为什么要使用HC595+HC165级联的方式?难道没有现成的SPI接口(同步串行)的IO扩展芯片吗?有!MCP23S08/09MCP23S17/18就是,但是他们的SPI接口最大只支持10Mbps,而且他们有专门的接口命令和时序,在驱动方法上要比595+165要复杂一些。实际有效的数据输入输出速率也就500KBps800KBps。而且这个芯片很怪,它虽然是SPI接口的,但是他还预留了A2~A0三个地址引脚,目的就是为了可以让多个芯片共享同一个CS信号,节省CPUIO。因此它也涉及到地址选中的问题,在每一次操作它的IO和寄存器的时候,都需要向它写入地址命令字来选中它。同样还是频繁切换芯片慢速低效的问题。
HC595HC165是非常简单的串并转换芯片(移位寄存器),一般来说,电路和功能越简单的芯片,它越能彪到很高的速度,比如一个74HC00,信号转换速率上GHz没有问题。HC595芯片手册中标称时钟速度是50MHz100MHz。按80MHz速率来算,1秒可传输10MB数据量,数据率为10MBps3HC595级连,向它写入3个字节(2字节的16位字节,1字节的IDE控制信号)需要大约300ns,向IDE写入数据的速率约为6MBps。从IDE读取数据的速率约为9MBps。(因为读的时候只有两片HC165级联,写的时候有三片HC595级联,每次写入16位数据,必须重复写入第3个字节,即IDE控制信号)。
IDEIORDY直接接在CPUIO上,RDWR可以接CPUIO,也可以接在第三片HC595上。HC595HC165的时钟可以共用CPU的同一个IO,在数据读写过程中,在时钟信号的激励下,595165所有芯片中的移动寄存器都会随之“流动”,但是IO上的值绝不会乱,因为它们各有各的LC信号,即LATCH锁存。
最重要的一点是,HC595HC165都极为廉价,所以我认为这是最好的串行IO扩展方案。
使用STM32SPIM3 最高频率18MHz),读写硬件基本可以达到1MBps1.8MBps。如果使用M4芯片,SPI可以达到4050MHz,读写硬盘能达到2MBps4MBps。当然,它再快,也毕竟是串行方式,无法与全IO方式的模式1,或使用8255并行扩展IO的模式2相比。
51 AVR这种比较低端的芯片上,SPI速率不高(一般也就2MHz~8MHz),所以使用模式3也达不到太高的速率,但是对于低端应用不是足够了。
综上所述,振南放弃了使用I2C接口来扩展IO来驱动硬盘,或者是使用其它的SPI接口IO扩展芯片。我想,我的三种模式的硬盘读写模块(其实同时是一套很好的电平转换、IO扩展的模块),已经是IO扩展,驱动硬盘的最佳方案了。

QQ图片20151124155815.jpg (287.39 KB )

QQ图片20151124155815.jpg

QQ图片20151124155820.jpg (261.17 KB )

QQ图片20151124155820.jpg

QQ图片20151124155828.jpg (238 KB )

QQ图片20151124155828.jpg

QQ图片20151124155834.jpg (259.29 KB )

QQ图片20151124155834.jpg

QQ图片20151124155759.jpg (284.8 KB )

QQ图片20151124155759.jpg

QQ图片20151124155802.jpg (265.91 KB )

QQ图片20151124155802.jpg

相关下载

相关帖子

沙发
armxu| | 2015-11-25 07:04 | 只看该作者
不错,支持你!谢谢你的共享。

使用特权

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

本版积分规则

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

4474

主题

5195

帖子

33

粉丝