高难度问题,VB如何直接访问硬盘并进行DMA传输?
时间:2011-08-21
来源:互联网
嗯,我知道这里有很多高手,所以特来求教。
我的问题是:VB如何直接访问硬盘并进行DMA传输?
其实这是两个问题:
1.VB如何直接访问硬盘?
2.在直接访问硬盘的方式下,如何进行DMA传输?
其实第一个问题我已经解决了。我所谓的直接访问硬盘,其实就是使用WINIO组件直接读写硬盘的IDE端口。大家知道,与硬盘通信需要遵守一种ATA协议,ATA协议定义了一些指令,只要把这些指令写入硬盘的IDE端口,就能读取出硬盘指定扇区处的数据。这种方式叫做PIO方式。
现在我无法解决的是第二个问题,如何使用DMA来进行数据传输?我们知道PIO方式下必须不停的读取硬盘端口才能取得硬盘的数据。但是DMA方式效率更高,它可以直接把大块数据传输到内存。但是,这个具体怎么做呢?
已知硬盘的IDE控制器上自带一个DMA控制器,而IDE控制器又是连接在PCI总线上的。但是我如何得到他的DMA控制器的端口号呢?是不是要查询PCI配置空间?还有就是,如何正确初始化DMA控制器?我知道初始化DMA控制器必须告诉它传输的内存地址和传输字节数,但是具体怎么操作端口呢?我知道DMA控制器使用的是物理内存地址,你会说VB无法直接访问物理内存,但是我们有WINIO组件,可以用它来读写物理地址。然后ATA协议规定了几条指令可以启动硬盘的DMA传输,但是具体怎么做呢?
比如我要通过DMA方式从硬盘0柱面0磁道0扇区位置开始,传输2个扇区的数据到内存0x0000100处的地方,操作流程是怎样呢?
请大家指点一下吖~~~~~~~
我的问题是:VB如何直接访问硬盘并进行DMA传输?
其实这是两个问题:
1.VB如何直接访问硬盘?
2.在直接访问硬盘的方式下,如何进行DMA传输?
其实第一个问题我已经解决了。我所谓的直接访问硬盘,其实就是使用WINIO组件直接读写硬盘的IDE端口。大家知道,与硬盘通信需要遵守一种ATA协议,ATA协议定义了一些指令,只要把这些指令写入硬盘的IDE端口,就能读取出硬盘指定扇区处的数据。这种方式叫做PIO方式。
现在我无法解决的是第二个问题,如何使用DMA来进行数据传输?我们知道PIO方式下必须不停的读取硬盘端口才能取得硬盘的数据。但是DMA方式效率更高,它可以直接把大块数据传输到内存。但是,这个具体怎么做呢?
已知硬盘的IDE控制器上自带一个DMA控制器,而IDE控制器又是连接在PCI总线上的。但是我如何得到他的DMA控制器的端口号呢?是不是要查询PCI配置空间?还有就是,如何正确初始化DMA控制器?我知道初始化DMA控制器必须告诉它传输的内存地址和传输字节数,但是具体怎么操作端口呢?我知道DMA控制器使用的是物理内存地址,你会说VB无法直接访问物理内存,但是我们有WINIO组件,可以用它来读写物理地址。然后ATA协议规定了几条指令可以启动硬盘的DMA传输,但是具体怎么做呢?
比如我要通过DMA方式从硬盘0柱面0磁道0扇区位置开始,传输2个扇区的数据到内存0x0000100处的地方,操作流程是怎样呢?
请大家指点一下吖~~~~~~~
作者: hd378 发布时间: 2011-08-21
PIO我都不知道,只能顶一下了
作者: zfl2k 发布时间: 2011-08-21
在Windows中,所有的硬件间通讯都是被系统抽象过通讯过程进行操作的,最容易理解的就是以文件读写的方式打开制定设备驱动,并且通过设置设备IO参数告知设备驱动进行处理的。WinIO也只是做了一个驱动程序,然后提供了几个简单的与驱动间通讯的API函数共用户使用。
如果你只是想了解硬件层的IDE通讯操作,在单片机或ARM开发当中会找到很多现成的范例和说明,但如果要在PC上想直接通过单片机的这种底层过程来操作,相对来说要抽象很多。需要先了解操作系统原理、系统结构还有驱动开发方面相关知识,如DDK、WDM之类的,不然做起这种过程来会很模糊。
VB是个很好的的开发工具,但有些东西也不是用VB的开发理念去搞就分方便的。因为有些东西真的要用VB实现起来可能比VC还复杂。因为要花大量的经理去弥补VB的缺陷。
比如运行效率和多线程,在VC里很容易可以实现并解决的问题,但要在VB里做可以说要比VC复杂很多,同时还会引发兼容性、稳定性等问题要处理。所以,在得到开发需求时,选择什么开发工具和用什么样的方案是很重要的,不然会影响到可行性和开发难度以及稳定性等问题。
如果你只是想了解硬件层的IDE通讯操作,在单片机或ARM开发当中会找到很多现成的范例和说明,但如果要在PC上想直接通过单片机的这种底层过程来操作,相对来说要抽象很多。需要先了解操作系统原理、系统结构还有驱动开发方面相关知识,如DDK、WDM之类的,不然做起这种过程来会很模糊。
VB是个很好的的开发工具,但有些东西也不是用VB的开发理念去搞就分方便的。因为有些东西真的要用VB实现起来可能比VC还复杂。因为要花大量的经理去弥补VB的缺陷。
比如运行效率和多线程,在VC里很容易可以实现并解决的问题,但要在VB里做可以说要比VC复杂很多,同时还会引发兼容性、稳定性等问题要处理。所以,在得到开发需求时,选择什么开发工具和用什么样的方案是很重要的,不然会影响到可行性和开发难度以及稳定性等问题。
作者: SupermanKing 发布时间: 2011-08-21
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28