Vxworks下的SATA提速
1.
ATA接口的三种数据传输方式
(1)PIO(Programmable
Input-Output)传输,可以分为PIO寄存器传输和PIO数据传输。PIO寄存器传输主要用于对ATA设备中的寄存器进行读写。读写的数据位数为8位DD[7:0]。ATA主机控制器根据所要读写的寄存器地址设置CS0_、CS1_、DA[2:0]地址信号,同时将DIOW_或DIOR_设为有效,ATA主机控制器或ATA设备驱动数据总线释放数据。当DIOW_或DIOR_撤销时,ATA主机控制器或ATA设备从数据总线上读取数据。对于PIO数据传输,所读写的地址为数据端口,读写数据为16位。
(2)MDMA(Multiword
DMA)传输,用于数据传输。ATA主机控制器向ATA设备下达MDMA传输命令后,等待设备向主机发送DMARQ数据传输请求信号。当主机收到DMARQ信号后,向设备发送DMACK_响应信号。MDMA数据传输过程与PIO方式大致相同,也是通过DIOW_或DIOR_的周期变化来控制数据的传输。在数据传输过程中,DMARQ和DMACK_握手信号一直保持有效。
(3)UDMA(Ultra
DMA),也是用于数据传输。这种传输方式的传输速度比MDMA要快,ATA/ATAPI-5协议中所定义的UDMA传输方式最高数据传输速率是66MB/s。UDMA对数据传输的控制信号重新进行了定义。另外,UDMA还引入了CRC数据校验机制,保证了数据传输过程的正确性,但其传输过程较为复杂。
Transfer mode
| Description |
Transfer Rate
ATA_PIO_DEF_0
| PIO default mode |
ATA_PIO_DEF_1
| PIO default mode, no IORDY |
ATA_PIO_0
| PIO mode 0 |
3.3 MBps
ATA_PIO_1
| PIO mode 1 |
5.2 MBps
ATA_PIO_2
| PIO mode 2 |
8.3 MBps
ATA_PIO_3
| PIO mode 3 |
11.1 MBps
ATA_PIO_4
| PIO mode 4 |
16.6 MBps
ATA_PIO_AUTO
| PIO max supported mode |
ATA_DMA_SINGLE_0
| Single DMA mode 0 |
2.1 MBps
ATA_DMA_SINGLE_1
| Single DMA mode 1 |
4.2 MBps
ATA_DMA_SINGLE_2
| Single DMA mode 2 |
8.3 MBps
ATA_DMA_MULTI_0
| Multi word DMA mode 0 |
4.2 MBps
ATA_DMA_MULTI_1
| Multi word DMA mode 1 |
13.3 MBps
ATA_DMA_MULTI_2
| Multi word DMA mode 2 |
16.6 MBps
ATA_DMA_ULTRA_0
| Ultra DMA mode 0 |
16.6 MBps
ATA_DMA_ULTRA_1
| Ultra DMA mode 1 |
25.0 MBps
ATA_DMA_ULTRA_2
| Ultra DMA mode 2 |
33.3 MBps
ATA_DMA_ULTRA_3
| Ultra DMA mode 3 |
44.4 MBps
ATA_DMA_ULTRA_4
| Ultra DMA mode 4 |
66.6 MBps
ATA_DMA_ULTRA_5
| Ultra DMA mode 5 |
100.0 MBps
ATA_DMA_AUTO
| DMA max supported mode |
2.
Vxworks下SATA部分的启动流程
//usrConfig.c
#ifdef
INCLUDE_ATA
usrAtaInit ();
if (strcmp (FS_NAMES_ATA_PRIMARY_MASTER, "" ))
usrAtaConfig (0, 0, FS_NAMES_ATA_PRIMARY_MASTER);
if (strcmp (FS_NAMES_ATA_PRIMARY_SLAVE, "" ))
usrAtaConfig (0, 1, FS_NAMES_ATA_PRIMARY_SLAVE);
if (strcmp (FS_NAMES_ATA_SECONDARY_MASTER, "" ))
usrAtaConfig (1, 0, FS_NAMES_ATA_SECONDARY_MASTER);
if (strcmp (FS_NAMES_ATA_SECONDARY_SLAVE, "" ))
usrAtaConfig (1, 1, FS_NAMES_ATA_SECONDARY_SLAVE);
#ifdef
INCLUDE_SHOW_ROUTINES
ataShowInit (); /* install ATA/IDE show routine */
#endif
/* INCLUDE_SHOW_ROUTINES */
#endif
/* INCLUDE_ATA */
//usrAta.c
void usrAtaInit (void)
{
int ix;
ATA_RESOURCE *pAtaResource;
for (ix = 0; ix < ATA_MAX_CTRLS; ix++)
{
pAtaResource = &ataResources[ix];
if (pAtaResource->ctrlType == IDE_LOCAL)
if ((ataDrv (ix, pAtaResource->drives, pAtaResource->intVector,
pAtaResource->intLevel, pAtaResource->configType,
pAtaResource->semTimeout, pAtaResource->wdgTimeout))
== ERROR)
{
printf ("ataDrv returned ERROR from usrRoot.\n");
}
}
}
//ataDrv.c
ataDrv - Initialize the ATA driver ……
INCLUDE_DRV_STORAGE_INTEL_ICH
INCLUDE_ATA
INCLUDE_PIIX4_ATADMA
INCLUDE_ICH7_SUPPORT
Vxworks下的SATA提速的更多相关文章
- vxworks下网络编程一:网络字节序问题
inet_addr("192.168.1.1");//返回网络字节序整型ip地址inet_ntoa(saddr);//将包含网络字节序整型ip地址的in_addr对象转换成本地ch ...
- VxWorks下USB驱动总结2
3:USBD驱动详解 这一部分将要描述USBD(USB Host Driver)的典型应用.例如初始化,client注册,动态连接注册,设备配置,数据传输,同时还探讨了USBD内部设计的关键特性.这部 ...
- 对于vxworks下硬盘驱动
1.曾经看到帖子说vxworks5.5下没有sata驱动,vxworks6.6下有,这样的说法恐怕不正确,由 于俺在5.5下也运用运用了sata硬盘,请注重这里俺只是说运用运用,没有说运用运用了sat ...
- vxWorks下dosFs文件系统的创建
.cdromFs:允许系统从按照ISO9660标准文件系统格式化的CD-ROM上读取设备: 通常文件系统驱动位于磁盘(块存取)设备驱动和IO系统之间,这一点在VxWorks中也不例外,但它在此基础上扩 ...
- 【转】 vxWorks下常用的几种延时方法
在应用编程的时候,通常会碰到需要一个任务在特定的延时之后执行一个指定的动作,如等待外设以确保数据可靠,控制扬声器发声时间以及串口通信超时重发等.这就需要利用定时器机制来计量特定长度的时间段. vxWo ...
- vxworks下libpcap的移植
linux下的libpcap应用能够成熟的使用在第三方的应用中,但基于vxworks开发的项目中需要使用libpcap的部分功能则无相应的实现. 研究了下libpcap向vxworks的移植,并且小有 ...
- vxWorks下常用的几种延时方法
在应用编程的时候,通常会碰到需要一个任务在特定的延时之后执行一个指定的动作,如等待外设以确保数据可靠,控制扬声器发声时间以及串口通信超时重发等.这就需要利用定时器机制来计量特定长度的时间段. ...
- vxworks下硬盘测速程序
void speed(int buflen,int mod){/*int mod = 0;*/ int len=50; FILE *fp; unsigned int i=0,j=0,tmp,tmp2; ...
- VxWorks下USB驱动总结1
1.USB设备 物理特征:4条电缆,电源线.地线.数据线.脉冲线; 速 度:低速1.5Mbps,全速12Mbps,高速480Mbps; 规范版本:1998年USB1.1,2000年USB2.0; 连 ...
随机推荐
- Django的ModelForm
基于django.forms.ModelForm:与模型类绑定的Form 先定义一个ModelForm类,继承ModelForm类 from django.forms import ModelForm ...
- centos 编译安装net-snmp 5.6.2
1.准备环境 yum -y install make gcc gcc-c++ gcc-g77 openssl openssl-devel 常用lib安装可参照本文 2.编译和安装 首先我们需要下载Ne ...
- 正确理解python的装饰器
一直在用别人写的装饰器,从来没有对其原理进行深入的探究.今天趁有点闲着的时间,把装饰器的原理好好看了一遍,做一下整理. 一.装饰器的基本原理 装饰器就是一个可以接受调用也可以返回调用的调用.装饰器本身 ...
- NIO内存映射
磁盘的IO因为速度较慢,可能成为系统运行的瓶颈.所以磁盘的IO在操作系统级实现了提前读,延迟写的机制来提升IO的性能. 提前读就是一次读取需求的数据的同时多读接下来的一段数据至OS缓冲区中,延迟写就是 ...
- javascript 实现斐波那契数列的不同姿势
快过年了,公司人基本上都走光了,只有共和国最优秀的人才,各部门最重要的岗位才会坚守在各自的转椅上,毕竟每个人的能力有限,与其让他们继续工作,不如放他们回家过年.这觉悟很高,这领悟很痛~ 闲着没事 ...
- BZOJ 3110: [Zjoi2013]K大数查询 [整体二分]
有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少. N ...
- 多路复用select
多路复用I/O:一个执行体监视多个文件描述符对象的状态是否改变,一旦改变通知其他执行体来实现. 基本思想: 1. 先构造一张有关描述符的表,然后调用一个函数,当这些文件描述符中的一个或者多个已准备好进 ...
- NSIS 设置系统变量
定义 ; include for some of the windows messages defines !include "winmessages.nsh" ; HKLM (a ...
- MySQL备份常用命令总结
MySQL备份常用命令总结 1.数据库和数据全部备份 mysqldump -uroot -pPassword -hlocalhost databasename > test.sqlmysqldu ...
- 启动MySql提示:The server quit without updating PID file(…)失败
1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的权限解决方法 :给予权限,执行 "chown -R mysql:mysql /var/data" ...