閱讀1020 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Vxworks下的SATA提速

 

1.       ATA接口的三種數據傳輸方式

 

1PIOProgrammable Input-Output)傳輸,可以分為PIO寄存器傳輸和PIO數據傳輸。PIO寄存器傳輸主要用於對ATA設備中的寄存器進行讀寫。讀寫的數據位數為8DD[7:0]ATA主機控製器根據所要讀寫的寄存器地址設置CS0_CS1_DA[2:0]地址信號,同時將DIOW_DIOR_設為有效,ATA主機控製器或ATA設備驅動數據總線釋放數據。當DIOW_DIOR_撤銷時,ATA主機控製器或ATA設備從數據總線上讀取數據。對於PIO數據傳輸,所讀寫的地址為數據端口,讀寫數據為16位。

2MDMAMultiword DMA)傳輸,用於數據傳輸。ATA主機控製器向ATA設備下達MDMA傳輸命令後,等待設備向主機發送DMARQ數據傳輸請求信號。當主機收到DMARQ信號後,向設備發送DMACK_響應信號。MDMA數據傳輸過程與PIO方式大致相同,也是通過DIOW_DIOR_的周期變化來控製數據的傳輸。在數據傳輸過程中,DMARQDMACK_握手信號一直保持有效。

3UDMAUltra DMA),也是用於數據傳輸。這種傳輸方式的傳輸速度比MDMA要快,ATA/ATAPI-5協議中所定義的UDMA傳輸方式最高數據傳輸速率是66MB/sUDMA對數據傳輸的控製信號重新進行了定義。另外,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.       VxworksSATA部分的啟動流程

 

//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

最後更新:2017-04-03 05:38:54

  上一篇:go puppet 利用 facter, 實現不同主機調用不同變量方法
  下一篇:go android獲取短信並自動填充