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; 连 ...
随机推荐
- WPF中,多key值绑定问题,一个key绑定一个界面上的对象
问题说明: 当用到dictionary<key,value>来储存数据的时候,有时候需要在界面上绑定一个key来显示value,这时候有两种思路: 一种是写一个自定义的扩展类,类似Bind ...
- 安装linux下面用来配置网络,防火墙,系统服务等设置的图形小工具Setup
Setup命令是linux下面用来配置网络,防火墙,系统服务等设置的图形小工具.使用起来非常方便简单,可是centos\redhat最小化安装之后发现setup命令工具用不了. 接下来介绍如何安装se ...
- ABP官方文档翻译 4.1 应用服务
应用服务 IApplicationService接口 ApplicationService类 CrudService和AsyncCrudAppService类 简单的CRUD应用服务示例 自定义CRU ...
- 修改Java程序的进程名
1.修改tomcat进程名字: 当同一个服务器上启动多个tomcat后,我们会在任务管理器中看见多个java.exe,当我们需要对某个tomcat进行监控时,却无法区分出该tomcat的进程,那么如何 ...
- BZOJ 2882: 工艺 [后缀自动机+map]
Description 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工 ...
- WEB-INF目录下文件复制的几种方式
2018年1月31日 10:42:55 工作完写点博客记录下. 需求:从web-inf下拷贝文件到指定目录. 目录结构 直接贴代码 第一种方式,字节流读取 try { int index = 0; S ...
- docker dead but pid file exists
CentOS 6安装docker 报docker dead but pid file exists 执行 yum install epel-release yum install docker-io ...
- Quartz动态改变任务时间
基于quartz-2.2 的动态任务调度 Quartz是一个完全由java编写的开源作业调度框架. 调度器 Quartz框架的核心是调度器.调度器负责管理Quartz应用运行时环境.调度器不是靠自己做 ...
- Linux知识体系之路径属性与目录
最近在看鸟哥的Linux私房菜,我觉得这本书还是很不错的.这里进行相关的总结. 1.Linux目录权限概念 Linux一般讲目录可存取的方式分为三个类别,分别是owner/group/other, ...
- ThinkPHP的基本操作
一.生成入口文件 1.打开服务器,在本地环境测试时在地址栏输入localhost/项目文件名/index.php 可以在Application下面生成一个home模块,记得在这之前,要建立一个项目文 ...