漫談傳輸介面-PATA


前言

今天要來講的是PATA介面,這是早期IDE硬碟的硬體接線,和PCI一樣是parallel interface,有40根pin腳,但一樣我也不會講實體傳輸線的timing,因為沒必要,只是要講一些前置概念,這樣才有辦法講SATA,而且連SATA硬碟過幾年都可能被NVMe硬碟取代了呢。


PATA簡介

還是如同PCI,講一下前因後果,再講一下簡單的使用就好。

PATA的來源

最早期的硬碟是很簡陋的,Driver必須知道自己在哪個磁軌(cylinder)、哪個磁頭(header)、哪個磁區(Sector)寫資料,還必須負責準備好資料要寫進磁盤對應的編碼,因為cylinder靠近圓心或遠離圓心的不同,磁頭在相同時間走的距離不同,所以相同的data會編碼成不同長度的symbol,才能成功的寫入後再被讀出,讀出來的symbols也是要由Driver負責解碼的工作。

因為Driver的工作太多會佔用太多CPU資源,而且各家碟盤的大小、轉速不同,就須要不同的Driver,維護比較麻煩,所以硬碟廠商就聯合訂出一個規格:ATA-1,之後陸續推出ATA-2~ATA-6,都是parallel interface,所以後來稱為PATA(Parallel ATA),到ATA-6之後因為bus的頻率無法提升了(parallel interface的共病),ATA-7才提出了serial interface,這個就稱為SATA(Serial ATA)。

ATA首先是把資料的編解碼工作歸屬於硬碟端,所有硬碟廠商提供一致的register控制機制,Driver只需要把位址、長度、還有讀或寫的動作透過register告訴硬碟,再來就是寫資料進硬碟,或是從硬碟讀資料就好,因為把複雜動作整合進硬碟內,所以這種技術當時稱為IDE,Integrated Drive Electronics,所以PATA硬碟大家都稱呼為IDE硬碟。

PATA的使用

Driver要操控IDE硬碟並不是透過system bus(ISA、PCI...)就能對硬碟的register做讀寫,而是去讀寫掛在system bus的host bus adapter(HBA)的register,HBA會轉成PATA訊號真正讀寫硬碟的register,就結果來說一樣啦。ATA規範硬碟要有Data、Feature、Sector number、Cylinder low、Cylinder high、Device(header)、Sector Count、Command八bytes的command register,當時就規定IO space 0x1F0~0x1F7就是這些register,另外還要1 byte的control register則放在IO space 0x3F6,如果要掛第二顆硬碟,就必須再0x170~0x177、和0x376的位址做控制。

要存取硬碟,就是先在0x1F1~0x1F6填好command的各種參數,包括位址、長度、設定、然後在0x1F7下command,如果是read command就開始去讀0x1F0,如果是write command就是寫0x1F0,重複這動作直到data長度做完為止,因為這完全需要CPU動作很費CPU資源,所以後來發展出DMA動作,這個逐步寫的就叫做PIO。

DMA動作是HBA開新的register讓Driver告知HBA應該去memory的哪邊取或放資料,等Driver下了0x1F7的command register,HBA的DMA控制器就自動去做資料搬移的動作,做完了就發interrupt讓Driver回來看狀況,這樣可以空下CPU去做其他事情。


基本的東西就講到這樣就好,細節都在spec內部,有了這些認知明天講SATA比較好講。

#PATA







你可能感興趣的文章

D25_ ALG101-Unit 5-LIOJ 1046, 1034

D25_ ALG101-Unit 5-LIOJ 1046, 1034

GitHub Actions CI:導入與優化 ESLint 檢查

GitHub Actions CI:導入與優化 ESLint 檢查

第一週:暖身週(掌握 Git 與 Command line 操作)

第一週:暖身週(掌握 Git 與 Command line 操作)






留言討論